Á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. XXXXX
    1. Xxxxxx
    2. Xxxxxx
  3. XXXX
    1. Xxxxx
    2. Xxxxxx
  4. UTILIZAÇÃO DO UTILITÁRIO
  5. CLASSES
    1. CustomOrig
    2. CustomPages
    3. CustomFields
    4. CustomActions
    5. CustomRecords
    6. CustomMessages
  6. EXEMPLOS DA UTILIZAÇÃO DAS CLASSESXXXXXXX

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.

As classes estão dividas conforme a parte que será customizada, por exemplo, para alterar campos do formulário, será deve ser utilizada a classe CustomFields, para alterar as ações, será deve ser utilizada a CustomActions, e assim por diante. Mas, todas elas

Para utilizá-las, é necessário informar o caminho onde estão disponíveis. Portanto, deve ser incluída a linha de comando abaixo no início da UPC:

Bloco de código
languagetext
USING com.totvs.framework.po.*.

Todas as classes seguem o mesmo padrão de utilização e recebem os mesmos parâmetros, conforme descrito abaixo:

  • 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
    pOrigin: Local/Origem onde está sendo utilizado a Classe
    • . Ver detalhes a seguir no descritivo da classe: CustomOrig;
    pObjParam
    • jsonIO (JsonObject):
    Parâmetros recebido
    • Informações/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.

Abaixo segue um exemplo da utilização da conforme exemplo abaixo da classe "CustomFields", como o objetivo de desabilitar um campo do Formulário de Inclusão/Edição:

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

// Define a variável que irá representar a Classe
DEF VAR oCustFields AS CustomFields Parâmetros recebidos pela UPC
DEF INPUT        PARAM pEndPoint AS CHAR       NO-UNDO.

// Instância a Classe passando o ponto que será customizado (evento) e Json de informações recebido na UPC
oCustFields = NEW CustomFields(CustomOrig:ORIG_METADATA, jsonIO).

// Tela Editar: Alterar o valor da coluna "Variação máxima data emissão" para "888" (Aba: Digitação/Geração)

DELETE OBJECT oCustFields NO-ERROR.

---------------------
Construção das Classe
---------------------

...

Xxxxxxxx

...

Xxxxxxxx

------------------
CLASSE: CustomOrig: Informar o Local/Origem onde está sendo utilizado a Classe
------------------

  • CustomOrig:ORIG_METADATA - Método de manipulação do Metadata;
  • CustomOrig:ORIG_VLD_FORM - Método de manipulação do validateForm;
  • CustomOrig:ORIG_VLD_FIELD - Método de manipulação do validateField;
  • CustomOrig:ORIG_GET_RECORD - Método de manipulação na busca de um registro;
  • CustomOrig:ORIG_GET_ALL - Método de manipulação na busca de vários registros;
  • CustomOrig:ORIG_CREATE_RECORD - Método de criação de um registro;
  • CustomOrig:ORIG_UPDATE_RECORD - Método de alteração de um registro;
  • CustomOrig:ORIG_DELETE_RECORD - Método de eliminação de um registro.

------------------
CLASSE: CustomPage: Customizações da Página
------------------

...

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 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/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:

  • CustomOrig:ORIG_METADATA - Utilizar nos pontos relacionados a alterações no Metadata da tela HTML;
  • CustomOrig:ORIG_VLD_FORM - Utilizar nos pontos relacionados ao evento de "validateForm" (quando algum campo do formulário é alterado);
  • CustomOrig:ORIG_VLD_FIELD - Utilizar nos pontos relacionados ao evento de "validateField" (quando um determinado campo é alterado);
  • CustomOrig:ORIG_GET_RECORD - Utilizar nos pontos relacionados a busca de um determinado registro;
  • CustomOrig:ORIG_GET_ALL - Utilizar nos pontos relacionados a busca de várias registros;
  • CustomOrig:ORIG_CREATE_RECORD - Utilizar nos pontos relacionados a criação de um registro;
  • CustomOrig:ORIG_UPDATE_RECORD - Utilizar nos pontos relacionados a alteração de um registro;
  • CustomOrig:ORIG_DELETE_RECORD - 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.

...

setPageTitle ( pCodTitle )

Parâmetros:

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

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

...

getPageTitle ( )

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

...

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 Propriedade.

...

getPagePropertyCharacter ( pCodProperty )

getPagePropertyInteger ( pCodProperty )

getPagePropertyDecimal ( pCodProperty )

getPagePropertyLogical ( pCodProperty )

Parâmetros:

  • pCodProperty (CHARACTER): Propriedade.

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

...

--------------------
CLASSE: CustomFields: Customizações de Campos
--------------------

MétodoDescriçãoExemplo

setFieldLabel ( pCodField , pCodLabel [ , pGroupId ] )

Parâmetros:

  • pCodField (CHARACTER): Código do atributo;
  • pCodLabel (CHARACTER): 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.

setDisableField ( pCodField [ , pGroupId ] )

Parâmetros:

  • 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 desabilitar alterar o atributoTítulo.

Desabilita um AtributoAltera o Titulo da página.

setEnableField ( pCodField [ , pGroupId ] )

Parâmetros:

  • 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.
oCustPages:setPageTitle("Clientes Prime").

getPageTitle ( )

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 setHideField ( pCodField [ , pGroupId ] )

Parâmetros:

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

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

Esconde um Atributo.

setShowField ( pCodField [ , pGroupId ] )

Parâmetros:

  • 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 apresentar o atributo.

Mostra um Atributo.

alterar a Propriedade.

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

getPagePropertyCharacter ( pCodProperty )

getPagePropertyInteger ( pCodProperty )

getPagePropertyDecimal ( pCodProperty )

getPagePropertyLogical ( pCodProperty )

Parâmetros:

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

Parâmetros:

pCodField (CHARACTER): Código do atributo;

  • pCodProperty (CHARACTER): Propriedade que deve ser alterada;pCodValue .

Retorno (CHARACTER,INTEGER,DECIMAL,LOGICAL):

Novo valor;
  • 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 propriedade.

    Altera uma propriedade de um Atributo.

    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 [ ,

    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 pCodLabel (CHARACTER): PropriedadeNovo 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 (CHARACTER,INTEGER,DECIMAL,LOGICAL): Valor da PropriedadeIndicativo se foi possível alterar o Label.

    Retorna Altera o valor Label de uma propriedade de um Atributocampo.
    Exemplo1:
    oCustFields:setFieldLabel("enableFIFOInPurchaseReq",
    "FIFO-ALT").

    Exemplo2:
    oCustFields:setFieldLabel("consistsUnitPrice",
                         "Consistir preço único",
    "fieldsTypingValidations").

    setDisableField ( pCodField [ , pGroupId ] )

    Parâmetros:

    • pCodField (CHARACTER): Código do campo

    getFields ( [ pGroupId ] )

    Parâmetros:

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

    Retorno (JsonArray): Lista de Atributos.

    Retorna um JsonArray que representa a lista de Atributos.

    getField ( pCodField [ , pGroupId ] )

    Parâmetros:

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

    Retorno (JsonObjectLOGICAL): Um atributoIndicativo se foi possível desabilitar o campo.

    Retorna um JsonObject que representa um Atributo.Desabilita um campo.
    Exemplo1:
    oCustFields:setDisableField("variationIssuing").

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

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

    Parâmetros:

    • pCodField (CHARACTER): Código do Atributocampo;pCodLabel
    • pGroupId (CHARACTER): Label do Atributo;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 habilitar o campo.

    Habilita um campo.
    Exemplo1:
    oCustFields:setEnableField("acceptableTaxDifference").

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

    setHideField ( pCodField [ , pGroupId ] )

    Parâmetros:

    • pCodField (CHARACTER): Código do campo;
    • pGroupId (CHARACTER): Agrupador onde o campo está contido. É opcional, se
    • pCodType (CHARACTER): Tipo do Atributo (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 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 (JsonObjectLOGICAL): Atributo IncluídoIndicativo se foi possível esconder o campo.

    Incluir Esconde um novo Atributocampo.
    Exemplo1:
    oCustFields:setHideField("itemDiscount").

    Exemplo2:
    oCustFields:setHideField("defaultSpeciesExpenses",
    "fieldsTypingDuplicates").

    setShowField ( pCodField [ , pGroupId ] )

    Parâmetros:

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

    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 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 ordemapresentar o campo.

    Altera a Ordem de um Atributo.Mostra um campo.
    Exemplo1:
    oCustFields:setShowField("creditNoteGeneration").

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

    setFieldProperty ( pCodField , pCodProperty , pCodValue

    setFieldValidate ( pCodField , pCodProg [ , pGroupId ] )

    setFieldValidateCustom ( pCodField , pEndpoint [ , pGroupId ] )

    Parâmetros:

    • pCodField (CHARACTER): Código do atributocampo;
    • pCodProg pCodProperty (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;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 completoPropriedade 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 incluir alterar a propriedade no atributo.

    Incluir a propriedade 'validate' no Atributo (monitora a alterado do campo - evento validateField).

    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.

    Altera uma propriedade de um campo.
    Exemplo1:
    oCustFields:setFieldProperty("itemDiscount",
    "required",
    TRUE).

    Exemplo2:
    oCustFields:setFieldProperty("enableSequence",
    "booleanTrue",
    "Ligado",
      "fieldsTypingEnableDisable").

    getFieldPropertyCharacter ( pCodField , pCodProperty [ , pGroupId ] )

    getFieldPropertyInteger ( pCodField , pCodProperty [ , pGroupId ] )

    getFieldPropertyDecimal ( pCodField , pCodProperty [ , pGroupId ] )

    getFieldPropertyLogical ( pCodField , pCodProperty [ , pGroupId ] )

    isChangedField ( pCodField )

    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).

    getReturnRoot ( )

    Retorno (JsonObject): Root de retorno.

    Retorno um JsonOject que representa o Root de retorno (eventos ValidateForm e ValidateField).

    getFieldValueCharacter ( pCodField )

    getFieldValueInteger ( pCodField )

    getFieldValueDecimal ( pCodField )

    getFieldValueLogical ( pCodField )

    getFieldValueDate ( pCodField )

    getFieldValueJsonObject ( pCodField )

    getFieldValueJsonArray ( pCodField )

    Parâmetros:

    • pCodField (CHARACTER): Código do atributo.campo;
    Retorno
    • pCodProperty (CHARACTER
    ,INTEGER,DECIMAL,LOGICAL,DATE,JsonObject,JsonArray): Valor do atributo.
    Retorna o valor de um Atributo.
    • ): Propriedade;
    • pGroupId (CHARACTER): Agrupador onde o campo está contido. É opcional, se não for informado, será considerado o agrupador padrão "fields".

    Retorno

    setFieldValue ( pCodField , pCodValue )

    Parâmetros:

  • pCodField (CHARACTER): Código do atributo;
  • pCodValue

    (CHARACTER,INTEGER,DECIMAL,LOGICAL

    ,DATE

    ):

    Novo valor.

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

    Altera o valor de um Atributo.

    getFieldValues ( )

    Retorno (JsonObject): Valores do registro.

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

    ---------------------
    CLASSE: CustomActions: Customizações de Ações da Página e da Tabela
    ---------------------

    ...

    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.

    ...

    getActionCharacter ( pCodAction )

    getActionLogical ( pCodAction )

    Parâmetros:

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

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

    ...

    removeAction ( pCodAction )

    Parâmetros:

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

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

    ...

    getActions ( )

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

    ...

    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.

    ...

    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.

    ...

    getPageCustomAction ( 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 Página.

    ...

    addPageCustomAction ( pNumType , pCodLabel , pCodAddress [ , pCodIcon ] )

    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.

    Retorno (JsonObject): Ação Customizada de Página Incluída.

    ...

    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.

    ...

    getPageCustomActions ( )

    Retorno (JsonArray): 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 (CHARACTER): Propriedade que deve ser alterada;
    • pCodValue (CHARACTER,INTEGER,DECIMAL,LOGICAL): Novo valor.

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

    ...

    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.

    ...

    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.

    ...

    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.

    ...

    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.

    ...

    getTableCustomActions ( )

    Retorno (JsonArray): 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.

    ...

    --------------------
    CLASSE: CustomRecord: Customizações de Registros
    --------------------

    ...

    getEntityKeyCharacter ( )

    getEntityKeyInteger ( )

    Retorno (CHARACTER,INTEGER): Chave do registro.

    ...

    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.

    Valor da Propriedade.

    Retorna o valor de uma propriedade de um campo.
    Exemplo1:
    ASSIGN vOrder =
    oCustFields:getFieldPropertyInteger("defaultDuplic",
    "order").
    ... Faz algo com a informação

    Exemplo2:
    ASSIGN vType =
    oCustFields:getFieldPropertyCharacter("enableSequence",
    "type",
    "fieldsTypingEnableDisable").
    ... Faz algo com a informação

    getFields ( [ pGroupId ] )

    Parâmetros:

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

    Retorno (JsonArray): Lista de campos.

    Retorna um JsonArray que representa a lista de campos.
    Exemplo1:
    DEF VAR oFields AS JsonArray NO-UNDO.
    ASSIGN oFields = oCustFields:getFields().
    IF oFields <> ? AND oFields:LENGTH > 10 THEN ...

    Exemplo2:
    DEF VAR oFields AS JsonArray NO-UNDO.
    ASSIGN oFields = oCustFields:getFields("fieldsTax").
    IF oFields <> ? AND oFields:LENGTH <> 0 THEN ...

    getField ( 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 (JsonObject): Um campo.

    Retorna um JsonObject que representa um campo.
    Exemplo1:
    DEF VAR oField AS JsonObject NO-UNDO.
    oField = oCustFields:getField("totalTax",
    "fieldsTax").
    IF oField <> ? THEN
    oField:ADD("allowColumnsManager", 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 campo;
    • pCodLabel (CHARACTER): Label do campo;
    • pCodType (CHARACTER): Tipo do 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 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.
    • pGroupId (CHARACTER): Agrupador onde o campo está contido. É opcional, se não for informado, será considerado o agrupador padrão "fields".

    Retorno (JsonObject): campo Incluído.

    Incluir um novo campo.
    Exemplo1:
    ASSIGN oField = oCustFields:addField("userCopy",
    "Cópia Usuário",
    FieldType:STRING).

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

    Exemplo3:
    ASSIGN oField = oCustFields:addField("datAdmin",
    "Data Admissão",
    FieldType:DATE,
    "enableSequence",
    "fieldsTypingEnableDisable").

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

    Parâmetros:

    • pCodField (CHARACTER): Código do campo;
    • 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.
    • 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 ordem.

    Altera a Ordem de um campo.
    Exemplo1:
    oCustFields:changeFieldOrder("name").

    Exemplo2:
    oCustFields:changeFieldOrder("cpf",
    TRUE).

    Exemplo3:
    oCustFields:changeFieldOrder("enableState",
    "enableStockMovement",
    "fieldsTypingEnableDisable").

    setFieldValidate ( pCodField , pCodProg [ , pGroupId ] )

    setFieldValidateCustom ( pCodField , pEndpoint [ , pGroupId ] )

    Parâmetros:

    • pCodField (CHARACTER): Código do 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",
    pAPI).

    Exemplo2:
    oCustFields:setFieldValidate("execGZIPProgram",
    pAPI,
    "fieldsTypingConfigurations").

    Exemplo3:
    oCustFields:setFieldValidateCustom("receiveVendorOrder",
    "/api/cdpcus/v1/orders").

    Exemplo4:
    oCustFields:setFieldValidateCustom("oderNumber",
    "http://server:3000/vdlOrder/validateField",
    "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.

    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 campo.

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

    Retorna o valor de um campo.
    Exemplo1:
    ASSIGN vValorAtual =
    oCustFields:getFieldValueCharacter("execGZIPProgram").
    ... Faz algo com a informação

    Exemplo2:
    ASSIGN vValorMark =
    oCustFields:getFieldValueLogical("enableICMSTaxCode").
    ... Faz 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:
    oCustFields:setFieldValue("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.


    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 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,
    "visible").
    ... Faz algo com a informação

    getPageCustomAction ( 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 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",
    "http://server:8080/doc").

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

    addPageCustomAction ( pNumType , pCodLabel , pCodAddress [ , pCodIcon ] )

    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, é opcional.

    Retorno (JsonObject): Ação Customizada de Página Incluída.

    Incluir uma nova Ação Customizada na Página.
    Exemplo1:
    oCustActions:addPageCustomAction(CustomActions:TYPE_ENDPOINT,
    "Atz Dados",
    "http://server01:3000/atzDados").

    Exemplo2:
    oCustActions:addPageCustomAction(CustomActions:TYPE_ROUTE,
    "Google",
    "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.
    Exemplo1:
    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 = oCustActions:getPageCustomActions().
    ... Faz algo com a informação

    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 (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 Tabela.
    Exemplo1:
    oCustActions:setTableCustomActionProperty("Atz Dados",
    "icon",
    "po-icon po-icon po-icon-refresh").

    Exemplo2:
    oCustActions:setTableCustomActionProperty(2,
    "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 =
    oCustActions:getTableCustomActionPropertyCharacter("Docto",
    "url").
    ... Faz algo com a informação

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

    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.

    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 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, é opcional;
    • pConcatKeys (LOGICAL): Indica se deve ser acrescentada a propriedade "concatKeys" na Ação, é opcional.

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

    Incluir uma nova Ação Customizada na Tabela.
    Exemplo1:
    oCustActions:addTableCustomAction(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:
    oCustActions:addTableCustomAction(CustomActions:TYPE_ENDPOINT,
    "Copiar",
    "http://server:3000/dts/customer/copy",
    "",
    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.

    oCustRecords:updateRecords(THIS-PROCEDURE, "pi_altera_registros").

    PROCEDURE pi_altera_registros:
    DEF INPUT PARAM oItem AS JsonObject NO-UNDO.
    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 criação de mensagens 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.
    DEF VAR vName AS CHARACTER NO-UNDO.

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

    IF vName = "" OR vName = ? THEN DO:
    jsonIO = oCustMsgs:createMessageError(1,
    "Nome OBRIGATÓRIO",
    "O nome do cliente é obrigatório !").
    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:

    ----------------------
    CLASSE: CustomMessages: Geração de Mensagens
    ----------------------

    ...

    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.

    ...

    ---------------------------------------------------------------------------

    UPC - EXEMPLOS

    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.*.
    
    DEF INPUT     po.*.   PARAM pEndPoint// ASClasses CHARdo Utilitário
     
    // Parâmetros recebidos pela  NO-UNDO.UPC
    DEF INPUT        PARAM pEventpEndPoint    AS CHAR       NO-UNDO.
    DEF INPUT        PARAM pAPI  pEvent    AS CHAR       NO-UNDO.
    DEF INPUT-OUTPUT PARAM jsonIO    AS JsonObject NO-UNDO.
    PARAM   
    DEF VAR v_log_mark      AS LOGICAL   NO-UNDO.
    DEF VAR v_cod_caminho   AS CHARACTER NO-UNDO.
    DEF VAR v_cod_cam_ajust AS CHARACTER NO-UNDO.
    
    DEF VAR oCustPages   AS CustomPagespAPI      AS CHAR       NO-UNDO.
    DEF INPUT-OUTPUT VARPARAM oCustFieldsjsonIO  AS CustomFields AS JsonObject NO-UNDO.
    DEF VAR oCustActions AS CustomActions  NO-UNDO.   
    // Define as variáveis que irão representar as Classes
    DEF VAR oCustPages oCustRecords  AS CustomRecordsCustomPages    NO-UNDO.
    DEF VAR oCustMsgsoCustFields  AS CustomFields AS CustomMessages NO-UNDO.
    
    DEF VAR oFieldsoCustActions AS JsonArrayCustomActions  NO-UNDO.
    DEF VAR oFieldoCustRecords AS ASCustomRecords JsonObject NO-UNDO.
    DEF VAR oActionoCustMsgs    AS JsonObjectCustomMessages NO-UNDO.
    
    // Evento de Busca do Metadados da Tela de Lista
    IF pEndPoint = "getMetaData" AND pEvent = "list" THEN DO:
    
        oCustPages   = NEW CustomPages(CustomOrig:ORIG_METADATA,   jsonIO).
        oCustFields  = NEW CustomFields(CustomOrig:ORIG_METADATA,  jsonIO).
        oCustActions = NEW CustomActions(CustomOrig:ORIG_METADATA, jsonIO).
    
        // Tela de Lista: Alterar o Título da Página
        oCustPages:setPageTitle(oCustPages:getPageTitle() + " - ALTERADO").
       Variáveis auxiliares
    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:
    
        // TelaInstância deas Lista:Classes Senecessárias
     estiver salvando o Filtro,oCustPages esconde o geranciador= de Colunas
    NEW CustomPages(CustomOrig:ORIG_METADATA,    IF oCustPages:getPagePropertyLogical("keepfilters") THENjsonIO).
        oCustFields  = NEW oCustPages:setPageProperty("hideColumnsManager", TRUECustomFields(CustomOrig:ORIG_METADATA,  jsonIO).
        oCustActions = NEW CustomActions(CustomOrig:ORIG_METADATA, jsonIO).
    
        // Tela de Lista: Alterar Altera o labelTítulo da coluna "FIFO" para "FIFO-ALT"Página
        oCustFields:setFieldLabel("enableFIFOInPurchaseReq", "FIFO-ALToCustPages:setPageTitle(oCustPages:getPageTitle() + " - ALTERADO").
            
        // TelaAltera dea Lista:propriedade Incluir uma coluna chamada: "Cópia Usuário" com o valor da coluna "Usuário"
        ASSIGN oField = oCustFields:addField("userCopy", "Cópia Usuário", FieldType:STRINGpara salvar o Filtro da busca Avançada
        oCustPages:setPageProperty("keepfilters", TRUE).
        IF oField <> ? THEN
        // Altera o label da  oField:ADD("allowColumnsManager", TRUEcoluna "FIFO" para "FIFO-ALT"
        oCustFields:setFieldLabel("enableFIFOInPurchaseReq", "FIFO-ALT").
            
        // TelaInclui uma ecoluna Listachamada: Retira a o Ação de "Excluir" da Tabela    
        oCustActions:setAction("remove", FALSE).
          "Cópia Usuário"
        ASSIGN oField = oCustFields:addField("userCopy", "Cópia Usuário", FieldType:STRING).
        // Inclui a nova coluna no Gerenciador de Colunas
        //IF TelaoField de<> Lista:? RetiraTHEN
     a Ação de "Cópia"
        oCustActionsoField:removeActionADD("duplicateallowColumnsManager", TRUE).
            
        // TelaRetira dea Lista:Ação FazPadrão ode Ação"Excluir" deda VisualizarTabela abrir a tela de Edição
        oCustActions:setAction("detailremove", oCustActions:getActionCharacter("edit"))FALSE).
          
        // Tela de Lista: Incluir uma nova opção no Pagina chamada "EndPoint" que chama uma EndPointRetira a Ação Padrão de "Cópia" da Tabela
        oCustActions:addPageCustomAction(CustomActions:TYPE_ENDPOINT, "Endpoint", "http://localhost:3000/page"removeAction("duplicate").
        
        // TelaFaz dea Lista:Ação IncluirPadrão umade novaVisualizar opçãoabrir noa Paginatela chamada "Rota" que chama uma Rotade Edição
        oCustActions:addPageCustomAction(CustomActions:TYPE_ROUTE, "RotasetAction("detail", "http://www.google.com", "po-icon po-icon-device-desktop")oCustActions:getActionCharacter("edit")).
        
        // Inclui Telauma denova Lista:Ação IncluirCustomizada ono iconePagina dechamada Monitor"Atz naDados" Açãoque "Endpoint"chama dauma PaginaEndPoint
        oCustActions:setPageCustomActionProperty("Endpoint"addPageCustomAction(CustomActions:TYPE_ENDPOINT, "iconAtz Dados", "po-icon po-icon-device-desktophttp://server01:3000/atzDados").
        
        // TelaInclui de Lista: Alterar o Endereço da Ação "Endpoint" da Pagina, incluíndo um "2" no final
        oAction = oCustActions:getPageCustomAction(1).uma nova Ação Customizada no Pagina chamada "Google" que chama uma Rota
        oCustActions:addPageCustomAction(CustomActions:TYPE_ROUTE, "Google", "http://www.google.com",
        IF oAction <> ? THEN
            oAction:set("action", oCustActions:getPageCustomActionPropertyCharacter("Endpoint", "action") + "2").
        
        // Testa de Lista: Elimina a Ação de Rota da Pagina"po-icon po-icon-device-desktop").
        oCustActions:removePageCustomAction("ROTA").
    
        // Tela de Lista: Incluir uma nova opção no Tabela chamada "EndPoint" que chama uma EndPointInclui o icone de Refresh na Ação Customizada "Atz Dados" da Pagina
        oCustActions:addTableCustomAction(CustomActions:TYPE_ENDPOINTsetPageCustomActionProperty("Atz Dados", "Endpointicon", "http://localhost:3000/tablepo-icon po-icon po-icon-refresh").
        
        // Tela de Lista: Incluir uma nova opção no Tabela chamada "EndPoint2" que chama uma EndPoint do Datasul
        oCustActions:addTableCustomAction(CustomActions:TYPE_ENDPOINT, "Endpoint2", oCustActions:getServerAddress(FALSE) + "\api\fin\v1\ 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").
        
        // TelaElimina dea Lista:Ação Incluir uma nova opção no Tabela Customizada chamada "RotaDoctos" que chama uma Rotada Pagina
        oCustActions:addTableCustomAction(CustomActions:TYPE_ROUTE, "Rota", "http://www.google.com"removePageCustomAction("Doctos").
        
        // Tela de Lista: Incluir // Inclui uma nova Ação opçãoCustomizada no Tabela chamada "Rota2Bloqueia" que chama uma RotaEndPoint
        oCustActions:addTableCustomAction(CustomActions:TYPE_ROUTEENDPOINT, "Rota2Bloqueia", "http://www.google.com", "po-icon po-icon-device-desktop").
    /server01:3000/block",
                    
        // Tela de Lista: Incluir o icone de Monitor na Ação "Endpoint" da Tabela
        oCustActions:setTableCustomActionProperty("Endpoint", "po-icon", "po-icon po-icon-device-desktoprefresh").
        
        // TelaInclui de Lista: Alterar o Endereço da Ação "Endpoint" da Table, incluíndo um "2" no final
        oAction = oCustActions:getTableCustomAction(1).
        IF oAction <> ? THEN
    uma nova Ação Customizada no Tabela chamada "Det Adicional" que chama uma Rota
        oCustActions:addTableCustomAction(CustomActions:TYPE_ROUTE, "Det Adicional",
                  oAction:set("action", oCustActions:getTableCustomActionPropertyCharacter("Endpoint", "action") + "2").
        
        // Testa de Lista: Elimina a Ação de Rota2 da Pagina
        oCustActions:removeTableCustomAction("Rota2"http://newserver:8080/dts/customer/detail").
    
        // oCustActions:getActions()
        // oCustActions:getPageCustomActions()
        // oCustActions:getTableCustomActions()
        Elimina a Ação Customizada chamada "Relacto" da Pagina
        // oCustRecords:getEntityKeyCharacter()
    oCustActions:removeTableCustomAction("Relacto").
    
        // oCustRecords:getEntityKeyInteger()
        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).
    
        // Tela Novo/Editar: DesabilitarDesabilita o campo "Atualizar com erro de duplicata" (Aba: Atualização recebimento fiscal)
        oCustFields:setDisableField("updatesWithDuplicateError", "fieldsUpdateFiscalConfigurations").
        
        // Tela Novo/Editar: HabilitarHabilita o campo "Unidade negócio" (Aba: Digitação/Geração)
        oCustFields:setEnableField("enableBusinessUnit", "fieldsTypingEnableDisable").
    
        // Tela Novo/Editar: Esconder Esconde o campo "Desconto item" (Aba: Digitação/Geração)
        oCustFields:setHideField("itemDiscount", "fieldsTypingEnableDisable").
    
        // Tela Novo/Editar: Mostrar umMostra o campo "Geração nota crédito a pagar" (Aba: Digitação/Geração)
        oCustFields:setShowField("creditNoteGeneration", "fieldsTypingEnableDisable").
    
        // Tela Novo/Editar: 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.
        
        // Tela Novo/Editar: Pegua a quantidades de campos do agrupador "Habitar/Desabilitar CamposImpostos" e joga no label odo campo "Sequência dos itensTotal"
        ASSIGN oFields = oCustFields:getFields("fieldsTypingEnableDisablefieldsTax").
        IF oFields <> ? THEN DO:
       oField     oField = oCustFields:getField("enableSequencetotalTax", "fieldsTypingEnableDisablefieldsTax").
        IF oFields <> ? IFAND oField <> ? THEN
                oField:SET("label", "SequênciaTotal dos itens (" + string(oFields:LENGTH) + ")").
        END.
     
        // Tela Novo/Editar: Colocar o Campo "Estado (UF)" depois do campo "Baixa estoque" (Aba: Digitação/Geração)
        oCustFields:changeFieldOrder("enableState", "enableStockMovement", "fieldsTypingEnableDisable").
        //oCustFields:changeFieldOrder("enableState", YES, "fieldsTypingEnableDisable"). // primeiro
        //oCustFields:changeFieldOrder("enableState",  NO, "fieldsTypingEnableDisable"). // último
     
        // Tela Novo/Editar: Ao alterar  Coloca o campo "Caminho completo do executável GZIP" (Aba: Digitação/Geração):
        // - Muda o conteúdo para minísculoCPF" como sendo o primeiro campo do Formulário
        // - Retira os acentosoCustFields:changeFieldOrder("cpf", YES).
     
        // -Indica Seque, retirarao osalterar acentos, muda o labelcampo para "Caminho completo do executável GZIP (AJUST)",
        // deverá chamar  oCustFields:setFieldValidate("execGZIPProgram", pAPI, "fieldsTypingConfigurations").o validateField da API-REST do Produto (Aba: Configurações)
        //oCustFields:setFieldValidateCustomsetFieldValidate("execGZIPProgram", "/api/rep/v1/userParameters/validateField"pAPI, "fieldsTypingConfigurations").
     
        // Tela Novo/Editar: AoIndica que, ao alterar o campo “Código"Código tributação ICMS” (Aba: Digitação/Geração): ICMS", 
        // - Se "sim": desabilita deverá chamar o campovalidateForm “Percentualda reduçãoAPI-REST ICMS”do eProduto muda o campo "Alíquota ICMS" para "sim", (Aba: Digitação/Geração)
        oCustFields:addValidateFields("enableICMSTaxationCode").
    
        // -Retira Se "não": faz ao contrário
        oCustFields:addValidateFields("enableICMSTaxationCode").
    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).
        
        // TelaIndica deque Lista:dever Incluirser umaexecutada colunaa chamada:PI "Cópia Usuáriopi_altera_registros" compara orealizar valora daalteração colunanos "Usuário"registros
        // Tela de Lista: Alterar o conteúdo da coluna "Nome", concatenado: "- Alterado"
        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 Umum 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).
    
        // Tela Editar: AlterarAltera 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 FormulárioCampo
    IF pEndPoint = "validateFormvalidateField" AND pEvent = "validateForm" THEN DO:
    
        oCustFields = NEW CustomFields(CustomOrig:ORIG_VLD_FORM, jsonIO).
    
        // Tela Novo/Editar: Ao 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", 
     "validateField" THEN DO:
    
        // Instância as Classes necessárias
        oCustFields = NEW CustomFields(CustomOrig:ORIG_VLD_FIELD, jsonIO).
    
        // - Se "não": faz ao contrário
        IF oCustFields:isChangedField("enableICMSTaxationCode") THEN DO:
    
    alterar o campo "Caminho completo do executável GZIP" (Aba: Digitação/Geração):
        // - Muda  ASSIGN v_log_mark = oCustFields:getFieldValueLogical("enableICMSTaxationCode").o conteúdo para minísculo
        // - Retira os acentos
        // - Se retirar IF v_log_mark <> ? THEN DO:
          os acentos, muda o label para "Caminho completo do executável GZIP (AJUST)"
        IF  oCustFields:setFieldPropertyisChangedField("enableICMSReductionPercentageexecGZIPProgram", "disabled", v_log_mark).) THEN DO:
    
            ASSIGN vValorAtual     = oCustFields:getFieldValueCharacter("execGZIPProgram").
    
            IF vValorAtual <>  oCustFields:setFieldValue("enableICMSRate", v_log_mark).? THEN DO:
            END.
        END.
    
    ASSIGN vValorAjust   // oCustFields:getReturnRoot().= LC(vValorAtual)
        // oCustFields:getFieldValues().
        
        DELETE OBJECT oCustFields NO-ERROR.
    END.
    
    // Evento de AlteraçãovValorAjust de Campo
    IF pEndPoint = "validateField" AND pEvent = "validateField" THEN DO:
    
        oCustFields = NEW CustomFields(CustomOrig:ORIG_VLD_FIELD, jsonIO).
    
    = REPLACE(vValorAjust, "á", "a")
              // Tela Novo/Editar: Ao alterar o campo "Caminho completo do executávelvValorAjust GZIP"= (Aba: Digitação/Geração):
    REPLACE(vValorAjust, "é", "e")
          //    - Muda o conteúdo para minísculo
        //vValorAjust - Retira os acentos
    = REPLACE(vValorAjust, "í", "i")
          // - Se retirar os acentos, muda o label para "Caminho completo do executávelvValorAjust GZIP= (AJUST)"REPLACE(vValorAjust, "ó", "o")
        IF oCustFields:isChangedField("execGZIPProgram") THEN DO:
    
                  ASSIGN v_cod_caminhovValorAjust = oCustFields:getFieldValueCharacter("execGZIPProgram").
    REPLACE(vValorAjust, "ú", "u")
            IF v_cod_caminho <> ? THEN DO:
          vValorAjust = REPLACE(vValorAjust,    ASSIGN v_cod_cam_ajust = LC(v_cod_caminho"ã", "a")
                       v_cod_cam_ajustvValorAjust = REPLACE(v_cod_cam_ajustvValorAjust, "áõ", "ao")
                       v_cod_cam_ajustvValorAjust = REPLACE(v_cod_cam_ajust(vValorAjust, "éç", "ec").
    
                oCustFields:setFieldValue("execGZIPProgram", vValorAjust).
    
          v_cod_cam_ajust = REPLACE(v_cod_cam_ajust, "í", "i")
      IF NOT vValorAjust MATCHES(vValorAtual) THEN
                 v_cod_cam_ajust = REPLACE(v_cod_cam_ajust, "ó   oCustFields:setFieldLabel("execGZIPProgram", "oCaminho completo do executável GZIP (AJUST)").
                 ELSE
                  v_cod_cam_ajust = REPLACE(v_cod_cam_ajust, "úoCustFields:setFieldLabel("execGZIPProgram", "uCaminho completo do executável GZIP").
            END.
        END.
    
        // Retira  v_cod_cam_ajust = REPLACE(v_cod_cam_ajust, "ã", "a")
                       v_cod_cam_ajust = REPLACE(v_cod_cam_ajust, "õ", "o")
                       v_cod_cam_ajust = REPLACE(v_cod_cam_ajust, "ç", "c").
    
                IF NOT v_cod_cam_ajust MATCHES(v_cod_caminho) THENas 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:setFieldLabelgetFieldValueLogical("execGZIPProgram", "Caminho completo do executável GZIP (AJUST)").enableICMSTaxationCode").
            
            IF vValorMark <> ? THEN DO:
           ELSE
         oCustFields:setFieldProperty("enableICMSReductionPercentage", "disabled", vValorMark).
             oCustFields:setFieldLabel("execGZIPProgram", "Caminho completo do executável GZIP").
    
                oCustFields:setFieldValue("execGZIPProgramenableICMSRate", v_cod_cam_ajustvValorMark).
            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).
    
        // Tela Editar: Valida se o campo "Caminho completo do executável GZIP" foi informado, se não foi, apresentaretorna uma mensagem de Erro
        ASSIGN vValorAtual IF= oCustFields:getFieldValueCharacter("execGZIPProgram"). = "" OR oCustFields:getFieldValueCharacter("execGZIPProgram")
        IF vValorAtual = "" OR vValorAtual = ? THEN DO:
            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.
        
        RETURN "NOK".
        END.// Indica que não deve ser Salvo a Alteração do Registro
        IF 
    vValorAtual = "" OR DELETEvValorAtual OBJECT= oCustFields NO-ERROR.? THEN
        DELETE OBJECT oCustMsgs   NO-ERRORRETURN "NOK".
    END.
    
    RETURN "OK".