When creating a widget, use the attributes below to configure its functionality.
Attribute types
There are two types of widget attributes:
- configuration attributes that set form views of widgets.
- event-related attributes that set actions when users interact with widgets.
Configuration attributes description
Attribute | Type | Description | Available in |
---|---|---|---|
beginDate | String | Specify a minimum possible date for a field. beginDate <datetime model="data.dueDate" label="data.dueDateTitle" isMandatory="true" beginDate="{data.beginDate}" endDate="{data.endDate}"></datetime> Server Script const nowDate = new SimpleDateTime(); data.beginDate = nowDate.getDate(); nowDate.addDays(3); data.endDate = nowDate.getDate(); | <datetime> |
buttonType | String | Specify a button displaying style for forms and lists.
buttonType <button class="btn" event-click="window.s_widget_custom.forceUpdate();" buttonType="destructive"> Force </button> | <button> |
canExcludeAll | Boolean | Specify the attribute to deselect items. values <multiselect model="data.values" canExcludeAll="true" values='["1", "2"]' options='[{"database_value":"","display_value":""},{"database_value":"1","display_value":"First"},{"database_value":"2","display_value":"Second"}]'></multiselect> | <multiselect> |
canRead | Boolean | Specify the attribute to make the referred dictionary available | |
canCreate | Boolean | Specify the attribute to add the button for creating a new record. | |
class | String | Define CSS styles classes description. Define the attribute it in the Template field of the widget. Then, it should be described in the CSS field. class <button id="addBtn" class="button disable" event-click="window.s_widget_custom.addParticipants()"> {data.createCABbuttonTitle} </button>
CSS Expand source
.button { font-weight: 600; font-size: 14px; color: #fff; display: inline-block; vertical-align: top; text-align: center; border-radius: 4px; padding: 0 14px; line-height: 30px; letter-spacing: 0.2px; background-color: #0f8af9; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; cursor: pointer; height: 32px; } .button.disable { cursor: not-allowed; pointer-events: none; color: #c0c0c0; background-color: #ffffff; } | All Simple Tags (except for Portal Tages <attachment> |
condition | String | Specify the condition. It is an equivalent of Reference Qualifier in the agent interface. isFixed <reference isFixed="true" condition="{data.condition}" label="{data.instanceTitle}" tableName="sys_cmdb_ci_instance" model="data.instance" event-change="s_widget_custom.instanceSelected();"> </reference> Server Script if (!!input.tableName && !!input.caller) { data.condition = `owned_by=${input.caller}^ORDERBYDESCsys_created_at`; } | |
doClose | Function | Specify function that will be executed when the modal window is close. doClose <modal isShow="{data.isShow}" doClose="window.s_widget_custom.countClosing();"> </modal> Client Script window.s_widget_custom.countClosing = function () { window.closeCount = window.closeCount + 1 || 1 s_widget.setFieldValue('isShow', false); } | |
endDate | String | Specify a maximum possible date for a field. beginDate <datetime model="data.dueDate" label="data.dueDateTitle" isMandatory="true" isVisible="true" beginDate="{data.beginDate}" endDate="{data.endDate}"></datetime> Server Script const nowDate = new SimpleDateTime(); data.beginDate = nowDate.getDate(); nowDate.addDays(3); data.endDate = nowDate.getDate(); | <datetime> |
fixedCondition | String | Specify a condition applied to the list. Unlike the condition specified with the condition attribute, this condition is fixed and cannot be removed; it can be only specified more precisely. The attribute work logic is similar to the Reference Qualifiers (fixed). | |
isFixed | Boolean | Disable the changing of the condition value by making attribute equal to 'true'. isFixed <reference isFixed="true" isMandatory="true" condition="(state!=10)" label="Incident" model="data.incident_id" tableName="itsm_incident"> </reference> | |
isMandatory | Boolean | Enable setting a mandatory status to a field. For this, set the attribute equal to 'true'. <select model="data.reason" label="{data.reasonTitle}" options='[{ "database_value": "", "display_value": "--None--" }, {"database_value": "defect", "display_value": "Defect"}, {"database_value": "low_test_coverage", "display_value": "Low Test Coverage"}, {"database_value": "other", "display_value": "Other"}]' value='{"database_value": ""}' isMandatory="true"> </select> | All Simple Tags (except for Portal Simple Tags and <attachment> |
isPortal | Boolean | Enable the display of the attributed widget on the Self-Service Portal. | |
isShow | Boolean | Enable the display of the modal window. isShow <modal model="data.modal" title="{data.modalTitle}" isShow="{data.isShow}"> </modal> | |
isUserScripts | Boolean | Disable the client scripts execution in a form. | |
isVisible | Boolean | Disable the visibility of a widget. The attribute is equal to 'true' by default. isVisible <string model="data.additionalComment" isVisible="{data.showComment}"> </string> | All Simple Tags (except for <attachment>) |
label | String | Speicy the field label with text information generally describing the field content. <textarea model="data.name" label="Name"> </textarea> | All Simple Tags (except for <attachment> |
model | String | This attribute points to the client controller data object. When the model data changes, it is automatically transferred to data of the client script. <textarea model="data.name" label="Name"> </textarea> | All Simple Tags (except for <attachment> <remform>) and <dropdownMenu> |
modelId | String | This attribute allows to specify Record Extended Model ID when configuring a form extension. | |
options | Array | Specify options available for selecting. Use the CodeMirror JSON formatting to set the options you need. <select model="data.reason" label="{data.reasonTitle}" options='[{ "database_value": "", "display_value": "--None--" }, {"database_value": "defect", "display_value": "Defect"}, {"database_value": "low_test_coverage", "display_value": "Low Test Coverage"}, {"database_value": "other", "display_value": "Other"}]' value='{"database_value": ""}'> </select> | |
placeholder | String | Specify a placeholder for a text field. placeholder <textarea model="data.name" label="Name" placeholder="{data.namePlaceholderText}"> </textarea> | |
readOnly | Boolean | Allow setting a read-only status to a field. For this, set it equal to 'true'. <select model="data.state" label="{data.stateTitle}" options='[ {"database_value": "registered", "display_value": "Registered"}, {"database_value": "open", "display_value": "Open"}, {"database_value": "in_progress", "display_value": "In Progress"}]' value='{"database_value": ""}' readOnly="true"> </select> | All Simple Tags (except for Portal Tags, <attachment> |
recordId | String | Specify a record ID for the extention. When using, do not forget to specify a table (use the tableName attribute for this). See the example code for the <rem> SimpleTag. recordId <rem modelId="{data.model_id}" tableName="{data.table_name}" recordId ="{data.record_id}" /> | |
reportId | String | Specify the report ID for viewing. reportId <report reportid="{data.monthBarReportId}" condition="(group.nameLIKEdesk^state=active)" /> | |
saveButtonCaption | String | Specify a text displayed on the Save button on the portal form. saveButtonCaption <remform modelId="{data.model_id}" isPortal="true" tableName="rem_table" saveButtonCaption="Save" /> | <remform> |
style | String | Specify the display settings (size, font, color, and etc.) of the widget elements using the CSS syntax. style <textarea model="data.notes" label="Notes" style="height: 328px; width: 100%; padding: 32px 64px 40px 64px;"> </textarea> | All Simple Tags (except for <attachment> |
tableId | Big Integer | Specify the referenced dictionary by its ID. | |
tableName | String | Specify the referenced dictionary. tableName <reference isFixed="true" isMandatory="true" condition="(state!=10)" label="Incident" model="data.incident_id" tableName="itsm_incident"> </reference> | |
title | String | Specify the modal window title. isShow <modal title="{data.modalTitle}" isShow="{data.isShow}" </modal> | |
value | String (Array for the <list> tag) | Specify the default value for a field. value <checkbox model="data.locked_out" label="{data.lockedOutLabel}" value="true"> </checkbox> List <list label="Configuration Item" model="data.element" tableName="cmdb" isMandatory="true" condition="{data.condition}" value='[{"database_value":"","display_value":""},{"database_value":"1","display_value":"First"},{"database_value":"2","display_value":"Second"}]'></list> | All Simple Tags (except for Portal Tags |
values | String | Specify the default value for a field. values <multiselect model="data.values" canExcludeAll="true" values='["1", "2"]' options='[{"database_value":"","display_value":""},{"database_value":"1","display_value":"First"},{"database_value":"2","display_value":"Second"}]'></multiselect> |
Event-related attributes
Attribute | Description |
---|---|
event-change | Specify the actions performed when the change event occurs. <string model="data.lastname" event-change="s_widget_custom.updateFullname();"> </string> |
event-click | Specify the actions that should be performed when the click event occurs. <button event-click="window.s_widget_custom.close();"> {data.closeTitle} </button> |
Widget data input and output
A widget template components:
- Template specifies the widget view and the way it displays with HTML. It also allows end-users to input and to interact with data.
- Client script runs a JS script on the client-side, so that it receives data from the server-side, processes data before rendering, then passes it to the widget template. Also, the client script passes the data input received to the server-side.
In the widget template scripts, use data input for passing the data values to a widget for any purpose. The client script uses the data object to access server data. After processing data by the client script, invoke the s_widget.serverUpdate() method to send the data to the server controller. When calling this method, the server script data object automatically overwrites the client controller data object.
Input and output fields
Widget elements can be defined as input fields and manage the input data in the way you want.
The code below implements data input using the model widget attribute, then after the data gets updated on the client-side, this value passes to the <h1>
header.
<string model="data.input"> </string> <h1> {data.input} </h1>
The <string>
field is a text field that allows a user to enter some text information. The <h1>
header dynamically displays this text with the {data.input}
object.
Multiple data output
The examples below describe how to place the values into two fields and output the joined value of them formatted with "h1 header" style in two different ways.
Example 1
<string model="data.lastname" event-change=";(( ) => { const lastname = s_widget.getFieldValue('lastname') || ''; const firstname = s_widget.getFieldValue('firstname') || ''; s_widget.setFieldValue('fullname', lastname + ' ' + firstname) } )();"> </string> <string model="data.firstname" event-change=";( () => { const lastname = s_widget.getFieldValue('lastname') || ''; const firstname = s_widget.getFieldValue('firstname') || ''; s_widget.setFieldValue('fullname', lastname + ' ' + firstname) })();"> </string> <h1>{data.fullname}</h1>
Example 2
;(() => { window.s_widget_custom = window.s_widget_custom || {}; window.s_widget_custom.updateFullname = function() { const lastname = s_widget.getFieldValue('lastname') || ''; const firstname = s_widget.getFieldValue('firstname') || ''; s_widget.setFieldValue ('fullname2', lastname + ' ' + firstname) } } )();
<string model="data.lastname" event-change="s_widget_custom.updateFullname();"> </string> <string model="data.firstname" event-change="s_widget_custom.updateFullname();"> </string> <h1>{data.fullname2}</h1>
- No labels