Change where the query handler is invoked on the page
Display the number of the newest section record on the record page of the Requests custom section. Set the number to the custom system setting. Increment the number by 1 after saving the request page.
1. Set up page UI
-
Create a custom
Requests
app based on the Records & business processes template. To do this, follow the procedure in the user documentation: Create a custom app. -
Add a system setting that stores the request number.
-
Click to open the System Designer. Click System settings in the System setup block.
-
Click Add setting on the section toolbar.
-
Fill out the system setting properties:
- Set Name to "Request number."
- Set Code to "UsrRequestLastNumber."
- Select "Integer" in the Type property.
- Set Default value to "1."
-
-
Open the Requests form page page in the workspace of the
Requests
app page.The Requests form page page includes the Name field by default.
-
Add a 2 columns component to the Freedom UI Designer workspace.
-
Add a request number label.
-
Add a component of the Label type to the first column of the 2 columns component of the Freedom UI Designer.
-
Click the button on the Freedom UI Designer’s action panel and fill in the label’s properties in the setup area:
- Set Title to "Create request."
- Select "Caption" in the Style property.
- Select the gray color in the Text color property.
-
-
Add a title that contains the value of the system setting with the request number.
-
Add a component of the Label type to the second column of the 2 columns component of the Freedom UI Designer.
-
Click the button on the Freedom UI Designer’s action panel and fill in the title’s properties in the setup area:
- Set Title to "Request number (value)."
- Select "Body text" in the Style property.
-
-
Click the button on the Freedom UI Designer’s action bar. The source code of the Freedom UI page opens after you save the page settings.
2. Change the origin of the query handler call
Configure the business logic in the Client Module Designer. In this example, change the origin of the query handler call.
-
Enable the
sdk. SysSettingsService
system variable service. To do this, add the@creatio-devkit/common
dependency to the AMD module.AMD module dependencies/* AMD module declaration. */
define("UsrAppRequests_FormPage", /**SCHEMA_DEPS*/["@creatio-devkit/common"] /**SCHEMA_DEPS*/, function/**SCHEMA_ARGS*/(sdk)/**SCHEMA_ARGS*/ {
return {
...
};
}); -
Add the
UsrRequestLastNumber
attribute to theviewModelConfigDiff
schema section. The attribute stores the value of theUsrRequestLastNumber
system setting.viewModelConfigDiff schema sectionviewModelConfigDiff: /**SCHEMA_VIEW_MODEL_CONFIG*/{
"attributes": {
...,
/* The attribute that stores the value of the UsrRequestLastNumber system setting. */
"UsrRequestLastNumber": {}
}
}/**SCHEMA_VIEW_MODEL_CONFIG*/, -
Bind the
caption
property of theRequestNumberValue
element to the$UsrRequestLastNumber
model attribute in theviewConfigDiff
schema section. Thecaption
property is responsible for the text that the element contains.viewConfigDiff schema sectionviewConfigDiff: /**SCHEMA_VIEW_CONFIG_DIFF*/[
...,
{
"operation": "insert",
"name": "RequestNumberValue",
"values": {
...,
/* The property responsible for the text that the element contains. Bound to the UsrRequestLastNumber attribute. */
"caption": "$UsrRequestLastNumber",
...
},
...
}
]/**SCHEMA_VIEW_CONFIG_DIFF*/, -
Add a custom implementation of the
crt.SaveRecordRequest
system query handler to thehandlers
schema section. The handler is called by clicking the Save button on the request page toolbar.- Implement waiting for the execution of the next handler. In this example, it is the handler that saves the record.
- Instantiate the system value service from
@creatio-devkit/common
after saving the record. - Get the value of the
UsrRequestLastNumber
system setting. - Send a query to update the value of the
UsrRequestLastNumber
system setting (increases it by 1). - Update the value of the
UsrRequestLastNumber
attribute. - Return the result of the saving.
handlers schema sectionhandlers: /**SCHEMA_HANDLERS*/[
{
request: "crt.SaveRecordRequest",
/* Implement the custom query handler. */
handler: async (request, next) => {
/* Wait for the next handler (in this case, the handler that saves the record) to execute. */
const saveResult = await next.handle(request);
/* Instantiate the system value service from @creatio-devkit/common after saving the record. */
const sysSettingsService = new sdk.SysSettingsService();
/* Retrieve the value of the UsrRequestLastNumber system setting. */
const requestLastNumber = await sysSettingsService.getByCode('UsrRequestLastNumber');
/* Send a query to update the value of the UsrRequestLastNumber system setting. */
await sysSettingsService.update({
code: 'UsrRequestLastNumber',
/* The new value is larger than the previous one by 1. */
value: ++requestLastNumber.value
});
/* Update the value of the UsrRequestLastNumber attribute. */
request.$context.UsrRequestLastNumber = requestLastNumber.value;
/* Return the result of the saving. */
return saveResult;
}
}
] /**SCHEMA_HANDLERS*/, -
Click Save on the Client Module Designer’s toolbar.
Outcome of the example
To view the outcome of the example:
- Go to the
Requests
app page and click Run app. - Click New on the
Requests
app toolbar.
As a result, when you click the Save button on the request page toolbar, Creatio will display the number of the last record created in the Requests section, increased by 1. The value is taken from the Request number (UsrRequestLastNumber
code) system setting.
Source codes
/* AMD module declaration. */
define("UsrAppRequests_FormPage", /**SCHEMA_DEPS*/["@creatio-devkit/common"] /**SCHEMA_DEPS*/, function/**SCHEMA_ARGS*/(sdk)/**SCHEMA_ARGS*/ {
return {
viewConfigDiff: /**SCHEMA_VIEW_CONFIG_DIFF*/[
{
"operation": "insert",
"name": "UsrName",
"values": {
"layoutConfig": {
"column": 1,
"row": 1,
"colSpan": 1,
"rowSpan": 1
},
"type": "crt.Input",
"label": "$Resources.Strings.UsrName",
"control": "$UsrName"
},
"parentName": "LeftAreaProfileContainer",
"propertyName": "items",
"index": 0
},
{
"operation": "insert",
"name": "GridContainer_zaj7g34",
"values": {
"layoutConfig": {
"column": 1,
"row": 2,
"colSpan": 1,
"rowSpan": 1
},
"type": "crt.GridContainer",
"columns": [
"minmax(32px, 1fr)",
"minmax(32px, 1fr)"
],
"rows": "minmax(max-content, 32px)",
"gap": {
"columnGap": "large"
},
"items": []
},
"parentName": "LeftAreaProfileContainer",
"propertyName": "items",
"index": 1
},
{
"operation": "insert",
"name": "RequestNumber",
"values": {
"layoutConfig": {
"column": 1,
"row": 1,
"colSpan": 1,
"rowSpan": 1
},
"type": "crt.Label",
"caption": "#ResourceString(RequestNumber_caption)#",
"labelType": "caption",
"labelThickness": "normal",
"labelEllipsis": false,
"labelColor": "#757575",
"labelBackgroundColor": "transparent",
"labelTextAlign": "start"
},
"parentName": "GridContainer_zaj7g34",
"propertyName": "items",
"index": 0
},
{
"operation": "insert",
"name": "RequestNumberValue",
"values": {
"layoutConfig": {
"column": 2,
"row": 1,
"colSpan": 1,
"rowSpan": 1
},
"type": "crt.Label",
/* The property responsible for the text that the element contains. Bound to the UsrRequestLastNumber attribute. */
"caption": "$UsrRequestLastNumber",
"labelType": "body-1",
"labelThickness": "normal",
"labelEllipsis": false,
"labelColor": "#181818",
"labelBackgroundColor": "transparent",
"labelTextAlign": "start"
},
"parentName": "GridContainer_zaj7g34",
"propertyName": "items",
"index": 1
}
]/**SCHEMA_VIEW_CONFIG_DIFF*/,
viewModelConfigDiff: /**SCHEMA_VIEW_MODEL_CONFIG*/{
"attributes": {
"UsrName": {
"modelConfigDiff": {
"path": "PDS.UsrName"
}
},
"Id": {
"modelConfigDiff": {
"path": "PDS.Id"
}
},
/* The attribute that stores the value of the UsrRequestLastNumber system setting. */
"UsrRequestLastNumber": {}
}
}/**SCHEMA_VIEW_MODEL_CONFIG*/,
modelConfigDiff: /**SCHEMA_MODEL_CONFIG*/{
"dataSources": {
"PDS": {
"type": "crt.EntityDataSource",
"config": {
"entitySchemaName": "UsrAppRequests"
}
}
}
}/**SCHEMA_MODEL_CONFIG*/,
handlers: /**SCHEMA_HANDLERS*/[
{
request: "crt.SaveRecordRequest",
/* Implement the custom query handler. */
handler: async (request, next) => {
/* Wait for the next handler (in this case, the handler that saves the record) to execute. */
const saveResult = await next.handle(request);
/* Instantiate the system value service from @creatio-devkit/common after saving the record. */
const sysSettingsService = new sdk.SysSettingsService();
/* Retrieve the value of the UsrRequestLastNumber system setting. */
const requestLastNumber = await sysSettingsService.getByCode('UsrRequestLastNumber');
/* Send a query to update the value of the UsrRequestLastNumber system setting. */
await sysSettingsService.update({
code: 'UsrRequestLastNumber',
/* The new value is larger than the previous one by 1. */
value: ++requestLastNumber.value
});
/* Update the value of the UsrRequestLastNumber attribute. */
request.$context.UsrRequestLastNumber = requestLastNumber.value;
/* Return the result of the saving. */
return saveResult;
}
}
] /**SCHEMA_HANDLERS*/,
converters: /**SCHEMA_CONVERTERS*/{}/**SCHEMA_CONVERTERS*/,
validators: /**SCHEMA_VALIDATORS*/{}/**SCHEMA_VALIDATORS*/
};
});