예제 #1
0
        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();
        }
예제 #2
0
        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);
            }
        }