Páginas

Como criar uma nova sequência numérica customizada

Outro dia meu amigo Abraão estava com dúvidas para criar uma nova sequência numérica, por isso estou postando um passo a passo para a criação.

1- Primeiro criei um ExtendedDataType MyNumberSequence.

2- Depois criei uma tabela chamada MyTable, para servir de exemplo e adicionei o ExtendedDataType que será nosso campo sequencial.

3- No nosso caso vamos criar uma sequência numérica para o módulo de Contas à Receber, então na classe NumberSeqReference_Customer vamos alterar o método loadModule() e adicionar o seguinte trecho de código:
  1. if (isConfigurationkeyEnabled(configurationkeynum(MyConfigKey))
  2. {
  3.     numRef.DataTypeId = typeId2ExtendedTypeId(typeid(MyNumberSequence)); //Nome do EDT
  4.     numRef.ConfigurationKeyId = configurationkeynum(MyConfigKey); //Nome da ConfigKey
  5.     numRef.ReferenceLabel = literalstr("Nome q aparece na tela de parâmetros para atribuir a sequencia");
  6.     numRef.ReferenceHelp = literalstr("Nova Sequência");
  7.     numRef.WizardContinuous = true;
  8.     numRef.WizardManual = NoYes::No;
  9.     numRef.WizardAllowChangeDown = NoYes::No;
  10.     numRef.WizardAllowChangeUp = NoYes::No;
  11.     numRef.SortField = 20; //Muito importante, respeitar a sequencia do método
  12.     numRef.WizardHighest = 999999;
  13.     this.create(numRef);
  14. }
Obs.: Como já adicionei em comentário no método é muito importante respeitar a senquencia do método, e para esse caso criei também uma ConfigurantionKey para controle de segurança.

4- Agora vamos criar um método na SalesParameters (pois estamos criando a sequência no módulo de Contas à Receber)
  1. static client server NumberSequenceReference numRefMyNumberSequence()
  2. {
  3.     ;
  4.     return NumberSeqReference::findReference(typeId2ExtendedTypeId(typeid(MyNumberSequence))); //Nome do seu EDT
  5. }
5- Agora vamos criar a nossa sequência numérica no seguinte caminho:

Básico - Configurações - Sequências Numéricas - Sequências Numéricas

6- Agora vamos atribuir a sequência numérica criada ao nosso formulário no caminho:

Contas à Receber - Configurações - Parâmetros, na aba Sequências Numéricas

7- Agora vamos criar um formulário customizado utilizando nossa tabela, declarar uma variável global:
  1. public class FormRun extends ObjectRun
  2. {
  3.     NumberSeqFormHandler numberSeqFormHandler;
  4. }
E criar o seguinte método no formulário:
  1. NumberSeqFormHandler numberSeqFormHandler()
  2. {
  3.     if (!numberSeqFormHandler)
  4.     {
  5.         numberSeqFormHandler = numberSeqFormHandler::newForm(SalesParameters::numRefMyNumberSequence().NumberSequence, element, MyTable_DS, fieldNum(MyTable, MyNumberSequence));
  6.     }
  7.     return numberSeqFormHandler;
  8. }
8- Agora vamos sobreescrever os métodos create(), write() e delete() do DataSource do formulário, com os seguintes códigos:
  1. public void create(boolean _append = false, boolean extern = false)
  2. {
  3.     ;
  4.     element.numberSeqFormHandler().formMethodDataSourceCreatePre();
  5.     super(_append);
  6.     if(!extern)
  7.     {
  8.         element.numberSeqFormHandler().formMethodDataSourceCreate();
  9.     }
  10. }
No write() com o código:
  1. public void write()
  2. {
  3.     ttsbegin;
  4.     element.numberSeqFormHandler().formMethodDataSourceWrite();
  5.     super();
  6.     ttscommit;
  7. }
E no delete() como código:
  1. public void delete()
  2. {
  3.     element.numberSeqFormHandler().formMethodDataSourceDelete();
  4.     super();
  5. }
 E podemos testar nossa sequência numérica, que irá funcionar.

[]'s
Alexssander

2 comentários:

  1. perfeito!

    Cara quebrei a cabeça aqui um tempão

    peguei este tutorial/explicação

    acho que para fazer dinovo nem preciso dele...

    Muito Obrigado , foi de muita ajuda!

    ResponderExcluir
  2. Muitíssimo obrigado! Salvou minha vida e me poupou várias horas de pesquisa, este seu tutorial!

    ResponderExcluir