ISAC 3.7
Web
Add New Button on Dropdown and Searchable Dropdown components
Currently, the usability of the product is quite troublesome when it comes on record selection. Often, the users face the situation that a record might not exist and he/she is forced to loose the progress in the current UI and navigate to a different module to create the necessary records.
Solution
Adding the capability to the searchable dropdown component that allows the user to “Add New” if the record has not yet been created.
This allows user to stay within the sidepanel to create the record and negates the need for them to jump to another app module.
For example, if the user wants to select a new Customer or Customer Site for a Work Order and that record hasn't yet been created, they would select “Add New” from the dropdown menu and this would open the sidepanel for adding that record.
Improves the UX for FSE and solutions in general.
The Add New button should allow to execute web actions, so the user can define what would happen when this button is clicked
Enable a user to navigate to the Task Builder to create a new task type
Items update while a user is selecting an option from the drop-down
More Details: ZPW-3641

Server
Lambda Node
Currently, we were using Network nodes to connect to Lambda services and call AI functions, as a result we had:
Additional latency - affects user mobile experience as well as the workflows needs to be ONLINE only
Additional steps like authentication, etc - which leads to further latency and delay and bad end user experience
API Gateway had a limit of 29 seconds and certain Ai inferences can take more time especially the serverless Lambda when it is triggered for the first time (AWS probably initiates a new instance and kills it if its not used for certain period of time)
Solution
Using Lambda node as a platform feature improves latency and gives fine control
Lambda node can be used seamlessly for other features like we did Box.com integration for GE
Lambda service is available in platform and it can be exposed as a platform feature with some effort (needn’t start from stratch)
"lambda": {
"connectors": [
{
"exitPortType": "NextStep",
"nodeId": "end"
}
],
"name": "Lambda node",
"description": "Node to call an internal/external lambda hostings",
"inputVarMap": {
"configKey": "configKey",
"templateData": "data",
"configScope": "configScope"
},
"outputVarMap": {
"data": "data"
},
"systemEnabled": false,
"nodeType": "LAMBDA",
"sync": true
}
Mobile
Live Select Item component for Mobile
Previously, Select Item components would receive data coming from queries and processes done by the workflow, making the data static and not up to date for technicians.
Solution
Provide a way where data is updated every time is accessed by the user and it is also supported on low connectivity environments.
More Details: Live Select Item Component
{
"allowDelete": 1,
"endColumn": 11,
"hidden": false,
"columns": [
{
"col": 1, "name": "Name", "row": 1, "key": "name"
},
{
"col": 2, "name": "Description", "row": 1, "key": "description"
},
{
"col": 1, "name": "Unit price", "row": 2, "key": "unitPrice"
},
{
"col": 2, "dataType": "datetime", "name": "created date", "row": 2, "key": "createdDate"
}
],
"editable": 1,
"index": 2,
"source": "api",
"preProcessRuleForBatch": {
"setBatchNumber": "function (pageContext){ function nullCheck(a) { return (typeof a !== 'undefined' && a !== '' && a !== '-'); } return (nullCheck(pageContext?.selectItem1?.prevObj?.setBatchNumber) ? pageContext.selectItem1.prevObj.setBatchNumber + 1 : 1); }",
"setFilter": "function(pageContext){if(type pageContext.selectItem1.searchText !== 'undefined' && pageContext.selectItem1.searchText !== ''){ return ('%' + pageContext.selectItem1.searchText + '%');} return '%%'}"
},
"title": "Live SelectItem",
"type": "selectitem",
"totalCount": "count",
"required": 0,
"url": "/query/read",
"selectionType": "multiple",
"editRowPageId": "RefreshDatagridSubPage",
"startColumn": 0,
"addRowPageId": "RefreshDatagridSubPage",
"disableAdd": false,
"id": "selectItem1",
"isInfiniteScrollEnabled": true,
"apiObject": {
"data": [
{
"models": [
"catalogs"
],
"columns": {
"unitPrice": "catalogs.unitPrice",
"createdDate": "catalogs.createdDate",
"catalogType": "catalogs.catalogType",
"name": "catalogs.name",
"description": "catalogs.description"
},
"batchSize": 5,
"getCount": true,
"distinctFilter": false,
"batchNumber": "@js.setBatchNumber"
}
]
},
"value": "@pageContext.RDgrid1",
"responseVariable": "data"
}