eric_bei0925 2014-10-22 03:50
浏览 4452

关于用代买生成K2 kprx 文件

我想在想要用代码来生成K2 KPRX 文件 , 现在的问题是文件已经生成成功,也能够通过代码发布,但是一旦发起流程 ,K2 就会报错 , 错误信息是:Key could not be found in the collection 。

代码如下 :

想请教下高手怎么解决这个问题, 我现在是不知道哪里写错了 。

enter code here

#region 设置节点审核界面
ClientEvent approvalClientEvent = WorkflowFactory.CreateEvent(node.ApprovalNode_Name, WizardNames.DefaultClientEvent);
approvalClientEvent.EventItem.InternetPlatform = "ASP";
approvalClientEvent.EventItem.SendToInternet = true;
////需要绑定smartobject作为审核界面来源
SmartObjectFieldPart smfp = new SmartObjectFieldPart();
//#region 创建locals

                Local localSmart = new Local("Name", K2FieldFactory.CreateK2Field(typeof(string), new ValueTypePart(Config.SmartObjectName)));
                smfp.Properties.Locals.Add("Name", localSmart);
                EnvironmentFieldModel environment = new EnvironmentFieldModel("SmartObject Server", "");
                ArtifactLibraryFieldPart fieldPart = new ArtifactLibraryFieldPart(environment);

                Local localServer = new Local("Server", K2FieldFactory.CreateK2Field(typeof(string), fieldPart));
                smfp.Properties.Locals.Add("Server", localServer);

                Local localMothed = new Local("MethodDisplayName", K2FieldFactory.CreateK2Field(typeof(string), new ValueTypePart(Config.FormUrl)));
                smfp.Properties.Locals.Add("MethodDisplayName", localMothed);

                Local localMothedType = new Local("MethodType", K2FieldFactory.CreateK2Field(typeof(string), new ValueTypePart("read")));
                smfp.Properties.Locals.Add("MethodType", localMothedType);

                Local localDisplayName = new Local("DisplayName", K2FieldFactory.CreateK2Field(typeof(string), new ValueTypePart(Config.SmartObjectName)));
                smfp.Properties.Locals.Add("DisplayName", localDisplayName);

                //Local localIsList = new Local("IsList", K2FieldFactory.CreateK2Field(typeof(bool), new ValueTypePart("False")));
                //smfp.Properties.Locals.Add("IsList", localIsList);

                Local localGuid = new Local("Guid", K2FieldFactory.CreateK2Field(typeof(string), new ValueTypePart(Guid.NewGuid().ToString())));
                smfp.Properties.Locals.Add("Guid", localGuid);

                Local localMethodName = new Local("MethodName", K2FieldFactory.CreateK2Field(typeof(string), new ValueTypePart(Config.FormUrl)));
                smfp.Properties.Locals.Add("MethodName", localMethodName);

                Local localType = new Local("Type", K2FieldFactory.CreateK2Field(typeof(string), new ValueTypePart("SourceCode.SmartFunctions.Syntax.Expressions.SmartObjectExp")));
                smfp.Properties.Locals.Add("Type", localType);
                #endregion
                #region 创建inputs
                Input inputProId = new Input("procId", "procId", "Text", true, K2FieldFactory.CreateK2Field(typeof(string), new DataFieldPart("Process", "RequestID", DataTypes.String, FieldListOption.None)));
                smfp.Properties.Inputs.Add("procId", inputProId);

                Input inputActivityName = new Input("activityName", "activityName", "Text", true, K2FieldFactory.CreateK2Field(typeof(string), new WorkflowContextFieldPart(WorkflowContextProperty.ActivityInstanceName)));
                smfp.Properties.Inputs.Add("activityName", inputActivityName);
                #endregion
                #region 创建returns
                Return returnResult = new Return("result");
                returnResult.DisplayName = "result";
                returnResult.IsSelected = true;
                returnResult.Type = "Text";
                smfp.Properties.Returns.Add("result", returnResult);
                #endregion
                #region 创建properties
                Property pResult = new Property();
                pResult.Name = "result";
                pResult.DisplayName = "result";
                pResult.Type = "Text";
                smfp.Properties.Properties.Add("result", pResult);
                #endregion
                #region  
                SourceCode.Workflow.Authoring.K2Field interPart = new K2Field();
                interPart.Parts.Add(smfp);
                interPart.Parts.Add(new ValueTypePart("&"));
                interPart.Parts.Add(new SerialNoFieldPart());
                approvalClientEvent.EventItem.InternetUrl = interPart;

                approvalClientEvent.EventItem.InternetUrl = K2FieldFactory.CreateK2Field(
                    typeof(string),
                    new ValueTypePart("http://webserver/page.aspx?"),
                    new SerialNoFieldPart());
                activity.Events.Add(approvalClientEvent);
                #endregion
                #region 设置节点审核人
                //如何通过smartobject设置审核人
                SimpleDestinationRule destinationRule = new SimpleDestinationRule();
                DestinationSet defaultDestinationSet = new DestinationSet();
                Destination destination = new Destination();
                destination.Type = DestinationTypes.User;
                SmartObjectFieldPart smfpDestination = new SmartObjectFieldPart();

                //smfpDestination.SmartObjectGuid = smartobject.Guid;
                #region 创建locals
                Local localSmartDestination = new Local("Name", K2FieldFactory.CreateK2Field(typeof(string), new ValueTypePart(Config.SmartObjectName)));

                smfpDestination.Properties.Locals.Add("Name", localSmartDestination);

                EnvironmentFieldModel environmentDestination = new EnvironmentFieldModel("SmartObject Server", "");
                ArtifactLibraryFieldPart fieldPartDestination = new ArtifactLibraryFieldPart(environmentDestination);
                Local localServerDestination = new Local("Server", K2FieldFactory.CreateK2Field(typeof(string), fieldPartDestination));
                smfpDestination.Properties.Locals.Add("Server", localServerDestination);

                Local localMothedDestination = new Local("MethodDisplayName", K2FieldFactory.CreateK2Field(typeof(string), new ValueTypePart(Config.GetApproveUserNames)));
                smfpDestination.Properties.Locals.Add("MethodDisplayName", localMothedDestination);

                Local localMothedTypeDestination = new Local("MethodType", K2FieldFactory.CreateK2Field(typeof(string), new ValueTypePart("list")));
                smfpDestination.Properties.Locals.Add("MethodType", localMothedTypeDestination);

                Local localDisplayNameDestination = new Local("DisplayName", K2FieldFactory.CreateK2Field(typeof(string), new ValueTypePart(Config.SmartObjectName)));
                smfpDestination.Properties.Locals.Add("DisplayName", localDisplayNameDestination);

                smfpDestination.Properties.Locals["IsList"].Value = K2FieldFactory.CreateK2Field(typeof(bool), new ValueTypePart("False"));

                Local localGuidDestination = new Local("Guid", K2FieldFactory.CreateK2Field(typeof(string), new ValueTypePart(Guid.NewGuid().ToString())));
                smfpDestination.Properties.Locals.Add("Guid", localGuidDestination);

                Local localMethodNameDestination = new Local("MethodName", K2FieldFactory.CreateK2Field(typeof(string), new ValueTypePart(Config.GetApproveUserNames)));
                smfpDestination.Properties.Locals.Add("MethodName", localMethodNameDestination);

                Local localTypeDestination = new Local("Type", K2FieldFactory.CreateK2Field(typeof(string), new ValueTypePart("SourceCode.SmartFunctions.Syntax.Expressions.SmartObjectExp")));
                smfpDestination.Properties.Locals.Add("Type", localTypeDestination);


                #endregion
                #region 创建inputs
                Input inputProIdDestination = new Input("procId", "procId", "Text", true, K2FieldFactory.CreateK2Field(typeof(string), new DataFieldPart("Process", "RequestID", DataTypes.String, FieldListOption.None)));
                smfpDestination.Properties.Inputs.Add("procId", inputProIdDestination);

                Input inputActivityNameDestination = new Input("activityName", "activityName", "Text", true, K2FieldFactory.CreateK2Field(typeof(string), new WorkflowContextFieldPart(WorkflowContextProperty.ActivityInstanceName)));
                smfpDestination.Properties.Inputs.Add("activityName", inputActivityNameDestination);
                #endregion
                #region 创建returns
                Return returnResultDestination = new Return("result");
                returnResultDestination.DisplayName = "result";
                returnResultDestination.IsSelected = true;
                returnResultDestination.Type = "Text";
                smfpDestination.Properties.Returns.Add("result", returnResultDestination);
                #endregion
                #region 创建properties
                Property pResultDestination = new Property();
                pResultDestination.Name = "result";
                pResultDestination.DisplayName = "result";
                pResultDestination.Type = "Text";
                smfpDestination.Properties.Properties.Add("result", pResultDestination);
                #endregion
                SourceCode.Workflow.Authoring.K2Field destinationField = new K2Field();
                destinationField.Parts.Add(smfpDestination);
                destination.Value = destinationField;
                defaultDestinationSet.Destinations.Add(destination);
                destinationRule.DestinationSets.Add(defaultDestinationSet);

                // Set the destination rule of the activity
                activity.DestinationRule = destinationRule;
                #endregion
                #region 设置节点上的动作
                var lines = BllRulInfo.Fetch(new CriteriaRulInfo { EqStartActId = node.ID });
                foreach (var line in lines)
                {
                    if (!string.IsNullOrEmpty(line.RulAct))
                    {
                        EventAction action = WorkflowFactory.CreateK2Object<EventAction>(line.RulAct);
                        action.Description = line.Id;
                        action.ActionItem = new DefaultOutcomeAction();
                        approvalClientEvent.Actions.Add(action);
                    }
                }
                #endregion
                #region 设置节点上的规则导航
                //相同动作不同规则如何设置
                activity.SucceedingRule = new DefaultOutcomeSucceedingRule();
                PropertyWizardDefinition propWizDefSimple = WorkflowHelpers.FindOfType<SimpleSucceedingRulePropertyWizardDefinition>(activity.WizardDefinition.PropertyWizardDefinitions);
                PropertyWizardDefinition propWizDefOutcome = WorkflowHelpers.FindOfType<OutcomeSucceedingRulePropertyWizardDefinition>(activity.WizardDefinition.PropertyWizardDefinitions);
                if (propWizDefSimple != null && propWizDefOutcome == null)
                {
                    activity.WizardDefinition.PropertyWizardDefinitions.Remove(propWizDefSimple);
                    activity.WizardDefinition.PropertyWizardDefinitions.Add(
                        WorkflowFactory.CreatePropertyWizardDefinition(PropertyWizardNames.OutcomeSucceedingRule));
                }
                #endregion
                #region 设置节点上的动作对应的outcome
                //如何生成一个动作对应多个outcome
                //SourceCode.Workflow.Design.Outcome.Common.GenerateDefaultOutcomesForActions(approvalClientEvent);
                ProcessFactory.GenerateDefaultOutcomesForActions(approvalClientEvent, lines);
                #endregion
                #region 设置节点上的outcome对应的line
                SourceCode.Workflow.Design.Outcome.Common.GenerateDefaultLinesForOutcomes(activity.SucceedingRule as DefaultOutcomeSucceedingRule);
                foreach (var line in lines)
                {
                    if (!string.IsNullOrEmpty(line.RulAct))
                    {
                        DefaultActivity finishActivity = FindActivity(process, nodeNameDic[line.EndActId]);
                        Line pl = FindLine(process, node.ApprovalNode_Name, line.RulAct);
                        if (pl != null)
                            pl.FinishActivity = finishActivity;
                    }
                }
                #endregion
  • 写回答

0条回答

    报告相同问题?

    悬赏问题

    • ¥15 drone 推送镜像时候 purge: true 推送完毕后没有删除对应的镜像,手动拷贝到服务器执行结果正确在样才能让指令自动执行成功删除对应镜像,如何解决?
    • ¥15 求daily translation(DT)偏差订正方法的代码
    • ¥15 js调用html页面需要隐藏某个按钮
    • ¥15 ads仿真结果在圆图上是怎么读数的
    • ¥20 Cotex M3的调试和程序执行方式是什么样的?
    • ¥20 java项目连接sqlserver时报ssl相关错误
    • ¥15 一道python难题3
    • ¥15 牛顿斯科特系数表表示
    • ¥15 arduino 步进电机
    • ¥20 程序进入HardFault_Handler