terça-feira, 15 de fevereiro de 2011

Integração do Moodle com Sistema Acadêmico

    A integração do Moodle com o sistema acadêmico é um dos maiores desafios dos desenvolvedores do Moodle. A integração é um trabalho de sincronização de dados entre os dois sistemas.
    A sincronização  consiste em mapear um par corresponde de cada registro nos dois sistemas. Digamos assim, que cada registro no sistema acadêmico deve ter uma cópia no sistema do Moodle ou vice-versa.
    A maioria das desmandas de integração visam integrar os seguintes dados:
  • Usuário
  • Curso;
  • Disciplina;
  • Matrícula;
  • Nota.

    No processo de sincronização que visa integração de dois sistemas é necessário definir qual sistema é mestre e qual é escrava. A mestre funciona como base oficial de dados. A escrava é o sistema de espelhamento, ou seja, apenas recebe a  cópia dos dados do sistema mestre. A entrada de dados deve ser processada no sistema mestre e depois replicada no escravo.

    O sistema acadêmico geralmente é o mestre e o Moodle é escravo  no que tange ao gerenciamento do usuário, curso, disciplina e matrícula. Já para o processamento de notas, ocorre o inverso. Isso porque a nota é gerada no Moodle e depois é exportada para o sistema acadêmico.

    O processo de integração torna-se muito complicado, se não impossível, caso não haja uma padronização. Por exemplo, se a entrada de dados sobre o usuário e a  matrícula pode ser feita tanto no Moodle quanto no sistema acadêmico, a sincronização torna mais difícil de ser automatizada. Torna quase impossível caso não houver uma padronização das chaves de identificação dos registros.

    Bem, até agora já deve ter ficado claro como deve ser a logística da integração.  Agora partindo para implementação, no que tange ao Moodle, podemos seguir dois caminhos:
  • Usar API do Moodle
  • Usar comandos SQL

O uso do API do Moodle possibilita efetuar integração em alto nível na camada da aplicação. Isso requer a programação em PHP.  Web service do Moodle é uma boa alternativa. Possibilita implementação independente da linguagem de programação.

    O uso do SQL é uma alternativa mais eficaz uma vez que possibilita fazer as coisas em baixo nível, diretamente na camada de banco de dados. Essa alternativa requer conhecer bem  a estrutura do banco de dados do Moodle. A implementação pode ser feita em qualquer linguagem de programação. Neste caso, o sistema acadêmico, sendo mestre no processo de integração,  pode implementar módulos que acessam o Moodle diretamente no banco de dados e processa replicação, ou seja exportação de dados.
   
    Caso tenha interesse em conhecer a estrutura do banco de dados do Moodle, acesse os link indicados a baixo. Esses links não explicam diretamente todos os comandos SQL que você precisa para fazer integração, no entanto, lhe auxiliam em conhecer a estrutura e organização das tabelas do Moodle.

Cadastrar Usuário no Moodle pelo Comando SQL
http://moodlesql.blogspot.com/2010/07/cadastrar-usuario-no-moodle-pelo.html

Criar Curso no Moodle com Comando SQL
http://moodlesql.blogspot.com/2010/09/criar-curso-no-moodle-com-comando-sql.html


Organização do Curso no Moodle e Estrutura da Base de Dados. Diferença do Linguajar Acadêmico e Corporativo
http://moodlesql.blogspot.com/2010/08/organizacao-do-curso-no-moodle-e.html

Matricular Usuário no Curso do Moodle com Comando SQL
http://moodlesql.blogspot.com/2010/07/matricular-usuario-no-curso-do-moodle.html

Relatório Completo de Nota de um Curso no Moodle com Comando SQL
http://moodlesql.blogspot.com/2011/01/relatorio-completo-de-nota-de-um-curso.html

Padronização das tabelas do Banco de Dados do Moodle
http://moodlesql.blogspot.com/2010/09/padronizacao-das-tabelas-do-banco-de.html
   
    Agora faça o planejamento de trabalho, escolha o modelo de implementação e bota mão na massa, não  na sopa de letrinhas do código e faça boa integração. 

32 comentários:

  1. massa é com S ... mais seu artigo foi bom , parabéns !

    ResponderExcluir
  2. Valeu pela alerta. Isso passou despercebido.

    ResponderExcluir
  3. Lino, tudo bem???

    Estou fazendo a integração do moodle com o sistema acadêmico.

    Está fazendo tudo certinho, incluindo cursos, alunos, professores, etc.

    Porém "Sempre tem um né" rsrs

    ao acessar a primeira vez a disciplina ta a mensagem "Erro ao criar ou buscar estruturas de seção para este curso", isso em todos os perfies.

    Você já passou por isso, o que será q pode ser?

    Estou usando o moodle 2.0

    Abraço

    ResponderExcluir
  4. Esqueci, outra dúvida...

    Tenho mais de 200 cursos cadastrados, ao aluno acessar eu gostaria de mostrar somente os que ele está matrículado, eu não achei nenhuma configuração para isso.

    Tem algo a ser feito, para mostrar somente os cursos que o aluno está cursando?

    Valeu novamente.

    ResponderExcluir
  5. Eric,
    Esse erro não ocorreu comigo ainda.
    Me informa uma coisa. Você fazendo gerenciamento da integração no ambiente Moodle ou fora do Moodle. Esse erro ocorre dentro do Moodle?
    A melhor forma de identificar a causa do erro é testar o código a integração em partes.
    Você já fez a sincronização de usuário, curso e perfil de acesso?
    Para poder lhe ajudar, me explica um pouco mais detalhado como está organizando a integração.

    ResponderExcluir
  6. Eric,
    Eu também não encontrei essa configuração no Moodle. Sei que há um bloco que exibe apenas a lista dos cursos em que o alunos está inscrito. Acho que isso não resolveria seu problema. Uma forma rápida de solucionar isso é fazer um hacker no código do Moodle para atender essa necessidade.

    ResponderExcluir
  7. Existe alguma forma de duplicar uma categoria inteira?

    ResponderExcluir
    Respostas
    1. André,
      Para duplicar uma categoria inteira, o caminho que vejo é o seguinte:
      1- Fazer backup de todos os cursos vinculados a categoria;
      2- Criar uma nova categoria
      3- Restaurar os cursos dentro da nova categoria

      Isso pode ser feita manualmente ou criando um script php que automatize isso.

      Excluir
  8. Olá Badiu,
    Estou estudando muito sobre como receber os dados de um sistema acadêmico via JSON e cadastrar no moodle, ou seja manter os dados sincronizados, para excluir o trabalho de cadastro manual no moodle.

    Quanto a receber e fazer um tratamento nesses dados está bem tranquilo, porém encontrei um grande desafio quando vou cadastrar isso no moodle, não sei nem por onde começar, se deve ser criado um plugin, se devo fazer diretamente via SQL...

    você pode me ajudar?

    ResponderExcluir
    Respostas
    1. Thiago,
      Dar carga de dados no Moodle seja por meio de um plugin do Moodle ou pela conexão direta a base de (pelo comando SQL) ambos são caminhos válidos. Agora, a melhor estratégia depende muito do escopo do seu projeto. Se a aplicação que recebe dados e dá carga no Moodle estiver sendo implementado dentro da plataforma Moodle, o caminho mais indicado é um plugin do Moodle.

      Excluir
  9. Obrigado Badiu pela sua rapidez em responder. Só mais uma duvida, dentro de qual modulo do moodle esse plugin deve ser feito?

    ResponderExcluir
    Respostas
    1. Thiago,
      Para processo de cadastro / autenticação de usuário o plugin adequado é o plugin de autenticação do Moodle. Fica na pasta MODLE_DIR_INSTALL/auth

      Já para processo de matrícula no curso, o plugin adequado é de inscrição, o que fica pasta MODLE_DIR_INSTALL/enrol

      Excluir
  10. Olá Badiu, tudo bem fera?

    fico muito grato com a ajuda que você já proporcionou a comunidade moodle, mas eu preciso muito da sua ajuda agora.

    estou fazendo a integração do moodle com o rm da totvs, já habilitei todos os recursos que a api web service proporciona, e depois de muita pesquisa eu aprendi a utilizar a api com o protocolo SOAP, segue o link como estou utilizando o código:
    https://onedrive.live.com/view.aspx?resid=36810E6713A75DC2!878&ithint=file%2c.docx&app=Word&authkey=!AJMfJu9qbgjvGTc

    minha dúvida é como executar as funções do web service em tempo real, por exemplo, o usuário do rm cadastra um aluno, automaticamente chama a função para cadastrar no moodle tbm, não sei se existe uma outra forma mais simples, mas é que estou começando a fazer isso agora, aceito qualquer tipo de opinião, muito obrigado

    ResponderExcluir
    Respostas
    1. Integrar SGA com Moodle é possível sim, seja via web service seja via acesso direto ao banco de dados.

      No processo de integração é necessário definir quem é escravo e quem é mestre no processo de troca de dados.

      Se o sistema de gestão acadêmica que vai enviar dados para cadastro no Moodle automaticamente sempre que sofrer uma ação, como cadastro de usuário por exemplo, o Moodle é passivo. O SGA é mestre. Neste contexto, o código que invoca webservice ou acessa o banco de dados do Moodsle fica no SGA.

      Via de regra essa alternativa é menos comum uma vez que o sistema de gestão acadêmica tem código lacrado. O que é mais comum é implementar integração do lado do Moodle, ou seja, tornando o Moodle o sistema mestre e SGA escravo.

      A alternativas que existem de integração no Moodle para cadastro de usuário a partir de um sistema externo é autenticação pela base de dados externa ou LDAP. Neste caso, o Moodle só importa os dados quando o usuário logar.

      Uma outra alternativa é implementar um plugin no Moodle em que cron roda periodicamente consultando um sistema externo sobre a existência de novo registro para importar.

      Excluir
    2. Badiu muito obrigado por sua atenção, você já deve ter percebido que estou em uma situação de desespero mesmo, hehe, depois da sua resposta pesquisei bastante, sobre as dicas e encontrei muita coisa relacionado a autenticação pela base de dados externa. Contudo, me surgiu um novo grande problema, a coluna senha da tabela no rm classis está criptografada por um algoritmo que eles mesmo desenvolveram, e só eles possuem o código, como sei que é possível resolver este problema eu encontrei algumas coisas a respeito de uma dll que existe no rm, mas nada ensinando de como fazer isso.

      Desculpa te abusar assim, mas só mais uma dúvida, caso eu conseguir autenticar usuários externamente, como faço para relacionar os cursos, disciplinas, notas... com os alunos?

      Mais uma vez, meu sinceros agradecimentos até aqui Badiu...

      Excluir
    3. Autenticar o Moodle pela base de dados externa com criptografia não compatível com padrão que o Moodle reconhece é complicado. Neste caso a solução é criar um plugin de autenticação para logar na base de dados externa. Isso é viável se o sistema externo tiver algum webservice ou qualquer outra interface de comunicação que você passa login e senha e retorna se confere ou não.

      Para cadastrar usuários nos cursos do Moodle, há três alternativas:

      1) Fazer cadastro manual. Se tiver algum padrão de agrupamento de usuário para determinados cursos, o grupo coorter é uma boa alternativa. Neste caso basta ativar método de inscrição grupo coorter no curso.

      2) Usar webservice do Moodle / ou fazer acesso direto ao banco de dados para processar a inscrição;

      3) Ativar plugin de inscrição pela base de dados externa. Essa alternativa requer configurar a sincronização das turmas / ofertas do sistema de gestão acadêmica com o Moodle. Uma vez sincronizado, o Moodle importa automaticamente as matrículas do sistema de gestão acadêmica.

      Excluir
    4. Badiu em relação a autenticação eu fiz o seguinte:

      O RM tem um plugin que faz a integração com o Active Directory (AD), todas as ações realizadas no AD são replicadas no RM, e vice versa também, depois fiz a autenticação do moodle pelo AD, tudo foi uma mão na roda, pq já usamos o AD para logar nas máquinas de laboratório.

      Agora só falta eu aprender a matricular os alunos em seus respectivos cursos que estão cadastrados no RM, então agora vou dar uma pesquisada no que você me passou acima, quando terminar irei te passar um feed back explicando o tudo o que eu fiz.

      Badiu muito obrigado pela colaboração, por seu tempo gasto até aqui, pois não é muito fácil encontrar pessoas que se dedicam em ajudar e ensinar os demais, continue assim meu amigo, você está de parabéns.

      Excluir
    5. Valeu pelo feedback,
      Espero que consiga. Qualquer dúvida me dá um sinal.

      Excluir
    6. Boa Tarde pessoal,

      Estamos com o mesmo problema aqui na IES.

      Consegui chegar a mesma solução utilizando autenticação via LDAP tanto no Moodle como no RM.

      Mas a IES quer que o RM seja o master, então gostaria de saber se alguém conseguiu fazer a matricula de alunos em cursos de maneira automatizada no Moodle, a partir do RM ?

      att,

      Excluir
    7. Bruno,
      Essa alternativa é possível usando os seguintes plugins de inscrição:
      - Base de dados externa
      - LDAP

      Esses plugins podem ser ativados no painel de gerenciamento de plugins de inscrição. Caso nenhum dos plugins lhe atende, é possível montar um novo plugin a partir destes que já existem, clonando e alterando o código

      Excluir
    8. Badiu,

      Valeu pela dica.

      Você sabe me dizer se nesse plugin de base de dados externas eu posso sincronizar, alunos, cursos, docentes e matriculas ?

      Att,

      Excluir
    9. Bruno,
      No plugin de inscrição pela base de dados externa você pode fazer mapeamento de sincronização de usuário, perfil, curso e efetuar sincronização. Você pode gerar um view dos dados no banco e cadastrar esse view na configuração do plugin.

      Você pode usar o plugin de autenticação pela base de dados externa para sincronizar cadastro de usuário. A lógica de configuração é a mesma.

      Excluir
  11. Boa tarde!
    É possível carregar todos usuários de um servidor LDAP de uma vez só ?

    Ou seja, sem a necessidade do primeiro acesso.

    ResponderExcluir
    Respostas
    1. Vitor,
      É possível sim importar numa só tacada todos os usuários do LDAP. Veja esse link: http://comunidade.badiu.com.br/mod/forum/discuss.php?d=131

      Excluir
  12. Boa tarde

    saberia me informar algum material que explique os atributos das tabelas relacionadas a estatística?

    Por exemplo, gostaria de saber o que significa os atributos statsreads da tabela mdl_stats_user_monthly.

    Obrigado

    ResponderExcluir
    Respostas
    1. Fernando,
      Eu ainda não fiz nenhum teste de estatística usando recurso padrão do Moodle.

      Levanto hipótese que a tabela mdl_stats_user_monthly registra acesso de usuário consolidado por mês.

      Dê uma olhada nesse link que aborda hipótese sobre as tabelas mdl_stats_xx do Moodle: http://comunidade.badiu.com.br/mod/forum/discuss.php?d=167

      Excluir
  13. Olá,
    Alguém pode me ajudar? Tenho um curso desenvolvido em javascript e php rodando no moodle. Foram programados links de acesso direto para as provas do moodle. Quando crio novas turmas, esses links ficam quebrados. Existe alguma forma de programar os links para eles irem para cada nova turma criada?

    ResponderExcluir
  14. Tenho o moodle e gostaria de exportar as notas para um sistema académico. peço ajuda. de que forma e os procedimentos.

    ResponderExcluir
  15. Este comentário foi removido pelo autor.

    ResponderExcluir
  16. É possível fazer a integração do Moodle com o SIGAA?

    ResponderExcluir