So, I think I mentioned this in another thread, but I sidestepped this issue by hiding the original grid, adding my own, then loading it with data via the rest-erp
action and the Erp.BO.DynamicQuerySvc.executeById
method.
- Add a
rest-erp
action to an event. Hook the event to whatever you want.
- In the action’s properties, specify the service name as
Ico.BO.DynamicQuerySvc
, the service operation as ExecuteByID
.
- Click into Method Parameters. For the
queryID
parameter, specify the ID of your BAQ in the Field Value
field.
In the executionParams
field, specify your BAQ parameters using a JSON object…
similar to the following:
{
"ExecutionParameter": [
{
"IsEmpty": false,
"ParameterID": "JobNum",
"ParameterValue": "{TransView.JobNum}",
"ValueType": "string"
},
{
"IsEmpty": false,
"ParameterID": "AsmSeq",
"ParameterValue": 0,
"ValueType": "number"
},
{
"ParameterID": "SortColumn",
"ParameterValue": "Calculated_SourceBin"
}
]
}
ParameterID
is the ID of the parameter from the BAQ parameter editor. ParameterValue
contains the actual parameter value. You can interpolate dataview values here with the {}
syntax. Since parameter values are sent as strings, ValueType
can be used to specify otherwise. If the value is truly empty, IsEmpty
can be used. This is important when triggering the Skip Condition If Empty BAQ parameter setting.
The rest-erp
response from the executeByID
method returns a JSON object of the format
{
"returnObj": {
"Results": [
{
"Part_PartNum": "BM56737",
"Part_PartDescription": "RAM PUMP FEEDER 702 034PUMP W/RH-CONTROLS",
"JobAsmbl_JobNum": "202443-21-1",
"JobAsmbl_AssemblySeq": 0,
"ParentJobAsmbl_PartNum": "BM56737",
"ParentAsmblPart_PartDescription": "RAM PUMP FEED"
}
]
}
- The last step is to configure the
rest-erp
action to update a dataview with the response. This assumes you’ve created a blank dataview already. See this post by @Ishkaran for a video about this.
In Rest Services → ERP Rest Arguments → Response Parameters add a new parameter and set Parameter Name
to Results, View Name
to the name of the view you created and Parse from Response Path
to returnObj.
This should result in the data from your BAQ successfully loading into your dataview. The next step is binding your dataview to your grid and (probably?) defining columns.
- On your grid’s properties, specify the view name in the Grid Model → Ep Binding field.
- Under Grid Model → Columns, add columns to the collection that you’d like displayed on the grid. Set the
Field
property to the column name from your BAQ. The Title
property is used to set what text is displayed in the column’s header.
That should be it for the basic example of calling a BAQ with parameters. This method is far more flexible that the built-in BAQ binding. You can design your parameter forms however you want. You can bind different controls (textbox, combo, whatever) to a view (like TransView), then reference those values in the JSON payload.
I haven’t used this method for specifying traditional BAQ filters, but they can specified by adding ExecutionFilter to the JSON payload. As per the REST docs:
"ExecutionFilter": [
{
"DataTableID": "string",
"FieldName": "string",
"Neg": true,
"CompOp": "string",
"RValue": "string",
"SysRowID": "00000000-0000-0000-0000-000000000000",
"RowMod": "string"
}
]