One observation, i tried putting it outside the nested loop and then tried using Xpath
But the error I am facing when publishing it is throwing the attached error
(function execute(inputs, outputs) {
try {
function createOutputJson(inputs, outputs) {
var xmlDoc = new XMLDocument2();
xmlDoc.setNamespaceAware(true);
xmlDoc.parseXML(inputs.response);
var node = xmlDoc.getNodeText("/env:Envelope/env:Body/wd:Get_Time_Off_Plan_Balances_Response/wd:Response_Data/wd:Time_Off_Plan_Balance/wd:Time_Off_Plan_Balance_Data");
if (node == null) {
outputs = WorkdayUtils.emptyresponseHandler(inputs, outputs);
} else {
// --- ADDED: Variables to hold the specific values ---
var final_casl = "";
var final_pto = "";
var final_esl = "";
var responseDataXpath = "/env:Envelope/env:Body/wd:Get_Time_Off_Plan_Balances_Response/wd:Response_Data/";
var timeOffPlanBalanceList = new Array();
var index = 0;
while (index < 999) {
index++;
var timeOffPlanBalanceXpath = responseDataXpath.concat("wd:Time_Off_Plan_Balance[" + index + "]/");
var effectivedate = xmlDoc.getNodeText("/env:Envelope/env:Body/wd:Get_Time_Off_Plan_Balances_Response/wd:Response_Filter/wd:As_Of_Effective_Date");
var employeeReferenceXpath = xmlDoc.getNode(timeOffPlanBalanceXpath.concat("wd:Employee_Reference"));
var employeeDescription = employeeReferenceXpath.getAttribute('wd:Descriptor');
var employeeID = xmlDoc.getNodeText(timeOffPlanBalanceXpath.concat("wd:Employee_Reference/wd:ID[@type='Employee_ID']"));
if (employeeDescription == null && employeeID == null)
break;
var employeeReference = {
employeeDescription: employeeDescription,
employeeID: employeeID
};
var timeOffPlanBalanceRecordList = new Array();
var count = 0;
while (count < 999999) {
count++;
var timeOffPlanBalanceRecordXpath = timeOffPlanBalanceXpath.concat("wd:Time_Off_Plan_Balance_Data/wd:Time_Off_Plan_Balance_Record[" + count + "]/");
var timeOffRefXpath = xmlDoc.getNode(timeOffPlanBalanceRecordXpath.concat("wd:Time_Off_Plan_Reference"));
var timeOffPlanDescription = timeOffRefXpath.getAttribute('wd:Descriptor');
var absencePlanID = xmlDoc.getNodeText(timeOffPlanBalanceRecordXpath.concat("wd:Time_Off_Plan_Reference/wd:ID[@type='Absence_Plan_ID']"));
if (timeOffPlanDescription == null && absencePlanID == null)
break;
var timeOffPlanReference = {
timeOffPlanDescription: timeOffPlanDescription,
absencePlanID: absencePlanID
};
var unitofTimeReferenceXpath = xmlDoc.getNode(timeOffPlanBalanceRecordXpath.concat("wd:Unit_of_Time_Reference"));
var unitOfTimeDescription = unitofTimeReferenceXpath.getAttribute('wd:Descriptor');
var unitOfTimeID = xmlDoc.getNodeText(timeOffPlanBalanceRecordXpath.concat("wd:Unit_of_Time_Reference/wd:ID[@type='Unit_of_Time_ID']"));
var unitOfTimeReference = {
unitOfTimeDescription: unitOfTimeDescription,
unitOfTimeID: unitOfTimeID
};
var timeOffPlanBalancePositionRecordList = new Array();
var check = 0;
while (check < 999999) {
check++;
var timeOffPlanBalance = xmlDoc.getNodeText(timeOffPlanBalanceRecordXpath.concat("wd:Time_Off_Plan_Balance_Position_Record[" + check + "]/wd:Time_Off_Plan_Balance"));
if (timeOffPlanBalance == null)
break;
// --- ADDED: Logic to capture the specific balances ---
if (absencePlanID == "ABSENCE_PLAN_SMCH_CA_SL_Time_Off_Plan") { final_casl = timeOffPlanBalance; }
if (absencePlanID == "ABSENCE_PLAN_SMCH_PTO_Time_Off_Plan") { final_pto = timeOffPlanBalance; }
if (absencePlanID == "ABSENCE_PLAN_SMCH_Extended_Sick_Leave_Time_Off_Plan") { final_esl = timeOffPlanBalance; }
var timeOffPlanBalancePositionRecord = {
timeOffPlanBalance: timeOffPlanBalance
};
timeOffPlanBalancePositionRecordList.push(timeOffPlanBalancePositionRecord);
}
var timeOffPlanBalanceRecord = {
timeOffPlanReference: timeOffPlanReference,
unitOfTimeReference: unitOfTimeReference,
timeOffPlanBalancePositionRecordList: timeOffPlanBalancePositionRecordList
};
timeOffPlanBalanceRecordList.push(timeOffPlanBalanceRecord);
}
var timeOffPlanBalanceData = {
employeeReference: employeeReference,
effectivedate: effectivedate,
timeOffPlanBalanceRecordList: timeOffPlanBalanceRecordList
};
timeOffPlanBalanceList.push(timeOffPlanBalanceData);
}
outputs.status = "Success";
outputs.timeoffplanbalancelist = timeOffPlanBalanceList;
// --- ADDED: Final output mapping ---
outputs.casl_balance = final_casl;
outputs.pto_balance = final_pto;
outputs.esl_balance = final_esl;
}
}
if (inputs.statusCode == "200") {
outputs = createOutputJson(inputs, outputs);
} else {
outputs = WorkdayUtils.errorHandler(inputs, outputs);
gs.error(outputs.error_message);
}
} catch (e) {
var errStatObj = WorkdayUtils.getUnknownErr(e);
outputs.status = errStatObj.status;
outputs.error_message = errStatObj.error_message;
}
})(inputs, outputs);