Árvore de páginas

Versões comparadas

Chave

  • Esta linha foi adicionada.
  • Esta linha foi removida.
  • A formatação mudou.

CONTEÚDO

  1. INTRDUÇÃO / OBJETIVO
  2. UTILIZAÇÃO DO UTILITÁRIO
  3. CLASSES
    1. CustomOrig
    2. CustomPageCustomPages
    3. CustomFields
    4. CustomActions
    5. CustomRecordCustomRecords
    6. CustomMessages
  4. EXEMPLOS DA UTILIZAÇÃO DAS CLASSES

01. INTRODUÇÃO / OBJETIVO
Âncora
introducao
introducao

Para que as telas HTML possam ser customizadas, e necessário alterar o Metadata e Dados que são enviados para elas. Para isto, é necessário conhecer a estrutura destas informações, desta forma, assim sendo possível pegar o que se deseja e fazer as alterações necessária. Por exemplo, para desabilitar um campo de um formulário, e necessário encontrar o agrupador de campos, navegar nele até encontrar o campo desejado e depois, incluir a propriedade responsável por debilitadebilitá-lo.  

O objeto deste utilitário é, facilitar a manipulação destas informações, disponibilizando métodos que realizam as ações desejadas, sem a necessidade do profundo conhecimento da estrutura. Além disto, há uma considerável redução nas linhas de código necessárias para executar a mesma ação. Por exemplo, para desabilitar um campo (cenário apresentado anteriormente), é necessário apenas uma linha de código.

Nota
titleNota

Funcionalidade disponível a partir da release 12.1.2411 ou patches: 12.1.2407.5, 12.1.2403.11, 12.1.2311.16.

02.UTILIZAÇÃO DO UTILITÁRIO
Âncora
utilizacao
utilizacao

O utilitário disponibiliza um conjuntos de Classes que podem ser utilizadas diretamente dentro da UPC para executar as ações desejadas.

...

  • Definir uma variável do tipo da classe, que irá representá-la;
  • Instanciar a classe, passando os seguintes parâmetros:
    • pOrigin: Corresponde ao Endpoint/Evento que será tratado dentro da UPC. Ver detalhes a seguir no descritivo da classe: CustomOrig;
    • jsonIO (JsonObject): Informações da tela/dados recebidas pela UPC (corresponde ao quarto parâmetro recebido pela UPC).
  • Utilizar as funções desejadas;
  • E por final, retirar a classe da memória.

...

Bloco de código
languagetext
titleExemplo utilização da classe CustomFields
linenumberstrue
// Indica a UPC onde estão as Classes
USING PROGRESS.json.ObjectModel.*. // Classes da Progress
USING com.totvs.framework.po.*.    // Classes do Utilitário

// Parâmetros recebidos pela UPC
DEF INPUT        PARAM pEndPoint AS CHAR       NO-UNDO.
DEF INPUT        PARAM pEvent    AS CHAR       NO-UNDO.
DEF INPUT        PARAM pAPI      AS CHAR       NO-UNDO.
DEF INPUT-OUTPUT PARAM jsonIO    AS JsonObject NO-UNDO.

// Define a variável que irá representar a Classe
DEF VAR oCustFields AS CustomFields NO-UNDO.

// Evento de Busca do Metadata da Tela de Novo/Editar
IF pEndPoint = "getMetaData" AND (pEvent = "new" OR pEvent = "edit") THEN DO:

    // Realiza a instância da Classe
    oCustFields = NEW CustomFields(CustomOrig:ORIG_METADATA, jsonIO).

    // Desabilita o campo "Atualizar com erro de duplicata" (nome interno: updatesWithDuplicateError)
    oCustFields:setDisableField("updatesWithDuplicateError").

    // Retira a Classe da memória
    DELETE OBJECT oCustFields NO-ERROR.
END.

03.CLASSES
Âncora
classes
classes

Abaixo segue a lista das Classes disponíveis, indicando o objetivo de cada uma delas, juntamente com os Métodos disponíveis.

a.CustomOrig
Âncora
CustomOrig
CustomOrig

Este é uma classe auxiliar, que não possui métodos. Ela é utilizada apenas para definir as opções disponíveis para indicar o ponto de pontos de customização.

No momento em que uma das classes do utilitário é instanciada, é necessário indicar a ela, em que ponto da UPC ela está sendo utilizada. Este ponto corresponde ao Endpoint/

Classe auxiliar para determinar o ponto de customização. Corresponde ao Endpoint/Evento que será tratado dentro da UPC. Ver detalhes a seguir no descritivo da classe

Evento que está sendo customizado. Isto é necessário pois, dependendo do Endpoint/Evento, a estrutura das informações recebidas pela UPC é diferente, portanto a classe precisa saber o ponto, para saber onde buscar/alterar a informação desejada.

Abaixo segue a lista da opções disponíveis: Informar o Local/Origem onde está sendo utilizado a Classe

  • CustomOrig:ORIG_METADATA - Método de manipulação do MetadataUtilizar nos pontos relacionados a alterações no Metadata da tela HTML;
  • CustomOrig:ORIG_VLD_FORM - Método de manipulação do validateFormUtilizar nos pontos relacionados ao evento de "validateForm" (quando algum campo do formulário é alterado);
  • CustomOrig:ORIG_VLD_FIELD - Método de manipulação do validateFieldUtilizar nos pontos relacionados ao evento de "validateField" (quando um determinado campo é alterado);
  • CustomOrig:ORIG_GET_RECORD - Método de manipulação na Utilizar nos pontos relacionados a busca de um determinado registro;
  • CustomOrig:ORIG_GET_ALL - Método de manipulação na Utilizar nos pontos relacionados a busca de vários várias registros;
  • CustomOrig:ORIG_CREATE_RECORD - Método de Utilizar nos pontos relacionados a criação de um registro;
  • CustomOrig:ORIG_UPDATE_RECORD - Método de Utilizar nos pontos relacionados a alteração de um registro;
  • CustomOrig:ORIG_DELETE_RECORD - Método de eliminação Utilizar nos pontos relacionados a exclusão de um registro.

...

Abaixo segue um exemplo da utilização deste classe, na instancia da classe CustomFields, para o evento de validateForm:

Bloco de código
languagetext
titleExemplo utilização da classe CustomOrig
linenumberstrue
// Evento de Alteração de Formulário
IF pEndPoint = "validateForm" AND pEvent = "validateForm" THEN DO:

    // Realiza a instância da Classe
    oCustFields = NEW CustomFields(CustomOrig:ORIG_VLD_FORM, jsonIO).
    ...
    ...
END.

b.CustomPages
Âncora
CustomPages
CustomPages

Classe utilizada para manipular as propriedades gerais da Página, como por exemplo o Título dela.


MétodoDescriçãoExemplo

setPageTitle ( pCodTitle )

Parâmetros:

  • pCodTitle (CHARACTER): Novo Titulo da Página

Responsável pela customização de Propriedades da Página;

Customizações da Página

MétodoDescriçãoExemplo

setPageTitle ( pCodTitle )

Parâmetros:

  • pCodTitle (CHARACTER): Novo Titulo da Página.

Retorno (LOGICAL): Indicativo se foi possível alterar o Título.

Altera o Titulo da Tela.
// Altera o Título da Página
oCustPages:setPageTitle(oCustPages:getPageTitle() + " - ALTERADO").

getPageTitle ( )

Retorno (CHARACTER): Título da Página.

Retorna o Titulo da Tela. 
// Altera o Título da Página
oCustPages:setPageTitle(oCustPages:getPageTitle() + " - ALTERADO").

setPageProperty ( pCodProperty , pCodValue )

Parâmetros:

  • pCodProperty (CHARACTER): Propriedade que deve ser alterada;
  • pCodValue (CHARACTER,INTEGER,DECIMAL,LOGICAL): Novo valor.

Retorno (LOGICAL): Indicativo se foi possível alterar a Propriedadeo Título.

Altera uma propriedade o Titulo da Tela.// Altera a propriedade para salvar o Filtro da busca Avançadapágina.
oCustPages:setPagePropertysetPageTitle("keepfilters", TRUEClientes Prime").

getPagePropertyCharacter getPageTitle ( pCodProperty )

getPagePropertyInteger ( pCodProperty )

getPagePropertyDecimal ( pCodProperty )

getPagePropertyLogical ( pCodProperty )

Parâmetros:

  • pCodProperty (CHARACTER): Propriedade.

Retorno (CHARACTER,INTEGER,DECIMAL,LOGICAL): Valor da Propriedade.

Retorna o valor de uma propriedade da Tela.

...

Retorno (CHARACTER): Título da Página.

Retorna o Titulo da página. 
ASSIGN vTitulo = oCustPages:getPageTitle().
... Faz algo com o título

setPageProperty ( pCodProperty , pCodValue

Responsável pela customização de Campos;

CustomFields: Customizações de Campos

MétodoDescriçãoExemplo

setFieldLabel ( pCodField , pCodLabel [ , pGroupId ] )

Parâmetros:

  • pCodField pCodProperty (CHARACTER): Código do atributoPropriedade que deve ser alterada;pCodLabel
  • pCodValue (CHARACTER,INTEGER,DECIMAL,LOGICAL): Novo label do atributo;
  • pGroupId (CHARACTER): Agrupador onde o atributo está contido. Se não for informado, será considerado o agrupador padrão "fields".

Retorno (LOGICAL): Indicativo se foi possível alterar o Label.

Altera o Label de um Atributo.
  • valor.

Retorno (LOGICAL): Indicativo se foi possível alterar a Propriedade.

Altera uma propriedade da página.
oCustPages:setPageProperty("keepfilters", TRUE).

getPagePropertyCharacter ( pCodProperty )

getPagePropertyInteger ( pCodProperty )

getPagePropertyDecimal ( pCodProperty )

getPagePropertyLogical ( pCodProperty )

Parâmetros:

  • pCodProperty (CHARACTER): Propriedade.

Retorno (CHARACTER,INTEGER,DECIMAL,LOGICAL): Valor da Propriedade.

Retorna o valor de uma propriedade da página.
ASSIGN vConctFilter =
oCustPages:getPagePropertyLogical("concatFilters").
... Faz algo com a informação

c.CustomFields
Âncora
CustomFields
CustomFields

Classe utilizada para realizar customizações relacionadas aos campos, tais como: alterar o label, desabilitar, esconder, etc.. Através dela, também é possível incluir campos customizados, assim como atualizar o valor dos mesmos. Ela pode ser utilizada para tratar tanto os campos de Tabelas, como de Formulários.


MétodoDescriçãoExemplo

setFieldLabel ( pCodField , pCodLabel

// Altera o label da coluna "FIFO" para "FIFO-ALT"
oCustFields:setFieldLabel("enableFIFOInPurchaseReq", 
"FIFO-ALT").

setDisableField ( pCodField [ , pGroupId ] )

Parâmetros:

  • pCodField (CHARACTER): Código do atributocampo;
  • pCodLabel (CHARACTER): Novo label do campo;
  • pGroupId (CHARACTER): Agrupador onde o atributo campo está contido. Se É opcional, se não for informado, será considerado o agrupador padrão "fields".

Retorno (LOGICAL): Indicativo se foi possível desabilitar alterar o atributoLabel.

Desabilita um Atributo.Altera o Label de um campo.
Exemplo1:
oCustFields:setFieldLabel("enableFIFOInPurchaseReq",
// Desabilita o campo "Atualizar com erro de duplicata" 
// (Aba: Atualização recebimento fiscal)
oCustFields:setDisableField("updatesWithDuplicateError", 
"fieldsUpdateFiscalConfigurationsFIFO-ALT").

setEnableField ( pCodField [ , pGroupId ] )


Parâmetros
Exemplo2:
  • pCodField (CHARACTER): Código do atributo;
  • pGroupId (CHARACTER): Agrupador onde o atributo está contido. Se não for informado, será considerado o agrupador padrão "fields".

Retorno (LOGICAL): Indicativo se foi possível habilitar o atributo.

Habilita um Atributo.
// Habilita o campo "Unidade negócio" (Aba: Digitação/Geração)
oCustFields:setEnableField("enableBusinessUnit", 
oCustFields:setFieldLabel("consistsUnitPrice",
                     "Consistir preço único",
"fieldsTypingEnableDisablefieldsTypingValidations").

setHideField setDisableField ( pCodField [ , pGroupId ] )

Parâmetros:

  • pCodField (CHARACTER): Código do atributocampo;
  • pGroupId (CHARACTER): Agrupador onde o atributo campo está contido. Se É opcional, se não for informado, será considerado o agrupador padrão "fields".

Retorno (LOGICAL): Indicativo se foi possível esconder desabilitar o atributocampo.

Esconde Desabilita um Atributocampo.
Exemplo1:// Esconde o campo "Desconto item"
oCustFields:setHideFieldsetDisableField("itemDiscountvariationIssuing").

Exemplo2:
oCustFields:setDisableField("updatesWithDuplicateError",
"fieldsUpdateFiscalConfigurations").

setEnableField ( pCodField setShowField ( pCodField [ , pGroupId ] )

Parâmetros:

  • pCodField (CHARACTER): Código do atributocampo;
  • pGroupId (CHARACTER): Agrupador onde o atributo campo está contido. Se É opcional, se não for informado, será considerado o agrupador padrão "fields".

Retorno (LOGICAL): Indicativo se foi possível apresentar habilitar o atributocampo.

Mostra um Atributo.
// Mostra o campo "Geração nota crédito a pagar"
oCustFields:setShowField("creditNoteGeneration").
Habilita um campo.
Exemplo1:
oCustFields:setEnableField("acceptableTaxDifference").

Exemplo2:
oCustFields:setEnableField("enableBusinessUnit",
"fieldsTypingEnableDisable").

setHideField ( pCodField setFieldProperty ( pCodField , pCodProperty , pCodValue [ , pGroupId ] )

Parâmetros:

  • pCodField (CHARACTER): Código do atributocampo;pCodProperty
  • pGroupId (CHARACTER): Propriedade que deve ser alterada;
  • pCodValue (CHARACTER,INTEGER,DECIMAL,LOGICAL): Novo valor;
  • pGroupId (CHARACTER): Agrupador onde o atributo campo está contido. Se É opcional, se não for informado, será considerado o agrupador padrão "fields".

Retorno (LOGICAL): Indicativo se foi possível alterar a propriedadeesconder o campo.

Altera uma propriedade de um Atributo.Esconde um campo.
Exemplo1:
oCustFields:setHideField("itemDiscount").

Exemplo2:
oCustFields:setHideField("defaultSpeciesExpenses",
// Para o campo "Sequência dos itens" mostrar "Ligado/Desligado" 
//ao invés de "Ativado/Desativado"
IF oCustFields:getFieldPropertyCharacter("enableSequence",
"type",
"fieldsTypingDuplicates").

setShowField ( pCodField [ , pGroupId ] )

Parâmetros:

  • pCodField (CHARACTER): Código do campo;
  • pGroupId (CHARACTER): Agrupador onde o campo está contido. É opcional, se não for informado, será considerado o agrupador padrão "fields".

Retorno (LOGICAL): Indicativo se foi possível apresentar o campo.

Mostra um campo.
Exemplo1:
oCustFields:setShowField("creditNoteGeneration").

Exemplo2:
oCustFields:setShowField("receiveWithoutOrder",
"fieldsTypingEnableDisablefieldsTypingOrders").

setFieldProperty ( pCodField , pCodProperty , pCodValue [ , pGroupId ] )

Parâmetros:

  • pCodField (CHARACTER): Código do campo;
  • pCodProperty (CHARACTER): Propriedade que deve ser alterada;
  • pCodValue (CHARACTER,INTEGER,DECIMAL,LOGICAL): Novo valor;
  • pGroupId (CHARACTER): Agrupador onde o campo está contido. É opcional, se não for informado, será considerado o agrupador padrão "fields".

Retorno (LOGICAL): Indicativo se foi possível alterar a propriedade.

Altera uma propriedade de um campo.
Exemplo1 
= "boolean" THEN DO:
oCustFields:setFieldProperty("enableSequenceitemDiscount",
"booleanTruerequired",
"Ligado",
   "fieldsTypingEnableDisable"TRUE).

Exemplo2:
oCustFields:setFieldProperty("enableSequence",
"booleanFalsebooleanTrue",
"Desligado",
"Ligado",
  "fieldsTypingEnableDisable").
END.

getFieldPropertyCharacter ( pCodField , pCodProperty [ , pGroupId ] )

getFieldPropertyInteger ( pCodField , pCodProperty [ , pGroupId ] )

getFieldPropertyDecimal ( pCodField , pCodProperty [ , pGroupId ] )

getFieldPropertyLogical ( pCodField , pCodProperty [ , pGroupId ] )

Parâmetros:

  • pCodField (CHARACTER): Código do atributocampo;
  • pCodProperty (CHARACTER): Propriedade;
  • pGroupId (CHARACTER): Agrupador onde o atributo campo está contido. Se É opcional, se não for informado, será considerado o agrupador padrão "fields".

Retorno (CHARACTER,INTEGER,DECIMAL,LOGICAL): Valor da Propriedade.

Retorna o valor de uma propriedade de um Atributocampo.
// Para o campo "Sequência dos itens" mostrar "Ligado/Desligado" 
//ao invés de "Ativado/Desativado"
IF oCustFields:getFieldPropertyCharacter("enableSequenceExemplo1:
ASSIGN vOrder =
oCustFields:getFieldPropertyInteger("defaultDuplic",
"type",
"fieldsTypingEnableDisable")
= "boolean" THEN DO:oCustFields:setFieldProperty"order").
... Faz algo com a informação

Exemplo2:
ASSIGN vType =
oCustFields:getFieldPropertyCharacter("enableSequence",
"booleanTrue",
"Ligadotype",
   "fieldsTypingEnableDisable").
oCustFields:setFieldProperty("enableSequence",
"booleanFalse",
"Desligado",
"fieldsTypingEnableDisable").
END.
... Faz algo com a informação

getFields ( [ pGroupId ] )

Parâmetros:

getFields ( [ pGroupId ] )

Parâmetros:

  • pGroupId (CHARACTER): Agrupador onde o atributo campo está contido. Se É opcional, se não for informado, será considerado o agrupador padrão "fields".

Retorno (JsonArray): Lista de Atributoscampos.

Retorna um JsonArray que representa a lista de Atributoscampos.
Exemplo1:
//DEF PeguaVAR aoFields quantidadesAS de campos do agrupador "Impostos" e joga
// no label do campo "Total"JsonArray NO-UNDO.
ASSIGN oFields = oCustFields:getFields("fieldsTax").
oFieldIF  = oCustFields:getField("totalTax",
oFields <> ? AND oFields:LENGTH > 10 THEN ...

Exemplo2:
DEF VAR oFields AS JsonArray NO-UNDO.
ASSIGN oFields = oCustFields:getFields("fieldsTax").
IF oFields <> ? AND oFieldoFields:LENGTH <> ?0 THEN
oField:SET("label", "Total (" + string(oFields:LENGTH) + ")").
 ...

getField ( pCodField [ , getField ( pCodField [ , pGroupId ] )

Parâmetros:

  • pCodField (CHARACTER): Código do atributocampo;
  • pGroupId (CHARACTER): Agrupador onde o atributo campo está contido. Se É opcional, se não for informado, será considerado o agrupador padrão "fields".

Retorno (JsonObject): Um atributocampo.

Retorna um JsonObject que representa um Atributo.campo.
Exemplo1:
DEF VAR oField AS JsonObject NO-UNDO.
oField
// Pegua a quantidades de campos do agrupador "Impostos" e joga 
// no label do campo "Total"
ASSIGN oFields = oCustFields:getFields("fieldsTax")
oField  = oCustFields:getField("totalTax", 
"fieldsTax").
IF oFieldsoField <> ? AND oFieldTHEN
<> ? THENoField:SETADD("labelallowColumnsManager", "Total (" + string(oFields:LENGTH) + ")"TRUE).

Exemplo2:
DEF VAR oField AS JsonObject NO-UNDO.
oField = oCustFields:getField("enableAutomaticDuplicate").
IF oField <> ? THEN
oField:SET("order", 10).

addField ( pCodField , pCodLabel , pCodType [ , pPosition ] [ , pGroupId ] )

Parâmetros:

  • pCodField (CHARACTER): Código do Atributocampo;
  • pCodLabel (CHARACTER): Label do Atributocampo;
  • pCodType (CHARACTER): Tipo do Atributo campo (usar a classe FieldType, ex: FieldType:STRING);
  • pPosition: Posição onde o campo irá ficar no Formulário, usar uma da opções:
    • pIsFirst (LOGICAL): O Atributo campo será o Primeiro do Formulário (valor: YES) ou o Útimo (valor: NO);
    • pReferenceField (CHARACTER): Código de um Atributo campo já existente, onde o atributo campo ficará DEPOIS dele;.
    • É opcional, se Se não informado valor, o atributo campo será o Último do Formulário.
  • pGroupId (CHARACTER): Agrupador onde o atributo campo está contido. Se É opcional, se não for informado, será considerado o agrupador padrão "fields".

Retorno (JsonObject): Atributo campo Incluído.

Incluir um novo Atributocampo.
Exemplo1:// Inclui uma coluna chamada: "Cópia Usuário"
ASSIGN oField = oCustFields:addField("userCopy",
"Cópia Usuário",
FieldType:STRING).
// Inclui a nova coluna no Gerenciador de Colunas
IF oField <> ? THEN

oField:ADD("allowColumnsManager",
Exemplo2:
ASSIGN oField = oCustFields:addField("codeTax",
"Código Imposto",
TRUE).

changeFieldOrder ( pCodField [ , pPosition ] [ , pGroupId ] )

Parâmetros:

  • pCodField (CHARACTER): Código do Atributo;
  • pPosition: Posição onde o campo irá ficar no Formulário, usar uma da opções:
    • pIsFirst (LOGICAL): O Atributo será o Primeiro do Formulário (valor: YES) ou o Útimo (valor: NO);
    • pReferenceField (CHARACTER): Código de um Atributo já existente, onde o atributo ficará DEPOIS dele;
    • Se não informado valor, o atributo será o Último do Formulário.
  • pGroupId (CHARACTER): Agrupador onde o atributo está contido. Se não for informado, será considerado o agrupador padrão "fields".

Retorno (LOGICAL): Indicativo se foi possível alterar a ordem.

Altera a Ordem de um Atributo.
// Colocar o Campo "Estado (UF)" depois do campo "Baixa estoque"
oCustFields:changeFieldOrder("enableStateFieldType:NUMBER,
TRUE).

Exemplo3:
ASSIGN oField = oCustFields:addField("datAdmin",
"enableStockMovement").// Coloca o campo "CPF" como sendo o primeiro campo do Formulário
oCustFields:changeFieldOrder("cpf",
"Data Admissão",
FieldType:DATE,
"enableSequence",
YES"fieldsTypingEnableDisable").

setFieldValidate changeFieldOrder ( pCodField , pCodProg [ , pGroupId ] )setFieldValidateCustom ( pCodField , pEndpoint pPosition ] [ , pGroupId ] )

Parâmetros:

  • pCodField (CHARACTER): Código do atributocampo;
  • pCodProg (CHARACTER): API-REST de Produto (deve ser enviado o terceiro parâmetro recebido pela UPC). Quando o atributo for alterado, será executado o Endpoint 'validateField' da API-REST do Produto;
  • pPosition: Posição onde o campo irá ficar no Formulário, usar uma da opções:
    • pIsFirst (LOGICAL): O campo será o Primeiro do Formulário (valor: YES) ou o Útimo (valor: NO);
    • pReferenceField (CHARACTER): Código de um campo já existente, onde o campo ficará DEPOIS dele;
    • É opcional, se não informado valor, o campo será o Último do Formulário.
    pEndpoint (CHARACTER): Endpoint (método POST) que será executado quando o atributo for alterado. O caminho do Endpoint pode ser relativo (API-REST dentro do datasul) ou completo;
  • pGroupId (CHARACTER): Agrupador onde o atributo campo está contido. Se É opcional, se não for informado, será considerado o agrupador padrão "fields".

Retorno (LOGICAL): Indicativo se foi possível incluir alterar a propriedade no atributoordem.

Incluir a propriedade 'validate' no Atributo (monitora a alterado do campo - evento validateField).Altera a Ordem de um campo.
Exemplo1:
oCustFields:changeFieldOrder("name").

Exemplo2:
oCustFields:changeFieldOrder("cpf// Indica que, ao alterar o campo "Caminho completo do executável GZIP",
// deverá chamar o validateField da API-REST do Produto (Aba: Configurações)
oCustFields:setFieldValidate("execGZIPProgram",
pAPITRUE).

Exemplo3:
oCustFields:changeFieldOrder("enableState",
"fieldsTypingConfigurations").

addValidateFields ( pCodField )

Parâmetros:

  • pCodField (CHARACTER): Código do atributo. Se não for informado, será considerado o agrupador padrão "fields".

Retorno (LOGICAL): Lógico indicativo se foi possível incluir o atributo.

Inclui um Atributo no ValidateFields do Formulário (evento validateForm).

Observação: Utilizar este método para tela que implementam o componente DynamicForm.

// Indica que, ao alterar o campo "Código tributação ICMS"enableStockMovement",

// deverá chamar o validateForm da API-REST do Produto
// (Aba: Digitação/Geração)oCustFields:addValidateFields("enableICMSTaxationCode"fieldsTypingEnableDisable").

isChangedField setFieldValidate ( pCodField , pCodProg [ , pGroupId ] )

setFieldValidateCustom ( pCodField , pEndpoint [ , pGroupId ] )

Parâmetros:

  • pCodField (CHARACTER): Código do atributo.

Retorno (LOGICAL): Lógico indicativo se o atributo teve seu valor alterado.

Verifica se um Atributo foi alterado (eventos ValidateForm e ValidateField).
  • campo;
  • pCodProg (CHARACTER): API-REST de Produto (deve ser enviado o terceiro parâmetro recebido pela UPC). Quando o campo for alterado, será executado o Endpoint 'validateField' da API-REST do Produto;
  • pEndpoint (CHARACTER): Endpoint (método POST) que será executado quando o campo for alterado. O caminho do Endpoint pode ser relativo (API-REST dentro do datasul) ou completo;
  • pGroupId (CHARACTER): Agrupador onde o campo está contido. É opcional, se não for informado, será considerado o agrupador padrão "fields".

Retorno (LOGICAL): Indicativo se foi possível incluir a propriedade no campo.

Incluir a propriedade 'validate' no campo (monitora a alterado do campo - evento validateField).
Exemplo1:
oCustFields:setFieldValidate("allowedVariation
// Se alterar o campo “Código tributação ICMS” (Aba: Digitação/Geração): 
// - Se "sim": desabilita o campo “Percentual redução ICMS” e muda o
campo "Alíquota ICMS" para "sim", 
// - Se "não": faz ao contrário
IF oCustFields:isChangedField("enableICMSTaxationCode") THEN DO:
ASSIGN vValorMark = oCustFields:getFieldValueLogical("enableICMSTaxationCode").
IF vValorMark <> ? THEN DO:
oCustFields:setFieldProperty("enableICMSReductionPercentage",
"disabled",
vValorMark).
oCustFields:setFieldValue("enableICMSRate",
vValorMark).
END.
END.// Se alterar o campo "Caminho completo do executável GZIP"
// (Aba: Digitação/Geração):
// - Muda o conteúdo para minísculo
// - Retira os acentos
// - Se retirar os acentos, muda o label para
"Caminho completo do executável GZIP (AJUST)"
IF pAPI).

Exemplo2:
oCustFields:isChangedFieldsetFieldValidate("execGZIPProgram") THEN DO:
ASSIGN vValorAtual = oCustFields:getFieldValueCharacter("execGZIPProgram").
IF vValorAtual <> ? THEN DO:
ASSIGN vValorAjust = LC(vValorAtual)
vValorAjust = REPLACE(vValorAjust, "á", "a")
vValorAjust = REPLACE(vValorAjust, "é", "e")
vValorAjust = REPLACE(vValorAjust, "í", "i")
vValorAjust = REPLACE(vValorAjust, "ó", "o")
vValorAjust = REPLACE(vValorAjust, "ú", "u")
vValorAjust = REPLACE(vValorAjust, "ã", "a")
vValorAjust = REPLACE(vValorAjust, "õ", "o")
vValorAjust = REPLACE(vValorAjust, "ç", "c").
oCustFields:setFieldValue("execGZIPProgram",
,
pAPI,
"fieldsTypingConfigurations").

Exemplo3:
oCustFields:setFieldValidateCustom("receiveVendorOrder",
vValorAjust).IF NOT vValorAjust MATCHES(vValorAtual) THEN "/api/cdpcus/v1/orders").

Exemplo4:
oCustFields:setFieldLabelsetFieldValidateCustom("execGZIPProgramoderNumber",
"http://server:3000/vdlOrder/validateField",
"Caminho completo do executável GZIP (AJUST)").
ELSE
oCustFields:setFieldLabel("execGZIPProgram",
"Caminho completo do executável GZIP").
END.
END."fieldsUpdateFiscalValidations").

addValidateFields ( pCodField )

Parâmetros:

  • pCodField (CHARACTER): Código do campo.

Retorno (LOGICAL): Lógico indicativo se foi possível incluir o campo.

Inclui um campo no ValidateFields do Formulário (evento validateForm).

Observação: Utilizar este método para telas HTML que implementam o componente DynamicForm.

oCustFields:addValidateFields("enableICMSTaxationCode").

isChangedField ( pCodField )

Parâmetros:

  • pCodField (CHARACTER): Código do campo.

Retorno (LOGICAL): Lógico indicativo se o campo teve seu valor alterado.

Verifica se um campo foi alterado (eventos ValidateForm e ValidateField).
IF oCustFields:isChangedField("enableICMSTaxationCode")
THEN DO:
... Realiza algum tratamento
END.

getReturnRoot ( )

Retorno (JsonObject): Root de retorno.

Retorno Retorna um JsonOject que representa o Root de retorno (eventos ValidateForm e ValidateField).).
DEFINE VARIABLE oRoot AS JsonObject NO-UNDO.
oRoot = oCustFields:getReturnRoot().
... Faz algo com a informação

getFieldValueCharacter ( pCodField )

getFieldValueInteger ( pCodField )

getFieldValueDecimal ( pCodField )

getFieldValueLogical ( pCodField )

getFieldValueDate ( pCodField )

getFieldValueJsonObject ( pCodField )

getFieldValueJsonArray ( pCodField )

Parâmetros:

  • pCodField (CHARACTER): Código do atributocampo.

Retorno (CHARACTER,INTEGER,DECIMAL,LOGICAL,DATE,JsonObject,JsonArray): Valor do atributocampo.

Retorna o valor de um Atributocampo.
// Se alterar o campo “Código tributação ICMS” (Aba: Digitação/Geração): 
// - Se "sim": desabilita o campo “Percentual redução ICMS” e muda
o campo "Alíquota ICMS" para "sim", 
// - Se "não": faz ao contrário
IF oCustFields:isChangedField("enableICMSTaxationCode") THEN DOExemplo1:
ASSIGN vValorAtual =
oCustFields:getFieldValueCharacter("execGZIPProgram").
... Faz algo com a informação

Exemplo2:
ASSIGN vValorMark =
oCustFields:getFieldValueLogical("enableICMSTaxationCodeenableICMSTaxCode").
IF... vValorMarkFaz <>algo ?com a informação

setFieldValue ( pCodField , pCodValue )

Parâmetros:

  • pCodField (CHARACTER): Código do campo;
  • pCodValue (CHARACTER,INTEGER,DECIMAL,LOGICAL,DATE): Novo valor.

Retorno (LOGICAL): Indicativo se foi possível alterar o campo.

Altera o valor de um campo.
Exemplo1:
THEN DO:
oCustFields:setFieldProperty("enableICMSReductionPercentage",
"disabled",
vValorMark).oCustFields:setFieldValue("enableICMSRateexecGZIPProgram",
vValorMark).
END.
END.// Se alterar o campo "Caminho completo do executável GZIP"
(Aba: Digitação/Geração):
// - Muda o conteúdo para minísculo
// - Retira os acentos
// - Se retirar os acentos, muda o label para
// "Caminho completo do executável GZIP (AJUST)"
IF oCustFields:isChangedField("execGZIPProgram") THEN DO:
ASSIGN vValorAtual = oCustFields:getFieldValueCharacter("execGZIPProgram").
IF vValorAtual <> ? THEN DO:
ASSIGN vValorAjust = LC(vValorAtual)
vValorAjust = REPLACE(vValorAjust, "á", "a")
vValorAjust = REPLACE(vValorAjust, "é", "e")
vValorAjust = REPLACE(vValorAjust, "í", "i")
vValorAjust = REPLACE(vValorAjust, "ó", "o")
vValorAjust = REPLACE(vValorAjust, "ú", "u")
vValorAjust = REPLACE(vValorAjust, "ã", "a")
vValorAjust = REPLACE(vValorAjust, "õ", "o")
vValorAjust = REPLACE(vValorAjust, "ç", "c").
oCustFields:setFieldValue("execGZIPProgram",
vValorAjust).
IF NOT vValorAjust MATCHES(vValorAtual) THEN
oCustFields:setFieldLabel("execGZIPProgram",
"Caminho completo do executável GZIP (AJUST)").
ELSE
oCustFields:setFieldLabel("execGZIPProgram
 vValorAjust).

Exemplo2:
oCustFields:setFieldValue("variationIssuing",
888).

getFieldValues ( )

Retorno (JsonObject): Valores do registro.

Retorna um JsonOject que representa os Valores do registro.
DEFINE VARIABLE oValues AS JsonObject NO-UNDO.
oValues = oCustFields:getFieldValues().
... Faz algo com a informação

d.CustomActions
Âncora
CustomActions
CustomActions

Classe utilizada para realizar customizações relacionadas as Ações da tela HTML. Estas ações podem ser de 2 tipos:

  • Ações Padrões: Correspondem as ações: Incluir, Editar, Copiar, Visualizar e Excluir.
  • Ações Customizadas: Correspondem a qualquer outra ação que não seja padrão, incluídas pelo próprio produto ou de forma customizada. Exemplo: "Atualiza Doc".

Através desta classe, é possível manipular as ações existentes na Páginas e também nas Tabelas.


"Caminho completo do executável GZIPEND
END.setFieldValue ( pCodField , pCodValue pCodField do atributo;pCodValue (CHARACTER,INTEGER,DECIMAL,LOGICAL,DATE): Novo valor alterar o atributo.
// Se alterar o campo “Código tributação ICMS” (Aba: Digitação/Geração): 
// - Se "sim": desabilita o campo “Percentual redução ICMS” e
// muda o campo "Alíquota ICMS" para "sim",
// - Se "não": faz ao contrário
IF oCustFields:isChangedField("enableICMSTaxationCode") THEN DO:
ASSIGN vValorMark = oCustFields:getFieldValueLogical("enableICMSTaxationCode").
IF vValorMark <> ? THEN DO:
oCustFields:setFieldProperty("enableICMSReductionPercentage",
"disabled",
vValorMark).oCustFields:setFieldValue("enableICMSRate",
vValorMark).
END.
END.
// Se alterar o campo "Caminho completo do executável GZIP" 
// (Aba: Digitação/Geração):
// - Muda o conteúdo para minísculo
// - Retira os acentos
// - Se retirar os acentos, muda o label para
// "Caminho completo do executável GZIP (AJUST)"
IF oCustFields:isChangedField("execGZIPProgram") THEN DO:
ASSIGN vValorAtual = oCustFields:getFieldValueCharacter("execGZIPProgram").
IF vValorAtual <> ? THEN DO:
ASSIGN vValorAjust = LC(vValorAtual)
vValorAjust = REPLACE(vValorAjust, "á", "a")
vValorAjust = REPLACE(vValorAjust, "é", "e")
vValorAjust = REPLACE(vValorAjust, "í", "i")
vValorAjust = REPLACE(vValorAjust, "ó", "o")
vValorAjust = REPLACE(vValorAjust, "ú", "u")
vValorAjust = REPLACE(vValorAjust, "ã", "a")
vValorAjust = REPLACE(vValorAjust, "õ", "o")
vValorAjust = REPLACE(vValorAjust, "ç", "c").
oCustFields:setFieldValue("execGZIPProgram",
vValorAjust).
IF NOT vValorAjust MATCHES(vValorAtual) THEN
oCustFields:setFieldLabel("execGZIPProgram"Caminho completo do executável GZIP (AJUST)").
ELSE
oCustFields:setFieldLabel("execGZIPProgram",
"Caminhocompletodoexecutável GZIP").
END.
END.// Altera o valor da coluna "Variação máxima data emissão" para "888"
// (Aba: Digitação/Geração)
oCustFields:setFieldValue("variationIssuing"888).
MétodoDescriçãoExemplo

setAction ( pCodAction , pCodValue )

Parâmetros:

  • pCodAction (CHARACTER): Código da Ação;
  • pCodValue: Valor da Ação, usar uma das opções:
    • pCodURL (CHARACTER): Valor da URL a ser executada pela Ação;
    • pCodValue (LOGICAL): Valor da Ação.

Retorno (LOGICAL): Indicativo se foi possível incluir/alterar a Ação.

Inclui ou Altera uma Ação Padrão.
Exemplo1:
oCustActions:setAction("detail",
"/userParameters/newdet/:id").

Exemplo2:
oCustActions:setAction("remove",
FALSE).


getActionCharacter ( pCodAction )

getActionLogical ( pCodAction )

Parâmetros:

  • pCodAction (CHARACTER): Código da Ação.

Retorno (CHARACTER,LOGICAL): Valor da Ação.

Retorna o valor de uma Ação Padrão.
Exemplo1:
ASSIGN
vUrlEdit = 
oCustActions:getActionCharacter("edit").
... Faz algo com a informação

Exemplo2:
ASSIGN vRemove =
oCustActions:getActionLogical("remove").
..
. Faz algo com a informação

removeAction ( pCodAction

)

Parâmetros:

  • pCodAction (CHARACTER): Código
  • da Ação.

Retorno (LOGICAL): Indicativo se foi possível

Altera o valor de um Atributo.

remover a Ação.

Remove uma Ação Padrão.
oCustActions:removeAction("duplicate").

getActions ( )

Retorno (JsonObject): Ações padrões.

retorna um JsonObject que representa as Ação Padrão.
DEFINE VARIABLE oActions AS JsonObject NO-UNDO.
oActions = oCustActions:getActions().
... Faz algo com a informação

setPageCustomActionProperty ( pIdAction , pCodProperty , pCodValue )

Parâmetros:

  • pIdAction: Identificador da Ação, usar uma das opções:
    • pCodLabel (CHARACTER): Label da Ação;
    • pNumIndex (INTEGER): Posição da Ação dentro da Lista de Ações.
  • pCodProperty (CHARACTER): Propriedade que deve ser alterada;
  • pCodValue (CHARACTER,INTEGER,DECIMAL,LOGICAL): Novo valor.

Retorno (LOGICAL): Indicativo se foi possível alterar a propriedade.

Altera uma propriedade de uma Ação Customizada de Página.
Exemplo1:
oCustActions:setPageCustomActionProperty("Atz Dados",
                   
                           
"icon",
"po-icon po-icon po-icon-refresh").

Exemplo2:
oCustActions:setPageCustomActionProperty(2,
"visible",
FALSE).

getPageCustomActionPropertyCharacter ( pIdAction , pCodProperty )

getPageCustomActionPropertyInteger ( pIdAction , pCodProperty )

getPageCustomActionPropertyDecimal ( pIdAction , pCodProperty )

getPageCustomActionPropertyLogical ( pIdAction , pCodProperty )

Parâmetros:

  • pIdAction: Identificador da Ação, usar uma das opções:
    • pCodLabel (CHARACTER): Label da Ação;
    • pNumIndex (INTEGER): Posição da Ação dentro da Lista de Ações.
  • pCodProperty (CHARACTER): Propriedade.

Retorno (CHARACTER,INTEGER,DECIMAL,LOGICAL): Valor da Propriedade.

Retorna o valor de uma propriedade de uma Ação Customizada de Página.
Exemplo1:
ASSIGN vURL =
oCustActions:getPageCustomActionPropertyCharacter("Docto
",
         
 
 
 
               "url").
... Faz algo com a informação

Exemplo2:
ASSIGN vVisible =
oCustActions:getPageCustomActionPropertyLogical(1,

getFieldValues ( )

Retorno (JsonObject): Valores do registro.

Retorno um JsonOject que representa os Valores do registro ou retorno(eventos ValidateForm e ValidateField).

...

Responsável pela customização de Ações;

...

setAction ( pCodAction , pCodValue
  • pCodAction (CHARACTER): Código da Ação;
  • pCodValue: Valor da AçãopCodURL Valor URL a ser executada pela pCodValue LOGICAL Valor LOGICAL Indicativo se foi possível incluir/alterar a Ação.
    // Retira a Ação Padrão de "Excluir" da Tabela    
    oCustActions:setAction("remove",
    FALSE).
                   "visible").
    ... Faz algo com a informação

    getPageCustomAction ( pIdAction

    MétodoDescriçãoExemplo

    )

    Parâmetros:

    • pIdAction: Identificador da Ação, usar uma das opções:
        • pCodLabel (CHARACTER):
        • Label da
        • Ação;
        • pNumIndex (
        • INTEGER):
        • Posição da Ação dentro da Lista de Ações.

      Retorno (

      JsonObject):

      Uma Ação Customizada de Página.

      Retorna um JsonObject que representa uma Ação Customizada de Página.
      Exemplo1:
      DEF VAR oPageCustomAction AS JsonObject NO-UNDO.
      oPageCustomAction = oCustActions:getPageCustomAction("Docto").
      IF oPageCustomAction <> ? THEN
      oPageCustomAction:set("action",
      Inclui ou Altera uma Ação Padrão.
              

      getActionCharacter ( pCodAction )

      getActionLogical ( pCodAction )

      Parâmetros:

      • pCodAction (CHARACTER): Código da Ação.

      Retorno (CHARACTER,LOGICAL): Valor da Ação.

      Retorna o valor de uma Ação Padrão.
      // Faz a Ação Padrão de Visualizar abrir a tela de Edição
      oCustActions:setAction("detail"http://server:8080/doc").

      Exemplo2:
      DEF VAR oPageCustomAction AS JsonObject NO-UNDO.
      oPageCustomAction = oCustActions:getPageCustomAction(1).
      IF oPageCustomAction <> ? THEN
      oPageCustomAction:set("visible",
      oCustActions:getActionCharacter("edit")).

      removeAction ( pCodAction )

      Parâmetros:

      • pCodAction (CHARACTER): Código da Ação.

      Retorno (LOGICAL): Indicativo se foi possível remover a Ação.

      Remove uma Ação Padrão.
      // Retira a Ação Padrão de "Cópia" da Tabela
      oCustActions:removeAction("duplicate").

      getActions ( )

      Retorno (JsonObject): Ações padrões.

      retorna um JsonObject que representa as Ação Padrão.
       FALSE).

      addPageCustomAction ( pNumType , pCodLabel , pCodAddress [ , pCodIcon ] setPageCustomActionProperty ( pIdAction , pCodProperty , pCodValue )

      Parâmetros:

      • pIdActionpNumType: Identificador Tipo da Ação, usar uma das opções:
        • CustomActions:TYPE_ENDPOINT - para chamada ao BackEnd;
        • CustomActions:TYPE_ROUTE - para chamada de uma Rota (URL).
      • pCodLabel (CHARACTER): Label da Ação;pNumIndex
      • pCodAddress (INTEGERCHARACTER): Posição Endereço da Ação dentro da Lista de Ações.
      • pCodProperty (CHARACTER): Propriedade que deve ser alterada;
      • que será executada;
      • pCodIcon (CHARACTER): Ícone da Ação, é opcionalpCodValue (CHARACTER,INTEGER,DECIMAL,LOGICAL): Novo valor.

      Retorno (LOGICALJsonObject): Indicativo se foi possível alterar a propriedadeAção Customizada de Página Incluída.

      Altera Incluir uma propriedade de uma Ação Customizada de Página.nova Ação Customizada na Página.
      Exemplo1:
      oCustActions:addPageCustomAction(CustomActions:TYPE_ENDPOINT,
      // Inclui o icone de Refresh na Ação Customizada "Atz Dados" da Pagina,
      "http://server01:3000/atzDados").

      Exemplo2:
      oCustActions:setPageCustomActionProperty("Atz Dados",
      addPageCustomAction(CustomActions:TYPE_ROUTE,
      "iconGoogle",
      "http://www.google.com",
      "po-icon po-icon po-icondevice-refreshdesktop").

      getPageCustomActionPropertyCharacter ( pIdAction , pCodProperty )

      getPageCustomActionPropertyInteger removePageCustomAction ( pIdAction , pCodProperty )

      getPageCustomActionPropertyDecimal ( pIdAction , pCodProperty )

      getPageCustomActionPropertyLogical ( pIdAction , pCodProperty )

      Parâmetros:

      • pIdAction: Identificador da Ação, usar uma das opções:
        • pCodLabel (CHARACTER): Label da Ação;
        • pNumIndex (INTEGER): Posição da Ação dentro da Lista de Ações.
      • pCodProperty (CHARACTER): Propriedade.

      Retorno (CHARACTER,INTEGER,DECIMAL,LOGICAL): Valor da Propriedade.Indicativo se foi possível remover a Ação.

      Remove Retorna o valor de uma propriedade de uma Ação Customizada de Página.

      getPageCustomAction ( pIdAction )

      Parâmetros
      Exemplo1:
      • pIdAction: Identificador da Ação, usar uma das opções:
        • pCodLabel (CHARACTER): Label da Ação;
        • pNumIndex (INTEGER): Posição da Ação dentro da Lista de Ações.

      Retorno (JsonObject): Uma Ação Customizada de Página.

      oCustActions:removePageCustomAction("Doctos").

      Exemplo2:
      oCustActions:removePageCustomAction(3).

      getPageCustomActions ( )

      Retorno (JsonArray): Ações Customizadas de Página.

      Retorna a lista de Ações Customizadas de Página.
      DEFINE VARIABLE oPageCustomActions AS JsonArray NO-UNDO.
      oPageCustomActions
      Retorna um JsonObject que representa uma Ação Customizada de Página.
      // Altera o Endereço da primeira Ação Customizada da Pagina
      oAction = oCustActions:getPageCustomActiongetPageCustomActions(1).
      IF... oActionFaz <> ? THEN
      oAction:set("action", 
      "http://newserver:8080/customer").
      algo com a informação

      setTableCustomActionProperty ( pIdAction , pCodProperty , pCodValue addPageCustomAction ( pNumType , pCodLabel , pCodAddress [ , pCodIcon ] )

      Parâmetros:

      • pNumTypepIdAction: Tipo Identificador da Ação, usar uma das opções:
        • CustomActions:TYPE_ENDPOINT - para chamada ao BackEnd;
        • CustomActions:TYPE_ROUTE - para chamada de uma Rota (URL).
        • pCodLabel (CHARACTER): Label da Ação;
        pCodAddress
        • pNumIndex (
        CHARACTER
        • INTEGER):
        Endereço
        • Posição da Ação
        que será executada
        • dentro da Lista de Ações.
      • pCodProperty (CHARACTER): Propriedade que deve ser alterada;
      • pCodValue (CHARACTER,INTEGER,DECIMAL,LOGICAL): Novo valor;pCodIcon (CHARACTER): Ícone da Ação.

      Retorno (JsonObjectLOGICAL): Indicativo se foi possível alterar a propriedade.

      Altera uma propriedade de uma Ação Customizada de Página IncluídaTabela.Incluir uma nova Ação Customizada na Página.
      Exemplo1:
      oCustActions:setTableCustomActionProperty("Atz Dados",
      // Inclui uma nova Ação Customizada no Pagina chamada "Atz Dados" que chama
      // uma EndPoint
      oCustActions:addPageCustomAction(CustomActions:TYPE_ENDPOINT,
      "icon",
      "Atz Dados" "po-icon po-icon po-icon-refresh").

      Exemplo2:
      oCustActions:setTableCustomActionProperty(2,
      "http://server01:3000/atzDados").// Inclui uma nova Ação Customizada no Pagina chamada "Google" que chama uma
      // Rota
      oCustActions:addPageCustomAction(CustomActions:TYPE_ROUTE,
      "visible",
      FALSE).

      getTableCustomActionPropertyCharacter ( pIdAction , pCodProperty )

      getTableCustomActionPropertyInteger ( pIdAction , pCodProperty )

      getTableCustomActionPropertyDecimal ( pIdAction , pCodProperty )

      getTableCustomActionPropertyLogical ( pIdAction , pCodProperty )

      Parâmetros:

      • pIdAction: Identificador da Ação, usar uma das opções:
        • pCodLabel (CHARACTER): Label da Ação;
        • pNumIndex (INTEGER): Posição da Ação dentro da Lista de Ações.
      • pCodProperty: Propriedade.

      Retorno (CHARACTER,INTEGER,DECIMAL,LOGICAL): Valor da Propriedade.

      Retorna o valor de uma propriedade de uma Ação Customizada de Tabela.
      Exemplo1:
      ASSIGN vURL =
      "GoogleoCustActions:getTableCustomActionPropertyCharacter("Docto",
      "http://www.google.com",
      "po-icon po-icon-device-desktop").

      removePageCustomAction ( pIdAction )

      Parâmetros:

      • pIdAction: Identificador da Ação, usar uma das opções:
        • pCodLabel (CHARACTER): Label da Ação;
        • pNumIndex (INTEGER): Posição da Ação dentro da Lista de Ações.

      Retorno (LOGICAL): Indicativo se foi possível remover a Ação.

      Remove uma Ação Customizada de Página.
      // Elimina a Ação Customizada chamada "Doctos" da Pagina
      oCustActions:removePageCustomAction("Doctos").
      url").
      ... Faz algo com a informação

      Exemplo2:
      ASSIGN vVisible =
      oCustActions:getTableCustomActionPropertyLogical(1,
      "visible").
      ... Faz algo com a informação

      getTableCustomAction ( pIdAction

      getPageCustomActions ( )

      Retorno (JsonArray): Ações Customizadas de Página.

      Retorna a lista de Ações Customizadas de Página.

      setTableCustomActionProperty ( pIdAction , pCodProperty , pCodValue )

      Parâmetros:

      • pIdAction: Identificador da Ação, usar uma das opções:
        • pCodLabel (CHARACTER): Label da Ação;
        • pNumIndex (INTEGER): Posição da Ação dentro da Lista de Ações.
        pCodProperty

      Retorno (

      CHARACTER

      JsonObject):

      Propriedade que deve ser alterada;
    • pCodValue (CHARACTER,INTEGER,DECIMAL,LOGICAL): Novo valor.
    • Retorno (LOGICAL): Indicativo se foi possível alterar a propriedade.

      Altera uma propriedade de uma Ação Customizada de Tabela.

      Uma Ação Customizada de Tabela.

      Retorna um JsonObject que representa uma Ação Customizada de Tabela.
      Exemplo1:
      DEF VAR oTableCustomAction AS JsonObject NO-UNDO.
      oTableCustomAction =
      oCustActions:getTableCustomAction("Docto").
      IF oTableCustomAction <> ? THEN
      oTableCustomAction:set("action",
      "http://server:8080/doc").

      Exemplo2:
      DEF VAR oTableCustomAction AS JsonObject NO-UNDO.
      oTableCustomAction =
      oCustActions:getTableCustomAction(1).
      IF oTableCustomAction <> ? THEN
      oTableCustomAction:set("visible",
      FALSE).

      addTableCustomAction ( pNumType , pCodLabel , pCodAddress [ , pCodIcon ] [ , pConcatKeys ] )

      Parâmetros:

      • pNumType: Tipo

      getTableCustomActionPropertyCharacter ( pIdAction , pCodProperty )

      getTableCustomActionPropertyInteger ( pIdAction , pCodProperty )

      getTableCustomActionPropertyDecimal ( pIdAction , pCodProperty )

      getTableCustomActionPropertyLogical ( pIdAction , pCodProperty )

      Parâmetros:

      • pIdAction: Identificador da Ação, usar uma das opções:
        • pCodLabel (CHARACTER): Label da Ação;
        • pNumIndex (INTEGER): Posição da Ação dentro da Lista de Ações.
      • pCodProperty: Propriedade.

      Retorno (CHARACTER,INTEGER,DECIMAL,LOGICAL): Valor da Propriedade.

      Retorna o valor de uma propriedade de uma Ação Customizada de Tabela.
        • CustomActions:TYPE_ENDPOINT - para chamada ao BackEnd;
        • CustomActions:TYPE_ROUTE - para chamada de uma Rota (URL).
      • pCodLabel (CHARACTER): Label da Ação;
      • pCodAddress (CHARACTER): Endereço da Ação que será executada;
      • pCodIcon (CHARACTER): Ícone da Ação, é opcional;
      • pConcatKeys (LOGICAL): Indica se deve ser acrescentada a propriedade "concatKeys" na Ação, é opcional

      getTableCustomAction ( pIdAction )

      Parâmetros:

      • pIdAction: Identificador da Ação, usar uma das opções:
      • pCodLabel (CHARACTER): Label da Ação;
      • pNumIndex (INTEGER): Posição da Ação dentro da Lista de Ações.

      Retorno (JsonObject): Uma Ação Customizada de Tabela Incluída.

      Retorna um JsonObject que representa Incluir uma nova Ação Customizada de na Tabela.
      Exemplo1:
      oCustActions:addTableCustomAction(
      pNumType , pCodLabel , pCodAddress [ , pCodIcon ] [ , pConcatKeys ] )

      Parâmetros:

      • pNumType: Tipo da Ação, usar uma das opções:
        • CustomActions:TYPE_ENDPOINT - para chamada ao BackEnd;
        • CustomActions:TYPE_ROUTE - para chamada de uma Rota (URL).
      • pCodLabel (CHARACTER): Label da Ação;
      • pCodAddress (CHARACTER): Endereço da Ação que será executada;
      • pCodIcon (CHARACTER): Ícone da Ação;
      • pConcatKeys (LOGICAL): Indica se deve ser acrescentada a propriedade "concatKeys" na Ação.

      Retorno (JsonObject): Ação Customizada de Tabela Incluída.

      Incluir uma nova Ação Customizada na Tabela.
      CustomActions:TYPE_ENDPOINT,
      "Bloqueia",
      "http://server01:3000/block").

      Exemplo2:
      oCustActions:addTableCustomAction(CustomActions:TYPE_ROUTE,
      "Det Adicional",
      "http://newserver:8080/dts/customer/detail",
      "po-icon po-icon po-icon-refresh").

      Exemplo3:// Inclui uma nova Ação Customizada no Tabela chamada "Bloqueia" que chama
      // uma EndPoint
      oCustActions:addTableCustomAction(CustomActions:TYPE_ENDPOINT,
      "Bloqueia",
      "Copiar",
      "http://server01server:3000/block/dts/customer/copy",
      "po-icon po-icon po-icon-refresh").// Inclui uma nova Ação Customizada no Tabela chamada "Det Adicional" que
      // chama uma Rota
      oCustActions:addTableCustomAction(CustomActions:TYPE_ROUTE,
      "",
      "Det Adicional",
      "http://newserver:8080/dts/customer/detail").

      removeTableCustomAction ( pIdAction )

      Parâmetros:

      • pIdAction: Identificador da Ação, usar uma das opções:
        • pCodLabel (CHARACTER): Label da Ação;
        • pNumIndex (INTEGER): Posição da Ação dentro da Lista de Ações.

      Retorno (LOGICAL): Indicativo se foi possível remover a Ação.

      Remove uma Ação Customizada de Tabela.
      // Elimina a Ação Customizada chamada "Relacto" da Pagina
      oCustActions:removeTableCustomAction("Relacto").

      getTableCustomActions ( )

      Retorno (JsonArray): Ações Customizadas de Tabela.

      Retorna a lista de Ações Customizadas de Tabela.

      getServerAddress ( pIsExt )

      Parâmetros:

      • pIsExt (LOGICAL): Indica se deve ser considerado o Endereço Exerno (Valor: TRUE) ou Interno (Valor:FALSE). Se for solicitado o Externo e ele não existir, será devolvido o interno.

      Retorno (CHARACTER): Endereço no formato: http://HOST:PORT.

      Retorna o Endereço onde o Datasul está hospedado.

      ...

      Responsável pela customização de Registros;

      ...

      TRUE).

      removeTableCustomAction ( pIdAction )

      Parâmetros:

      • pIdAction: Identificador da Ação, usar uma das opções:
        • pCodLabel (CHARACTER): Label da Ação;
        • pNumIndex (INTEGER): Posição da Ação dentro da Lista de Ações.

      Retorno (LOGICAL): Indicativo se foi possível remover a Ação.

      Remove uma Ação Customizada de Tabela.
      Exemplo1:
      oCustActions:removeTableCustomAction("Relacto").

      Exemplo2:
      oCustActions:removeTableCustomAction(2).

      getTableCustomActions ( )

      Retorno (JsonArray): Ações Customizadas de Tabela.

      Retorna a lista de Ações Customizadas de Tabela.
      DEFINE VARIABLE oTableCustomActions AS JsonArray NO-UNDO.
      oTableCustomActions = oCustActions:getTableCustomActions().
      ... Faz algo com a informação

      getServerAddress ( pIsExt )

      Parâmetros:

      • pIsExt (LOGICAL): Indica se deve ser considerado o Endereço Exerno (Valor: TRUE) ou Interno (Valor:FALSE). Se for solicitado o Externo e ele não existir, será devolvido o interno.

      Retorno (CHARACTER): Endereço no formato: http://HOST:PORT.

      Retorna o Endereço onde o Datasul está hospedado.
      Exemplo1:
      DEFINE VARIABLE vServer AS CHARACTER NO-UNDO.
      ASSIGN vServer = oCustActions:getServerAddress(FALSE).
      ... Faz algo com a informação

      Exemplo2:
      DEFINE VARIABLE vServerExt AS CHARACTER NO-UNDO.
      ASSIGN vServerExt = oCustActions:getServerAddress(TRUE).
      ... Faz algo com a informação

      e.CustomRecords
      Âncora
      CustomRecords
      CustomRecords

      Classe utilizada para alterar os registros que estão sendo enviados pela tela HTML. Ela pode ser utlizalida tanto no evento que retornam vários registros, com naqueles que é retornado apenas um.


      MétodoDescriçãoExemplo

      getEntityKeyCharacter ( )

      getEntityKeyInteger ( )

      Retorno (CHARACTER,INTEGER): Chave do registro.

      Retorna a chave do Registro na manipulação do Metadata (Alteração, Detalhe)..
      Exemplo1:
      DEFINE VARIABLE vCodPais AS CHARACTER NO-UNDO.
      ASSIGN vCodPais = oCustRecords:getEntityKeyCharacter().
      ... Faz algo com a informação

      Exemplo2:
      DEFINE VARIABLE vIdCliente AS INTEGER NO-UNDO.
      ASSIGN vIdCliente = oCustRecords:getEntityKeyInteger().
      .. Faz algo com a informação

      updateRecords ( pProg , pPiName )

      Parâmetros:

      • pProg (HANDLE): Handle do programa UPC;
      • pPiName (CHARACTER): Nome da PI que será executada a cada registro dos dados. Ela deve receber como parâmetro um JsonObject que representa o registro, exemplo:

        DEF INPUT PARAM oItem AS JsonObject NO-UNDO.

      Retorno (LOGICAL): Indicativo se é possível alterar o registro.

      Navega nos registros e executa uma PI interna da UPC para customização dos dados.

      // Indica que dever ser executada a PI "pi_altera_registros" para 
      // realizar a alteração nos registros
      oCustRecords:updateRecords(THIS-PROCEDURE, "pi_altera_registros").
      // PI que será executada para cada registro da Tabela

      PROCEDURE pi_altera_registros:
      DEF INPUT PARAM oItem AS JsonObject NO-UNDO.
      // Atualiza a coluna "Cópia Usuário" com o valor da coluna "Usuário"
      oItem:ADD("userCopy", oItem:getCharacter("userCode")).
      // Altera o conteúdo da coluna "Nome", concatenado: "- Alterado"
      oItem:SET("userName", oItem:getCharacter("userName") + " - Alterado" FIND minha-tabela WHERE
      minha-tabela.cod-cliente = oItem:getCharacter("userCode")
      NO-LOCK NO-ERROR.
      IF AVAIL minha-tabela THEN
      oItem:ADD("myInform", minha-tabela.cod-minha-info).
      END PROCEDURE.

      f.CustomMessages

      ...

      Âncora
      CustomMessages
      CustomMessages

      Classe utilizada para Responsável pela criação de Mensagens de Erro;CustomMessages: Geração de Mensagensmensagens de erro que serão enviadas para a tela HTML.


      MétodoDescriçãoExemplo

      createMessageError ( pMsgNumber , pMsgDescription , pMsgHelp )

      Parâmetros:

      • pMsgNumber (INTEGER): Número da Mensagem;
      • pMsgDescription (CHARACTER): Descrição da Mensagem;
      • pMsgHelp (CHARACTER): Help da Mensagem.

      Retorno (JsonObject): Mensagem no padrão TOTVS de Mensagem.

      Cria uma mensagem do tipo ERROR para enviar
      ao FrontEnd.// Valida se o campo "Caminho completo do executável GZIP" foi
      // informado, se não foi, retorna uma mensagem de Erro
      ASSIGN vValorAtual
      ao FrontEnd.
      DEF VAR vName AS CHARACTER NO-UNDO.

      ASSIGN vName = oCustFields:getFieldValueCharacter("
      execGZIPProgram
      customerName").
       


      IF
      vValorAtual
      vName = "" OR 
      vValorAtual
      vName = ? THEN DO:
      jsonIO = oCustMsgs:createMessageError(1,

                              
      "Caminho completo do executável GZIP
      "Nome OBRIGATÓRIO",

      "O campo 'Caminho completo do executável GZIP' deve
       
      ser
       
      informado,
       
      não
       
      pode
       
      ser
       
      branco !").
      // Indica que não deve ser Salvo a Alteração
      "O nome do 
      Registro
      IF
      cliente 
      vValorAtual
      é 
      =
      obrigatório !"
      "
      ).
      OR
       
      vValorAtual = ?
       
      THEN
      RETURN "NOK".
      END.

      04.EXEMPLOS DA UTILIZAÇÃO DAS

      ...

      CLASSES
      Âncora
      exemplos
      exemplos

      Abaixo segue o exemplo de uma UPC utilizado grande parte dos métodos das classes do utilitário:Xxxxxxxx

      Bloco de código
      languagetext
      titleExemplo UPC
      linenumberstrue
      // Indica ao programa onde estão as Classes
      USING PROGRESS.json.ObjectModel.*. // Classes da Progress
      USING com.totvs.framework.po.*.    // Classes do Utilitário
       
      // Parâmetros recebidos pela UPC
      DEF INPUT        PARAM pEndPoint AS CHAR       NO-UNDO.
      DEF INPUT        PARAM pEvent    AS CHAR       NO-UNDO.
      DEF INPUT        PARAM pAPI      AS CHAR       NO-UNDO.
      DEF INPUT-OUTPUT PARAM jsonIO    AS JsonObject NO-UNDO.
         
      // Define as variáveis que irão representar as Classes
      DEF VAR oCustPages   AS CustomPages    NO-UNDO.
      DEF VAR oCustFields  AS CustomFields   NO-UNDO.
      DEF VAR oCustActions AS CustomActions  NO-UNDO.
      DEF VAR oCustRecords AS CustomRecords  NO-UNDO.
      DEF VAR oCustMsgs    AS CustomMessages NO-UNDO.
      
      // Variáveis axuliáresauxiliares
      DEF VAR oFields     AS JsonArray  NO-UNDO.
      DEF VAR oField      AS JsonObject NO-UNDO.
      DEF VAR oAction     AS JsonObject NO-UNDO.
      DEF VAR vValorAtual AS CHARACTER  NO-UNDO.
      DEF VAR vValorAjust AS CHARACTER  NO-UNDO.
      DEF VAR vValorMark  AS LOGICAL    NO-UNDO.
      
      // Evento de Busca do Metadata da Tela de Lista
      IF pEndPoint = "getMetaData" AND pEvent = "list" THEN DO:
      
          // Instância as Classes necessárias
          oCustPages   = NEW CustomPages(CustomOrig:ORIG_METADATA,   jsonIO).
          oCustFields  = NEW CustomFields(CustomOrig:ORIG_METADATA,  jsonIO).
          oCustActions = NEW CustomActions(CustomOrig:ORIG_METADATA, jsonIO).
      
          // Altera o Título da Página
          oCustPages:setPageTitle(oCustPages:getPageTitle() + " - ALTERADO").
         
          // Altera a propriedade para salvar o Filtro da busca Avançada
          oCustPages:setPageProperty("keepfilters", TRUE).
              
          // Altera o label da coluna "FIFO" para "FIFO-ALT"
          oCustFields:setFieldLabel("enableFIFOInPurchaseReq", "FIFO-ALT").
              
          // Inclui uma coluna chamada: "Cópia Usuário"
          ASSIGN oField = oCustFields:addField("userCopy", "Cópia Usuário", FieldType:STRING).
          // Inclui a nova coluna no Gerenciador de Colunas
          IF oField <> ? THEN
              oField:ADD("allowColumnsManager", TRUE).
              
          // Retira a Ação Padrão de "Excluir" da Tabela    
          oCustActions:setAction("remove", FALSE).
            
          // Retira a Ação Padrão de "Cópia" da Tabela
          oCustActions:removeAction("duplicate").
          
          // Faz a Ação Padrão de Visualizar abrir a tela de Edição
          oCustActions:setAction("detail", oCustActions:getActionCharacter("edit")).
          
          // Inclui uma nova Ação Customizada no Pagina chamada "Atz Dados" que chama uma EndPoint
          oCustActions:addPageCustomAction(CustomActions:TYPE_ENDPOINT, "Atz Dados", "http://server01:3000/atzDados").
          
          // Inclui uma nova Ação Customizada no Pagina chamada "Google" que chama uma Rota
          oCustActions:addPageCustomAction(CustomActions:TYPE_ROUTE, "Google", "http://www.google.com", chama uma Rota
          oCustActions:addPageCustomAction(CustomActions:TYPE_ROUTE, "Google", "http://www.google.com",
                                           "po-icon po-icon-device-desktop").
          
          // Inclui o icone de Refresh na Ação Customizada "Atz Dados" da Pagina
          oCustActions:setPageCustomActionProperty("Atz Dados", "icon", "po-icon po-icon po-icon-refresh").
          
          // Altera o Endereço da primeira Ação Customizada da Pagina
          oAction = oCustActions:getPageCustomAction(1).
          IF oAction <> ? THEN
              oAction:set("action", "http://newserver:8080/customer").
          
          // Elimina a Ação Customizada chamada "Doctos" da Pagina
          oCustActions:removePageCustomAction("Doctos").
      
          // Inclui uma nova Ação Customizada no Tabela chamada "Bloqueia" que chama uma EndPoint
          oCustActions:addTableCustomAction(CustomActions:TYPE_ENDPOINT, "Bloqueia", "http://server01:3000/block",
                                            "po-icon po-icon po-icon-refresh").
          
          // Inclui uma nova Ação Customizada no Tabela chamada "Det Adicional" que chama uma Rota
          oCustActions:addTableCustomAction(CustomActions:TYPE_ROUTE, "Det Adicional",
                                            "http://newserver:8080/dts/customer/detail").
          
          // Elimina a Ação Customizada chamada "Relacto" da Pagina
          oCustActions:removeTableCustomAction("Relacto").
      
          // Retira as Classes da memória
          DELETE OBJECT oCustPages   NO-ERROR.
          DELETE OBJECT oCustFields  NO-ERROR.
          DELETE OBJECT oCustActions NO-ERROR.
      END.
      
      // Evento de Busca do Metadados da Tela de Novo/Editar
      IF pEndPoint = "getMetaData" AND (pEvent = "new" OR pEvent = "edit") THEN DO:
      
          // Instância as Classes necessárias
          oCustFields = NEW CustomFields(CustomOrig:ORIG_METADATA, jsonIO).
      
          // Desabilita o campo "Atualizar com erro de duplicata" (Aba: Atualização recebimento fiscal)
          oCustFields:setDisableField("updatesWithDuplicateError", "fieldsUpdateFiscalConfigurations").
          
          // Habilita o campo "Unidade negócio" (Aba: Digitação/Geração)
          oCustFields:setEnableField("enableBusinessUnit", "fieldsTypingEnableDisable").
      
          // Esconde o campo "Desconto item"
          oCustFields:setHideField("itemDiscount").
      
          // Mostra o campo "Geração nota crédito a pagar"
          oCustFields:setShowField("creditNoteGeneration").
      
          // Para o campo "Sequência dos itens" mostrar "Ligado/Desligado" ao invés de "Ativado/Desativado"
          IF oCustFields:getFieldPropertyCharacter("enableSequence", "type", "fieldsTypingEnableDisable") = "boolean" THEN DO:
              oCustFields:setFieldProperty("enableSequence", "booleanTrue",  "Ligado",    "fieldsTypingEnableDisable").
              oCustFields:setFieldProperty("enableSequence", "booleanFalse", "Desligado", "fieldsTypingEnableDisable").
          END.
          
          // Pegua a quantidades de campos do agrupador "Impostos" e joga no label do campo "Total"
          ASSIGN oFields = oCustFields:getFields("fieldsTax")
                 oField  = oCustFields:getField("totalTax", "fieldsTax").
          IF oFields <> ? AND oField <> ? THEN
              oField:SET("label", "Total (" + string(oFields:LENGTH) + ")").
       
          // Colocar o Campo "Estado (UF)" depois do campo "Baixa estoque"
          oCustFields:changeFieldOrder("enableState", "enableStockMovement").
          
          // Coloca o campo "CPF" como sendo o primeiro campo do Formulário
          oCustFields:changeFieldOrder("cpf", YES).
       
          // Indica que, ao alterar o campo "Caminho completo do executável GZIP",
          // deverá chamar o validateField da API-REST do Produto (Aba: Configurações)
          oCustFields:setFieldValidate("execGZIPProgram", pAPI, "fieldsTypingConfigurations").
       
          // Indica que, ao alterar o campo "Código tributação ICMS", 
          // deverá chamar o validateForm da API-REST do Produto (Aba: Digitação/Geração)
          oCustFields:addValidateFields("enableICMSTaxationCode").
      
          // Retira as Classes da memória
          DELETE OBJECT oCustFields NO-ERROR.
      END.
      
      // Evento de Busca dos Registros da Tela de Lista
      IF pEndPoint = "findAll" AND pEvent = "findAll" THEN DO:
      
          // Instância as Classes necessárias
          oCustRecords = NEW CustomRecords(CustomOrig:ORIG_GET_ALL, jsonIO).
          
          // Indica que dever ser executada a PI "pi_altera_registros" para realizar a alteração nos registros
          oCustRecords:updateRecords(THIS-PROCEDURE, "pi_altera_registros").
      
          // Retira as Classes da memória
          DELETE OBJECT oCustRecords NO-ERROR.
      END.
      
      // PI que será executada para cada registro da Tabela
      PROCEDURE pi_altera_registros:
          DEF INPUT PARAM oItem AS JsonObject NO-UNDO.
      
          // Atualiza a coluna "Cópia Usuário" com o valor da coluna "Usuário"
          oItem:ADD("userCopy", oItem:getCharacter("userCode")).
      
          // Altera o conteúdo da coluna "Nome", concatenado: "- Alterado"
          oItem:SET("userName", oItem:getCharacter("userName") + " - Alterado").
      END PROCEDURE.
      
      // Evento de Busca de um Registro da tela de Edição
      IF pEndPoint = "findById" AND pEvent = "findById" THEN DO:
      
          // Instância as Classes necessárias
          oCustFields = NEW CustomFields(CustomOrig:ORIG_GET_RECORD, jsonIO).
      
          // Altera o valor da coluna "Variação máxima data emissão" para "888" (Aba: Digitação/Geração)
          oCustFields:setFieldValue("variationIssuing", 888).
      
          // Retira as Classes da memória
          DELETE OBJECT oCustFields NO-ERROR.
      END.
      
      // Evento de Alteração de Campo
      IF pEndPoint = "validateField" AND pEvent = "validateField" THEN DO:
      
          // Instância as Classes necessárias
          oCustFields = NEW CustomFields(CustomOrig:ORIG_VLD_FIELD, jsonIO).
      
          // Se alterar o campo "Caminho completo do executável GZIP" (Aba: Digitação/Geração):
          // - Muda o conteúdo para minísculo
          // - Retira os acentos
          // - Se retirar os acentos, muda o label para "Caminho completo do executável GZIP (AJUST)"
          IF oCustFields:isChangedField("execGZIPProgram") THEN DO:
      
              ASSIGN vValorAtual = oCustFields:getFieldValueCharacter("execGZIPProgram").
      
              IF vValorAtual <> ? THEN DO:
                  ASSIGN vValorAjust = LC(vValorAtual)
                         vValorAjust = REPLACE(vValorAjust, "á", "a")
                         vValorAjust = REPLACE(vValorAjust, "é", "e")
                         vValorAjust = REPLACE(vValorAjust, "í", "i")
                         vValorAjust = REPLACE(vValorAjust, "ó", "o")
                         vValorAjust = REPLACE(vValorAjust, "ú", "u")
                         vValorAjust = REPLACE(vValorAjust, "ã", "a")
                         vValorAjust = REPLACE(vValorAjust, "õ", "o")
                         vValorAjust = REPLACE(vValorAjust, "ç", "c").
      
                  oCustFields:setFieldValue("execGZIPProgram", vValorAjust).
      
                  IF NOT vValorAjust MATCHES(vValorAtual) THEN
                      oCustFields:setFieldLabel("execGZIPProgram", "Caminho completo do executável GZIP (AJUST)").
                  ELSE
                      oCustFields:setFieldLabel("execGZIPProgram", "Caminho completo do executável GZIP").
              END.
          END.
      
          // Retira as Classes da memória
          DELETE OBJECT oCustFields NO-ERROR.
      END.
      
      // Evento de Alteração de Formulário
      IF pEndPoint = "validateForm" AND pEvent = "validateForm" THEN DO:
      
          // Instância as Classes necessárias
          oCustFields = NEW CustomFields(CustomOrig:ORIG_VLD_FORM, jsonIO).
      
          // Se alterar o campo “Código tributação ICMS” (Aba: Digitação/Geração): 
          // - Se "sim": desabilita o campo “Percentual redução ICMS” e muda o campo "Alíquota ICMS" para "sim", 
          // - Se "não": faz ao contrário
          IF oCustFields:isChangedField("enableICMSTaxationCode") THEN DO:
      
              ASSIGN vValorMark = oCustFields:getFieldValueLogical("enableICMSTaxationCode").
              
              IF vValorMark <> ? THEN DO:
                  oCustFields:setFieldProperty("enableICMSReductionPercentage", "disabled", vValorMark).
                    
                  oCustFields:setFieldValue("enableICMSRate", vValorMark).
              END.
          END.
      
          // Retira as Classes da memória
          DELETE OBJECT oCustFields NO-ERROR.
      END.
      
      // Evento de Alteração de Registro
      IF pEndPoint = "update" AND pEvent = "beforeUpdate" THEN DO:
      
          // Instância as Classes necessárias
          oCustFields = NEW CustomFields(CustomOrig:ORIG_UPDATE_RECORD,   jsonIO).
          oCustMsgs   = NEW CustomMessages(CustomOrig:ORIG_UPDATE_RECORD, jsonIO).
      
          // Valida se o campo "Caminho completo do executável GZIP" foi informado, se não foi, retorna uma mensagem de Erro
          ASSIGN vValorAtual = oCustFields:getFieldValueCharacter("execGZIPProgram"). 
          IF vValorAtual = "" OR vValorAtual = ? THEN
              jsonIO = oCustMsgs:createMessageError(1, "Caminho completo do executável GZIP OBRIGATÓRIO", 
                       "O campo 'Caminho completo do executável GZIP' deve ser informado, não pode ser branco !").
          
          // Retira as Classes da memória
          DELETE OBJECT oCustFields NO-ERROR.
          DELETE OBJECT oCustMsgs   NO-ERROR.
          
          // Indica que não deve ser Salvo a Alteração do Registro
          IF vValorAtual = "" OR vValorAtual = ? THEN
              RETURN "NOK".
      END.
      
      RETURN "OK".

      ...