Opens the menu option: its resource with its layout, either in a popup ('@POP') or in a new browser tab. The menu option is looked up with the API of the running application, not the API of the button's form; its application column is not checked unless the 'APIname~application~idMenu' form names one. In a new tab the button's filter goes to the new page, and a selected row is only required when the filter has 'row.'.
- Value
- Runs to the next @ · values defined by the metadata
The idMenu of a menu option. Also 'APIname~application~idMenu' to name the API and the application; an id ending in 'int' is meant to be looked up in the application of internal options, but see failure_modes.
Menu options (menu.idMenu) of the application's API.
- Examples
@IDM900@POP@IDM940@IDM203201200201@FILTERrow.XNIF=rowtarget.XNIF- Requires
- In a new tab, the page comes from the menu option's layoutPage: PAGE_DYNAMIC_QGD (query, list and record; also when NULL or empty), PAGE_DYNAMIC_QG (query and list), PAGE_DYNAMIC_GD (list and record) or PAGE_DYNAMIC_D (a single record), written exactly so. PAGE_DYNAMIC_DDS, which the side menu accepts, is not accepted here; '@DG' reaches that page.
- In a new tab, the menu option's queryFormClassName and displayFormClassName name the classes that draw the search and the record. A name without package gets the views package of the application.
- Composition
- Anywhere · combines with @POP, @POPINSERT, @FILTER, @DG, @target@
Tokens are looked for anywhere in the label, so their order does not matter. '@POP@IDM' is '@POP' followed by '@IDM', not a token of its own; written together it also guards against opening the same popup twice.
- Not read
- Only buttons read it. On a data field it is shown as part of the caption.
Fails silently or breaks when
- An id that matches no menu option of the application's API opens nothing and shows no error.
- A '#' glued to the number cuts the request at that point: the menu option is found by its id in any API, and the new tab opens without the button's filter (the whole resource).
- An id ending in 'int' is sent unquoted to the backend, which rejects the query: nothing opens and nothing is shown.
- A layoutPage with any other value (a typo, different case, PAGE_DYNAMIC_DDS) shows the error 'valor invalido para layoutPage…' and still opens the tab, at an address that does not exist.
- A queryFormClassName or displayFormClassName that is NULL, empty or names no class opens the list, but selecting a row shows no record, without message.
- A label with '@URL' or '@PICK@' does that instead, whatever the position of '@IDM'.
See also @POP, @FILTER, @DG, @target@
Opens the menu option in a dialog over the current screen instead of a new tab. What the dialog shows depends on the layout of the menu option (popup_layouts): a list (the filter selects its rows), a query screen (the filter is resolved against the target resource), or a single record found with the filter, with or without its child lists. When the filter of a single record matches several, the first one in the backend's order is shown, without warning. Pressing it again while the same popup is open does not open a second one. Buttons of the form button bar (idButtonBarForButtons 2) are not drawn inside the popup; buttons inside the form (3) are, and can open further popups.
- Value
- No value
No value. A '#style#' block anywhere in the label, up to the next '@' or the end, sizes and styles the popup: 'property:value' pairs separated by ';'. width, height, min-width, min-height, max-width and max-height set the size of the dialog ('with' is read as width); any other property is set on its content. Pairs without ':' are ignored.
- Examples
@POP@IDM901@POP@IDM902@FILTERrow.CLAVE_ARTICULO=rowtarget.ARTICULO#style#width:1200px- Requires
- The button opens a menu option ('@IDM').
- The menu option has a layout (menu.layout), the class that draws the popup, written exactly as in popup_layouts (same case, no surrounding spaces). A new tab does not read that column, so an option that opens fine from the menu can still lack it.
- When the layout shows a single record, the menu option also has a form class (menu.displayFormClassName).
- The menu option's filterForPopup, when set, is put before the button's filter, joined with ';', and the result follows the rules of '@FILTER' (if it has a 'row.' clause, its first clause must be one), and a single-record layout needs it to start with 'row.'.
- Composition
- Anywhere · combines with @IDM, @FILTER, @POPINSERT
- Not read
- On a button that runs a process ('@IDP') it has no effect.
Fails silently or breaks when
- With no layout (NULL) in the menu option the popup does not open; a dialog says that the layout is not defined for the resource ('Layout sin definir, se debe de especificar en la opción del menú').
- With an empty string, a class that does not exist, different case or surrounding spaces in the layout, nothing opens and nothing is shown to the user.
- With a single-record layout and no form class (displayFormClassName NULL or empty), nothing opens and nothing is shown.
- When the target layout shows a single record, the filter must start with 'row.'; otherwise no record is looked for and the dialog says there is no data. This includes a filterForPopup without 'row.' put before a button filter that has it.
- A filterForPopup without 'row.' before a button filter with 'row.' breaks the filter (its first characters are cut); with a list layout the backend rejects the query and the user sees the server error.
- On a single-record layout, a source field that is NULL matches the target records whose field IS NULL, so the popup shows an unrelated record instead of saying there is no data. From a new record not saved yet the source values are empty strings, which the backend may also match (a numeric key compares '' as 0).
- Layout overrides ('@DG' and siblings) and '@target@' are ignored in a popup.
- On a page without a list (the single-record page, PAGE_DYNAMIC_D) the popup does not open, even with the record on screen: an error asks to select a record in the side list ('debe de tener seleccionado un registro en el listado lateral').
See also @IDM, @POPINSERT, @FILTER
Opens the target record in a popup; if the filter finds none, opens a new record with the default values of the resource and the target field filled with the source value, so the record can be created from there. The new record shows no child lists until it is saved.
- Value
- No value
No value.
- Examples
@POPINSERT@IDM905@FILTERrow.CLAVE_ARTICULO=rowtarget.CLAVE_ARTICULO- Requires
- The button opens a menu option ('@IDM') whose layout shows a single record.
- The button has a '@FILTER' with exactly one 'row.<source>=rowtarget.<target>' clause.
- Composition
- Anywhere · combines with @IDM, @FILTER
- Not read
- When the target layout is a list or a query screen it behaves as '@POP'.
Fails silently or breaks when
- When the filter finds no record and has more than one clause, or no 'row.<source>=rowtarget.<target>' clause, nothing opens and nothing is shown.
See also @POP, @FILTER
Opens the menu option in the single-record page with its child grids, whatever page the menu option declares. With a '@FILTER', it first checks that the filter finds a record and otherwise says there is no data without opening the tab. Without a filter the tab opens and the page says there is no data.
- Value
- No value · values defined by the core
No value. Case-insensitive, and it must be followed by '@', '#' or the end of the label.
- Examples
@DG@IDM203201200202@FILTERrow.PROVEEDOR=rowtarget.CLAVE_PROVEEDOR- Requires
- The button opens a menu option ('@IDM') in a new tab (no '@POP').
- Composition
- Anywhere · combines with @IDM, @FILTER
When several layout overrides are present, the first of @DG, @GD, @QGD, @QG, @G wins.
- Variants
@GD: Opens the grid-and-record page.
@QGD: Opens the query, grid and record page.
@QG: Opens the query-and-grid page.
@G: Same as @QG.
- Not read
- In a popup it is ignored: the popup uses the layout of the menu option.
Fails silently or breaks when
- It replaces an invalid layoutPage of the menu option, but the error about that layoutPage is still shown before the tab opens.
See also @IDM, @POP
Filters what the menu option opens with values of the source record. In a list button bar a filter with 'row.' requires a selected row. With 'FIX->' and a popup to a query screen, the filter stays applied to every search on that resource for the rest of the session, also on other screens of the same resource after the popup is closed.
- Value
- Runs to the next @ · values defined by the metadata
Optional prefix 'FIX->', then clauses separated by ';' and joined with AND. A clause is one of 'row.<sourceField><op>rowtarget.<targetField>' (the value comes from the source record; 'row.subgrid.<field>' takes it from the selected row of the child grid), 'col<n><op>rowtarget.<targetField>' (a column of the source screen), '#VALUE<value><op>rowtarget.<targetField>' (a fixed value), 'rowtarget.<targetField><op><value>' (a fixed condition on the target), or '<targetField>=rowExtraFilterForChildren.<field>'. <op> is one of = <> <= >= < >. The words 'rowExtraFilterForChildren' and 'extraFilterForChildrenMap' as clauses are removed from the filter and turn on the extra filter for the target's children. A target field whose name contains 'FECH' is compared as a date. If any clause starts with 'row.', the first one must.
Field names of the source and target resources.
- Examples
@FILTERrow.CLAVE_CLIENTE=rowtarget.CLAVE_CLIENTE@FILTERrow.SERIE=rowtarget.SERIE;row.NUMERO=rowtarget.NUMERO@FILTERFIX->row.N_PEDIDO=rowtarget.N_PEDIDO- Requires
- The button opens a menu option ('@IDM').
- Composition
- Anywhere · combines with @IDM, @POP, @POPINSERT, @DG, @QryInForm
The filter ends at the next '@'. A '#style#' block is removed before, so it can follow the filter.
- Not read
- Outside navigation buttons it is not read from the label. Its use in parentResource (pick and combo filters) is a different contract.
Fails silently or breaks when
- @OR@ and @AND@ are cut off: the filter ends at their first '@' and the rest is lost silently. Only ';' combines clauses in a button.
- '@FILTER->row.…' is not a valid spelling: the value does not start with 'row.' and is misparsed.
- 'FIX->' in a new tab without 'row.' keeps the condition on that resource for the rest of the session: every later search of that resource, on any screen, is also filtered by it until the session ends or another 'FIX->' replaces it. With a popup to a list or with 'row.' in a new tab it shows an error and works as a plain filter.
- A source value that is NULL shows a no-data dialog when the target is a list in a popup, and an empty list without message in a new tab; when it is a single record in a popup, it matches the records whose field IS NULL (see '@POP').
See also @IDM, @POP, @QryInForm
The popup list is filtered with the same filter the source record was loaded with, that is, the search currently applied on the source screen.
- Value
- No value
No value; a trailing '@' is allowed.
- Examples
@POP@IDM940@FILTER@QryInForm@- Requires
- It follows '@FILTER' ('@FILTER@QryInForm').
- The button opens a popup ('@POP') whose menu layout is a list.
- Composition
- Anywhere · combines with @FILTER, @POP, @IDM
- Not read
- In a popup to a single record it shows a no-data dialog; in a new tab it is passed as a literal filter, which the backend rejects: the list opens empty, without message.
See also @FILTER
Opens the URL in a new browser tab.
- Value
- Runs to the end of the label · free text
An absolute URL starting with 'http', 'row.<field>' to open the URL stored in that field of the record, or a path starting with '/' relative to the application. A '#PCUrlFiles#' placeholder in the field value is replaced with the configured files URL.
- Examples
@URLhttp://www.example.org@URLrow.UrlVideo@URL/process-control/ui- Composition
- Must go last
It takes precedence over '@IDM': a label with both opens the URL. The whole label is searched for 'http', 'row.' and '/', in that order, so the caption must not contain them.
- Not read
- On a data field it is shown as part of the caption.
Fails silently or breaks when
- Anything after the URL or the field name becomes part of it, '@target@' included.
- A value with none of the three forms shows a format error.
- With 'row.<field>' and a field that does not exist in the record, an error names it.
- With 'row.<field>' and a field that is NULL, the text 'null' is opened as an address relative to the current page (a page that does not exist); a value without a scheme is opened relative to the current page as well.
- With 'row.<field>' in the list button bar and no row selected, nothing opens and nothing is shown.
- The '/' form opens '../..' followed by the path, relative to the address of the current page.
See also @target@
Opens the menu option in that browser window instead of a new tab (the default).
- Value
- Runs to the next @ · free text
A browser window target such as _self, _blank or a window name.
- Examples
@IDM900@target@_self- Requires
- The button opens a menu option ('@IDM') in a new tab (no '@POP').
- Composition
- Anywhere · combines with @IDM, @FILTER
- Not read
- Ignored in popups and by '@URL', which always opens a new tab.
See also @IDM, @URL
The button requires a selected row in the list and acts on it; the token is removed before the action runs.
- Value
- No value
No value.
- Examples
@IDP45@SelectedRow- Requires
- The button is in the button bar of the list.
- Composition
- Anywhere
- Not read
- In the form button bar or inside the form it is not read and stays in the action string.
See also @FILTER
Inside a popup, the button is refused with an error unless the label also picks rows, opens a popup menu option or runs a process.
- Value
- No value
No value.
- Examples
@BUTTON@- Requires
- The button is inside a popup.
- Composition
- Anywhere
- Not read
- Outside a popup it is not read; without another action the button reports that the action is not implemented.
Runs the process from its first step: the step with the lowest ProcessStep.sequence (NULL counts as 0 and goes first). Each step continues at the step whose sequence is exactly one more, or at the step named by the key of a continue button. The input record is the selected row of the list the button belongs to or, without one, the record of the form, re-read from the backend before the process starts. A step that does not limit itself to one record (groupBy 'row') or to the selected rows (proccessOnlySelectedRow) processes every row of the list. Inside a popup the process runs on the popup's record, '@IDP' takes precedence over '@URL' and '@IDM', and the popup closes when the process ends.
- Value
- Runs to @PAR or @VALUE@ · values defined by the metadata
The idProcess of a process. Nothing but '@PAR…' or '@VALUE@…' may follow it; any other modifier written after the number becomes part of the id.
Processes (Process.idProcess) of the API of the application: the process is looked up by its id within that API, so a process whose APIname is another API is not found. From a screen of the metadata editor it must belong to the 'metadata' API.
- Examples
@IDP1@IDP52@PAR@@OUTR@0#@IDP54@VALUE@CONFIRMA_PED_ALB=0- Composition
- Anywhere · combines with @PAR, @VALUE@, @SubGToProcces, @SelectedRow, @AutoHide@
Modifiers that are not '@PAR' or '@VALUE@' must go before '@IDP', except '@SubGToProcces' (removed before the id is read) and '@SelectedRow' in the list button bar. '@POP' has no effect. '@IDP' and '@VALIDATE' cannot be combined: the process is not run and no error is shown. Outside a popup, '@IDP' cannot be combined with '@URL', '@IDM' or '@POP@IDM' either: the button neither navigates nor runs the process, and shows no error.
- Not read
- Only buttons read it from the label. On a data field it is shown as part of the caption.
Fails silently or breaks when
- An id that matches no process shows an error naming the id and the button.
- A process without steps shows an error.
- Anything glued to the number other than '@PAR' or '@VALUE@' (for instance '@AutoHide@', or '@SelectedRow' outside the list button bar) becomes part of the id, and the process is not found.
- Outside a popup, a label that also has '@PICK@' picks instead. With '@URL', '@IDM' or '@POP@IDM' the button does nothing and shows no error.
- Two steps with the same sequence run only the first one the backend returns; a gap in the sequence (1, 3) ends the process after the first.
- From the list button bar with no row selected, a step that processes the list asks to confirm the number of rows and then processes all of them; a step limited to one record fails with no message.
- From the form, a step that processes the list processes every row of the list without asking, even with one row selected.
- A step condition (ProcessStep.conditionForProcess) without a 'rootRow', 'parentRow', 'rowAD' or 'rowQRY' prefix is checked against the first row of the list, not the input record, and that row only carries the list columns, so a field not shown in the list is reported as not defined.
- Two steps of the same run that modify the same record fail at the second one with an optimistic locking error.
- With a form field changed and not saved, the button is refused with an error asking to save first.
See also @PAR, @VALUE@, @SubGToProcces, @SelectedRow, @CPOption
Hands a text parameter to the process, available to every step of that run.
- Value
- Runs to the end of the label · values defined by the metadata
Free text, '@' included, passed to the process as its parameter. Two readers: a step whose methodAndParamsToRun contains '<<@PAR>>' gets it replaced with the parameter, and a parameter that contains '@OUTR@' selects the output resource ('@OUTR@').
What the process steps expect in '<<@PAR>>', for instance a report call.
- Examples
@IDP58@PAR@RPTArqueo.rpt@SF{SALIDAS_CAB.FECHA_ALBARAN}=<<col0>>@IDP52@PAR@@OUTR@1#- Requires
- The button runs a process ('@IDP').
- Composition
- Must go last · combines with @IDP, @OUTR@
Everything after '@PAR' is the parameter, so modifiers written after it are not read as modifiers of the button. Before the process runs, the button dispatch has already looked for its tokens in the whole label, parameter included: a '@RPT' inside the parameter is harmless only because '@IDP' is dispatched first.
- Not read
- On a button that does not run a process it is not read.
Fails silently or breaks when
- A step that uses '<<@PAR>>' when the button has no '@PAR' shows an error asking for it and still runs, with the literal '<<@PAR>>' in place of the parameter.
- '@PAR' followed by '@VALUE@' cuts the process id at '@VALUE@': the process is not found. They cannot be combined. Before that, '@VALUE@' validates the form and stops if it is not valid.
See also @IDP, @OUTR@
Each output of the process that creates records, and whose resource lists several resources separated by '#', writes to the one at that position, so several buttons can run the same process against different target resources. Outputs that modify the input record (isUpdateFromInputResource) always write to the input record: for them the selection only shows its errors.
- Value
- Runs to the end of the label · values defined by the metadata
A zero-based index followed by a closing '#', which must be the last character of the label: '@OUTR@0#', '@OUTR@1#'.
Positions of the resources listed, separated by '#', in the output resource.
- Examples
@IDP52@PAR@@OUTR@0#@IDP52@PAR@OUTR@1#- Requires
- It is part of the parameter of a process button ('@IDP<n>@PAR…@OUTR@<n>#').
- An output of the process lists several resources separated by '#'.
- Composition
- Must go last · combines with @PAR
Case-sensitive. '@PAR@@OUTR@' and '@PAR@OUTR@' are the same: the parameter only has to contain '@OUTR@'.
- Not read
- Without '@PAR' before it, it is not read.
Fails silently or breaks when
- Without the closing '#', the output resource becomes the text 'Invalid input format' and the output fails.
- An index out of range shows an error and the output fails.
- A process button without '@OUTR@' whose output lists several resources writes to the whole list as a single resource name, which does not exist; it does not fall back to the first.
- With '@OUTR@', every output of every step of the process goes through the selection, also those that name a single resource (index 0 keeps it, any other index fails).
- An output that creates records and whose selected resource is the input record's resource modifies the input record instead of creating a new one.
- On an output that modifies the input record, an index out of range shows its error and the record is written anyway; a missing '#' or a missing '@OUTR@' write it with no error.
See also @PAR, @IDP
Runs the process on the selected row of that child grid instead of the form's record.
- Value
- Runs to the end of the label · values defined by the core
The component id of a child grid of the form.
Ids that the core gives to the child grids it draws in the form.
- Examples
@IDP12@SubGToProcces<child grid id>- Requires
- The button runs a process ('@IDP') from a form that has child grids.
- Composition
- Must go last · combines with @IDP
The token and everything after it are removed before the process id is read, so the spelling (with the typo 'Procces') is the one to write.
- Not read
- On a button that does not run a process it is not read.
Fails silently or breaks when
- Anything after the grid id, a trailing '@' included, makes the button fail with an internal error and the process does not run.
- An id that matches no child grid runs the process on the form's record.
See also @IDP
Each output mapping of the process whose value is '@ButtonVALUE@' takes the value given for its field in the button, so several buttons can run or continue the same process with different values. Without '@IDP' or '@CPOption' the button continues the process from its ask-data dialog at the next step.
- Value
- Runs to the end of the label · values defined by the metadata
Pairs '<outputField>=<value>' separated by '#', where <outputField> is written as in the output mapping ('CAMPO', 'rowID.CAMPO'…). The value is a literal and runs to the next '#' or the end.
Output fields of the process whose mapping value is '@ButtonVALUE@'.
- Examples
@IDP54@VALUE@CONFIRMA_PED_ALB=0@VALUE@UNIDADES_RECIBIDAS=0#CANTPROP=0- Requires
- The button runs a process ('@IDP') or continues one from its ask-data dialog.
- Composition
- Must go last · combines with @IDP, @CPOption
With '@IDP' the process id ends at '@VALUE@'. With '@CPOption' only the form '@VALUE@<pairs>#@CPOption<key>' works: in any other order one value swallows the other.
- Not read
- Print and export steps of a process also replace every '@ButtonVALUE@' text of the record with the value up to the next '@'. A print button does not: '@VALUE@' is dispatched first.
Fails silently or breaks when
- A mapping with '@ButtonVALUE@' whose field is not in the button shows an error naming the field, and the output still writes the text '!fieldNotExistInButton!' into it.
- Field names are matched as substrings. A field that starts another one (CANT and CANTPROP) is not found when the longer one comes first, as above; a field that ends another one (CANT and XCANT) takes the value of the longer one, with no error.
- The button counts as a continue button even with '@IDP', so the form is written into its record and validated first, and a form that is not valid stops it before the process starts.
- Without '@IDP', the same conditions as '@CPOption' apply.
See also @IDP, @CPOption
The button hides itself when pressed, before running its action (also when the action then fails), and stays hidden for the rest of the screen, on any record: moving to another record and back does not bring it back. It comes back when the screen is opened again.
- Value
- No value
No value.
- Examples
@AutoHide@CPOptiondestinoTienda0- Requires
- The button is in the form button bar or inside the form, not in the list button bar.
- Composition
- Anywhere · combines with @CPOption, @VALUE@, @IDP
It is looked for anywhere in the label, but it must go before modifiers whose value runs to the end ('@CPOption', '@VALUE@', '@PAR') and must not follow the number of '@IDP'.
- Not read
- In the list button bar it is not read and the button stays visible.
Fails silently or breaks when
- Written after '@IDP<n>' it becomes part of the process id and the process is not found.
See also @CPOption
Runs the validations of the form on demand, without saving: field constraints and the record rules declared in validationRuleName, showing their messages and warnings.
- Value
- No value
No value.
- Examples
@VALIDATE- Requires
- The button is in the form button bar or inside the form.
- Composition
- Anywhere
It cannot be combined with '@IDP', '@COPY@' or '@PASTE@': those are dispatched first and then fail silently, because '@VALIDATE' changes how the action is invoked. Next to '@COPY&SAVE@', '@CPOption' or any later token of the dispatch, the button only validates.
- Not read
- In the list button bar there is no form to validate.
Opens the same pick dialog as a field with a pick, on the button's parentResource (with its filter); the chosen record's columns are copied into the form following pickMapFields. It does not save. In the form button bar the button is only shown when inserting; inside the form it is always shown.
- Value
- No value
No value. The pick is configured in the button's own parentResource and pickMapFields.
- Examples
@PICK@- Requires
- The button is in the form button bar or inside the form, not in the list button bar.
- The button's own field row (looked up by its FieldNameInUI within the application's API) has parentResource, pickMapFields and queryFormForPickClassName, the search form of the dialog.
- No field of the form has been modified and left unsaved. In a new record this means the pick must come before the user types anything.
- Composition
- Must go last
The core finds the button's own field row by appending its FieldNameInUI to the label, so nothing may follow '@PICK@'. It is the first token of the dispatch: next to any other, the button picks.
- Not read
- In the list button bar the button does not find its own row and the pick does not work.
Fails silently or breaks when
- Anything written after '@PICK@' prevents the button from finding its own row.
- With a field modified and not saved, the button is refused with an error asking to save first.
- Without queryFormForPickClassName the dialog does not open and nothing is shown.
- With parentResource empty, or naming a resource without templates, an error names it and no dialog opens.
- Without pickMapFields the dialog opens and lets the user choose; accepting shows an error and the dialog stays open.
- In pickMapFields, an entry whose target column does not exist is ignored, one whose source column does not exist writes the text 'null', and a value that does not fit the target (text into a date) is dropped; none of them shows a message and the other entries still apply.
- A '@FILTER' in parentResource that does not start with 'colN' shows a warning, and the pick works with it anyway.
See also @COPY&SAVE@
Keeps a copy of the record (the selected row of the screen's list when it belongs to the same resource, otherwise the form's record; inside a popup, the popup's record) in the list of the screen. Nothing is written. Without '@INCLUDE@' every column is copied, key included, and the copy keeps the identity of the original record (see '@PASTE@').
- Value
- No value
No value. It may be followed by '@INCLUDE@' or '@EXCLUDE@'.
- Examples
@COPY@@COPY@INCLUDE@col7,col3,col4,- Composition
- Anywhere · combines with @INCLUDE@, @EXCLUDE@
'@PICK@', '@POP@IDM', '@URL', '@IDM' and '@IDP' take precedence in the dispatch. With '@VALIDATE' the button fails silently.
- Not read
- Only buttons read it.
Fails silently or breaks when
- From the list button bar with no row selected, nothing is copied and nothing is shown.
See also @PASTE@, @INCLUDE@, @EXCLUDE@
Opens the insert form of the screen's list filled with the copied values. Nothing is saved until the user saves the new record. From the list button bar the insert form opens behind the list view and is only seen when the user switches to the form view; inside a popup it opens in the screen behind the popup, which stays open.
- Value
- No value
No value.
- Examples
@PASTE@- Requires
- A '@COPY@' button of the same screen was pressed before, while the screen stayed open.
- Composition
- Anywhere
With '@VALIDATE' the button fails silently.
- Not read
- Only buttons read it.
Fails silently or breaks when
- Without a previous copy in the same screen, the button does nothing and shows no message.
- If the copy was made without '@INCLUDE@', the pasted record keeps the key and identity of the original, and saving it updates the original record and reports success; no record is created.
See also @COPY@
The copy keeps only the listed columns; the others take the default values of a new record.
- Value
- Runs to the end of the label · values defined by the core
Column names 'colN' (not field names), each one followed by a comma, the last one included: '@INCLUDE@col7,col3,'.
Positions of the resource's columns (col0, col1…).
- Examples
@COPY@INCLUDE@col7,col3,col4,col5,col6,col1,col2,- Requires
- Composition
- Must go last · combines with @COPY@
- Not read
- Without '@COPY@' before it, it is not read.
Fails silently or breaks when
- A column without a comma after it (usually the last one) is not copied.
See also @COPY@, @EXCLUDE@
Meant to copy every column except the listed ones. As implemented, it copies none: the paste opens an empty new record.
- Value
- Runs to the end of the label · values defined by the core
Column names 'colN', each one followed by a comma.
Positions of the resource's columns (col0, col1…).
- Examples
@COPY@EXCLUDE@col0,- Requires
- Composition
- Must go last · combines with @COPY@
@EXCLUDE@ takes precedence over @INCLUDE@ when both are written.
- Not read
- Without '@COPY@' before it, it is not read.
Fails silently or breaks when
- No column is copied, listed or not.
See also @COPY@, @INCLUDE@
A pick without dialog that saves: reads the first record of the button's parentResource matching its '@FILTER' against the current record, copies its columns into the record following pickMapFields and saves the record in the backend without asking and without a message. It does not copy the record itself. Unlike '@PICK@', in the form button bar it is also shown when editing.
- Value
- No value
No value. The source is configured in the button's own parentResource and pickMapFields.
- Examples
@COPY&SAVE@- Requires
- The button is in the form button bar or inside the form, not in the list button bar.
- The button's own field row (looked up by its FieldNameInUI within the application's API) has parentResource with '@FILTER', and pickMapFields.
- The record already exists. In a new record the filter value is empty (see failure_modes).
- Composition
- Must go last
The core finds the button's own field row by appending its FieldNameInUI to the label, so nothing may follow it. Next to '@VALIDATE' the button only validates.
- Not read
- In the list button bar the button does not find its own row and does nothing.
Fails silently or breaks when
- A backend error on save shows an empty error box (the backend's message is lost) and the record is not saved.
- If the source resource has no matching record, the record is saved unchanged.
- Without '@FILTER' nothing is read, and without pickMapFields or parentResource nothing is copied; in all three cases the record is saved unchanged and nothing is shown.
- A '@FILTER' that does not start with 'colN' shows a warning and is applied anyway.
- With '@FILTERFIX' the same warning is shown, the value is lost and the filter compares with an empty value, which the database may match with another record (a key 0); that record's values are copied and saved.
- In a new record not yet saved the filter value is empty as well, and the button inserts the record without the form's validation (required fields included).
See also @PICK@
Opens the report in a new browser tab through the report server of the deployment. Without '@SF', the current filter of the list (the one of the last search) is translated into the report's selection formula, with each field prefixed by the table taken from the resource name (or from the report name when it starts with 'V_'); without a search there is no formula, even when pressed from the form. The company in the report folder and the data source (DB11_<company><year>) come from the session; an application without company leaves them empty.
- Value
- Runs to @SF · values defined by the deployment
The file name of the report, glued to the token ('@RPTArqueo.rpt'), always relative to the report folder of the deployment; a '/' in the name only avoids adding another separator.
Report files (.rpt) on the report server of the deployment.
- Examples
@RPTCompTicket.rpt@RPTVerCertificados.rpt@SF{COLADAS.ARTICULO} = <<ARTICULO>>- Requires
- The deployment defines the report server and the report folder (app_const_clear_report_server, app_const_report_path).
- Composition
- Anywhere · combines with @SF
Its name runs to '@SF' or to the end, so other modifiers go before it. Inside the parameter of a process button ('@IDP<n>@PAR@RPT…') it is not a report button: the process step gets it as the id of a button to run.
- Not read
- Only buttons read it.
Fails silently or breaks when
- A report name that does not exist on the server fails in the report tab, not in the application.
- Without the report folder in the deployment, the button does nothing and shows nothing.
See also @SF
Filters the report with the formula, filled with the values of the record (or, without one, of the selected row of the list).
- Value
- Runs to the end of the label · free text
A selection formula of the report engine, '{TABLE.FIELD}=<<field>>' joined with AND/OR, where each '<<field>>' is replaced by the record's value ('colN' or the field name); a date becomes CDate(y,m,d) and a tag that cannot be resolved stays literal. Values are inserted as they are, so quotes for text go in the formula, and a NULL value is inserted as the text 'null' (a NULL date too, without CDate). Two special forms: '#row.colN' (the whole formula is the value of that field) and '@keepFIlter' (a filter kept by a running process).
Tables and fields as the report sees them; tied to the report engine and the database.
- Examples
@SF{COLADAS.ARTICULO} = <<ARTICULO>> AND {COLADAS.COLADA}='<<COLADA>>'- Requires
- Composition
- Must go last · combines with @RPT
Written before '@RPT', the button fails with an internal error.
- Not read
- Without '@RPT' before it, it is not read.
Fails silently or breaks when
- Without a record or a selected row, an error asks to select one.
- A NULL field ends up in the formula as the text 'null'.
See also @RPT
The user's browser posts the record as JSON to a print agent on the user's own machine (http://127.0.0.1:5001/print).
- Value
- No value · values defined by the deployment
No value. '@PATH@<path>@NCOPIES@<n>' may follow: the path replaces 'print' only when both are present; the number of copies is only used by grouped printing inside a process.
Paths served by the print agent installed on the user's machine.
- Examples
@DirectPrint@DirectPrint@RESOURCE@SumCount_Ventas_CAB__HojaCierre- Composition
- Anywhere · combines with @RESOURCE@
@VALUE@ is dispatched before it, so a print button cannot carry values.
- Not read
- Only buttons read it.
Fails silently or breaks when
- Without a print agent running, nothing happens for the user; the error only reaches the browser console.
- From the list button bar with no row selected (and no '@RESOURCE@'), nothing is sent and nothing is shown.
See also @RESOURCE@, @GenerateXML
Prints the first record the backend returns for that resource instead of the current one (not the selected row), read with the current filter of the list plus the user filter of that resource; the fields of the filter must exist in it.
- Value
- Runs to the end of the label · values defined by the metadata
The name of a resource of the backend.
Resources of the application's API.
- Examples
@DirectPrint@RESOURCE@SumCount_Ventas_CAB__HojaCierre- Requires
- It follows '@DirectPrint'.
- Composition
- Must go last · combines with @DirectPrint
- Not read
- Only '@DirectPrint' reads it.
Fails silently or breaks when
- If the resource returns no record, nothing is printed and no error is shown.
- With a search active in the list, the user filter is appended even when it is empty (' AND ()'), the backend returns no record and nothing is printed.
See also @DirectPrint
The user's browser posts the 'datos_factura' node of the record to an agent on the user's own machine (http://127.0.0.1:5001/genFacturaXML), which generates the XML.
- Value
- No value · values defined by the deployment
No value. '@PATH@<path>@NCOPIES@<n>' may follow, as in '@DirectPrint'.
Paths served by the agent installed on the user's machine.
- Examples
@GenerateXML- Composition
- Anywhere
- Not read
- Only buttons read it.
Fails silently or breaks when
- A record without 'datos_factura' fails with no error shown.
- Without the agent running, nothing happens for the user.
See also @DirectPrint
The application server launches the task on the report server with the parameters (for instance, emailing a report). The record is the form's record first, then the selected row.
- Value
- Runs to the end of the label · values defined by the deployment
'<taskId>#<param>#<param>…': the task id runs to the first '#' of the label, and each parameter is 'row.<field>', 'rowParent.<field>', 'user.<field>' or the name of a field of the record. 'MULTI' as task id takes the id per company from the record's 'idsTask'.
Task ids of the report server of the deployment.
- Examples
@CCTASK6ucc197c27omfobbh8csfiss2#row.N_PEDIDO#row.CLAVE_ALMACEN- Composition
- Must go last
# Not allowed: a '#' before the token is taken as the end of the task id and the button fails.
- Not read
- Only buttons read it.
Fails silently or breaks when
- Without the deployment properties for tasks, an error is shown and nothing is launched.
- Without parameters the whole label is taken as the name of a field, so an error is shown and the task is launched anyway with '###ERROR###'.
- A parameter that cannot be resolved shows an error, and the task is launched anyway with '###ERROR###' as its value.
- A 'MULTI' task id on a record without 'idsTask' shows an error and nothing is launched.
- From the list button bar with no row selected, nothing is launched and nothing is shown.
See also @RPT
Does not turn on the sums of the list. When the list of the screen has more than 500 rows it shows a notice with the number of rows, also when pressed from the form; otherwise the button does nothing.
- Value
- No value
No value.
- Examples
@SUMGRID- Composition
- Anywhere
- Not read
- Only buttons read it.