Pasos de edición de datos

Los pasos de tipo Editar datos ofrecen una región de formato libre donde se pueden especificar los comandos para controlar el procesamiento de script.

Introduzca los comandos de generación de script en el campo Editar texto de datos. Pulse el icono adyacente para abrir una ventana que proporcione más espacio para definir el paso de edición de datos.

En general, la sintaxis disponible en los pasos de edición de datos imita los comandos que hay disponibles en los tipos de pasos explícitos. Sin embargo, hay unos pocos comandos que están disponibles únicamente en los pasos de edición de datos. Por ejemplo, los dos comandos estructurados: For (Para) e If (Si).

Nota: no se soportan todos los tipos de pasos de ayudante de proceso de negocio al usar la sintaxis de edición de datos. Consulte los detalles que aparecen a continuación para obtener más información sobre los comandos de edición de datos y ejemplos.

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

Contenido

Comentarios

Variables temporales

Variables de contexto

Sentencia Mover

Sentencia Ir a

Sentencia Bifurcación condicional

Sentencia Si

Sentencia Para

Procesamiento de lista

Funciones para procesar una lista

Declarar y llamar a objetos basados en esquema

Variables del sistema y globales

Ejecutar script y transferir

Sentencia Navegar

Sentencia Llamar a mapa

Declarar objeto de negocio con grupo de objeto de negocio

Sentencias Generar mapa de edición

Sentencia Terminar

Llamada a código de Groovy

Depuración de un script de ayudante de proceso de negocio

Consejos y trucos útiles

Comentarios

Puede introducir comentarios en el script mediante la notación de doble barra // en los dos primeros 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. Debe hacerse referencia a ellas mediante un solo signo de dólar inicial ('$'). Sin embargo, las variables temporales se comportan de manera diferente en los diversos tipos de script:

  • En los scripts de ayudante de proceso de negocio, las variables temporales son persistentes al pasar de un script de ayudante de proceso de negocio a otro (consulte las sentencias Ejecutar script y Transferir control), lo que significa que puede usar variables temporales para la comunicación entre scripts de ayudante de proceso de negocio.

  • Las variables temporales no se pueden transferir de un script de ayudante de proceso de negocio a un script de servicio o de plug-in. Solo pueden transferirse elementos de área de datos entre estos tipos de scripts.

  • Dentro de los scripts de servicio y de plug-in, las variables temporales son persistentes solo durante la vida del script concreto que ha declarado la variable. Esto significa que las variables temporales no se pueden transferir entre scripts de plug-in y scripts de servicio; solo las variables globales, las variables de contexto y los elementos de área de datos se pueden transferir entre estos tipos de scripts.

Variables temporales de declaración/inicialización/valores por defecto

Al usar una variable temporal, se debe declarar o inicializar con un valor adecuado antes de utilizarla. Un método habitual para declarar una variable es mover datos hacia dicha variable en una sentencia de movimiento, por ejemplo.

move "0" to $index;
Fastpath: consulte Mover a una variable temporal para obtener más información sobre la declaración implícita de una variable temporal dentro de una sentencia de movimiento.

Para los script de ayudante de proceso de negocio, como ya se ha indicado, las variables temporales se pueden transferir de un script de ayudante de proceso de negocio a otro. De este modo, es habitual hacer referencia a una variable temporal en un ayudante de proceso de negocio que debería haber inicializado un ayudante de proceso de negocio anterior. Sin embargo, si hay algún motivo por el cual un ayudante de proceso de negocio anterior no ha inicializado una variable temporal, si existe una referencia a dicha variable temporal provocará un error. Por lo tanto, se recomienda usar la sentencia por defecto, que inicializará las variables temporales que no se hayan creado/inicializado.

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

    default $InputAction;
  • La sentencia siguiente definirá el valor de la variable temporal $InputAction como 'read' (leer), pero solo si la variable no se ha inicializado aún:

    default $InputAction as 'read';
Nota: los scripts deben evitar definir variables usando una palabra clave reservada. En la tabla siguiente se muestran 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 solo están disponibles en los scripts de servicio. La variable de contexto estará disponible durante la duración del script de servicio y de todo lo que invoque. Por lo tanto, puede usar una variable de contexto en un script de servicio para transmitir información a un script o esquema de servicio de nivel inferior. Debe hacerse referencia a ellas escribiendo dos signos de dólar iniciales ('$$').

Nota: debido a que las variables de contexto están disponibles para los scripts de nivel inferior, a veces se las puede denominar variables globales o variables de contexto global. Pero no deben confundirse con las variables globales.

Variables de contexto de declaración/inicialización/valores por defecto

Al usar una variable de contexto, se debe declarar o inicializar con un valor adecuado antes de utilizarla. Un método habitual para declarar una variable es mover datos hacia dicha variable en una sentencia de movimiento, por ejemplo.

move 'context variable' to $$contextVariable;
Fastpath: para obtener más información, consulte Mover usando una variable de contexto.

Sentencia Mover

La sentencia Mover copia un valor de origen a un destino. En la siguiente tabla se resaltan varias opciones soportadas en la sentencia Mover.

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

move "xpath" to "xpath";

Nota: una expresión XPath se escribe entre comillas dobles.
Sentencia Mover con referencia XPath simple.
move "acct/totalBalance" to 
"parm/formattedValue";
Sentencia Mover con función de concatenación de XPath.
move "concat(person/firstName, ',', 
person/lastName)" 
to "parm/fullName";
Sentencia Mover con función anterior a la subcadena de XPath.
move "substring-before(parm/fullName,',')" 
to "person/firstName";
Sentencia Mover con función posterior a la subcadena de XPath.
move "substring-after(parm/fullName,',')" 
to "person/lastName";
Sentencia Mover con función de subcadena de XPath.
move "substring(parm/date,1,4)" 
to "parm/year";
Elemento Mover a

move 'literal' to "xpath";

Nota: los valores literales se escriben entre comillas simples.
Sentencia Mover que usa una cadena literal.
move 'okay for mailing' 
to "account/preferences[type="mail"]/text";
Elemento Mover a

move 'boolean' to "xpath";

Sentencia Mover que usa un booleano como cadena literal.
if ("account/balance > 0") 
  move 'true' 
  to "account/hasDebitBalance"; 
end-if;
Movimiento de una expresión, que da como resultado un booleano. Tenga en cuenta que el filtro del ejemplo siguiente se encuentra en un nodo de grupo.
<schema>
  <account>
    <hasDebitBalance type="boolean"/>
    <balance/>
  </account>
</schema>

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

move "xpath" to "xpath";

Movimiento de un juego de elementos de un grupo a otro.

El sistema establece la coincidencia del nivel inicial de los nombres de elementos y los nombres de grupo/lista del esquema de origen al esquema de destino. En el caso de las listas y los grupos, el comportamiento por defecto consistirá en mover todos los elementos del grupo/lista de origen al grupo/lista de destino, aunque no se hayan definido en estos últimos.

El servicio de negocio F1-MoveByName se puede utilizar para obtener un control más granular del movimiento, sin tener que definir cada sentencia de movimiento individual.

move "account/custInfo" to "person";

Esta sentencia es equivalente a la siguiente sentencia:

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

Mover usando una variable temporal

Al mover a una variable local temporal, no se escribe entre comillas dobles.

move "xpath" to $variable;

move "count(Person/names/personName) 
+ count(Person/ids/personId)" 
to $PersonChildCount;
Al mover desde una variable temporal, la variable se escribe entre 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”;

Se hace referencia a las variables de contexto, de origen o de destino sin escribirlas entre 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 Evaluar permite que la ubicación de origen o de destino del movimiento se derive de forma dinámica desde una ubicación de elemento de variable o de esquema.
move 'literal' 
to evaluate("schemaLocation"); 
//
move "schemaLocation" 
to evaluate($Variable);
move evaluate("schemaLocation") 
to $Variable;
// 
move evaluate($Variable) 
to "schemaLocation";
Mover con escape

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

Mover con escape solo está disponible para scripts de servicio y scripts de plug-in. Esta sentencia analiza el valor de texto de origen para contenido HTML y lo escapa, es decir, sustituye cualquier carácter similar al código HTML con caracteres especiales de escape de la representación HTML. Al realizar esta acción, el texto se mostrará como texto sin formato cuando se muestre como parte de un elemento HTML.
Nota: solo debe usar esta función si el texto debe mostrarse como parte de un elemento HTML y se sospeche que pueda contener caracteres similares a HTML o incluso HTML con fines malintencionados que no se debería representar como HTML. Si se muestra de forma incorrecta usando un elemento no HTML, los caracteres de escape especiales, si los hubiera, serían visibles como parte del texto. Consulte Atributos y funciones de mapa de UI para obtener más información sobre cómo definir un elemento para que muestre contenido HTML.
move escape("schemaLocation") 
to $Variable;
// 
move escape($Variable) 
to "schemaLocation";
Mover nulo

move null to "xpath";

Puede eliminar información del documento de instancia XML mediante la sintaxis especial de move 'null'. Tenga en cuenta que puede especificar un nombre de nodo en la expresión XPath o un nombre de grupo. Si se especifica un grupo, ese grupo y todos los elementos secundarios se eliminarán del procesamiento.

Eliminar un nodo y todos sus nodos secundarios:

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

Para eliminar todos los nodos secundarios de un nodo de grupo, use el sufijo '/*'.

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

Sentencia Ir a

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

A continuación se muestra un ejemplo de ir a otra ubicación en el mismo paso identificado por 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 muestra un ejemplo de ir a un paso distinto dentro del mismo script. La secuencia de pasos es la referencia utilizada como etiqueta.

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

Sentencia Bifurcación condicional

El paso de edición de datos soporta una funcionalidad análoga al tipo de paso Bifurcación condicional. La sintaxis es branch (“xpath”) goto etiqueta else etiqueta; donde:

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

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

El siguiente ejemplo usa etiquetas para addSpouse y addAccount

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

Sentencia Si

La sentencia if es similar a la sentencia de bifurcación condicional. Ambas pueden usarse para estructurar la lógica de un script. Esta sentencia puede incluir de forma opcional una sentencia en otro caso, 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 independiente. Solo está disponible en el texto de edición de datos.

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

Ejemplo en el que 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 que 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 utilizado para evaluar diversos 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 XPath muestra un booleano basado en la existencia del nodo. En este ejemplo, si el nodo existe en el documento de instancia XML que se está procesando, la sentencia se evaluará como Verdadero. Si no se encuentra ningún elemento, la sentencia se evaluará como Falso.

Nota: al tratar nodos XPath como variables booleanas, tenga en cuenta que un nodo vacío se evaluará como Verdadero. Solo si falta un nodo se evaluará como 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 Para

La sentencia for crea una lista de nodos o valores en función de la expresión XPath. Si se especifica un nodo de lista, todos los nodos secundarios de la lista, junto con su contenido, estarán disponibles dentro del bucle. Si se especifica un nodo secundario de forma directa, dentro del bucle solo estará disponible una lista de valores.

Nota: para obtener más información sobre la creación de nuevas entradas en una lista, consulte el ejemplo Creación de una nueva instancia de lista.
Nota: este es un ejemplo de una sentencia que no se representa como un tipo de paso independiente. Solo está disponible en el texto de edición de datos.

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

Los ejemplos siguientes se basan en este esquema de ejemplo:

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

Ejemplo que especifica el nodo de lista en la expresión XPath en la que todos los nodos secundarios están disponibles para su procesamiento.

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 especifica un nodo secundario dentro del nodo de lista en la expresión XPath. Solo los valores de ese nodo están disponibles para su procesamiento.

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

Ejemplo que muestra que se puede usar un filtro para limitar las filas seleccionadas por el bucle 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 las listas de procesamiento. Los ejemplos de esta sección hacen referencia al esquema siguiente:

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

Hacer referencia a un elemento de lista. Puede mover un valor a una instancia de lista concreta haciendo referencia a un nodo de identificación de la lista en un filtro. La sintaxis es move "xpath" to "xpathList[filtro]/elemento"; Ejemplo:

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

Creación de una nueva instancia de lista. Se puede usar una notación especial dentro de una sentencia de destino de movimiento para indicar que se debe crear una nueva instancia de lista. El signo "+" indica al procesador de scripts que se debe iniciar una nueva instancia de 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. Una entrada de lista XML se puede suprimir de la base de datos moviendo un atributo de acción de 'delete' al nombre de elemento. Para provocar la supresión de una entrada de lista de la base de datos se necesita un atributo de 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;

A continuación 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 arriesgado si se necesitan interacciones de objeto de negocio iterativas. El documento XML que contiene la instancia de lista que se va a suprimir no se modificará después de realizarse una interacción de objeto de negocio correcta, lo que significa que el documento seguirá conteniendo la instancia de lista aunque ya no exista. Para resolver este problema, es esencial volver a leer el objeto de negocio después de cualquier actualización de objeto de negocio en la que se utilice el atributo de acción 'delete'.
Nota: una alternativa al atributo "delete" descrito aquí es usar la acción de objeto de negocio de replace. La manipulación de una lista para usar la acción "sustituir" evita el problema descrito arriba acerca de la información caducada en los documentos de solicitud después de la actualización de objeto de negocio.

Funciones para procesar una lista

XPath proporciona varias funciones que son útiles para procesar elementos de una lista, incluyendo count, sum y last.

Los ejemplos siguientes 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>

A continuación se muestra un ejemplo de una suma. La sintaxis es move "sum(xpathList/elemento)" to $variable; El ejemplo suma el saldo total.

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

A continuación se muestra un ejemplo de una suma que utiliza un filtro para obtener un subtotal. El ejemplo suma el saldo de las entradas que tienen la categoría '‘tax’'.

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

A continuación se muestra un ejemplo de recuento. La sintaxis es move "count(xpathList)" to $variable; El ejemplo realiza el recuento del número de entradas de transacción financiera de la lista.

move "count(ft)" to $TranCount;

A continuación se muestra un ejemplo de '‘last’', que se usa para localizar la última entrada. La sintaxis esmove "last(xpathList)" to $variable; El ejemplo localiza el último importe de la lista de transacciones financieras.

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

Declarar y llamar a objetos basados en esquema

Puede llamar a un objeto de negocio, un servicio de negocio o un script de servicio dentro del paso de edición de datos. Para soportar la llamada dinámica, se puede declarar un nombre de área de datos dinámico.

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 UI. La sentencia de declaración variará según el tipo de esquema, pero la sintaxis es análoga.

  • declareBO 'Nombre de BO' | $variable | "xpath" as 'DynamicDataArea';

  • declareBS 'Nombre de 'BS' | $variable | "xpath" as 'DynamicDataArea';

  • declareSS 'Nombre de SS' | $variable | "xpath" as 'DynamicDataArea';

  • declareDA 'nombre de DA' | $variable | "xpath" as 'DynamicDataArea';

  • declareMap 'Nombre de mapa' | $variable | "xpath" as 'DynamicDataArea';

Al llamar a un objeto de negocio, un esquema de negocio o un script de servicio, el nombre del objeto se puede especificar como un valor literal o puede ser un valor contenido en un elemento o una variable. Debe proporcionar una referencia de XPath a un nombre de grupo para cada llamada.

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

  • read. Esta acción lee la vista actual de los datos de objeto de negocio.

  • add. Esta acción añadirá el objeto y leerá y devolverá la vista resultante del objeto de negocio.

  • fastAdd. Esta acción añadirá el objeto pero no realizará una acción 'read' (leer) posterior para devolver la vista resultante del objeto de negocio. Se trata de una opción mejor que la adición en lo que respecta al rendimiento, en caso de que no haya motivo para volver a leer el registro.

  • update. Esta acción actualizará el objeto y leerá y devolverá la vista resultante del objeto de negocio. Esta acción ejecuta una 'fusión' de la información especificada en el documento XML de solicitud de la sentencia de llamada con datos de objeto de negocio existentes. El uso de esta acción permite que el script solo indique los elementos que están cambiando.

  • fastUpdate. Esta acción actualizará el objeto pero no realizará una acción 'read' posterior para devolver la vista resultante del objeto de negocio. Se trata de una opción mejor que la actualización en lo que respecta al rendimiento, en caso de que no haya motivo para volver a leer el registro.

  • delete. Esta acción suprimirá el objeto.

  • replace. Esta acción es una alternativa a la acción de actualización. La acción "replace" reemplaza todos los datos de objeto de negocio existentes por la información del documento de solicitud. La acción "replace" se suele usar cuando un objeto de negocio contiene una lista, porque es más fácil sustituir todas las instancias de una lista que realizar una fusión de listas, lo que requiere un lógica especial para suprimir una instancia de lista de forma explícita.

    Nota: la acción "replace" se debe usar cuando se utiliza la funcionalidad de mapa de UI para cargar un fichero CSV.
    Nota: actualmente, la acción de sustitución no se soporta para ningún objeto de mantenimiento que se mantenga en una página 'fija' que utilice una metáfora de lista para mostrar todos los registros de una página al mismo tiempo. La 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 de llamada para un servicio de negocio y un script de servicio son similares. El servicio de negocio/servicio de script se especifica junto con la referencia de XPath al nombre del grupo:

  • invokeBS 'Nombre de BS' | $variable | "xpath" using "xpath";

  • invokeSS 'Nombre de SS' | $variable | "xpath" using "xpath";

En estos ejemplos se usa la sentencia invokeBS, pero las sentencias para la sentencia invokeSS son similares.

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

Avisos de objeto de negocio. Tenga en cuenta que para las generación de scripts de ayudante de proceso de negocio, las sentencias de llamada también pueden indicar cómo se deben gestionar los avisos.

Sintaxis Descripción Ejemplos

with warn asError

Indica que un aviso se debe tratar como un error mostrado en el mapa de UI. 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 se debe mostrar un aviso en el menú emergente de marco estándar. En este escenario, se presentan al usuario los botones estándar Aceptar y Cancelar. Si el usuario pulsa Aceptar, indicará que debe continuar el proceso. Si el usuario pulsa Cancelar, el procesamiento no continuará. Es el valor de configuración recomendado.

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

with warn suppress

Indica que se debe suprimir un aviso. Este es el valor por defecto si no se añade ninguna sintaxis de aviso 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 a los que se llama desde el script de servicio heredarán su nivel de aviso. Por lo tanto, si se llama al script de servicio con aviso, también se llamarán con aviso todas las sentencias de llamada anidadas.

Para los scripts de ayudante de proceso de negocio, también debe haber una lógica después de la llamada para gestionar errores y avisos (si se utiliza la opción de aviso como ventana emergente). La variable de sistema $WARNING se define como true (verdadero) si el usuario ha pulsado el botón Cancelar en la ventana emergente de aviso. Si se muestra un mapa, la lógica volverá a mostrarlo junto con el mensaje de aviso. De esta forma, el usuario podrá realizar cambios y volver a guardar. Si no se ha mostrado ningún mapa antes del aviso, la lógica se cerrará.

La variable de sistema $ERROR indica que se ha recibido un error. Si antes del error se había mostrado un mapa, la lógica volverá a mostrarlo cuando se indique el error. Si no se había mostrado ningún mapa, el producto proporcionará el script de ayudante de proceso de negocio F1–HandleErr, que se utilizará para mostrar el error. A continuación se muestra un ejemplo de lógica de gestión de errores típica.

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 tablas siguientes resaltan las variables de sistema y globales que están disponibles para la creación de scripts.

Variables del sistema - Todos los tipos de script

Las variables de sistema siguientes están disponibles para todos los tipos de script (scripts de servicio, scripts de plug-in y scripts de ayudante de proceso de negocio).

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.

Para los scripts de ayudante de proceso de negocio, esta es la fecha de navegador.

Para los scripts de servidor, esta es la fecha de servidor (y se ve afectada por la lógica de fecha de sustitución del sistema).

move "$CURRENT-DATE" to $tempDate;
$CURRENT-STD-DTTM Representa la fecha y hora actual expresada en tiempo estándar (es decir, sin ajustes de 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 navegador del dispositivo del usuario.
move "$DEVICE-BROWSER" to $tempDeviceBrowser;
$DEVICE-DISPLAY-TYPE Representa el tipo de pantalla de pantalla del dispositivo del usuario: tamaño de escritorio, tamaño medio o pequeño. Los valores devueltos pueden ser como estos: oraDesktop, oraTablet y oraPhone.
move "$DEVICE-DISPLAY-TYPE" to $tempDeviceDisplayType;
$DEVICE-INFO Proporciona la combinación de las tres propiedades de dispositivo (DEVICE-OS, DEVICE-BROWSER y DEVICE-DISPLAY-TYPE) y cada valor de propiedad está separado por punto y coma.
move "$DEVICE-INFO" to $tempDeviceInfo;

Variables del sistema - Solo scripts de ayudante de proceso de negocio

Las variables de sistema siguientes solo están disponibles/son aplicables para los tipos de script de ayudante de proceso de negocio.

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

Variables del sistema - Solo scripts de servidor

Las variables de sistema siguientes solo están disponibles/son aplicables para los tipos de script de servicio y de plug-in.

Variable Descripción Ejemplo
$ADDITIONAL-IP-INFO Una solicitud HTTP incluye el campo de cabecera "dirección IP adicional". Puede rellenarse con una implantación si hay alguna información disponible en el servidor proxy o en el equilibrador de carga como, por ejemplo, la dirección IP de origen.
move "$ADDITIONAL-IP-INFO" to "parm/request/headerIpAddress";
$CURRENT-DTTM Representa la fecha y hora actual.
move "$CURRENT-DTTM" to $tempDateTime;
$F1-INSTALLATION-TIMEZONE Representa el código de zona horaria definido en las opciones de instalación.
move "$F1-INSTALLATION-TIMEZONE" to $timeZone;
$LANGUAGE Representa el código de idioma que usa el script. Este suele ser el idioma por defecto del usuario.
move "$LANGUAGE" to $tempLanguage;
$PROCESS-DATE Representa la fecha de proceso. La fecha del proceso es distinta de la fecha actual porque la fecha del proceso será coherente durante toda la duración del proceso que se está ejecutando. Por ejemplo, si un script de servicio almacena varios objetos de negocio, la fecha del proceso se inicializará al inicio de la ejecución del script de servicio y cada objeto de negocio tendrá la misma fecha de proceso por defecto. La fecha actual, de forma especial la fecha y hora actual, reflejará la hora real de procesamiento.
move "$PROCESS-DATE" to $tempDate;
$PROCESS-DTTM Representa la fecha y hora de proceso. Tenga en cuenta que la fecha y la hora de proceso se inicializan al inicio de un proceso concreto y no reflejan la fecha y 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 mediante un servidor proxy o un equilibrador de carga, esta dirección IP es la dirección IP del proxy o del equilibrador de carga, no la dirección IP del usuario final. Consulte la variable $ADDITIONAL-IP-INFO para obtener más información.
move "$REQUESTING-IP-ADDRESS" to "parm/request/systemIpAddress";
$USER Representa el ID de usuario del usuario que ejecuta el script.
move "$USER" to $tempUser;

En el caso de los scripts de ayudante de proceso de negocio en los que sea necesario conocer el ID del usuario actual, consulte Consejos y trucos útiles.

Variables globales

Los scripts de ayudante de proceso de negocio y los scripts de servicio tienen acceso a los valores definidos en el contexto global.

Al lanzar un script de ayudante de proceso de negocio desde la interfaz de usuario, estas variables se inicializarán de modo automático. Puede hacerse referencia a estas variables escribiendo un solo signo de dólar delante del nombre de campo. Por ejemplo, si PER_​ID es una variable global soportada, se puede hacer referencia a $PER_​ID en el script de ayudante de proceso de negocio:

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

Para los scripts de ayudante de proceso de negocio, solo se puede hacer referencia a las variables globales si el script de servicio se ha llamado de forma directa desde un script de ayudante de proceso de negocio o desde una zona de un portal. Cuando se llama a un script de servicio desde un script de ayudante de proceso de negocio o desde una zona de portal, tendrá acceso al conjunto de variables de contexto global rellenadas en la sesión de UI. Para los scripts de servicio, los campos globales deben tener dos signos de dólar como prefijo (en lugar de uno como en el caso de los scripts de ayudante de proceso de negocio). Por ejemplo, si PER_​ID es una variable de contexto global soportada, se puede hacer referencia a $$PER_​ID en el script de servicio.

move $$PER_ID to "schema/customerId";
Nota: según se ha descrito en Variables de contexto, un script de servicio puede declarar variables de contexto que utilizan la misma sintaxis de dos signos de dólar.

Sentencias Ejecutar script y Transferir control

El paso de edición de datos soporta una funcionalidad análoga a los tipos de paso Ejecutar script y Transferir control. Ambos tipos de paso solo son aplicables a scripts de ayudante de proceso de negocio.

Sintaxis Valores válidos Comentarios

performScript

'Nombre de script de ayudante de proceso de negocio' El script que se ejecutará se indica de forma explícita.
Variable El script que se ejecutará se encuentra en una variable.
"XPath" El script que se ejecutará se encuentra en un elemento, al que se hace referencia en su XPath.

transferControl

Análogo a la sentencia performScript
Nota: cuando finalice el script indicado en la sentencia performScript, el control volverá a pasar al script de ayudante de proceso de negocio que realiza la llamada. Cuando finalice el script nombrado en la sentencia transferControl, el control no se devolverá al script de llamada; se concederá el control completo al script al que se ha realizado la transferencia.

Sentencia Navegar

El paso de edición de datos soporta una funcionalidad análoga al tipo de paso Navegar a una página. Esto solo es aplicable a los scripts de ayudante de proceso de negocio.

Sintaxis Valores válidos Comentarios

navigate

'Código de navegación' La opción de navegación se indica de forma explícita.
Variable La opción de navegación se encuentra en una variable.
"XPath" La opción de navegación se encuentra en un elemento, al que se hace referencia en su XPath.

Además, el paso de edición de datos soporta la posibilidad de indicar que el panel de control debe actualizarse al navegar. Esto solo es aplicable a los scripts de ayudante de proceso de negocio.

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 script de ayudante de proceso de negocio que planean usar el script base Proceso de mantenimiento de objeto de negocio principal (F1-MainProc) para sus sentencias Generar mapa de edición. Este script espera que los datos utilizados para mostrar 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 indica de forma explícita.
Variable El objeto de negocio se encuentra en una variable.
"XPath" El objeto de negocio se encuentra en un elemento, al que se hace referencia en su XPath.

En la siguiente tabla se resalta una 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 Llamar a mapa

El paso de edición de datos soporta una funcionalidad análoga al tipo de paso Llamar a mapa. Esto solo es aplicable a los scripts de ayudante de proceso de negocio.

Sintaxis Valores válidos Comentarios

invokeMap

'Nombre de mapa' El mapa de UI se indica de forma explícita.
Variable El mapa de UI se encuentra en una variable.
"XPath" El mapa de UI se encuentra en un elemento, al que se hace referencia en su XPath.

En la siguiente tabla se resalta una 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 transferirá al y desde el servidor cuando se represente el formulario HTML asociado con el mapa.

target

bpa

page

popup

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

Si el mapa de UI se ha configurado para devolver un valor, puede evaluarse mediante 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 Generar mapa de edición

Las sentencias 'generar mapa de edición' se usan para generar y lanzar de forma dinámica un mapa de edición de UI según una definición de esquema. El esquema utilizado puede ser un esquema de objeto de negocio (BO), un esquema de servicio de negocio (BS), un esquema de script de servicio (SS) o un esquema de área de datos (DA). Esto solo es aplicable a los scripts de ayudante de proceso de negocio. La sentencia de generación variará en función del tipo de esquema, pero la sintaxis es análoga.

Sintaxis

generateBOEditMap

generateBSEditMap

generateSSEditMap

generateDAEditMap

El código del objeto de negocio/servicio de negocio/script de servicio/área de datos se puede especificar como un valor literal (escrito entre comillas simples), como una variable temporal o haciendo referencia a una ubicación de esquema de XPath (escrita entre comillas dobles).

En la siguiente tabla se resalta una 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 transferirá al y desde el servidor cuando se represente el formulario HTML asociado con el mapa.

target

bpa

page

popup

Los valores de destino indican dónde debe mostrarse el mapa generado, tal como se describe en el tipo de paso Llamar a mapa. Si el mapa de UI se ha configurado para devolver un valor, puede evaluarse mediante la variable $MAP-VALUE.

En estos ejemplos se usa la sentencia generateBOEditMap, pero las sentencias para los otros tipos de esquema son similares.

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 Terminar

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

A continuación se muestra un ejemplo de un paso terminate simple que detendrá el script.

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

La sentencia terminar con error solo está disponible para los scripts de servicio.

Nota: para emitir un error desde un script de ayudante de proceso de negocio, consulte Consejos y trucos útiles.
Sintaxis Atributos Comentarios

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

'x' representa la categoría de mensaje Necesario.
'y' representa el número de mensaje Necesario.
%n="XPath de elemento" o %n='literal' Especifique los parámetros de sustitución soportados por el mensaje usando valores literales o referencias de XPath. Cuando el valor que se va a sustituir sea un elemento dentro de una lista, utilice el XPath del elemento de la lista, calificado según frecuencia en la lista.
element='XPath de elemento' o element=$variable De forma opcional, puede especificar un nombre de elemento dentro de un mapa de UI para resaltarlo como parte del error. Cuando el elemento con errores esté en una lista, utilice el XPath del elemento de la lista, calificado según frecuencia 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 terminación si el elemento que se marca está en 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;
Fastpath: para obtener más información sobre la presentación de errores en un mapa de UI, consulte Mostrar errores.

Llamada a código de Groovy

Si dispone de un script de plug-in o un script de servicio que combine los scripts de XPath y de Groovy, el paso de edición de datos soportará la posibilidad de llamar al código de Groovy utilizando la sintaxis invokeGroovy 'method'; donde 'method' será el nombre del método definido en el paso Miembros de Groovy en el script. De esta forma, solo se podrá llamar a los métodos que no reciban argumentos y se devuelvan nulos. No obstante, el método que se llama desde el paso de edición de datos se podrá soportar con el código de Groovy adicional en otros tipos de paso de Miembros de Groovy.

Ejemplo de paso Editar datos:

invokeGroovy 'invoke';

Ejemplo de paso Miembros de Groovy:

void invoke() {
  initParms()
  readBO()
  initConfig()
  retrieve()
  updateBO()
}
Nota: tal y como se ha mencionado en Uso de Groovy dentro de scripts, si se trata de un script de plug-in y el código es exclusivamente Groovy, deberá utilizar el motor de scripts de Groovy en lugar de la técnica anterior. Se considera más eficaz, ya que evita la conversión de datos desde la interfaz XML y hacia ella.

Depuración de un script de ayudante de proceso de negocio

Si un script de ayudante de proceso de negocio tiene una altura mayor que cero, los nodos seleccionados del área de datos del script se pueden mostrar durante la ejecución. Los datos XML se muestran durante la ejecución del script dentro del área de presentación del script de ayudante de proceso de negocio. Especifique el XPath de un nodo XML de una de las áreas de datos del script de ayudante de proceso de negocio, escribiéndolo entre los caracteres emparejados '%+' y '+%'.

Por ejemplo, el contenido completo del nodo de grupo de esquemas denominado 'input' y el contenido específico del elemento de esquema denominado 'output/status' se mostrarán en el área de presentación del script de ayudante de proceso de negocio. El texto de depuración debe introducirse en el área de texto del de ayudante de proceso de negocio 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 incluyen algunas sugerencias sobre cómo implantar parte de la lógica común.

Búsqueda de un usuario conectado en un ayudante de proceso de negocio

En el caso de los scripts basados en servidor, la variable $USER se rellena con el usuario conectado actualmente. Esta variable no está disponible para scripts de ayudantes de proceso de negocio. El ayudante de proceso de negocio puede llamar al script de servicio F1-GetUser en caso de que la información sea necesaria.

Emisión de un error desde un script de ayudante de proceso de negocio

Para scripts basados en servidor, se utilizará la sentencia de terminación con errores para devolver un mensaje de error que se mostrará al usuario. El ayudante de proceso de negocio podrá mostrar el error, transfiriendo el control a F1–HandleErr según lo descrito en Declarar y llamar a objetos basados en esquema. Esto no se soporta en un script de ayudante de proceso de negocio. Una técnica disponible en el ayudante de proceso de negocio para emitir un error consiste en llamar al servicio de negocio F1-RethrowError, transfiriendo los detalles de error. Este servicio de negocio rellena los campos de error del sistema correspondientes necesarios para emitir el error. A continuación, se 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;