We have a Service Script invoked by XAI Inbound Service that is invoking a Business Service. If an error occurs in the BS, we would like to be able to capture/process it within the SS, rather than the process "failing"...
As an example, the CC&B Demo database includes SS CI_MRInput and BS CI_RegisterReadHighLowLimits (see CI_MRInput script below).
In the Demo environment, the CI_MRInput is invoked by a BPA Script CI_MRRouteA, in which case "with warn" may be specified to effect processing of the error.
However, when invoked via the XAI Inbound Service, an error from the BS (ex: 8:11024) causes the CC&B process to "fail" and a SOAP Fault and/or CC&B error details to be sent to the external process. This is not desired.
Ideally, we'd like the SS to catch the error and send an agreed upon error code to the external process.
Any assistance in this matter will be greatly appreciated.
CI_MRInput Service Script:
10: move "parm/meterReadDetails/meterConfigurationId" to "MeterConfiguration/meterConfigurationId";
20: invokeBO 'CI_MeterConfiguration' using "MeterConfiguration" for read;
30: edit data
// Reset register reads
move null to "parm/meterReadDetails/register";
// Reset Register remarks
if ("parm/meterReadDetails/remark/readerRemark != $BLANK")
move null to "parm/meterReadDetails/remark";
// Using the meter configuration retrieved, setup the meter read elements
move "MeterConfiguration/*" to "parm/meterReadDetails/*";
// Default Read Type (60=Regular) and Use on Bill to 'Y'
move '60' to "parm/meterReadSchedule/readType";
move 'true' to "parm/meterReadDetails/useOnBill";
move "concat(parm/meterReadSchedule/scheduledReadDate,'-12.00.00')" to "parm/meterReadDetails/readDateTime";
// Get the High/Low Limit for each register
move '0' to $registerIndex;
move "parm/meterReadDetails/readDateTime" to "HighLowLimits/readDateTime";
move "parm/meterReadSchedule/readType" to "HighLowLimits/readType";
for ($REG in "parm/meterReadDetails/register")
move "$REG/registerId" to "HighLowLimits/registerId";
move "parm/meterReadSchedule/spId" to "HighLowLimits/spId";
invokeBS 'CI_RegisterReadHighLowLimits' using "HighLowLimits";
move "HighLowLimits/highLimit" to "parm/meterReadDetails/register[$registerIndex]/highLimit";
move "HighLowLimits/lowLimit" to "parm/meterReadDetails/register[$registerIndex]/lowLimit";
move "1 + $registerIndex" to $registerIndex;
Use the following BS which will execute your SS(from this SS call your BS) and rollback the transaction and return the error code as a Output. BS Name: F1-SavePointDispatcher
So you through back agreed error according to error code you have received by BS.