场景:有个配置列表用来配置每步的审批人,配置列表字段如下:
Title: 工作流名称
Level1Approver:第一步审批人
Level2Approver:第二步审批人
操作步骤:
请先了解ExecuteCode活动:http://www.cnblogs.com/jianyi0115/archive/2011/04/17/2018872.html
新建工作流,加两个string类型工作流变量:level1Approver,level2Approver
拖一个ExecuteCode活动,拖两个Task活动,task活动的User属性分别绑定到level1Approver,level2Approver。
画线连接Start->ExecuteCode-Task1->Task2.
双击ExecuteCode,写脚本如下:
QueryField titleField = new QueryField("Title");
SPList cfgList = this.Web.Lists["审批人配置"]; //获取列表
var cfgItem = ListQuery.From(cfgList).Where(titleField=="名片申请").GetItems()[0]; //获取到配置项
//获取字段值
SPFieldUserValue user1Value = cfgItem .Fields.GetField("Level1Approver").GetFieldValue(cfgItem["Level1Approver"].ToString()) as SPFieldUserValue;
var level1User = user1Value.User.LoginName;
this.Log("getLevel1Approver:" + level1User); //写调试日志
this.SetVariable("level1Approver", level1User); //设置变量
//获取字段值
SPFieldUserValue user2Value = cfgItem .Fields.GetField("Level2Approver").GetFieldValue(cfgItem["Level2Approver"].ToString()) as SPFieldUserValue;
var level2User = user2Value.User.LoginName;
this.Log("getLevel2Approver:" + level2User);
this.SetVariable("level2Approver", level2User);
工作流:
添加变量:
Code:
备注:
1) 若有能力在自定义表单中写代码,那么还是尽量把代码写的表单提交前,通过工作流变量传入需要的数据。
因为工作流内部执行代码出错,将造成整个工作流失败,并且无法挽回。只能重启流程。