Manuais
PHC GO Cuidados que os developers devem ter em conta ao criar um dataset
 
Alguns cuidados devem ser tidos em conta quando se deseja implementar um dataset:

1. O que acontece se um registo como mesmo stamp já existir na base de dados do cliente?


Se o dataset conter um registo cujo stamp já existe na base de dados do cliente, por defeito o registo do dataset não será copiado. Ou seja, o registo existente na base de dados do cliente se manterá intacto.

Supondo que o cliente instalou pela primeira vez um Add-on que continha registos em um dataset. No momento da instalação, estes registos foram criados na base de dados do cliente.

Posteriomente, houve a necessidade de se atualizar o Add-on uma vez que uma nova versão foi disponibilizada. No momento da instalação da nova versão, será identificado que os stamps dos registos do dataset já se encontram na base de dados do cliente (pois foram criados na primeira instalação do Add-on) e por este motivo, a cópia dos registos não será efetuada.
sticky_note_2Notas

Mesmo que os registos do dataset tiverem sofrido alterações, por defeito a cópia não será efectuada.

Exemplo:

  1. Um determinado Add-on foi criado com um dataset que contém a série de faturação "Fatura XPTO". Na versão 1 deste Add-on, a opção "Permite documentos em rascunho" desta série estava inativa.

  2. O cliente optou por adquirir o Add-on. Ao instalar o mesmo, a série "Fatura XPTO" foi criada na sua instalação.

  3. Posteriormente, foi lançada uma nova versão do Add-on e neste caso, a série de faturação "Fatura XPTO" foi alterada e a opção "Permite documentos em rascunho" passou a estar ativa.

  4. Quando o cliente atualizar o Add-on para a versão 2, a série "Fatura XPTO" se manterá conforme está na sua instalação, ou seja, com a opção "Permite documentos em rascunho" inativa.

Este é o comportamento por defeito da aplicação. No entanto, é possível intercetar o evento de cópia dos registos de um dataset com a implementação de uma regra de negócio Ao instalar dataset de add-on.

Nesta regra, podemos alterar o comportamento acima descrito e optar por sempre substituir o registo existente na base de dados do cliente, ou seja, efetuar a cópia do registo independentemente se o stamp já existe na base de dados ou não, ou até mesmo atualizar apenas alguns campos do registo.

Em suma, podemos implementar código para manipular o comportamento da cópia dos registos do dataset.
infoInformações

Veja aqui como funciona a regra de negócio Ao instalar dataset de add-on.

 

2. Estou a criar um dataset para a entidade “Séries de Documentos de Faturação”.
O que acontece quando a base de dados do cliente já possui um registo com o mesmo número interno (ndoc) de um registo do dataset?


Se o dataset conter um registo de série de faturação cujo número interno já existe na base de dados do cliente, o processo de cópia deste registo retornará erro e no ecrã de Add-ons licenciados da instalação, será apresentada a mensagem que ocorreram erros a copiar as dependências do Add-on:
 

Quando vamos implementar um dataset para este tipo de entidades, ou seja, entidades que não permitem a introdução de dois registos com o mesmo valor em um determinado campo, convém tratar a cópia dos registos e garantir que nunca vamos tentar copiar registos que não cumprem com as regras de negócio da aplicação.

Estes casos devem ser tratados com a implementação de uma regra de negócio Ao instalar dataset de add-on.
infoInformações

Veja aqui como funciona a regra de negócio "Ao instalar dataset de add-on".

 

3. Como tratar a cópia de registos da entidade Séries de Documentos de Faturação


Vamos mostrar abaixo um exemplo de como podemos tratar a cópia de registos da entidade Séries de Documentos de Faturação, no que diz respeito ao tratamento do campo número interno do documento, com a regra de negócio Ao instalar dataset de Add-on:
 
  • Nome: Cópia de documentos de faturação
  • Entidade: Séries de Documentos de Faturação
  • Tipo de Código: Ao instalar dataset de Add-on
  • Código:
     
    If bdItemVO is Nothing then
    While SDK.Query.ExistRecord(Td.getTableName,New FilterItem(Td.ndoc, Comparison.Equal, addOnItemVO.ndoc))
    addOnItemVO.ndoc = addOnItemVO.ndoc + 1
    End While
    End if