Etapa de Editar Dados
As etapas de Editar dados fornecem uma região de formato livre em que você pode especificar comandos para controlar seu processamento de script.
Informe os comandos de script no campo Editar Texto de Dados. Clique no ícone adjacente para abrir uma janela que fornece mais espaço para definir a etapa de Editar Dados.
Em geral, a sintaxe disponível na edição de dados é semelhante aos comandos disponíveis nos tipos de etapa explícita. Entretanto, há alguns comandos disponíveis somente na edição de dados. Por exemplo, os dois comandos estruturados: For e If.
Os tópicos desta seção apresentam detalhes da sintaxe aceita no tipo de etapa de Editar Dados.
Conteúdo
Funções para Processar uma Lista
Declarar e Chamar Objetos Baseados em Esquema
Variáveis do Sistema e Variáveis Globais
Instruções performScript e transferControl
Instrução declareBOWithBOGroup
Comentários
É possível incluir comentários no seu script usando duas barras inclinadas (//) como os primeiros caracteres da etapa de Editar Dados. Exemplo:
//
// quit with error
//
if ("not(customer/securityEnabled)")
terminate with error (8000, 1001 %1="customer/id" %2='not allowed');
end-if;
Variáveis Temporárias
É possível declarar variáveis temporárias em todos os tipos de script. Elas são referenciadas por meio de um cifrão inicial ('$'). Note, no entanto, que o comportamento dessas variáveis muda de acordo com o tipo de script:
-
No caso dos Scripts do BPA (Assistente de Processo de Negócios), as variáveis temporárias de um script são mantidas para outro (consulte Instruções performScript e transferControl), assim sendo, é possível usar variáveis temporárias para estabelecer comunicação entre scripts do BPA.
-
Não é possível transferir variáveis temporárias de um script do BPA para um script de serviço ou plug-in. Só é possível transferir elementos de área de dados entre esses tipos de script.
-
No caso dos scripts de serviço e plug-in, as variáveis temporárias são mantidas apenas durante o ciclo de vida do script específico que as declarou. Isso significa que não é possível transferir variáveis temporárias entre scripts de plug-in e scripts de serviço, só é possível transferir variáveis globais, variáveis de contexto e elementos de área de dados entre esses tipos de script.
Declarando/Inicializando/Padronizando Variáveis Temporárias
Você precisa declarar ou inicializar uma variável temporária com um valor adequado antes de usá-la. Um método típico de declaração de variável é a simples movimentação de dados para ela com uma instrução move, por exemplo:
move "0" to $index;
Para scripts do BPA, como mencionado, é possível transferir variáveis temporárias de um script para outro. Assim, é comum referenciar em um BPA uma variável temporária que foi inicializada por um BPA anterior. No entanto, se por algum motivo uma variável temporária não tiver sido inicializada por um BPA anterior, a referência a ela causará um erro. Recomenda-se, portanto, o uso da instrução default, que inicializará as variáveis temporárias que ainda não foram criadas/inicializadas.
-
A seguinte instrução inicializará a variável temporária $InputAction se esta ainda não tiver sido inicializada:
default $InputAction;
-
A seguinte instrução definirá o valor da variável temporária $InputAction como 'read' se esta ainda não tiver sido inicializada:
default $InputAction as 'read';
Palavra-chave |
---|
add (adicionar) |
as |
asError |
bpa |
branch |
data |
declareBO |
declareBS |
declareDA |
declareMap |
declareSS |
default |
delete (excluir) |
edit |
element |
else |
end-edit |
end-for |
end-if |
error |
escape |
evaluate |
fastAdd |
fastUpdate |
for |
goto |
if |
in |
invokeBO |
invokeBS |
invokeMap |
invokeSS |
rótulo |
map |
move |
navigate |
navigateAndReloadDashboard |
null |
page |
performScript |
popup |
read |
readWithoutVersion |
replace |
suppress |
target |
terminate |
to |
transferControl |
update |
using |
warn |
with |
Variáveis de Contexto
Só há variáveis de contexto em scripts de serviço. Elas permanecem disponíveis durante o ciclo de vida do script e de todos os objetos chamados por ele. Assim sendo, é possível usar uma variável de contexto em um script de serviço para comunicar informações a um script de serviço de nível inferior ou a um esquema. Essas variáveis são referenciadas por dois cifrões iniciais ('$$').
Declarando/Inicializando/Padronizando Variáveis de Contexto
Você precisa declarar ou inicializar uma variável de contexto com um valor adequado antes de usá-la. Um método típico de declaração de variável é a simples movimentação de dados para ela com uma instrução move, por exemplo:
move 'context variable' to $$contextVariable;
Instrução move
A instrução move copia um valor de origem em um destino. A tabela a seguir apresenta a diversas opções de instrução move.
Instrução | Exemplo de Descrição | Exemplo de Sintaxe |
---|---|---|
Movimentação para Elemento move "xpath" to "xpath"; Observação: As expressões XPath são escritas entre aspas duplas.
|
Instrução move com referência XPath simples. |
|
Instrução move com função concatenate de XPath. |
|
|
Instrução move com função substring-before de XPath. |
|
|
Instrução move com função substring-after de XPath. |
|
|
Mover instrução com função substring de XPath. |
|
|
Mover para Elemento move 'literal' to "xpath"; Observação: Os valores literais são escritos entre aspas simples.
|
Mover instrução usando uma string literal. |
|
Movimentação para Elemento move 'Boolean' to "xpath"; |
Mover instrução usando um valor booliano como string literal. |
|
Movimentação de uma expressão, que resulta em um Valor Booliano. Observe que o filtro no exemplo está localizado em um nó de grupo. |
|
|
Movimentação para Grupo move "xpath" to "xpath"; |
Movimentação de um conjunto de elementos de um grupo para outro. O sistema corresponde o nível inicial de nomes do elemento e os nomes de grupos/listas do esquema de origem com o esquema de destino. Para listas e grupos, o comportamento padrão é mover todos os elementos dentro do(a) grupo/lista de origem para o(a) grupo/lista de destino, mesmo que não sejam definidos pelo(a) grupo/lista de destino. O serviço de negócios F1-MoveByName pode ser usado para controle mais granular da movimentação, sem ter que definir cada declaração de movimentação individualmente. |
Essa instrução equivale a esta:
|
Movimentação usando uma Variável Temporária |
Quando a movimentação é feita para uma variável temporária local, o valor da variável não é escrito entre aspas. move "xpath" to $variable; |
|
Quando a movimentação é feita a partir de uma variável temporária, o valor da variável é escrito entre aspas duplas. move "$variable" to “xpath”; |
|
|
Movimentação usando uma Variável de Contexto mover "xpath" para $$variable; move $$variable to “xpath”; |
As variáveis de contexto, sejam de origem ou destino, não são escritas entre aspas. |
|
Movimentação usando um Local Dinâmico move "xpath" | 'literal' to evaluate("xpath" | $variable); move evaluate("xpath" | $variable) to "xpath" | $variable; |
A instrução evaluate permite que o local de origem ou destino da movimentação seja derivado dinamicamente de um local de elemento de esquema ou variável. |
|
Movimentação de escape move escape("xpath" | $variable) to "xpath" | $variable; |
A movimentação de escape só está disponível para scripts de serviço e scripts de plug-in. A instrução escape procura conteúdo HTML no seu texto de origem e cria um escape, ou seja, substitui caracteres semelhantes ao HTML por caracteres especiais que não são incluídos na renderização HTML. Dessa forma, o conteúdo é exibido como texto simples quando faz parte de um elemento HTML. Observação: Só use essa função caso o texto deva ser exibido como parte de um elemento HTML e você suspeite que ele contenha caracteres semelhantes ao HTML que não devem ser renderizado como HTML ou até um HTML mal-intencionado. Se exibidos incorretamente por meio de um elemento não HTML, os caracteres especiais de escape seriam visíveis como parte do seu texto. Para obter mais informações sobre como definir um elemento para exibir conteúdo HTML, consulte Atributos e Funções de Mapa da IU.
|
|
Movimentação de null move null to "xpath"; |
É possível remover informações do documento de instância XML por meio uma sintaxe especial de move: 'null'. É possível especificar tanto um nome de nó na expressão XPath quanto um nome de grupo. Se você especificar um grupo, esse grupo e todos os filhos dele serão eliminados do processamento. |
Remover um nó e todos os filhos dele:
Remover todos os filhos de um nó de grupo com o sufixo '/*':
|
Instrução goto
A etapa de Editar Dados dá suporte à funcionalidade análoga ao tipo de etapa de Ir para. A sintaxe é goto label; – onde label representa outro local no campo Texto de Editar Dados (identificado por esse rótulo) ou outra etapa no script.
Veja a seguir um exemplo de navegação para outro local na mesma etapa identificada pelo rótulo addSpouse.
if ("string(parm/spouse/name) != $BLANK")
goto addSpouse;
end-if;
addSpouse: invokeBO 'Person' using "parm/spouse" for add;
Veja a seguir um exemplo de navegação para uma etapa diferente no mesmo script. A sequência de etapas é a referência usada como rótulo.
if ("string(parm/spouse/name) != $BLANK")
goto 110;
end-if;
.
.
.
110: invokeBO 'Person' using "parm/spouse" for add;
Instrução branch Condicional
A etapa de Editar Dados dá suporte à funcionalidade análoga ao tipo de etapa de Ramificação Condicional. A sintaxe é branch (“xpath”) goto label else label; – onde:
-
A condição XPath na instrução branch precisa ser avaliada com o valor booliano Verdadeiro ou Falso.
-
Os destinos das instruções goto e else são rótulos que representam outro local no campo Texto de Editar Dados (identificado por esse rótulo) ou outra etapa no script.
O exemplo a seguir usa rótulos para addSpouse e addAccount.
branch ("string(parm/spouse/name) != $BLANK") goto addSpouse else addAccount;
Instrução if
A instrução if é semelhante à instrução branch condicional. É possível usar qualquer uma delas para estruturar a lógica do seu script. Essa instrução pode incluir uma instrução else, mas deve sempre terminar com uma instrução end-if.
A sintaxe é if (“xpath”) else end-if;. A condição XPath precisa ser avaliada com o valor booliano Verdadeiro ou Falso. Veja a seguir alguns exemplos.
Exemplo em que XPath contém uma condição lógica simples.
if ("string(parm/spouse/name) != $BLANK")
//
// Create spouse since spouse name present
goto addSpouse;
else
//
// Create account without spouse
goto addAccount;
end-if;
Exemplo em que XPath contém uma condição complexa.
if ("string(parm/spouse/name) != $BLANK and string(parm/hasSpouse) = true or boolean(parm/requireSpouse)")
//
// Create spouse since spouse name present
goto addSpouse;
end-if;
Exemplo de um conjunto empilhado de instruções usado para avaliar vários valores possíveis de um campo.
if ("parm/rowCount = 0")
//
// no rows found
goto quit;
end-if;
if ("parm/rowCount = 1")
//
// one row found
goto process;
end-if;
if ("parm/rowCount > 1")
//
// more than one row found
goto quit;
end-if;
quit: terminate;
A linguagem XPath a seguir mostra um valor Booliano baseado na existência do nó. Neste exemplo, se o nó existe no documento de instância XML que está sendo processado, a instrução avalia a condição como Verdadeira. Se não for encontrado nenhum elemento, a instrução avaliará a condição como Falsa.
if ("boolean(parm/spouse/name)")
goto addSpouse;
else
//
// Create account without spouse
goto addAccount;
end-if;
if ("not(parm/spouse/name)")
//
// Create account without spouse
goto addAccount;
else
goto addSpouse;
end-if;
Instrução for
A instrução for cria uma lista de nós ou valores, dependendo da sua expressão XPath. Se você especificar um nó de lista, cada nó-filho dessa lista será disponibilizado no loop, assim como o conteúdo correspondente. Se você especificar um nó-filho diretamente, só será disponibilizada uma lista de valores no loop.
A sintaxe é for ($variable in "xpathList") end-for;. A condição XPath precisa ser avaliada com o valor booliano Verdadeiro ou Falso.
Os próximos exemplos se baseiam nesta amostra de esquema:
<schema>
<SAList type="list">
<id/>
<balance/>
</SAList>
<SAContributor type="list">
<id/>
</SAContributor>
</schema>
Exemplo especificando um nó de lista na expressão XPath, onde todos os nós-filho são disponibilizados para processamento.
move "0" to $AccountBalance;
move "0" to $index;
for ($SAList in "SAList")
move "$SAList/balance + $AccountBalance" to $AccountBalance;
//
// keep track of each SA contributing to the balance in the SA Contributor list
move "1 + $index" to $index;
move "$SAList/id" to "SAContributor[$index]/id";
end-for;
Exemplo especificando um nó-filho do nó de lista na expressão XPath. Só os valores desse nó são disponibilizados para processamento.
move "0" to $AccountBalance;
for ($SABalance in "SAList/balance")
move "$SABalance + $AccountBalance" to $AccountBalance;
end-for;
Exemplo mostrando que é possível usar um filtro para limitar as linhas selecionadas pelo loop de for.
move "0" to $AccountDebitBalance;
for ($SAList in "SAList[Balance>0]")
move "$SAList/balance + $AccountDebitBalance" to $AccountDebitBalance;
end-for;
Exemplo mostrando o uso de um filtro durante a especificação de nós-filho.
move "0" to $AccountCreditBalance;
for ($SABalance in "SAList[Balance<0]/balance")
move "$SABalance + $AccountCreditBalance" to $AccountCreditBalance;
end-for;
Processamento de Listas
Esta seção apresenta detalhes sobre o processamento de listas. Os exemplos desta seção referenciam o seguinte esquema:
<schema>
<parm type="group">
<name/>
</parm>
<Person type="group">
<names type="list">
<type/>
<name/>
</names>
</Person>
</schema>
Referenciando um Elemento de Lista. É possível mover um valor para uma instância de lista específica referenciando um nó de identificação dessa lista em um filtro. A sintaxe é move "xpath" to "xpathList[filter]/element"; – Exemplo:
move "parm/name" to "Person/names[type='main']/name";
Criando uma Instância de Lista. É possível usar uma anotação especial em uma instrução move de destino para indicar que deve ser criada outra instância de lista. O "+" indica ao processador do script que deve ser inicializada uma nova instância de lista para o elemento de destino. A sintaxe é move "xpath" to "+xpathList"; – Exemplo:
move "parm/name" to "Person/+names/name";
Excluindo uma Instância de Lista. É possível excluir uma entrada de lista XML do banco de dados movendo o atributo de ação 'delete' para o nome do elemento. Para o banco de dados excluir uma entrada de lista, é preciso que haja o atributo action="delete" no destino e uma interação subsequente de atualização de objeto de negócios. A sintaxe é move 'delete' to "xpathList@action"); – Exemplo:
if ("parm/action = 'd'")
move "0" to $index;
for ($CCList in "CCList")
move "1 + $index" to $index;
if ("$CCList/id = parm/id")
move 'delete' to "CCList[$index]@action";
goto update;
end-if;
end-for;
end-if;
Veja abaixo o XML resultante.
<root>
<CCList>
<id>9876538976</id>
<balance>309.98</balance>
</CCList>
<CCList action="delete">
<id>4321125899</id>
<balance>87.45</balance>
</CCList>
</root>
Funções para Processar uma Lista
O XPath fornece várias funções que são úteis para processar elementos de uma lista, incluindo count, sum e last.
Os próximos exemplos se baseiam nesta amostra de documento XML:
<xml>
<ft>
<type>bill</type>
<date>20100101</date>
<amt>30.30</amt>
<cat>tax</cat>
</ft>
<ft>
<type>adj</type>
<date>20100301</date>
<amt>20.20</amt>
<cat>int</cat>
</ft>
<ft>
<type>bill</type>
<date>20100201</date>
<amt>10.10</amt>
<cat>tax</cat>
</ft>
</xml>
Veja a seguir um exemplo da função sum. A sintaxe é move "sum(xpathList/element)" to $variable;. O exemplo soma o saldo total.
move "sum(ft/amt)" to $TotalBalance;
Veja a seguir um exemplo da função sum usando um filtro para obter um subtotal. O exemplo soma o saldo das entradas que têm a categoria 'imposto'.
move "sum(ft[cat='tax']/amt)" to $TaxBalance;
Veja a seguir um exemplo da função count. A sintaxe é move "count(xpathList)" to $variable;. O exemplo encontra a contagem do número de entradas de transação financeira na lista.
move "count(ft)" to $TranCount;
Veja a seguir um exemplo de 'last', que é usado para localizar a última entrada. A sintaxe é move "last(xpathList)" to $variable;. O exemplo encontra o último valor na lista de transações financeiras.
move "ft[last()]/amt" to $LastAmount;
Declarar e Chamar Objetos Baseados em Esquema
É possível chamar um objeto de negócios, um serviço de negócios ou um script de serviço na etapa de Editar Dados. Para dar suporte à chamada dinâmica, é possível declarar um nome de área de dados dinâmica.
O esquema que está sendo declarado pode ser de objeto de negócios (BO), serviço de negócios (BS), script de serviço (SS), área de dados (DA) ou mapa da interface do usuário. A instrução declare varia de acordo com o tipo do esquema, mas a sintaxe é análoga.
-
declareBO 'BO Name' | $variable | "xpath" as 'DynamicDataArea';
-
declareBS 'BS Name' | $variable | "xpath" as 'DynamicDataArea';
-
declareSS 'SS Name' | $variable | "xpath" as 'DynamicDataArea';
-
declareDA 'DA Name' | $variable | "xpath" as 'DynamicDataArea';
-
declareMap 'Map Name' | $variable | "xpath" as 'DynamicDataArea';
Quando você chama um BO, BS ou SS, o nome do objeto pode ser especificado como literal ou um valor contido em um elemento/uma variável. Para cada Chamada, é preciso fornecer uma referência XPath a um nome de grupo.
Ao chamar um objeto de negócios, é preciso fornecer uma ação. A sintaxe é invokeBO 'BO Name' | $variable | "xpath" using "xpath" for action;. Ações válidas:
-
read. Essa ação lê a visualização atual dos dados do objeto de negócios.
-
add. Essa ação adicionará o objeto, realizará uma leitura da visualização resultante do objeto de negócios e a retornará.
-
fastAdd. Esta ação adicionará o objeto, mas não realizará uma leitura ("read") subsequente para retornar a visualização resultante do objeto de negócios. Esta opção é melhor do que a "add" quando o objetivo é desempenho, caso não haja motivos para uma nova leitura do registro.
-
update. Essa ação atualizará o objeto, realizará uma leitura da visualização resultante do objeto de negócios e a retornará. A ação executa uma 'fusão' das informações especificadas no documento XML de solicitação da instrução invoke com os dados do objeto de negócios. Ela permite que o script só indique os elementos que estão sendo alterados.
-
fastUpdate. Esta ação atualizará o objeto, mas não realizará uma leitura ("read") subsequente para retornar a visualização resultante do objeto de negócios. Esta opção é melhor do que a "update" quando o objetivo é desempenho, caso não haja motivos para uma nova leitura do registro.
-
delete. Essa ação exclui o objeto.
-
replace. Essa ação é uma alternativa à ação update. A ação replace substitui completamente os dados do objeto de negócios pelas informações presentes no documento de solicitação. Normalmente, essa ação é usada quando um objeto de negócios contém uma lista, porque é mais fácil substituir todas as instâncias de uma lista do que tentar realizar uma fusão de lista, procedimento que exige uma lógica especial para excluir uma instância de lista explicitamente.
Observação: A ação replace é exigida durante o uso da funcionalidade de mapa da IU para Carregar um Arquivo CSV.Observação: No momento, a ação substituir ("replace") não é compatível com nenhum objeto de manutenção que seja mantido em uma página "fixa" que use uma lista de metáforas para exibir todos os registros na página de uma vez. Moeda é um exemplo desse tipo de página.
Exemplos:
invokeBO 'BusinessObject' using "dataArea" for fastAdd;
invokeBO $variableBO using "dataArea" for fastUpdate;
invokeBO "daName/boElement" using "dataArea" for replace;
A sintaxe da instrução invoke para serviços de negócios é semelhante àquela usada para scripts de serviço. O BS/SS é especificado junto com a referência XPath ao nome do grupo:
-
invokeBS 'BS Name' | $variable | "xpath" using "xpath";
-
invokeSS 'SS Name' | $variable | "xpath" using "xpath";
Os exemplos usam a instrução invokeBS, mas a sintaxe é semelhante para a instrução invokeSS.
invokeBS 'BusinessService' using "dataArea";
invokeBS $variableBS using "dataArea";
invokeBS "daName/bsElement" using "dataArea";
Avisos do Objeto de Negócios. Para scripts do BPA, as instruções invoke também podem indicar como os avisos devem ser tratados.
Sintaxe | Descrição | Exemplos |
---|---|---|
with warn asError |
Indica que um aviso deve ser tratado como um erro exibido no mapa da IU. O texto asError é opcional. |
|
with warn popup |
Indica que um aviso deve ser exibido na janela pop-up padrão do Framework. Neste cenário, o usuário vê botões padrão de Ok e Cancelar. Caso o usuário clique em Ok, o processo deverá continuar. Se o usuário clicar em Cancelar, o processamento deverá ser descontinuado. Essa é a configuração recomendada. |
|
with warn suppress |
Indica que um aviso deve ser suprimido. Essa é a configuração padrão se nenhuma sintaxe de aviso é adicionada à instrução invoke. |
|
Para scripts do BPA, também deve haver uma lógica subsequente à chamada para tratar erros e avisos (se com um pop-up de aviso for usado). A variável do sistema $WARNING será definida como verdadeiro se o usuário tiver clicado no botão Cancelar no pop-up de aviso. Se um mapa for mostrado, a lógica deverá reexibir o mapa (onde a mensagem de aviso será reexibida). Isso permite que o usuário faça alterações e salve novamente. Se nenhum mapa for mostrado antes do aviso, a lógica deverá ser encerrada.
A variável de sistema $ERROR indica que um erro foi recebido. Se um mapa tiver sido mostrado antes do erro, a lógica deverá exibir novamente o mapa em que o erro será mostrado. Se nenhum mapa for mostrado, o produto fornecerá um Script de BPA F1-HandleErr que deve ser usado para exibir o erro. Veja a seguir um exemplo da lógica típica de tratamento de erros.
invokeBO "F1-DetermineBo/output/bo" using "boSchema" for update with warn popup;
if ("$WARNING")
if ("map_schema/action = 'DEL'")
terminate;
else
goto maintMap;
end-if;
end-if;
if ("$ERROR")
if ("map_schema/action != 'DEL'")
goto maintMap;
else
transferControl 'F1-HandleErr';
end-if;
end-if;
Variáveis do Sistema e Variáveis Globais
As tabelas a seguir mostram as variáveis do sistema e as variáveis globais que estão disponíveis para escrita de script.
Variáveis do Sistema – Todos os Tipos de Script
As seguintes variáveis do sistema estão disponíveis para todos os tipos de script (scripts de serviço, scripts de plug-in e scripts do BPA):
Variável | Descrição | Exemplo |
---|---|---|
$BLANK | Representa um nó vazio. |
|
$CURRENT-DATE | Representa a data atual. Para scripts do BPA, é usada a data do navegador. Para scripts de serviço, é usada a data do servidor (a qual é afetada pela lógica de substituição de data do sistema). |
|
$CURRENT-STD-DTTM | Representa a data e a hora atuais expressas no horário padrão (ou seja, sem ajuste de horário de verão). |
|
$DEVICE-OS | Representa o sistema operacional do dispositivo do usuário. |
|
$DEVICE-BROWSER | Representa o navegador do dispositivo do usuário. |
|
$DEVICE-DISPLAY-TYPE | Representa o tipo de exibição da tela do dispositivo do usuário: tamanho Pequeno, Médio ou para Desktop. Os valores retornados podem ser parecidos com estes: oraPhone, oraTablet e oraDesktop. |
|
$DEVICE-INFO | Fornece a combinação das três propriedades do dispositivo (DEVICE-OS, DEVICE-BROWSER e DEVICE-DISPLAY-TYPE) e cada valor de propriedade separado por ponto e vírgula. |
|
Variáveis do Sistema – Somente Scripts do BPA
As seguintes variáveis do sistema estão disponíveis ou só se aplicam aos tipos de script do BPA:
Variável | Descrição | Exemplo |
---|---|---|
$DOUBLE_QUOTE | Representa uma aspa dupla. |
|
$SINGLE_QUOTE | Representa um apóstrofo. |
|
$SPACE | Contém um valor de espaço. |
|
$SYSTEM-DATE | Representa a data do servidor. Essa data é afetada pela lógica de substituição de data do sistema. |
|
Variáveis do Sistema – Somente Scripts de Servidor
As seguintes variáveis do sistema estão disponíveis ou só se aplicam aos tipos de script de serviço e script de plug-in:
Variável | Descrição | Exemplo |
---|---|---|
$ADDITIONAL-IP-INFO | As solicitações HTTP incluem um campo de cabeçalho para "outro endereço IP". Esse campo pode ser preenchido em uma implementação se há informações disponíveis sobre servidor proxy ou balanceador de carga, como o endereço IP de origem. |
|
$CURRENT-DTTM | Representa a data e a hora atuais. |
|
$F1-INSTALLATION-TIMEZONE | Representa o código de fuso horário que foi definido nas opções de instalação. |
|
$LANGUAGE | Representa o código de idioma que o script está usando. Normalmente, é o idioma padrão do usuário. |
|
$PROCESS-DATE | Representa a data do processo. A data do processo é diferente da data atual porque permanece a mesma durante toda a execução do processo. Por exemplo, se um script de serviço armazena vários objetos de negócios, a data do processo é definida no início da execução e cada objeto de negócios recebe essa data como padrão. A data atual, especialmente a data e a hora atuais, refletem o momento real do processamento. |
|
$PROCESS-DTTM | Representa a data e a hora do processo. A data e a hora do processo são definidas no início de um processo específico, portanto, não refletem a data e a hora exatas de uma atualização. |
|
$REQUESTING-IP-ADDRESS | Representa o endereço IP da solicitação HTTP. Se a solicitação for encaminhada por meio de um servidor proxy ou balanceador de carga, o endereço IP informado será aquele do proxy ou balanceador de carga, não do usuário final. Para obter informações, consulte a variável $ADDITIONAL-IP-INFO. |
|
$USER | Representa o ID do usuário que está executando o script. |
Para scripts de BPA que precisam saber o ID do usuário atual, consulte Dicas e Truques Úteis. |
Variáveis Globais
Os scripts de serviço e os scripts do BPA têm acesso aos valores definidos no Contexto Global.
Quando um script do BPA é iniciado pela interface do usuário, essas variáveis são inicializadas automaticamente. Elas podem ser referenciadas por meio de um cifrão antes do nome do campo. Por exemplo, se há suporte à variável global PER_ID, é possível referenciar $PER_ID no script do BPA:
move "$PER_ID" to "schema/customerId";
Para scripts de serviço, as variáveis globais só podem ser referenciadas se o script de serviço foi chamado diretamente de um script do BPA ou uma zona de portal. Quando chamado de um script do BPA ou uma zona de portal, o script de serviço tem acesso ao pacote das variáveis de contexto global preenchidas na sessão da IU. Para escrita de script de serviço, os nomes de campos globais precisam começar com dois cifrões (em vez de um, como nos scripts do BPA). Por exemplo, se há suporte à variável de contexto global PER_ID, é possível referenciar $$PER_ID no script de serviço.
move $$PER_ID to "schema/customerId";
Instruções performScript e transferControl
A etapa de Editar Dados dá suporte à funcionalidade análoga aos tipos de etapa de Executar Script e Transferir Controle, que se aplicam apenas a scripts do BPA.
Sintaxe | Valores Válidos | Comentários |
---|---|---|
performScript |
'Nome do Script do BPA' | O script a ser executado é fornecido explicitamente. |
$Variável | O script a ser executado é encontrado em uma variável. | |
"XPath" | O script a ser executado é encontrado em um elemento, referenciado pela linguagem XPath correspondente. | |
transferControl |
Valor análogo à instrução performScript |
Instrução declareBOWithBOGroup
Essa instrução é especifica aos scripts do BPA nos quais se planeja usar o script-base Processamento de Manutenção de Objeto de Negócios Principal (F1–MainProc) para as instruções de Geração e Edição de Mapa. Com esse script, espera-se que os dados usados para exibição no mapa estejam dentro de uma tag boGroup.
Sintaxe | Valores Válidos | Comentários |
---|---|---|
declareBOWithBOGroup |
'Nome do Objeto de Negócios' | O objeto de negócios é fornecido explicitamente. |
$Variável | O objeto de negócios é encontrado em uma variável. | |
"XPath" | O objeto de negócios é encontrado em um elemento, referenciado pela linguagem XPath correspondente. |
A tabela a seguir apresenta outra sintaxe para essa instrução.
Sintaxe | Valores Válidos |
---|---|
as |
'Nome do Esquema Dinâmico' |
Exemplos:
declareBOWithBOGroup 'BusinessObject' as 'newMapSchema';
declareBOWithBOGroup $variableBO as 'newMapSchema';
declareBOWithBOGroup "daName/boElement" as 'newMapSchema';
Instrução invokeMap
A etapa de Editar Dados dá suporte à funcionalidade análoga ao tipo de etapa de Chamar Mapa. que se aplica apenas a scripts do BPA.
Sintaxe | Valores Válidos | Comentários |
---|---|---|
invokeMap |
'Nome do Mapa' | O mapa da IU é fornecido explicitamente. |
$Variável | O mapa da IU é encontrado em uma variável. | |
"XPath" | O mapa da IU é encontrado em um elemento, referenciado pela linguagem XPath correspondente. |
A tabela a seguir apresenta outra sintaxe para essa instrução.
Sintaxe | Valores Válidos | Comentários |
---|---|---|
using |
"Nome do grupo da Área de Dados" | Indica a área de dados a ser transferida do servidor ou para o servidor durante a renderização do formulário HTML associado ao mapa. |
target |
bpa |
|
page |
||
popup |
Para obter mais informações sobre os valores de target, consulte o tipo de etapa de Chamar Mapa.
Se o mapa da interface do usuário estiver configurado para retornar um valor, ele poderá ser avaliado por meio da variável $MAP-VALUE.
invokeMap 'UI Map' using "dataArea";
invokeMap $variableMap using "dataArea";
invokeMap "daName/mapElement" using "dataArea" target bpa;
// $MAP-VALUE is a variable returned by the invoked map.
if ("$MAP-VALUE='continue' ")
goto 300;
else
terminate;
end if;
Instruções de Geração e Edição de Mapa
As instruções de 'geração e edição de mapa' são usadas para gerar e iniciar um mapa de edição de interface do usuário dinamicamente com base em uma definição de esquema. O esquema usado pode ser de BO, BS, SS ou DA. que se aplica apenas a scripts do BPA. A instrução generate varia de acordo com o tipo do esquema, mas a sintaxe é análoga.
Sintaxe |
---|
generateBOEditMap |
generateBSEditMap |
generateSSEditMap |
generateDAEditMap |
O código do BO/BS/SS/DA pode ser especificado por meio de um valor literal (entre aspas simples), uma variável temporária ou uma referência ao local do esquema XPath (entre aspas duplas).
A tabela a seguir apresenta outra sintaxe para essa instrução.
Sintaxe | Valores Válidos | Comentários |
---|---|---|
using |
"Nome do grupo da Área de Dados" | Indica a área de dados a ser transferida do servidor ou para o servidor durante a renderização do formulário HTML associado ao mapa. |
target |
bpa |
|
page |
||
popup |
Os valores de target indicam onde o mapa gerado deve ser exibido como descrito no tipo de etapa de Chamar Mapa. Se o mapa da interface do usuário estiver configurado para retornar um valor, ele poderá ser avaliado por meio da variável $MAP-VALUE.
Os exemplos usam generateBOEditMap, mas as instruções são semelhantes para outros tipos de esquema.
generateBOEditMap 'BO Name' using "dataArea";
generateBOEditMap $variableMap using "dataArea";
generateBOEditMap "daName/mapElement" using "dataArea" target bpa;
// $MAP-VALUE is a variable returned by the invoked map.
if ("$MAP-VALUE='continue' ")
goto 300;
else
terminate;
end if;
Instrução terminate
A etapa de Editar Dados dá suporte à funcionalidade análoga ao tipo de etapa de Encerrar.
Veja a seguir um exemplo de etapa simples de Encerrar que parará o script.
if ("not(parm/spouse/name)")
terminate;
else
goto addSpouse;
end-if;
A instrução terminate with error só está disponível nos scripts de serviço.
Sintaxe | Atributos | Comentários |
---|---|---|
terminate with error (x, y %n= element= ) |
'x' representa a categoria da mensagem | Obrigatório. |
'y' representa o número da mensagem | Obrigatório. | |
%n="Element XPath" ou %n='literal' | Especifique os parâmetros de substituição aceitos pela mensagem usando valores literais ou referências XPath. Quando o valor a ser substituído for um elemento dentro de uma lista, use o XPath do elemento dentro da lista qualificada pela ocorrência da lista. | |
element='Element XPath' ou element=$variable | Opcionalmente, especifique um nome de elemento em uma mapa da IU para ser destacado como parte do erro. Quando o elemento com erro estiver dentro de uma lista, use o XPath do elemento dentro da lista qualificada pela ocorrência da lista. |
Exemplo de um campo simples:
if ("string(customer/lastName) = $BLANK")
terminate with error (8000, 1001 %1="customer/lastName" %2='Last name required' element='customer/lastName');
end-if;
Exemplo de "terminate" em que o elemento a ser marcado está em uma lista:
for ($list in "parm/hard/newBusinessObject/listName")
if //** check some condition for elementName
terminate with error (11000, 11000 %1="$list/elementName" element='$list/elementName');
end-if;
end-for;
Chamando um Código Groovy
Se você tiver um script de plug-in ou um script de serviço que misture criação de scripts XPath e criação de scripts Groovy , a etapa de editar dados permitirá chamar o código Groovy usando a sintaxe invokeGroovy 'método'; em que 'método' é o nome de um método definido em uma etapa de Membros Groovy no script. Com essa sintaxe, só é possível chamar métodos que não recebem argumentos e retornam void. No entanto, o método chamado da etapa de Editar Dados pode ser aceito por outro código Groovy em um tipo de etapa diferente de Membros Groovy.
Exemplo de etapa de Editar Dados:
invokeGroovy 'invoke';
Exemplo de etapa de Membros Groovy:
void invoke() {
initParms()
readBO()
initConfig()
retrieve()
updateBO()
}
Depurando um Script do BPA
Quando um script do BPA tem altura maior que zero, os nós selecionados na área de dados do script podem ser exibidos durante a execução. Os dados XML são exibidos durante a execução do script na área de exibição do script do BPA. Especifique a linguagem XPath de um nó XML de qualquer área de dados do script do BPA, entre os pares de caracteres: '%+' e '+%'.
Por exemplo, o conteúdo inteiro do nó 'input' do grupo do esquema e o conteúdo específico do elemento 'output/status' do esquema são mostrados na área de exibição do script do BPA. O texto da depuração deve ser incluído na área de texto do script do BPA, não no campo de Editar Dados do script. Esse texto pode ser declarado para qualquer etapa explícita do script.
display input: %+input+% , and output status: %+output/status+%
Dicas e Truques Úteis
Esta seção fornece algumas sugestões sobre como implementar uma lógica comum.
Localizando o Usuário Conectado em um BPA
Para scripts baseados em servidor, a variável $USER é preenchida com o usuário conectado atual. Essa variável não está disponível para scripts de BPA. O BPA poderá chamar o script de serviço F1-GetUser se essas informações forem necessárias.
Emitindo um Erro de um script de BPA
Para scripts baseados em servidor, use a instrução terminate with error para retornar uma mensagem de erro a ser exibida para o usuário. O BPA pode exibir esse erro transferindo o controle para F1-HandleErr, conforme descrito em Declarar e Chamar Objetos Baseados em Esquema. Isso não é compatível com um script de BPA. Uma técnica disponível para um BPA emitir um erro é chamar o serviço de negócios F1-RethrowError informando os detalhes do erro. Este serviço de negócios preenche os campos de erro do sistema necessários para emitir o erro. Em seguida, transfira o controle para F1-HandleErr.
if ("string($assignedToUser) != string(F1-GetUser/user)")
declareBS 'F1-RethrowError' as 'errorMsg';
move '11010' to "errorMsg/messageCategory";
move '11511' to "errorMsg/messageNumber";
move "$toDoEntryId" to "errorMsg/messageParameters/+parameters/parameterValue";
invokeBS 'F1-RethrowError' using "errorMsg";
transferControl 'F1-HandleErr';
end-if;