예제 #1
0
        public StepAction Create(ParameterManager processParameterManager)
        {
            try
            {
                var stepAction = new StepAction
                {
                    _actionName = _actionName, _bindKey = _bindKey, _bindingDictionaryName = _bindingDictionaryName
                };

                if (_bindToResourceTemplate)
                {
                    stepAction.AssignAction(processParameterManager);
                }

                else
                {
                    stepAction.Action = Action.Clone();
                    stepAction.Action.ActionContainer = Action.ActionContainer;
                }

                return(stepAction);
            }
            catch (Exception e)
            {
                Log.Error($"创建StepAction实例失败,Step名称为:【{_actionName}】,异常为{e.Message}");
                return(null);
            }
        }
예제 #2
0
        public Step CreateInstance(ParameterManager processParameterManager)
        {
            var step = new Step(OwnerProcess, Name, StepId, NextStep)
            {
                OwnerProcessInstance = OwnerProcessInstance,
                InParameterBinds     = InParameterBinds.Select(inParameterBind => inParameterBind.CreateParameterBind())
                                       .ToList(),
                OutParameterBinds = OutParameterBinds.Select(outParameterBind => outParameterBind.CreateParameterBind())
                                    .ToList(),
                StepAction   = StepAction.Create(processParameterManager),
                _msPerTicket = _msPerTicket,
                _waitTicks   = _waitTicks
            };

            var showParameters = ShowParameters.ToList();

            var stepChecks = _stepChecks.Select(stepCheck => stepCheck.Create(this)).ToList();

            step.ShowParameters = showParameters;

            if (stepChecks.Count > 0)
            {
                step._stepChecks = stepChecks;
            }

            return(step);
        }
예제 #3
0
        public void Execute()
        {
            try
            {
                if (LogOutput)
                {
                    Log.Info(
                        $"执行单步过程:PROCESS:{OwnerProcess.ProcessName}.{Name},当前同步模式为:{IsSync},pid为:【{OwnerProcessInstance.Pid}】");
                }

                // 打印要求的过程参数
                if (ShowParameters.Count > 0)
                {
                    var processParameters = GetShowProcessParameters();
                    Log.Info("执行前.");
                    foreach (var strPar in ShowParameters)
                    {
                        if (processParameters.ContainsKey(strPar))
                        {
                            Log.Info(
                                $"参数:{strPar} 值:{processParameters[strPar].GetValueInString()}.pid为:【{OwnerProcessInstance.Pid}】");
                        }
                        else
                        {
                            Log.Error($"找不到过程参数:{strPar},pid为:【{OwnerProcessInstance.Pid}】");
                        }
                    }
                }

                if (StepAction != null)
                {
                    void ExeCuteStepCoreFunction()
                    {
                        // 把Step参数导入Action参数
                        foreach (var bind in InParameterBinds)
                        {
                            bind.AssignValue(OwnerProcessInstance.ProcessParameterManager,
                                             StepAction.Action.ActionInParameterManager);
                        }

                        StepAction.Execute();
                    }

                    lock (_actionParameterLocker)
                    {
                        //Log.Info($"{StepAction.Action.Name}正在执行,Action参数已进锁,pid为:【{OwnerProcessInstance.Pid}】");
                        ExeCuteStepCoreFunction();
                        //Log.Info($"{StepAction.Action.Name}执行完毕,Action参数已解锁, pid为:【{OwnerProcessInstance.Pid}】");
                    }

                    // sunjian 2019-12-09 注释
                    if (IsSync)
                    {
                        Thread.Sleep(Redundancy.SyncInterval + 100);
                    }
                }

                UnHoldStepIDs(); // David 2017年7月19日13:18:34
            }
            catch (Exception e)
            {
                Log.Error($"Step:[{Name}]执行异常,异常为{e}");
                throw new InvalidOperationException($"Step:[{Name}]执行异常,异常为{e}");
            }
        }
예제 #4
0
 public void Dispose()
 {
     OwnerProcessInstance?.Dispose();
     StepAction?.Dispose();
 }