Abre la opción de menú: su recurso con su layout, en un popup ('@POP') o en una pestaña nueva del navegador. La opción de menú se busca con el API de la aplicación en ejecución, no con el API de la ficha del botón. Su columna application no se comprueba salvo que la forma 'APIname~application~idMenu' indique una. En una pestaña nueva el filtro del botón pasa a la página nueva, y sólo hace falta una fila seleccionada cuando el filtro lleva 'row.'.
- Valor
- Hasta la siguiente @ · valores definidos por los metadatos
El idMenu de una opción de menú. También 'APIname~application~idMenu' para indicar el API y la aplicación. Un id que acaba en 'int' está pensado para buscarse en la aplicación de opciones internas, pero ver failure_modes.
Opciones de menú (menu.idMenu) del API de la aplicación.
- Ejemplos
@IDM900@POP@IDM940@IDM203201200201@FILTERrow.XNIF=rowtarget.XNIF- Requiere
- En una pestaña nueva, la página sale del layoutPage de la opción de menú: PAGE_DYNAMIC_QGD (consulta, listado y registro, también si es NULL o vacío), PAGE_DYNAMIC_QG (consulta y listado), PAGE_DYNAMIC_GD (listado y registro) o PAGE_DYNAMIC_D (un único registro), escritos exactamente así. PAGE_DYNAMIC_DDS, que el menú lateral acepta, aquí no se acepta. '@DG' llega a esa página.
- En una pestaña nueva, el queryFormClassName y el displayFormClassName de la opción de menú nombran las clases que pintan la búsqueda y el registro. A un nombre sin paquete se le pone el paquete de vistas de la aplicación.
- Composición
- En cualquier posición · se combina con @POP, @POPINSERT, @FILTER, @DG, @target@
Los tokens se buscan en cualquier parte de la etiqueta, así que su orden no importa. '@POP@IDM' es '@POP' seguido de '@IDM', no un token propio. Escritos juntos, además, evitan que se abra dos veces el mismo popup.
- Dónde no se lee
- Sólo lo leen los botones. En un campo de datos se muestra como parte del texto.
Falla sin avisar o rompe cuando
- Un id que no corresponde a ninguna opción de menú del API de la aplicación no abre nada y no muestra ningún error.
- Un '#' pegado al número corta la petición en ese punto: la opción de menú se encuentra por su id en cualquier API, y la pestaña nueva se abre sin el filtro del botón (el recurso entero).
- Un id que acaba en 'int' se envía sin comillas al backend, que rechaza la consulta: no se abre nada y no se muestra nada.
- Un layoutPage con cualquier otro valor (una errata, otras mayúsculas, PAGE_DYNAMIC_DDS) muestra el error 'valor invalido para layoutPage…' y aun así abre la pestaña, en una dirección que no existe.
- Un queryFormClassName o displayFormClassName NULL, vacío o que no nombra ninguna clase abre el listado, pero al seleccionar una fila no se muestra ningún registro, sin mensaje.
- Una etiqueta con '@URL' o '@PICK@' hace eso en su lugar, esté donde esté '@IDM'.
Ver también @POP, @FILTER, @DG, @target@
Abre la opción de menú en un diálogo sobre la pantalla actual en lugar de en una pestaña nueva. Lo que muestra el diálogo depende del layout de la opción de menú (popup_layouts): un listado (el filtro selecciona sus filas), una pantalla de consulta (el filtro se resuelve contra el recurso destino) o un único registro encontrado con el filtro, con o sin sus listados hijos. Cuando el filtro de un registro único encuentra varios, se muestra el primero en el orden del backend, sin avisar. Pulsarlo otra vez con el mismo popup abierto no abre un segundo. Los botones de la barra de botones de la ficha (idButtonBarForButtons 2) no se pintan dentro del popup. Los botones dentro de la ficha (3) sí, y pueden abrir otros popups.
- Valor
- Sin valor
Sin valor. Un bloque '#style#' en cualquier parte de la etiqueta, hasta la siguiente '@' o el final, da tamaño y estilo al popup: pares 'propiedad:valor' separados por ';'. width, height, min-width, min-height, max-width y max-height fijan el tamaño del diálogo ('with' se lee como width). Cualquier otra propiedad se aplica a su contenido. Los pares sin ':' se ignoran.
- Ejemplos
@POP@IDM901@POP@IDM902@FILTERrow.CLAVE_ARTICULO=rowtarget.ARTICULO#style#width:1200px- Requiere
- El botón abre una opción de menú ('@IDM').
- La opción de menú tiene un layout (menu.layout), la clase que pinta el popup, escrito exactamente como en popup_layouts (mismas mayúsculas, sin espacios alrededor). Una pestaña nueva no lee esa columna, así que una opción que se abre bien desde el menú puede no tenerla.
- Cuando el layout muestra un único registro, la opción de menú tiene además una clase de ficha (menu.displayFormClassName).
- El filterForPopup de la opción de menú, si está informado, se antepone al filtro del botón, unido con ';', y el resultado sigue las reglas de '@FILTER' (si tiene una cláusula 'row.', su primera cláusula tiene que serlo). Un layout de registro único necesita que empiece por 'row.'.
- Composición
- En cualquier posición · se combina con @IDM, @FILTER, @POPINSERT
- Dónde no se lee
- En un botón que ejecuta un proceso ('@IDP') no tiene efecto.
Falla sin avisar o rompe cuando
- Sin layout (NULL) en la opción de menú el popup no se abre. Un diálogo dice que el layout no está definido para el recurso ('Layout sin definir, se debe de especificar en la opción del menú').
- Con una cadena vacía, una clase que no existe, otras mayúsculas o espacios alrededor en el layout, no se abre nada y no se le muestra nada al usuario.
- Con un layout de registro único y sin clase de ficha (displayFormClassName NULL o vacío), no se abre nada y no se muestra nada.
- Cuando el layout destino muestra un único registro, el filtro tiene que empezar por 'row.'. Si no, no se busca ningún registro y el diálogo dice que no hay datos. Esto incluye un filterForPopup sin 'row.' antepuesto a un filtro de botón que sí lo lleva.
- Un filterForPopup sin 'row.' antepuesto a un filtro de botón con 'row.' rompe el filtro (se cortan sus primeros caracteres). Con un layout de listado el backend rechaza la consulta y el usuario ve el error del servidor.
- En un layout de registro único, un campo de origen NULL encuentra los registros destino cuyo campo IS NULL, así que el popup muestra un registro sin relación en lugar de decir que no hay datos. Desde un registro nuevo aún sin guardar los valores de origen son cadenas vacías, que el backend también puede encontrar (una clave numérica compara '' como 0).
- Los cambios de layout ('@DG' y sus variantes) y '@target@' se ignoran en un popup.
- En una página sin listado (la página de registro único, PAGE_DYNAMIC_D) el popup no se abre, aunque el registro esté en pantalla: un error pide seleccionar un registro en el listado lateral ('debe de tener seleccionado un registro en el listado lateral').
Ver también @IDM, @POPINSERT, @FILTER
Abre el registro destino en un popup. Si el filtro no encuentra ninguno, abre un registro nuevo con los valores por defecto del recurso y el campo destino relleno con el valor de origen, para que el registro se pueda crear desde ahí. El registro nuevo no muestra listados hijos hasta que se guarda.
- Valor
- Sin valor
Sin valor.
- Ejemplos
@POPINSERT@IDM905@FILTERrow.CLAVE_ARTICULO=rowtarget.CLAVE_ARTICULO- Requiere
- El botón abre una opción de menú ('@IDM') cuyo layout muestra un único registro.
- El botón tiene un '@FILTER' con exactamente una cláusula 'row.<origen>=rowtarget.<destino>'.
- Composición
- En cualquier posición · se combina con @IDM, @FILTER
- Dónde no se lee
- Cuando el layout destino es un listado o una pantalla de consulta, se comporta como '@POP'.
Falla sin avisar o rompe cuando
- Cuando el filtro no encuentra ningún registro y tiene más de una cláusula, o ninguna cláusula 'row.<origen>=rowtarget.<destino>', no se abre nada y no se muestra nada.
Ver también @POP, @FILTER
Abre la opción de menú en la página de registro único con sus listados hijos, declare la opción de menú la página que declare. Con un '@FILTER', primero comprueba que el filtro encuentra un registro y, si no, dice que no hay datos sin abrir la pestaña. Sin filtro la pestaña se abre y la página dice que no hay datos.
- Valor
- Sin valor · valores definidos por el core
Sin valor. No distingue mayúsculas, y tiene que ir seguido de '@', '#' o el final de la etiqueta.
- Ejemplos
@DG@IDM203201200202@FILTERrow.PROVEEDOR=rowtarget.CLAVE_PROVEEDOR- Requiere
- El botón abre una opción de menú ('@IDM') en una pestaña nueva (sin '@POP').
- Composición
- En cualquier posición · se combina con @IDM, @FILTER
Cuando hay varios cambios de layout, gana el primero de @DG, @GD, @QGD, @QG, @G.
- Variantes
@GD: Abre la página de listado y registro.
@QGD: Abre la página de consulta, listado y registro.
@QG: Abre la página de consulta y listado.
@G: Igual que @QG.
- Dónde no se lee
- En un popup se ignora: el popup usa el layout de la opción de menú.
Falla sin avisar o rompe cuando
- Sustituye un layoutPage no válido de la opción de menú, pero el error sobre ese layoutPage se sigue mostrando antes de abrir la pestaña.
Ver también @IDM, @POP
Filtra lo que abre la opción de menú con valores del registro de origen. En una barra de botones del listado, un filtro con 'row.' exige una fila seleccionada. Con 'FIX->' y un popup a una pantalla de consulta, el filtro queda aplicado a todas las búsquedas de ese recurso durante el resto de la sesión, también en otras pantallas del mismo recurso después de cerrar el popup.
- Valor
- Hasta la siguiente @ · valores definidos por los metadatos
Prefijo opcional 'FIX->' y después cláusulas separadas por ';' y unidas con AND. Una cláusula es una de estas: 'row.<campoOrigen><op>rowtarget.<campoDestino>' (el valor sale del registro de origen, y 'row.subgrid.<campo>' lo toma de la fila seleccionada del listado hijo), 'col<n><op>rowtarget.<campoDestino>' (una columna de la pantalla de origen), '#VALUE<valor><op>rowtarget.<campoDestino>' (un valor fijo), 'rowtarget.<campoDestino><op><valor>' (una condición fija sobre el destino) o '<campoDestino>=rowExtraFilterForChildren.<campo>'. <op> es uno de = <> <= >= < >. Las palabras 'rowExtraFilterForChildren' y 'extraFilterForChildrenMap' como cláusulas se quitan del filtro y activan el filtro extra para los hijos del destino. Un campo destino cuyo nombre contiene 'FECH' se compara como fecha. Si alguna cláusula empieza por 'row.', la primera tiene que hacerlo.
Nombres de campo de los recursos de origen y destino.
- Ejemplos
@FILTERrow.CLAVE_CLIENTE=rowtarget.CLAVE_CLIENTE@FILTERrow.SERIE=rowtarget.SERIE;row.NUMERO=rowtarget.NUMERO@FILTERFIX->row.N_PEDIDO=rowtarget.N_PEDIDO- Requiere
- El botón abre una opción de menú ('@IDM').
- Composición
- En cualquier posición · se combina con @IDM, @POP, @POPINSERT, @DG, @QryInForm
El filtro acaba en la siguiente '@'. Un bloque '#style#' se quita antes, así que puede ir detrás del filtro.
- Dónde no se lee
- Fuera de los botones de navegación no se lee de la etiqueta. Su uso en parentResource (filtros de selección y de combos) es otro contrato.
Falla sin avisar o rompe cuando
- @OR@ y @AND@ se cortan: el filtro acaba en su primera '@' y el resto se pierde sin avisar. En un botón, sólo ';' combina cláusulas.
- '@FILTER->row.…' no es una grafía válida: el valor no empieza por 'row.' y se interpreta mal.
- 'FIX->' en una pestaña nueva sin 'row.' mantiene la condición sobre ese recurso durante el resto de la sesión: todas las búsquedas posteriores de ese recurso, en cualquier pantalla, quedan filtradas por ella hasta que acaba la sesión u otro 'FIX->' la sustituye. Con un popup a un listado, o con 'row.' en una pestaña nueva, muestra un error y funciona como un filtro normal.
- Un valor de origen NULL muestra un diálogo de que no hay datos cuando el destino es un listado en un popup, y un listado vacío sin mensaje en una pestaña nueva. Cuando es un único registro en un popup, encuentra los registros cuyo campo IS NULL (ver '@POP').
Ver también @IDM, @POP, @QryInForm
El listado del popup se filtra con el mismo filtro con el que se cargó el registro de origen, es decir, la búsqueda aplicada en ese momento en la pantalla de origen.
- Valor
- Sin valor
Sin valor. Se admite una '@' final.
- Ejemplos
@POP@IDM940@FILTER@QryInForm@- Requiere
- Va detrás de '@FILTER' ('@FILTER@QryInForm').
- El botón abre un popup ('@POP') cuyo layout de menú es un listado.
- Composición
- En cualquier posición · se combina con @FILTER, @POP, @IDM
- Dónde no se lee
- En un popup a un único registro muestra un diálogo de que no hay datos. En una pestaña nueva se pasa como filtro literal, que el backend rechaza: el listado se abre vacío, sin mensaje.
Ver también @FILTER
Abre la URL en una pestaña nueva del navegador.
- Valor
- Hasta el final de la etiqueta · texto libre
Una URL absoluta que empiece por 'http', 'row.<campo>' para abrir la URL guardada en ese campo del registro, o una ruta que empiece por '/' relativa a la aplicación. Un marcador '#PCUrlFiles#' en el valor del campo se sustituye por la URL de ficheros configurada.
- Ejemplos
@URLhttp://www.example.org@URLrow.UrlVideo@URL/process-control/ui- Composición
- Tiene que ir al final
Tiene prioridad sobre '@IDM': una etiqueta con los dos abre la URL. Se busca 'http', 'row.' y '/' en toda la etiqueta, por ese orden, así que el texto no puede contenerlos.
- Dónde no se lee
- En un campo de datos se muestra como parte del texto.
Falla sin avisar o rompe cuando
- Cualquier cosa tras la URL o el nombre del campo pasa a formar parte de ella, '@target@' incluido.
- Un valor que no tiene ninguna de las tres formas muestra un error de formato.
- Con 'row.<campo>' y un campo que no existe en el registro, un error lo nombra.
- Con 'row.<campo>' y un campo NULL, se abre el texto 'null' como dirección relativa a la página actual (una página que no existe). Un valor sin esquema también se abre relativo a la página actual.
- Con 'row.<campo>' en la barra de botones del listado y sin fila seleccionada, no se abre nada y no se muestra nada.
- La forma '/' abre '../..' seguido de la ruta, relativo a la dirección de la página actual.
Ver también @target@
Abre la opción de menú en esa ventana del navegador en lugar de en una pestaña nueva (lo habitual).
- Valor
- Hasta la siguiente @ · texto libre
Un destino de ventana del navegador, como _self, _blank o un nombre de ventana.
- Ejemplos
@IDM900@target@_self- Requiere
- El botón abre una opción de menú ('@IDM') en una pestaña nueva (sin '@POP').
- Composición
- En cualquier posición · se combina con @IDM, @FILTER
- Dónde no se lee
- Se ignora en los popups y en '@URL', que siempre abre una pestaña nueva.
Ver también @IDM, @URL
El botón exige una fila seleccionada en el listado y actúa sobre ella. El token se quita antes de ejecutar la acción.
- Valor
- Sin valor
Sin valor.
- Ejemplos
@IDP45@SelectedRow- Requiere
- El botón está en la barra de botones del listado.
- Composición
- En cualquier posición
- Dónde no se lee
- En la barra de botones de la ficha o dentro de la ficha no se lee y se queda en la cadena de la acción.
Ver también @FILTER
Dentro de un popup, el botón se rechaza con un error salvo que la etiqueta además elija filas, abra una opción de menú en popup o ejecute un proceso.
- Valor
- Sin valor
Sin valor.
- Ejemplos
@BUTTON@- Requiere
- El botón está dentro de un popup.
- Composición
- En cualquier posición
- Dónde no se lee
- Fuera de un popup no se lee. Sin otra acción, el botón avisa de que la acción no está implementada.
Ejecuta el proceso desde su primer paso: el de ProcessStep.sequence más baja (NULL cuenta como 0 y va el primero). Cada paso continúa en el paso cuya sequence es exactamente una más, o en el paso que indique la clave de un botón de continuar. El registro de entrada es la fila seleccionada del listado al que pertenece el botón o, si no la hay, el registro de la ficha, que se vuelve a leer del backend antes de empezar el proceso. Un paso que no se limita a un registro (groupBy 'row') ni a las filas seleccionadas (proccessOnlySelectedRow) procesa todas las filas del listado. Dentro de un popup el proceso se ejecuta sobre el registro del popup, '@IDP' tiene prioridad sobre '@URL' y '@IDM', y el popup se cierra al acabar el proceso.
- Valor
- Hasta @PAR o @VALUE@ · valores definidos por los metadatos
El idProcess de un proceso. Detrás sólo puede ir '@PAR…' o '@VALUE@…'. Cualquier otro modificador escrito después del número pasa a formar parte del id.
Procesos (Process.idProcess) del API de la aplicación: el proceso se busca por su id dentro de ese API, así que un proceso cuyo APIname es otro API no se encuentra. Desde una pantalla del editor de metadatos tiene que pertenecer al API 'metadata'.
- Ejemplos
@IDP1@IDP52@PAR@@OUTR@0#@IDP54@VALUE@CONFIRMA_PED_ALB=0- Composición
- En cualquier posición · se combina con @PAR, @VALUE@, @SubGToProcces, @SelectedRow, @AutoHide@
Los modificadores que no son '@PAR' ni '@VALUE@' tienen que ir antes de '@IDP', salvo '@SubGToProcces' (que se quita antes de leer el id) y '@SelectedRow' en la barra de botones del listado. '@POP' no tiene efecto. '@IDP' y '@VALIDATE' no se pueden combinar: el proceso no se ejecuta y no se muestra ningún error. Fuera de un popup, '@IDP' tampoco se puede combinar con '@URL', '@IDM' ni '@POP@IDM': el botón ni navega ni ejecuta el proceso, y no muestra ningún error.
- Dónde no se lee
- Sólo los botones lo leen de la etiqueta. En un campo de datos se muestra como parte del texto.
Falla sin avisar o rompe cuando
- Un id que no corresponde a ningún proceso muestra un error con el id y el botón.
- Un proceso sin pasos muestra un error.
- Cualquier cosa pegada al número que no sea '@PAR' o '@VALUE@' (por ejemplo '@AutoHide@', o '@SelectedRow' fuera de la barra de botones del listado) pasa a formar parte del id, y el proceso no se encuentra.
- Fuera de un popup, una etiqueta que además tiene '@PICK@' elige en su lugar. Con '@URL', '@IDM' o '@POP@IDM' el botón no hace nada y no muestra ningún error.
- Con dos pasos de la misma sequence sólo se ejecuta el primero que devuelve el backend. Un hueco en la secuencia (1, 3) acaba el proceso tras el primero.
- Desde la barra de botones del listado sin fila seleccionada, un paso que procesa el listado pide confirmar el número de filas y después las procesa todas. Un paso limitado a un registro falla sin mensaje.
- Desde la ficha, un paso que procesa el listado procesa todas sus filas sin preguntar, aunque haya una fila seleccionada.
- Una condición de paso (ProcessStep.conditionForProcess) sin prefijo 'rootRow', 'parentRow', 'rowAD' o 'rowQRY' se comprueba contra la primera fila del listado, no contra el registro de entrada, y esa fila sólo trae las columnas del listado, así que un campo que no se muestra en el listado se da por no definido.
- Dos pasos de la misma ejecución que modifican el mismo registro fallan en el segundo con un error de bloqueo optimista.
- Con un campo de la ficha cambiado y sin guardar, el botón se rechaza con un error que pide guardar antes.
Ver también @PAR, @VALUE@, @SubGToProcces, @SelectedRow, @CPOption
Pasa un parámetro de texto al proceso, disponible para todos los pasos de esa ejecución.
- Valor
- Hasta el final de la etiqueta · valores definidos por los metadatos
Texto libre, '@' incluida, que se pasa al proceso como parámetro. Lo leen dos sitios: en un paso cuyo methodAndParamsToRun contiene '<<@PAR>>' se sustituye por el parámetro, y un parámetro que contiene '@OUTR@' elige el recurso de salida ('@OUTR@').
Lo que los pasos del proceso esperan en '<<@PAR>>', por ejemplo una llamada a un informe.
- Ejemplos
@IDP58@PAR@RPTArqueo.rpt@SF{SALIDAS_CAB.FECHA_ALBARAN}=<<col0>>@IDP52@PAR@@OUTR@1#- Requiere
- El botón ejecuta un proceso ('@IDP').
- Composición
- Tiene que ir al final · se combina con @IDP, @OUTR@
Todo lo que va tras '@PAR' es el parámetro, así que los modificadores escritos después no se leen como modificadores del botón. Antes de ejecutar el proceso, el despacho del botón ya ha buscado sus tokens en toda la etiqueta, parámetro incluido: un '@RPT' dentro del parámetro es inofensivo sólo porque '@IDP' se despacha antes.
- Dónde no se lee
- En un botón que no ejecuta un proceso no se lee.
Falla sin avisar o rompe cuando
- Un paso que usa '<<@PAR>>' cuando el botón no tiene '@PAR' muestra un error que lo pide y se ejecuta igualmente, con el literal '<<@PAR>>' en lugar del parámetro.
- '@PAR' seguido de '@VALUE@' corta el id del proceso en '@VALUE@': el proceso no se encuentra. No se pueden combinar. Antes de eso, '@VALUE@' valida la ficha y se detiene si no es válida.
Ver también @IDP, @OUTR@
Cada salida del proceso que crea registros, y cuyo recurso enumera varios recursos separados por '#', escribe en el de esa posición, así que varios botones pueden ejecutar el mismo proceso contra recursos destino distintos. Las salidas que modifican el registro de entrada (isUpdateFromInputResource) escriben siempre en el registro de entrada: para ellas la selección sólo muestra sus errores.
- Valor
- Hasta el final de la etiqueta · valores definidos por los metadatos
Un índice que empieza en cero seguido de un '#' de cierre, que tiene que ser el último carácter de la etiqueta: '@OUTR@0#', '@OUTR@1#'.
Posiciones de los recursos enumerados, separados por '#', en el recurso de salida.
- Ejemplos
@IDP52@PAR@@OUTR@0#@IDP52@PAR@OUTR@1#- Requiere
- Forma parte del parámetro de un botón de proceso ('@IDP<n>@PAR…@OUTR@<n>#').
- Una salida del proceso enumera varios recursos separados por '#'.
- Composición
- Tiene que ir al final · se combina con @PAR
Distingue mayúsculas. '@PAR@@OUTR@' y '@PAR@OUTR@' son lo mismo: basta con que el parámetro contenga '@OUTR@'.
- Dónde no se lee
- Sin '@PAR' delante no se lee.
Falla sin avisar o rompe cuando
- Sin el '#' de cierre, el recurso de salida pasa a ser el texto 'Invalid input format' y la salida falla.
- Un índice fuera de rango muestra un error y la salida falla.
- Un botón de proceso sin '@OUTR@' cuya salida enumera varios recursos escribe en la lista entera como si fuera un único nombre de recurso, que no existe. No recurre al primero.
- Con '@OUTR@', todas las salidas de todos los pasos del proceso pasan por la selección, también las que nombran un único recurso (el índice 0 lo conserva, cualquier otro falla).
- Una salida que crea registros y cuyo recurso seleccionado es el recurso del registro de entrada modifica el registro de entrada en lugar de crear uno nuevo.
- En una salida que modifica el registro de entrada, un índice fuera de rango muestra su error y el registro se escribe igualmente. Si falta el '#' o falta '@OUTR@', se escribe sin error.
Ver también @PAR, @IDP
Ejecuta el proceso sobre la fila seleccionada de ese listado hijo en lugar del registro de la ficha.
- Valor
- Hasta el final de la etiqueta · valores definidos por el core
El id de componente de un listado hijo de la ficha.
Ids que el core da a los listados hijos que pinta en la ficha.
- Ejemplos
@IDP12@SubGToProcces<child grid id>- Requiere
- El botón ejecuta un proceso ('@IDP') desde una ficha que tiene listados hijos.
- Composición
- Tiene que ir al final · se combina con @IDP
El token y todo lo que va detrás se quitan antes de leer el id del proceso, así que hay que escribirlo con esa grafía (con la errata 'Procces').
- Dónde no se lee
- En un botón que no ejecuta un proceso no se lee.
Falla sin avisar o rompe cuando
- Cualquier cosa tras el id del listado, '@' final incluida, hace que el botón falle con un error interno y el proceso no se ejecuta.
- Un id que no corresponde a ningún listado hijo ejecuta el proceso sobre el registro de la ficha.
Ver también @IDP
Cada mapeo de salida del proceso cuyo valor es '@ButtonVALUE@' toma el valor que el botón da para su campo, así que varios botones pueden ejecutar o continuar el mismo proceso con valores distintos. Sin '@IDP' ni '@CPOption' el botón continúa el proceso desde su diálogo de petición de datos en el paso siguiente.
- Valor
- Hasta el final de la etiqueta · valores definidos por los metadatos
Pares '<campoSalida>=<valor>' separados por '#', donde <campoSalida> se escribe como en el mapeo de salida ('CAMPO', 'rowID.CAMPO'…). El valor es un literal y llega hasta el siguiente '#' o el final.
Campos de salida del proceso cuyo valor de mapeo es '@ButtonVALUE@'.
- Ejemplos
@IDP54@VALUE@CONFIRMA_PED_ALB=0@VALUE@UNIDADES_RECIBIDAS=0#CANTPROP=0- Requiere
- El botón ejecuta un proceso ('@IDP') o continúa uno desde su diálogo de petición de datos.
- Composición
- Tiene que ir al final · se combina con @IDP, @CPOption
Con '@IDP' el id del proceso acaba en '@VALUE@'. Con '@CPOption' sólo funciona la forma '@VALUE@<pares>#@CPOption<clave>': en cualquier otro orden un valor se traga al otro.
- Dónde no se lee
- Los pasos de impresión y exportación de un proceso también sustituyen cada texto '@ButtonVALUE@' del registro por el valor hasta la siguiente '@'. Un botón de impresión no lo hace: '@VALUE@' se despacha antes.
Falla sin avisar o rompe cuando
- Un mapeo con '@ButtonVALUE@' cuyo campo no está en el botón muestra un error con el campo, y la salida escribe igualmente en él el texto '!fieldNotExistInButton!'.
- Los nombres de campo se buscan como subcadenas. Un campo que es el principio de otro (CANT y CANTPROP) no se encuentra cuando el más largo va antes, como arriba. Un campo que es el final de otro (CANT y XCANT) toma el valor del más largo, sin error.
- El botón cuenta como botón de continuar aunque lleve '@IDP', así que primero se escribe la ficha en su registro y se valida, y una ficha no válida lo detiene antes de empezar el proceso.
- Sin '@IDP', se aplican las mismas condiciones que a '@CPOption'.
Ver también @IDP, @CPOption
El botón se oculta al pulsarlo, antes de ejecutar su acción (también cuando después la acción falla), y sigue oculto durante el resto de la pantalla, en cualquier registro: pasar a otro registro y volver no lo recupera. Vuelve al abrir otra vez la pantalla.
- Valor
- Sin valor
Sin valor.
- Ejemplos
@AutoHide@CPOptiondestinoTienda0- Requiere
- El botón está en la barra de botones de la ficha o dentro de la ficha, no en la barra de botones del listado.
- Composición
- En cualquier posición · se combina con @CPOption, @VALUE@, @IDP
Se busca en cualquier parte de la etiqueta, pero tiene que ir antes de los modificadores cuyo valor llega hasta el final ('@CPOption', '@VALUE@', '@PAR') y no puede ir detrás del número de '@IDP'.
- Dónde no se lee
- En la barra de botones del listado no se lee y el botón sigue visible.
Falla sin avisar o rompe cuando
- Escrito tras '@IDP<n>' pasa a formar parte del id del proceso y el proceso no se encuentra.
Ver también @CPOption
Ejecuta a demanda las validaciones de la ficha, sin guardar: las restricciones de los campos y las reglas del registro declaradas en validationRuleName, mostrando sus mensajes y avisos.
- Valor
- Sin valor
Sin valor.
- Ejemplos
@VALIDATE- Requiere
- El botón está en la barra de botones de la ficha o dentro de la ficha.
- Composición
- En cualquier posición
No se puede combinar con '@IDP', '@COPY@' ni '@PASTE@': esos se despachan antes y después fallan sin avisar, porque '@VALIDATE' cambia la forma de invocar la acción. Junto a '@COPY&SAVE@', '@CPOption' o cualquier token posterior del despacho, el botón sólo valida.
- Dónde no se lee
- En la barra de botones del listado no hay ficha que validar.
Abre el mismo diálogo de selección que un campo con selección, sobre el parentResource del botón (con su filtro). Las columnas del registro elegido se copian en la ficha según pickMapFields. No guarda. En la barra de botones de la ficha el botón sólo se muestra al insertar. Dentro de la ficha se muestra siempre.
- Valor
- Sin valor
Sin valor. La selección se configura en el parentResource y el pickMapFields del propio botón.
- Ejemplos
@PICK@- Requiere
- El botón está en la barra de botones de la ficha o dentro de la ficha, no en la barra de botones del listado.
- La fila de campo del propio botón (buscada por su FieldNameInUI dentro del API de la aplicación) tiene parentResource, pickMapFields y queryFormForPickClassName, el formulario de búsqueda del diálogo.
- No hay ningún campo de la ficha modificado y sin guardar. En un registro nuevo esto significa que la selección tiene que hacerse antes de que el usuario escriba nada.
- Composición
- Tiene que ir al final
El core encuentra la fila de campo del propio botón añadiendo su FieldNameInUI a la etiqueta, así que detrás de '@PICK@' no puede ir nada. Es el primer token del despacho: junto a cualquier otro, el botón elige.
- Dónde no se lee
- En la barra de botones del listado el botón no encuentra su propia fila y la selección no funciona.
Falla sin avisar o rompe cuando
- Cualquier cosa escrita tras '@PICK@' impide que el botón encuentre su propia fila.
- Con un campo modificado y sin guardar, el botón se rechaza con un error que pide guardar antes.
- Sin queryFormForPickClassName el diálogo no se abre y no se muestra nada.
- Con parentResource vacío, o con un recurso sin plantillas, un error lo nombra y no se abre ningún diálogo.
- Sin pickMapFields el diálogo se abre y deja elegir. Al aceptar se muestra un error y el diálogo sigue abierto.
- En pickMapFields, una entrada cuya columna destino no existe se ignora, una cuya columna origen no existe escribe el texto 'null', y un valor que no cabe en el destino (texto en una fecha) se descarta. Ninguno muestra mensaje y las demás entradas se aplican igualmente.
- Un '@FILTER' en parentResource que no empieza por 'colN' muestra un aviso, y la selección funciona con él de todos modos.
Ver también @COPY&SAVE@
Guarda una copia del registro (la fila seleccionada del listado de la pantalla cuando pertenece al mismo recurso, si no el registro de la ficha, y dentro de un popup el registro del popup) en el listado de la pantalla. No se escribe nada. Sin '@INCLUDE@' se copian todas las columnas, clave incluida, y la copia conserva la identidad del registro original (ver '@PASTE@').
- Valor
- Sin valor
Sin valor. Puede ir seguido de '@INCLUDE@' o '@EXCLUDE@'.
- Ejemplos
@COPY@@COPY@INCLUDE@col7,col3,col4,- Composición
- En cualquier posición · se combina con @INCLUDE@, @EXCLUDE@
'@PICK@', '@POP@IDM', '@URL', '@IDM' e '@IDP' tienen prioridad en el despacho. Con '@VALIDATE' el botón falla sin avisar.
- Dónde no se lee
- Sólo lo leen los botones.
Falla sin avisar o rompe cuando
- Desde la barra de botones del listado sin fila seleccionada, no se copia nada y no se muestra nada.
Ver también @PASTE@, @INCLUDE@, @EXCLUDE@
Abre la ficha de alta del listado de la pantalla rellena con los valores copiados. No se guarda nada hasta que el usuario guarda el registro nuevo. Desde la barra de botones del listado la ficha de alta se abre detrás de la vista de listado y sólo se ve cuando el usuario cambia a la vista de ficha. Dentro de un popup se abre en la pantalla de detrás del popup, que sigue abierto.
- Valor
- Sin valor
Sin valor.
- Ejemplos
@PASTE@- Requiere
- Antes se pulsó un botón '@COPY@' de la misma pantalla, sin cerrarla.
- Composición
- En cualquier posición
Con '@VALIDATE' el botón falla sin avisar.
- Dónde no se lee
- Sólo lo leen los botones.
Falla sin avisar o rompe cuando
- Sin una copia previa en la misma pantalla, el botón no hace nada y no muestra ningún mensaje.
- Si la copia se hizo sin '@INCLUDE@', el registro pegado conserva la clave y la identidad del original, y al guardarlo se actualiza el registro original y se informa de que ha ido bien. No se crea ningún registro.
Ver también @COPY@
La copia conserva sólo las columnas indicadas. Las demás toman los valores por defecto de un registro nuevo.
- Valor
- Hasta el final de la etiqueta · valores definidos por el core
Nombres de columna 'colN' (no nombres de campo), cada uno seguido de una coma, también el último: '@INCLUDE@col7,col3,'.
Posiciones de las columnas del recurso (col0, col1…).
- Ejemplos
@COPY@INCLUDE@col7,col3,col4,col5,col6,col1,col2,- Requiere
- Composición
- Tiene que ir al final · se combina con @COPY@
- Dónde no se lee
- Sin '@COPY@' delante no se lee.
Falla sin avisar o rompe cuando
- Una columna sin coma detrás (normalmente la última) no se copia.
Ver también @COPY@, @EXCLUDE@
Pensado para copiar todas las columnas salvo las indicadas. Tal como está implementado, no copia ninguna: el pegado abre un registro nuevo vacío.
- Valor
- Hasta el final de la etiqueta · valores definidos por el core
Nombres de columna 'colN', cada uno seguido de una coma.
Posiciones de las columnas del recurso (col0, col1…).
- Ejemplos
@COPY@EXCLUDE@col0,- Requiere
- Composición
- Tiene que ir al final · se combina con @COPY@
@EXCLUDE@ tiene prioridad sobre @INCLUDE@ cuando se escriben los dos.
- Dónde no se lee
- Sin '@COPY@' delante no se lee.
Falla sin avisar o rompe cuando
- No se copia ninguna columna, esté indicada o no.
Ver también @COPY@, @INCLUDE@
Una selección sin diálogo que guarda: lee el primer registro del parentResource del botón que cumple su '@FILTER' contra el registro actual, copia sus columnas en el registro según pickMapFields y guarda el registro en el backend sin preguntar y sin mensaje. No copia el propio registro. A diferencia de '@PICK@', en la barra de botones de la ficha también se muestra al editar.
- Valor
- Sin valor
Sin valor. El origen se configura en el parentResource y el pickMapFields del propio botón.
- Ejemplos
@COPY&SAVE@- Requiere
- El botón está en la barra de botones de la ficha o dentro de la ficha, no en la barra de botones del listado.
- La fila de campo del propio botón (buscada por su FieldNameInUI dentro del API de la aplicación) tiene parentResource con '@FILTER', y pickMapFields.
- El registro ya existe. En un registro nuevo el valor del filtro está vacío (ver failure_modes).
- Composición
- Tiene que ir al final
El core encuentra la fila de campo del propio botón añadiendo su FieldNameInUI a la etiqueta, así que detrás no puede ir nada. Junto a '@VALIDATE' el botón sólo valida.
- Dónde no se lee
- En la barra de botones del listado el botón no encuentra su propia fila y no hace nada.
Falla sin avisar o rompe cuando
- Un error del backend al guardar muestra una caja de error vacía (el mensaje del backend se pierde) y el registro no se guarda.
- Si el recurso de origen no tiene ningún registro que cumpla el filtro, el registro se guarda sin cambios.
- Sin '@FILTER' no se lee nada, y sin pickMapFields o parentResource no se copia nada. En los tres casos el registro se guarda sin cambios y no se muestra nada.
- Un '@FILTER' que no empieza por 'colN' muestra un aviso y se aplica igualmente.
- Con '@FILTERFIX' se muestra el mismo aviso, el valor se pierde y el filtro compara con un valor vacío, que la base de datos puede hacer coincidir con otro registro (una clave 0). Los valores de ese registro se copian y se guardan.
- En un registro nuevo aún sin guardar el valor del filtro también está vacío, y el botón inserta el registro sin la validación de la ficha (campos obligatorios incluidos).
Ver también @PICK@
Abre el informe en una pestaña nueva del navegador a través del servidor de informes del despliegue. Sin '@SF', el filtro actual del listado (el de la última búsqueda) se traduce a la fórmula de selección del informe, con cada campo precedido de la tabla tomada del nombre del recurso (o del nombre del informe cuando empieza por 'V_'). Sin búsqueda no hay fórmula, aunque se pulse desde la ficha. La empresa de la carpeta del informe y el origen de datos (DB11_<empresa><año>) salen de la sesión. Una aplicación sin empresa los deja vacíos.
- Valor
- Hasta @SF · valores definidos por el despliegue
El nombre del fichero del informe, pegado al token ('@RPTArqueo.rpt'), siempre relativo a la carpeta de informes del despliegue. Una '/' en el nombre sólo evita que se añada otro separador.
Ficheros de informe (.rpt) en el servidor de informes del despliegue.
- Ejemplos
@RPTCompTicket.rpt@RPTVerCertificados.rpt@SF{COLADAS.ARTICULO} = <<ARTICULO>>- Requiere
- El despliegue define el servidor de informes y la carpeta de informes (app_const_clear_report_server, app_const_report_path).
- Composición
- En cualquier posición · se combina con @SF
Su nombre llega hasta '@SF' o hasta el final, así que los demás modificadores van delante. Dentro del parámetro de un botón de proceso ('@IDP<n>@PAR@RPT…') no es un botón de informe: el paso del proceso lo recibe como id de un botón que ejecutar.
- Dónde no se lee
- Sólo lo leen los botones.
Falla sin avisar o rompe cuando
- Un nombre de informe que no existe en el servidor falla en la pestaña del informe, no en la aplicación.
- Sin la carpeta de informes en el despliegue, el botón no hace nada y no muestra nada.
Ver también @SF
Filtra el informe con la fórmula, rellena con los valores del registro (o, si no lo hay, de la fila seleccionada del listado).
- Valor
- Hasta el final de la etiqueta · texto libre
Una fórmula de selección del motor de informes, '{TABLA.CAMPO}=<<campo>>' unidas con AND/OR, donde cada '<<campo>>' se sustituye por el valor del registro ('colN' o el nombre del campo). Una fecha pasa a CDate(a,m,d) y una etiqueta que no se puede resolver queda literal. Los valores se insertan tal cual, así que las comillas de los textos van en la fórmula, y un valor NULL se inserta como el texto 'null' (una fecha NULL también, sin CDate). Dos formas especiales: '#row.colN' (toda la fórmula es el valor de ese campo) y '@keepFIlter' (un filtro que conserva un proceso en marcha).
Tablas y campos tal como los ve el informe. Atado al motor de informes y a la base de datos.
- Ejemplos
@SF{COLADAS.ARTICULO} = <<ARTICULO>> AND {COLADAS.COLADA}='<<COLADA>>'- Requiere
- Composición
- Tiene que ir al final · se combina con @RPT
Escrito antes de '@RPT', el botón falla con un error interno.
- Dónde no se lee
- Sin '@RPT' delante no se lee.
Falla sin avisar o rompe cuando
- Sin registro ni fila seleccionada, un error pide seleccionar uno.
- Un campo NULL acaba en la fórmula como el texto 'null'.
Ver también @RPT
El navegador del usuario envía el registro como JSON a un agente de impresión en su propio equipo (http://127.0.0.1:5001/print).
- Valor
- Sin valor · valores definidos por el despliegue
Sin valor. Puede ir seguido de '@PATH@<ruta>@NCOPIES@<n>': la ruta sustituye a 'print' sólo cuando están los dos. El número de copias sólo lo usa la impresión agrupada dentro de un proceso.
Rutas que sirve el agente de impresión instalado en el equipo del usuario.
- Ejemplos
@DirectPrint@DirectPrint@RESOURCE@SumCount_Ventas_CAB__HojaCierre- Composición
- En cualquier posición · se combina con @RESOURCE@
@VALUE@ se despacha antes, así que un botón de impresión no puede llevar valores.
- Dónde no se lee
- Sólo lo leen los botones.
Falla sin avisar o rompe cuando
- Sin un agente de impresión en marcha, el usuario no ve que pase nada. El error sólo llega a la consola del navegador.
- Desde la barra de botones del listado sin fila seleccionada (y sin '@RESOURCE@'), no se envía nada y no se muestra nada.
Ver también @RESOURCE@, @GenerateXML
Imprime el primer registro que devuelve el backend para ese recurso en lugar del actual (no la fila seleccionada), leído con el filtro actual del listado más el filtro de usuario de ese recurso. Los campos del filtro tienen que existir en él.
- Valor
- Hasta el final de la etiqueta · valores definidos por los metadatos
El nombre de un recurso del backend.
Recursos del API de la aplicación.
- Ejemplos
@DirectPrint@RESOURCE@SumCount_Ventas_CAB__HojaCierre- Requiere
- Va detrás de '@DirectPrint'.
- Composición
- Tiene que ir al final · se combina con @DirectPrint
- Dónde no se lee
- Sólo lo lee '@DirectPrint'.
Falla sin avisar o rompe cuando
- Si el recurso no devuelve ningún registro, no se imprime nada y no se muestra ningún error.
- Con una búsqueda activa en el listado, el filtro de usuario se añade aunque esté vacío (' AND ()'), el backend no devuelve ningún registro y no se imprime nada.
Ver también @DirectPrint
El navegador del usuario envía el nodo 'datos_factura' del registro a un agente en su propio equipo (http://127.0.0.1:5001/genFacturaXML), que genera el XML.
- Valor
- Sin valor · valores definidos por el despliegue
Sin valor. Puede ir seguido de '@PATH@<ruta>@NCOPIES@<n>', como en '@DirectPrint'.
Rutas que sirve el agente instalado en el equipo del usuario.
- Ejemplos
@GenerateXML- Composición
- En cualquier posición
- Dónde no se lee
- Sólo lo leen los botones.
Falla sin avisar o rompe cuando
- Un registro sin 'datos_factura' falla sin mostrar ningún error.
- Sin el agente en marcha, el usuario no ve que pase nada.
Ver también @DirectPrint
El servidor de aplicación lanza la tarea en el servidor de informes con los parámetros (por ejemplo, enviar un informe por correo). El registro es primero el de la ficha y después la fila seleccionada.
- Valor
- Hasta el final de la etiqueta · valores definidos por el despliegue
'<idTarea>#<param>#<param>…': el id de la tarea llega hasta el primer '#' de la etiqueta, y cada parámetro es 'row.<campo>', 'rowParent.<campo>', 'user.<campo>' o el nombre de un campo del registro. 'MULTI' como id de tarea toma el id de cada empresa del 'idsTask' del registro.
Ids de tarea del servidor de informes del despliegue.
- Ejemplos
@CCTASK6ucc197c27omfobbh8csfiss2#row.N_PEDIDO#row.CLAVE_ALMACEN- Composición
- Tiene que ir al final
# No se admite: un '#' antes del token se toma como el final del id de la tarea y el botón falla.
- Dónde no se lee
- Sólo lo leen los botones.
Falla sin avisar o rompe cuando
- Sin las propiedades de despliegue para tareas, se muestra un error y no se lanza nada.
- Sin parámetros toda la etiqueta se toma como nombre de un campo, así que se muestra un error y la tarea se lanza igualmente con '###ERROR###'.
- Un parámetro que no se puede resolver muestra un error, y la tarea se lanza igualmente con '###ERROR###' como valor.
- Un id de tarea 'MULTI' en un registro sin 'idsTask' muestra un error y no se lanza nada.
- Desde la barra de botones del listado sin fila seleccionada, no se lanza nada y no se muestra nada.
Ver también @RPT
No activa las sumas del listado. Cuando el listado de la pantalla tiene más de 500 filas muestra un aviso con el número de filas, también si se pulsa desde la ficha. Si no, el botón no hace nada.
- Valor
- Sin valor
Sin valor.
- Ejemplos
@SUMGRID- Composición
- En cualquier posición
- Dónde no se lee
- Sólo lo leen los botones.