public override async Task Run() { if (OperationalState == null) { RaiseError("This Action can't run without OperationalStateCM crate", ActivityErrorCode.PAYLOAD_DATA_MISSING); return; } var crateDescriptionToProcess = FindCrateDescriptionToProcess(); //updating iteration index var loopData = OperationalState.CallStack.GetLocalData <OperationalStateCM.LoopStatus>("Loop"); if (loopData == null) { loopData = new OperationalStateCM.LoopStatus(); } else { loopData.Index++; } OperationalState.CallStack.StoreLocalData("Loop", loopData); //end of updating var crateToProcess = FindCrateToProcess(crateDescriptionToProcess); if (crateToProcess == null) { RaiseError("This Action can't run without OperationalStateCM crate", ActivityErrorCode.PAYLOAD_DATA_MISSING); throw new TerminalCodedException(TerminalErrorCode.PAYLOAD_DATA_MISSING, "Unable to find any crate with Manifest Type: \"" + crateToProcess.ManifestType + "\" and Label: \"" + crateToProcess.Label + "\""); } var dataListSize = GetDataListSize(crateToProcess); if (dataListSize == null) { RaiseError("Unable to find a list in specified crate with Manifest Type: \"" + crateToProcess.ManifestType.Type + "\" and Label: \"" + crateToProcess.Label + "\"", ActivityErrorCode.PAYLOAD_DATA_MISSING); throw new TerminalCodedException(TerminalErrorCode.PAYLOAD_DATA_MISSING); } if (loopData.Index >= dataListSize.Value) { RequestSkipChildren(); return; } PopulateRowData(crateDescriptionToProcess, loopData, crateToProcess); Success(); }
private void PopulateRowData(CrateDescriptionDTO crateDescriptionToProcess, OperationalStateCM.LoopStatus loopData, Crate crateToProcess) { string label = GetCrateName(crateDescriptionToProcess); Payload.RemoveUsingPredicate(a => a.Label == label && a.ManifestType == crateToProcess.ManifestType); if (crateDescriptionToProcess.ManifestId == (int)MT.StandardTableData) { var table = crateToProcess.Get <StandardTableDataCM>(); var rowOfData = table.DataRows.ElementAt(loopData.Index); var extractedCrate = new StandardTableDataCM(false, new List <TableRowDTO>() { rowOfData }); Payload.Add(Crate.FromContent(label, extractedCrate)); } else { var cloned_crate = CloneCrateAndReplaceArrayWithASingleValue(crateToProcess, "", loopData.Index, GetCrateName(crateDescriptionToProcess)); Payload.Add(cloned_crate); } }