Pasos Editar Datos

Los pasos Editar datos proporcionan una región de formato libre donde puede especificar comandos para controlar el procesamiento de scripts.

Ingrese los comandos de generación de scripts en el campo Texto de Edición de Datos. Haga click en el ícono adyacente para abrir una ventana que permita obtener más espacio para definir el paso de edición de datos.

En general, la sintaxis disponible dentro de la edición de datos emula los comandos disponibles dentro de los tipos de pasos explícitos. Sin embargo, hay algunos comandos que están disponibles sólo dentro de la edición de datos. Por ejemplo, los dos comandos estructurados: For e If.

Nota: No todos los tipos de pasos del Asistente de Proceso de Negocios se soportan utilizando la sintaxis de edición de datos. Consulte los detalles a continuación para obtener más información sobre comandos y ejemplos de edición de datos.

Los temas de esta sección proporcionan detalles de la sintaxis que se soporta en el tipo de paso de edición de datos.

Contenido

Comentarios

Variables Temporarias

Variables de Contexto

Sentencia Move

Sentencia Go To

Sentencia Conditional Branch

Sentencia If

Sentencia For

Procesamiento de Listas

Funciones para el Procesamiento de Lista

Declaración e Invocación de Objetos Basados en Esquema

Variables del Sistema y Globales

Ejecución de Script y Transferencia

Sentencia Navigate

Sentencia Invoke Map

Declarar Objeto de Negocio con Grupo de Objeto de Negocio

Sentencias Generate Edit Map

Sentencia Terminate

Invocación de Código Groovy

Depuración de un Script del Asistente de Proceso de Negocios

Consejos y Trucos Útiles

Comentarios

Se pueden incluir comentarios en un script usando la notación de doble barra // en los primeros dos caracteres del paso de edición de datos. Ejemplo:

// 
// quit with error
//
if ("not(customer/securityEnabled)")
terminate with error (8000, 1001 %1="customer/id" %2='not allowed');
end-if;

Variables Temporales

Las variables temporales se pueden declarar en todos los tipos de scripts. Para hacer referencia a ellas, se debe incluir un signo de dólar a la izquierda ("$"). Sin embargo, las variables temporales varían su comportamiento según los diferentes tipos de scripts:

  • En los Scripts del Asistente de Proceso de Negocios, las variables temporales se conservan de un script del Asistente de Proceso de Negocios a otro (consulte Sentencias Perform Script y Transfer Control), lo que significa que se pueden usar para establecer la comunicación entre scripts del Asistente de Proceso de Negocios.

  • Las variables temporales no se pueden transmitir de un script del Asistente de Proceso de Negocios a un script de servicio o de conector. Solamente los elementos del área de datos se pueden transmitir entre estos tipos de scripts.

  • En los scripts de servicio y de conector, las variables temporales se conservan solamente durante el ciclo de vida del script que declaró la variable. Esto significa que no se pueden transmitir variables temporales entre scripts de conector y scripts de servicio, sino solamente variables globales, variables de contexto y elementos del área de datos.

Declaración, Inicialización y Fijación por Defecto de Variables Temporales

Cuando se utiliza una variable temporal, se debe declarar o inicializar con un valor determinado antes de utilizarla. Un método que se utiliza típicamente para declarar una variable consiste en tan solo mover datos a ella usando una sentencia Move, por ejemplo.

move "0" to $index;
Acceso Rápido: Consulte Mover a una Variable Temporal para obtener más información sobre la declaración implícita de una variable temporal en una sentencia Move.

Para los scripts del Asistente de Proceso de Negocios, tal como se mencionó anteriormente, las variables temporales se pueden transmitir de un script del Asistente de Proceso de Negocios a otro. Como tal, es común hacer referencia a una variable temporal de un Asistente de Proceso de Negocios que debería haber inicializado un Asistente de Proceso de Negocios anterior. Sin embargo, si por alguna razón un Asistente de Proceso de Negocios anterior no inicializó una variable temporal, al hacer referencia a ella, se generará un error. Por lo tanto, se recomienda usar la sentencia default que inicializará las variables temporales que no se hayan creado o inicializado aún.

  • La siguiente sentencia inicializará la variable temporal $InputAction, pero solamente si no se ha inicializado aún:

    default $InputAction;
  • La siguiente sentencia fijará el valor de la variable temporal $InputAction en 'read', pero solamente si aún no se ha inicializado la variable:

    default $InputAction as 'read';
Nota: Los scripts no deben definir variables con palabras clave reservadas. En la siguiente tabla se enumeran las palabras clave reservadas.
Palabra Clave
add
as
asError
bpa
branch
data
declareBO
declareBS
declareDA
declareMap
declareSS
default
delete
edit
element
else
end-edit
end-for
end-if
error
escape
evaluate
fastAdd
fastUpdate
for
goto
if
in
invokeBO
invokeBS
invokeMap
invokeSS
label
map
move
navigate
navigateAndReloadDashboard
null
page
performScript
popup
read
readWithoutVersion
replace
suppress
target
terminate
to
transferControl
update
using
warn
with

Variables de Contexto

Las variables de contexto están disponibles únicamente en los scripts de servicio. La variable de contexto estará disponible durante la vigencia del script de servicio y todo lo que invoca. Por lo tanto, se puede usar una variable de contexto en un script de servicio para transmitir la información a un esquema o script de servicio de un nivel inferior. Para hacer referencia a ellas, se debe incluir doble signo de dólar a la izquierda ("$$").

Nota: Dado que hay variables de contexto disponibles para los scripts de niveles inferiores, a veces, se puede hacer referencia a ellas como variables globales o variables de contexto globales. Sin embargo, no se deben confundir con variables globales.

Declaración, Inicialización y Fijación por Defecto de Variables de Contexto

Cuando se utiliza una variable de contexto, se debe declarar o inicializar con un valor determinado antes de utilizarla. Un método que se utiliza típicamente para declarar una variable consiste en tan solo mover datos a ella usando una sentencia Move, por ejemplo.

move 'context variable' to $$contextVariable;
Acceso Rápido: Consulte Mover Usando una Variable de Contexto para obtener más información.

Sentencia Move

La sentencia move copia un valor de origen en un destino. En la siguiente tabla, se realzan varias opciones que soporta la sentencia Move.

Sentencia Descripción de Ejemplo Sintaxis de Ejemplo
Mover a Elemento

move "xpath" to "xpath";

Nota: Una expresión XPath se encierra en comillas dobles.
Sentencia Move con referencia XPath simple.
move "acct/totalBalance" to 
"parm/formattedValue";
Sentencia Move con función de concatenar XPath.
move "concat(person/firstName, ',', 
person/lastName)" 
to "parm/fullName";
Sentencia Move con función substring-before XPath.
move "substring-before(parm/fullName,',')" 
to "person/firstName";
Sentencia Move con función substring-after XPath.
move "substring-after(parm/fullName,',')" 
to "person/lastName";
Sentencia Move con función substring XPath.
move "substring(parm/date,1,4)" 
to "parm/year";
Mover a Elemento

move 'literal' to "xpath";

Nota: Un valor literal se encierra en comillas simples.
Sentencia Move con una cadena literal.
move 'okay for mailing' 
to "account/preferences[type="mail"]/text";
Mover a Elemento

move 'Boolean' to "xpath";

Sentencia Move con valor booleano como cadena literal.
if ("account/balance > 0") 
  move 'true' 
  to "account/hasDebitBalance"; 
end-if;
Mover una expresión resulta en un valor booleano. Tenga en cuenta que el filtro del ejemplo a continuación se encuentra en un nodo de grupo.
<schema>
  <account>
    <hasDebitBalance type="boolean"/>
    <balance/>
  </account>
</schema>

move "boolean(account[balance>0])" 
to "account/hasDebitBalance";
Mover a Grupo

move "xpath" to "xpath";

Mover un juego de elementos de un grupo a otro.

El sistema asocia el nivel inicial de nombres de elementos y los nombres de grupo/lista del esquema de origen al esquema de destino. Para listas y grupos, el comportamiento por defecto es mover todos los elementos dentro del grupo/lista de origen al grupo/lista de destino (aun si no están definidos en el grupo/lista de destino).

El servicio de negocio F1-MoveByName se puede usar para un control más específico del movimiento (sin tener que definir cada sentencia Move individual).

move "account/custInfo" to "person";

Esta sentencia es equivalente a la siguiente sentencia:

move "account/custInfo/*" to "person/*";

Mover usando una Variable Temporaria

Al mover una variable local temporal, no se encierra en comillas dobles.

move "xpath" to $variable;

move "count(Person/names/personName) 
+ count(Person/ids/personId)" 
to $PersonChildCount;
Al mover una variable temporal, se encierra en comillas dobles.

move "$variable" to “xpath”;

move "$AccountBalance" 
to "parm/formattedValue";

Mover usando una Variable de Contexto

move "xpath" to $$variable;

move $$variable to “xpath”;

Al hacer referencia a variables de contexto, de origen o de destino, no se usan comillas dobles.
move 'context value' 
to $$contextVariable;
// 
// here, we move from a context variable.
move $$contextVariable 
to "MarketMessage/sender";
Mover usando una Ubicación Dinámica

move "xpath" | 'literal' to evaluate("xpath" | $variable);

move evaluate("xpath" | $variable) to "xpath" | $variable;

La sentencia evaluate permite mover la ubicación de origen o de destino para que derive dinámicamente de una ubicación de elemento de esquema o variable.
move 'literal' 
to evaluate("schemaLocation"); 
//
move "schemaLocation" 
to evaluate($Variable);
move evaluate("schemaLocation") 
to $Variable;
// 
move evaluate($Variable) 
to "schemaLocation";
Move escape

move escape("xpath" | $variable) to "xpath" | $variable;

Move escape está disponible únicamente para los scripts de servicio y de conector. La sentencia escape busca contenido HTML en el valor de texto de origen y lo escapa, es decir, reemplaza los caracteres similares a HTML con caracteres especiales que se escapan de la presentación HTML. Al hacer esto, el texto se despliega como texto sin formato cuando forma parte de un elemento HTML.
Nota: Esta función se debe utilizar únicamente si el texto se desplegará como parte de un elemento HTML y se sospecha que contendrá caracteres similares a HTML o, incluso, HTML maliciosos que no se deben presentar como HTML. Si se despliega incorrectamente usando un elemento que no es HTML, se verían caracteres de escape especiales (si corresponde) como parte del texto. Consulte Funciones y Atributos de Mapa de Interface de Usuario para obtener más información sobre cómo definir un elemento para el despliegue de contenido HTML.
move escape("schemaLocation") 
to $Variable;
// 
move escape($Variable) 
to "schemaLocation";
Move null

move null to "xpath";

Se puede remover información del documento de la instancia XML por medio de la sintaxis especial "move null". Tenga en cuenta que se puede especificar un nombre de nodo en la expresión XPath o un nombre de grupo. Si se especifica un grupo, tanto el grupo como todos los elementos secundarios se eliminarán del procesamiento.

Para remover un nodo y todos sus nodos secundarios:

if ("boolean(customer/securityEnabled)")
  goto updateInfo;
else
  move null to "customer"; 
end-if;   

Para remover todos los nodos secundarios de un nodo de grupo con el sufijo "/*":

if ("boolean(customer/securityEnabled)")
  move null to "customer/*";
end-if;

Sentencia Go To

El paso de edición de datos soporta la funcionalidad análoga al tipo de paso Ir a. La sintaxis es goto label;, donde la etiqueta representa si la ubicación en el campo de texto de edición de datos (identificado con esta etiqueta) o representa otro paso del script.

A continuación, se proporciona un ejemplo de cómo ir a otra ubicación en el mismo paso identificado con la etiqueta addSpouse.

if ("string(parm/spouse/name) != $BLANK")
  goto addSpouse;
end-if;
addSpouse: invokeBO 'Person' using "parm/spouse" for add;

A continuación, se proporciona un ejemplo de cómo ir a otro paso del mismo script. La secuencia de pasos es la referencia que se usa como etiqueta.

if ("string(parm/spouse/name) != $BLANK")
  goto 110;
end-if;
.
.
.
110: invokeBO 'Person' using "parm/spouse" for add;

Sentencia de Ramificación Condicional

El paso de edición de datos soporta la funcionalidad análoga al tipo de paso Ramificación Condicional. La sintaxis es branch (“xpath”) goto label else label;, donde:

  • La condición XPath en la sentencia branch se debe evaluar en un valor booleano de Verdadero o Falso.

  • Los destinos para las sentencias goto y else son etiquetas que representan otra ubicación en el campo de texto de edición de datos (identificado con esta etiqueta) o representan otro paso del script.

En el siguiente ejemplo, se usan las etiquetas para addSpouse y addAccount

branch ("string(parm/spouse/name) != $BLANK") goto addSpouse else addAccount;

Sentencia If

La sentencia if es similar a la sentencia de ramificación condicional. Se puede usar para estructurar la lógica del script. Esta sentencia puede incluir opcionalmente una sentencia else, pero siempre debe terminar con una sentencia end-if.

Nota: Este es un ejemplo de una sentencia que no se representa como un tipo de paso diferente. Solamente está disponible en el texto de edición de datos.

La sintaxis es if (“xpath”) else end-if;. La condición XPath se debe evaluar en un valor booleano de Verdadero o Falso. A continuación, se incluyen ejemplos.

Ejemplo en el cual XPath contiene una condición lógica simple.

if ("string(parm/spouse/name) != $BLANK")
  //
  // Create spouse since spouse name present
  goto addSpouse;
else
  //
  // Create account without spouse
  goto addAccount;
end-if;

Ejemplo en el cual XPath contiene una condición compleja.

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;

Ejemplo de un juego apilado de sentencias que se utiliza para evaluar múltiples valores posibles de un 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;

El siguiente ejemplo de XPath muestra un valor booleano en función de la existencia del nodo. En este ejemplo, si existe el nodo en el documento de la instancia XML que se está procesando, la sentencia se evaluará en Verdadero. Si no se encuentra ningún elemento, la sentencia se evalúa en Falso.

Nota: Cuando se tratan nodos de XPath como variables booleanas, tenga en cuenta que un nodo vacío se evalúa en Verdadero. Solamente un nodo faltante devuelve el valor Falso.
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;

Sentencia For

La sentencia for crea una lista de nodos o valores según la expresión XPath. Si especifica un nodo de lista, cada nodo secundario de la lista, junto con su contenido, estará disponible en el ciclo. Si especifica un nodo secundario directamente, solo habrá una lista de valores disponible en el ciclo.

Nota: Para obtener más información sobre la creación de nuevas entradas de una lista, consulte el ejemplo de cómo crear una nueva instancia de la lista.
Nota: Este es un ejemplo de una sentencia que no se representa como un tipo de paso diferente. Solamente está disponible en el texto de edición de datos.

La sintaxis es for ($variable in "xpathList") end-for;. La condición XPath se debe evaluar en un valor booleano de Verdadero o Falso.

Los siguientes ejemplos se basan en este esquema de ejemplo:

<schema>
  <SAList type="list">
    <id/>
    <balance/>
  </SAList>
  <SAContributor type="list">
    <id/>
  </SAContributor>
</schema>

El ejemplo que especifica el nodo de lista en la expresión XPath donde están disponibles todos los nodos secundarios para procesar.

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; 

Ejemplo que especifique un nodo secundario del nodo de lista de la expresión XPath. Solo están disponibles los valores de ese nodo para procesar.

move "0" to $AccountBalance;
for ($SABalance in "SAList/balance")
    move "$SABalance + $AccountBalance" to $AccountBalance;
end-for;

Ejemplo que muestra cómo se puede utilizar un filtro para limitar las filas seleccionadas por el ciclo for.

move "0" to $AccountDebitBalance;
for ($SAList in "SAList[Balance>0]")
    move "$SAList/balance + $AccountDebitBalance" to $AccountDebitBalance;
end-for; 

Ejemplo que muestra el uso de un filtro al especificar nodos secundarios.

move "0" to $AccountCreditBalance;
for ($SABalance in "SAList[Balance<0]/balance")                 
    move "$SABalance + $AccountCreditBalance" to $AccountCreditBalance;                
end-for;

Procesamiento de Lista

En esta sección, se proporcionan detalles sobre el procesamiento de listas. Los ejemplos de esta sección hacen referencia al siguiente esquema:

<schema>
  <parm type="group">
    <name/>
  </parm>
  <Person type="group">
    <names type="list">
      <type/>
      <name/>
    </names>
  </Person>
</schema>

Referencia a un Elemento de Lista. Se puede mover un valor a una instancia de lista determinada al hacer referencia a un nodo de identificación de la lista en un filtro. La sintaxis es move "xpath" to "xpathList[filter]/element";. Ejemplo:

move "parm/name" to "Person/names[type='main']/name";

Creación de una Nueva Instancia de Lista. Se puede utilizar una notación especial en una sentencia Move de destino para indicar que se debe crear una nueva instancia de lista. El signo "+" indica al procesador de script que se debe iniciar una nueva instancia de una lista para el elemento de destino. La sintaxis es move "xpath" to "+xpathList";. Ejemplo:

move "parm/name" to "Person/+names/name";

Supresión de una Instancia de Lista. Se puede suprimir una entrada de lista XML de la base de datos al mover un atributo de acción 'delete' al nombre del elemento. Para que una base de datos suprima una entrada de lista, es necesario un atributo action="delete" en el nodo de destino y una interacción de Objeto de Negocio de actualización posterior. La sintaxis es move 'delete' to "xpathList@action");. Ejemplo:

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;

En el siguiente ejemplo, se muestra el XML resultante.

<root>
  <CCList>
    <id>9876538976</id>
    <balance>309.98</balance>
  </CCList>
  <CCList action="delete">
    <id>4321125899</id>
    <balance>87.45</balance>
  </CCList>
</root>
Nota: La supresión de una instancia de lista mediante el uso del atributo de acción es riesgoso si se requieren interacciones de Objeto de Negocio iterativas. El documento XML que contiene la instancia de lista que se debe eliminar no se modificará después de una interacción de Objeto de Negocio correcta, es decir que el documento contendrá la instancia de lista aunque ya no exista. Para resolver este problema, es esencial volver a leer el Objeto de Negocio después de una actualización de Objeto de Negocio en la cual se ha utilizado el atributo de acción 'delete'.
Nota: Una alternativa para el atributo de eliminación descrito aquí consiste en utilizar la acción de Objeto de Negocio replace. La manipulación de una lista para utilizar la acción de reemplazo evita el problema descrito anteriormente sobre el uso de información obsoleta en documentos de solicitud posteriores a la actualización del Objeto de Negocio.

Funciones para el Procesamiento de una Lista

XPath proporciona varias funciones útiles para procesar los elementos de una lista, por ejemplo, count, sum y last.

Los siguientes ejemplos se basan en este documento XML de muestra:

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

El siguiente es un ejemplo de una suma. La sintaxis es move "sum(xpathList/element)" to $variable;. El ejemplo suma el saldo total.

move "sum(ft/amt)" to $TotalBalance;

El siguiente es un ejemplo de una suma que usa un filtro para obtener un subtotal. El ejemplo suma el saldo de las entradas cuya categoría es ‘tax’.

move "sum(ft[cat='tax']/amt)" to $TaxBalance;

El siguiente es un ejemplo de una cuenta. La sintaxis es move "count(xpathList)" to $variable;. En el ejemplo, se encuentra la cuenta del número de entradas de Transacciones Financieras.

move "count(ft)" to $TranCount;

El siguiente es un ejemplo de ‘last’, que se utilizar para buscar la última entrada. La sintaxis es move "last(xpathList)" to $variable;. En el ejemplo, se encuentra la última cantidad en la lista de Transacciones Financieras.

move "ft[last()]/amt" to $LastAmount;

Declaración e Invocación de Objetos Basados en Esquema

Se puede invocar un objeto o un servicio de negocio, o un script de servicio en el paso de edición de datos. Para soportar la invocación dinámica, se puede declarar un nombre de área de datos dinámicos.

El esquema que se declara puede ser un esquema de objeto de negocio (BO), un esquema de servicio de negocio (BS), un esquema de script de servicio (SS), un esquema de área de datos (DA) o un esquema de mapa de interface de usuario. La sentencia declare variará en función del tipo de esquema, pero la sintaxis es 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';

Al invocar un Objeto de Negocio, un Servicio de Negocio o un Script de Servicio, se puede especificar el nombre del objeto como un valor literal o puede ser un valor incluido en un elemento o una variable. Para cada invocación, se debe proporcionar una referencia XPath a un nombre de grupo.

Al invocar un objeto de negocio, se debe proporcionar una acción. La sintaxis es invokeBO 'BO Name' | $variable | "xpath" using "xpath" for action;. Las acciones válidas son las siguientes:

  • read. Esta acción lee la visualización actual de los datos del Objeto de Negocio.

  • add. Esta acción agregará el objeto y leerá y devolverá la visualización resultante del Objeto de Negocio.

  • fastAdd. Esta acción agregará el objeto, pero no realiza una "lectura" posterior para devolver la visualización resultante del Objeto de Negocio. Con fines de performance, esta opción es mejor que "add" si no existe ningún motivo para volver a leer el registro.

  • update. Esta acción actualizará el objeto y leerá y devolverá la visualización resultante del Objeto de Negocio. Esta acción ejecuta una 'fusión' de la información especificada en el documento XML de la solicitud del estado de cuenta con los datos del Objeto de Negocio existentes. El uso de esta acción permite al script indicar solamente los elementos que están cambiando.

  • fastUpdate. Esta acción actualizará el objeto, pero no realiza una "lectura" posterior para devolver la visualización resultante del Objeto de Negocio. Con fines de performance, esta opción es mejor que "update" si no existe ningún motivo para volver a leer el registro.

  • delete. Esta acción suprime el objeto.

  • replace. Esta acción es una alternativa para la acción de actualización. La acción de reemplazo reemplaza por completo los datos del Objeto de Negocio existentes con la información del documento de la solicitud. Por lo general, la acción de reemplazo se utiliza cuando un Objeto de Negocio contiene una lista, ya que es más simple reemplazar todas las instancias de una lista que intentar fusionar listas, lo cual requiere una lógica especial para suprimir una instancia de lista explícitamente.

    Nota: La acción de reemplazo se debe utilizar cuando se utiliza la funcionalidad de mapa de interface de usuario para Cargar un Archivo CSV.
    Nota: Actualmente, la acción "replace" no está soportada para ningún objeto de mantenimiento incluido en una página "fija" que usa una metáfora de lista para mostrar todos los registros de la página a la vez. Divisa es un ejemplo de este tipo de página.

Ejemplos:

invokeBO 'BusinessObject' using "dataArea" for fastAdd;
 
invokeBO $variableBO using "dataArea" for fastUpdate;
 
invokeBO "daName/boElement" using "dataArea" for replace;

La sintaxis de las sentencias invoke tanto para un servicio de negocio como para un script de servicio es similar. El Servicio de Negocio y el Script de Servicio se especifica junto con la referencia XPath al nombre de grupo:

  • invokeBS 'BS Name' | $variable | "xpath" using "xpath";

  • invokeSS 'SS Name' | $variable | "xpath" using "xpath";

Los ejemplos usan la sentencia invokeBS, pero las sentencias son similares para la sentencia invokeSS.

invokeBS 'BusinessService' using "dataArea";
 
invokeBS $variableBS using "dataArea";
 
invokeBS "daName/bsElement" using "dataArea";

Advertencias de Objeto de Negocio. Tenga en cuenta que, en el caso del scripting del Asistente de Proceso de Negocios, las sentencias invoke también pueden indicar cómo manejar las advertencias.

Sintaxis Descripción Ejemplos

with warn asError

Indica que una advertencia se debe considerar un error desplegado en el mapa de interface de usuario. El texto asError es opcional.

invokeBO 'BusinessObject' using "dataArea" for add with warn asError;

invokeSS 'ServiceScript' using "dataArea" with warn;

with warn popup

Indica que una advertencia se debe presentar en la ventana desplegable standard del marco. En este escenario, se presentan al usuario los botones Aceptar y Anular standard. Si el usuario hace click en Aceptar, el proceso debe continuar. Si el usuario hace click en Anular, se debe interrumpir el procesamiento. Esta es la configuración recomendada.

invokeBS "daName/bsElement" using "dataArea" with warn popup;

with warn suppress

Indica que se debe suprimir una advertencia. Este es el valor por defecto si no se agrega ninguna sintaxis de advertencia a la sentencia invoke.

invokeBS "daName/bsElement" using "dataArea" with warn suppress;

invokeSS 'ServiceScript' using "dataArea";
Nota: Para los scripts de servicio, todos los objetos invocados del script de servicio heredarán su nivel de advertencia. Por lo tanto, si se invoca el script de servicio with warn, también se invocarán todas las sentencias invoke anidadas with warn.

En el caso de los scripts del Asistente de Proceso de Negocios, también debe haber una lógica que siga la invocación para manejar errores y advertencias (si se usa con advertencia desplegable). La variable del sistema $WARNING se define como verdadera si el usuario hizo click en el botón Cancelar en la ventana desplegable de advertencia. Si se mostró un mapa, la lógica debería volver a desplegarlo (en el lugar donde se volverá a desplegar el mensaje de advertencia). Esto permite que el usuario realice posibles cambios y grabe nuevamente. Si no se mostró ningún mapa antes de la advertencia, la lógica debería finalizar.

La variable del sistema $ERROR indica que se recibió un error. Si se mostró un mapa antes del error, la lógica debería volver a desplegar el mapa en el lugar donde se mostrará el error. Si no se mostró ningún mapa, el producto proporciona el script de Asistente de Proceso de Negocios F1–HandleErr que debe usarse para desplegar el error. El siguiente es un ejemplo de la típica lógica de manejo de errores.

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;

Variables del Sistema y Globales

Las siguientes tablas realzan las variables del sistema y globales disponibles para la escritura de scripts.

Variables del Sistema: Todos los Tipos de Scripts

Las siguientes variables del sistema están disponibles para todos los tipos de scripts (scripts de servicio, scripts de conector y scripts del Asistente de Proceso de Negocios).

Variable Descripción Ejemplo
$BLANK Representa un nodo vacío.
if ("string(parm/spouse/name) != $BLANK")
  goto addSpouse;
end-if;
$CURRENT-DATE Representa la fecha actual.

En el caso de los scripts del Asistente de Proceso de Negocios, corresponde a la fecha del browser.

En el caso de los scripts de servidor, corresponde a la fecha del servidor (la cual se ve afectada por la lógica de sustitución de la fecha del sistema).

move "$CURRENT-DATE" to $tempDate;
$CURRENT-STD-DTTM Representa la fecha y la hora actuales expresadas en hora standard (es decir, sin ajustes por horario de verano).
move "$CURRENT-STD-DTTM" to $tempDateTime;
$DEVICE-OS Representa el sistema operativo del dispositivo del usuario.
move "$DEVICE-OS" to $tempDeviceOs;
$DEVICE-BROWSER Representa el browser del dispositivo del usuario.
move "$DEVICE-BROWSER" to $tempDeviceBrowser;
$DEVICE-DISPLAY-TYPE Representa el tipo de despliegue de la pantalla del dispositivo del usuario, es decir, si es de tamaño de escritorio, mediano o pequeño. Los valores resultantes pueden ser: oraDesktop, oraTablet y oraPhone.
move "$DEVICE-DISPLAY-TYPE" to $tempDeviceDisplayType;
$DEVICE-INFO Proporciona la combinación de las tres propiedades del dispositivo (DEVICE-OS, DEVICE-BROWSER y DEVICE-DISPLAY-TYPE) y separa el valor de cada propiedad con punto y coma.
move "$DEVICE-INFO" to $tempDeviceInfo;

Variables del Sistema: Solamente Scripts del Asistente de Proceso de Negocios

Las siguientes variables del sistema están disponibles o se pueden aplicar únicamente a tipos de scripts del Asistente de Proceso de Negocios.

Variable Descripción Ejemplo
$DOUBLE_​QUOTE Representa una comilla doble.
move "$DOUBLE_QUOTE" to $tempField;
$SINGLE_​QUOTE Representa un apóstrofo.
move "$SINGLE_QUOTE" to $tempField;
$SPACE Contiene un valor de un solo espacio.
move "$SPACE" to $tempField;
$SYSTEM-DATE Representa la fecha del servidor. Tenga en cuenta que esta fecha se ve afectada por la lógica de sustitución de fecha del sistema)
move "$SYSTEM-DATE" to $tempDate;

Variables del Sistema: Solamente Scripts del Servidor

Las siguientes variables del sistema están disponibles o se pueden aplicar únicamente a tipos de scripts de servicio o de conector.

Variable Descripción Ejemplo
$ADDITIONAL-IP-INFO Una solicitud HTTP incluye un campo de encabezado "dirección IP adicional". Esto se puede completar en una implementación si hay información disponible en el servidor proxy o el equilibrador de carga, como la dirección IP de origen.
move "$ADDITIONAL-IP-INFO" to "parm/request/headerIpAddress";
$CURRENT-DTTM Representa la fecha y la hora actuales.
move "$CURRENT-DTTM" to $tempDateTime;
$F1-INSTALLATION-TIMEZONE Representa el código de la zona horaria definido en las opciones de instalación.
move "$F1-INSTALLATION-TIMEZONE" to $timeZone;
$LANGUAGE Representa el código de idioma que utiliza el script. Normalmente, es el idioma por defecto del usuario.
move "$LANGUAGE" to $tempLanguage;
$PROCESS-DATE Representa la fecha del proceso. La fecha del proceso es diferente a la fecha actual porque la fecha del proceso permanece igual durante la toda la ejecución del proceso. Por ejemplo, si un script de servicio almacena varios objetos de negocio, la fecha del proceso se inicializa al iniciar la ejecución del script de servicio y cada objeto de negocio tiene la misma fecha de proceso fijada por defecto. La fecha actual, especialmente la fecha y la hora actuales, reflejará la hora real de procesamiento.
move "$PROCESS-DATE" to $tempDate;
$PROCESS-DTTM Representa la fecha y la hora de proceso. Tenga en cuenta que la fecha y la hora de proceso se inicializan al iniciar un proceso determinado y no reflejan la fecha y la hora exactas de una actualización.
move "$PROCESS-DTTM" to $tempDateTime;
$REQUESTING-IP-ADDRESS Representa la dirección IP de la solicitud HTTP. Tenga en cuenta que, si la solicitud se enruta por medio de un servidor proxy o un equilibrador de carga, la dirección IP corresponde al servidor proxy o al equilibrador de carga, no al usuario final. Consulte la variable $ADDITIONAL-IP-INFO para obtener información.
move "$REQUESTING-IP-ADDRESS" to "parm/request/systemIpAddress";
$USER Representa la ID del usuario que ejecuta el script.
move "$USER" to $tempUser;

Para los scripts de Asistente de Proceso de Negocios que necesitan conocer la ID de usuario del usuario actual, consulte Consejos y Trucos útiles.

Variables Globales

Los scripts del Asistente de Proceso de Negocios y de servicio tienen acceso a los valores definidos en Contexto Global.

Cuando se inicia un script del Asistente de Proceso de Negocios desde la interface de usuario, estas variables se inicializan automáticamente. Se puede hacer referencia a ellas con un solo signo de dólar a la izquierda del nombre del campo. Por ejemplo, si PER_​ID es una variable global soportada, en el script del Asistente de Proceso de Negocios, se puede hacer referencia a ella como $PER_​ID:

move "$PER_ID" to "schema/customerId";

En el caso de los scripts de servicio, solo se puede hacer referencia a las variables globales si se ha invocado el script de servicio directamente desde un script del Asistente de Proceso de Negocios o una zona de un portal. Cuando se invoca un script de servicio desde un script del Asistente de Proceso de Negocios o una zona de portal, tendrá acceso al conjunto de variables de contexto globales que se completan en la sesión de la Interface de Usuario. Para el proceso de scripting de servicios, los campos globales se deben prefijar con dos signos de dólar (en lugar de uno, como se utiliza para el scripting del Asistente de Proceso de Negocios). Por ejemplo, si PER_​ID es una variable de contexto global soportada, en el script de servicio, se puede hacer referencia a ella como $$PER_​ID:

move $$PER_ID to "schema/customerId";
Nota: Tal como se describe en Variables Contextuales, un script de servicio puede declarar variables de contexto que usen la misma sintaxis con dos signos de dólar.

Sentencias Perform Script y Transfer Control

El paso de edición de datos soporta la funcionalidad análoga a los tipos de pasos Ejecutar script y Transferir Control. Estos se aplican solamente a scripts del Asistente de Proceso de Negocios.

Sintaxis Valores Válidos Comentarios

performScript

'Nombre de Script del Asistente de Proceso de Negocios' El script que se debe ejecutar se proporciona explícitamente.
$Variable El script que se debe ejecutar se encuentra en una variable.
"XPath" El script que se debe ejecutar se encuentra en un elemento y se hace referencia a él con su XPath.

transferControl

Análogo a la sentencia performScript
Nota: Cuando el script mencionado en la sentencia performScript haya finalizado, se devolverá el control al script del Asistente de Proceso de Negocios de llamada. Cuando el script mencionado en la sentencia transferControl haya finalizado, no regresará al script de llamada, sino que se garantizará el control total de la transferencia al script.

Sentencia Navigate

El paso de edición de datos soporta la funcionalidad análoga al tipo de paso Navegar a una página. Esto solamente se aplica a scripts del Asistente de Proceso de Negocios.

Sintaxis Valores Válidos Comentarios

navigate

'Código de navegación' La opción de navegación se proporciona explícitamente.
$Variable La opción de navegación se encuentra en una variable.
"XPath" La opción de navegación se encuentra en un elemento y se hace referencia a ella con su XPath.

Además, el paso de edición de datos brinda la posibilidad de indicar que el panel de control se debe refrescar durante la navegación. Esto solamente se aplica a scripts del Asistente de Proceso de Negocios.

Sintaxis Valores Válidos

navigateAndReloadDashboard

Análogo a la sentencia navigate.

Declarar Objeto de Negocio con Grupo de Objeto de Negocio

Esta sentencia es específica para los scripts del Asistente de Proceso de Negocios que planifican usar el Procesamiento del Mantenimiento del Objeto de Negocio Principal (F1–MainProc) para sus sentencias Generate Edit Map. Este script espera que los datos utilizados para desplegar en el mapa estén dentro de una etiqueta boGroup.

Sintaxis Valores Válidos Comentarios

declareBOWithBOGroup

'Nombre de Objeto de Negocio' El Objeto de Negocio se proporciona explícitamente.
$Variable El Objeto de Negocio se encuentra en una variable.
"XPath" El Objeto de Negocio se encuentra en un elemento y se hace referencia a él con su XPath.

La siguiente tabla realza la sintaxis adicional para esta sentencia.

Sintaxis Valores Válidos

as

'Nombre de Esquema Dinámico'

Ejemplos:

declareBOWithBOGroup 'BusinessObject' as 'newMapSchema';
 
declareBOWithBOGroup $variableBO as 'newMapSchema';
 
declareBOWithBOGroup "daName/boElement" as 'newMapSchema';

Sentencia Invoke Map

El paso de edición de datos soporta la funcionalidad análoga al tipo de paso Invocar mapa. Esto solamente se aplica a scripts del Asistente de Proceso de Negocios.

Sintaxis Valores Válidos Comentarios

invokeMap

'Nombre de Mapa' El Mapa de Interface de Usuario se proporciona explícitamente.
$Variable El Mapa de Interface de Usuario se encuentra en una variable.
"XPath" El Mapa de Interface de Usuario se encuentra en un elemento y se hace referencia a él con su XPath.

La siguiente tabla realza la sintaxis adicional para esta sentencia.

Sintaxis Valores Válidos Comentarios

using

"Nombre de grupo de Área de Datos" Indica el área de datos que se debe transmitir al servidor o se debe recibir de él al presentar el formato HTML asociado con el mapa.

target

bpa

page

popup

Consulte el tipo de paso Invocar mapa para obtener más información sobre los valores de destino.

Si se configura el mapa de Interface de Usuario para devolver un valor, se puede evaluar con la variable $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;

Sentencias Generate Edit Map

Las sentencias 'generate edit map' se utilizan para generar dinámicamente e iniciar un mapa de edición de Interface de Usuario en función de una definición de esquema. El esquema utilizado puede ser un esquema de Objeto de Negocio, un esquema de Servicio de Negocio, un esquema de Script de Servicio o un esquema de Área de Datos. Esto solamente se aplica a scripts del Asistente de Proceso de Negocios. La sentencia generate variará en función del tipo de esquema, pero la sintaxis es análoga.

Sintaxis

generateBOEditMap

generateBSEditMap

generateSSEditMap

generateDAEditMap

El código de Objeto de Negocio, el código de Servicio de Negocio, el código de Script de Servicio y el código de Área de Datos se pueden especificar usando un valor literal (encerrado en comillas simples), como variable temporal o haciendo referencia a una ubicación de un esquema XPath (encerrado en comillas dobles).

La siguiente tabla realza la sintaxis adicional para esta sentencia.

Sintaxis Valores Válidos Comentarios

using

"Nombre de grupo de Área de Datos" Indica el área de datos que se debe transmitir al servidor o se debe recibir de él al presentar el formato HTML asociado con el mapa.

target

bpa

page

popup

Los valores de destino indican dónde se debe desplegar el mapa generado como se describe en el tipo de paso Invocar mapa. Si se configura el mapa de Interface de Usuario para devolver un valor, se puede evaluar con la variable $MAP-VALUE.

En los ejemplos, se usa generateBOEditMap, pero las sentencias son similares para los otros tipos de esquemas.

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;

Sentencia Terminate

El paso de edición de datos soporta la funcionalidad análoga al tipo de paso Terminar.

El siguiente es un ejemplo de un simple paso Terminar que detendrá el script.

if ("not(parm/spouse/name)")
  terminate;
else
  goto addSpouse;
end-if;

La sentencia terminate with error solamente está disponible en un script de servicio.

Nota: Para emitir un error desde un script de Asistente de Proceso de Negocios, consulte Consejos y Trucos Útiles.
Sintaxis Atributos Comentarios

terminate with error (x, y %n= element= )

'x' representa la categoría de mensaje Requerido.
'y' representa el número de mensaje Requerido.
%n="Element XPath" o %n='literal' Especifique los parámetros de sustitución que soporta el mensaje usando valores literales o referencias XPath. Cuando el valor que se sustituirá es un elemento de una lista, utilice la XPath del elemento de la lista calificado por la ocurrencia en la lista.
element='Element XPath' or element=$variable Opcionalmente, especifique un nombre de elemento en un mapa de Interface de Usuario para realzar como parte del error. Cuando el elemento erróneo está dentro de una lista, utilice la XPath del elemento de la lista calificado por la ocurrencia en la lista.

Ejemplo de un campo simple:

if ("string(customer/lastName) = $BLANK")
  terminate with error (8000, 1001 %1="customer/lastName" %2='Last name required' element='customer/lastName');
end-if;

Ejemplo de finalización cuando el elemento que se debe marcar forma parte de una 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;
Acceso Rápido: Para obtener más información sobre la presentación de errores en un mapa de Interface de Usuario, consulte Errores de Despliegue.

Invocación de Código Groovy

Si tiene un script de conector o un script de servicio que combina scripting de XPath y scripting de Groovy, el paso de edición de datos soporta la capacidad de invocar el código Groovy mediante la sintaxis invokeGroovy 'método';, donde "método" es el nombre de un método definido en un paso Miembros de Groovy dentro del script. Solo los métodos que no reciben argumentos y regresan vacíos se pueden invocar así. Sin embargo, el método invocado desde el paso de datos de edición se puede soportar mediante código Groovy adicional en otros tipos de paso de Miembros de Groovy.

Ejemplo de paso de Datos de Edición:

invokeGroovy 'invoke';

Ejemplo de paso de Miembros de Groovy:

void invoke() {
  initParms()
  readBO()
  initConfig()
  retrieve()
  updateBO()
}
Nota: Como se menciona en Uso de Groovy en Scripts, si se trata de un script de conector y el código es solo Groovy, debe usar la versión de motor de script de Groovy en lugar de la técnica anterior. Esto se considera más eficaz, ya que evita la conversión de datos desde y hacia la interface XML.

Depuración de un Script del Asistente de Proceso de Negocios

Si un script del Asistente de Proceso de Negocios tiene una altura mayor que cero, los nodos seleccionados del área de datos del script se pueden desplegar durante el tiempo de ejecución. Los datos XML se despliegan durante la ejecución del script en el área de despliegue del script del Asistente de Proceso de Negocios. Especifique la XPath de un nodo XML de cualquier área de datos del script del Asistente de Proceso de Negocios entre los siguientes pares de caracteres: '%+' y '+%'.

Por ejemplo, todo el contenido del nodo de grupo de esquema denominado 'input' y el contenido específico del elemento de esquema denominado 'output/status' se desplegarán en el área de despliegue del script del Asistente de Proceso de Negocios. El texto de depuración se debe escribir en el área de texto del script del Asistente de Proceso de Negocios y no en el campo de edición de datos del script. El texto de depuración se puede declarar para cualquier paso explícito del script.

display input: %+input+% , and output status: %+output/status+%

Consejos y Trucos Útiles

En esta sección, se proporcionan algunas sugerencias sobre cómo implementar cierta lógica común.

Localización del Usuario Conectado en el Asistente de Proceso de Negocios

Para los scripts basados en servidor, la variable $USER se completa con el usuario actualmente conectado. Esta variable no está disponible para los scripts de Asistente de Proceso de Negocios. El Asistente de Proceso de Negocios puede llamar al script de servicio F1-GetUser si necesita esta información.

Emisión de un Error desde un Script de Asistente de Proceso de Negocios

Para los scripts basados en servidor, utilice la sentencia terminate with error para devolver un mensaje de error al usuario. Para desplegar ese error, el Asistente de Proceso de Negocios puede transferir el control a F1–HandleErr, como se describe en Declaración e Invocación de Objetos Basados en Esquema. Esto no se soporta con un script de Asistente de Proceso de Negocios. Una técnica disponible para que un Asistente de Proceso de Negocios emita un error es llamar al servicio de negocio F1-RethrowError y transferir los detalles del error. Este servicio de negocio completa los campos de error del sistema necesarios para emitir el error. A continuación, transfiere el control a 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;