关于多级审批工作流的问题描述
在 MOSS多级审批工作流【Sequential+ConditionedActivityGroup版】v1.1 一文中,笑煞天 做了个很好的例子,照着他的文档爽了一把,结果出现了很多问题,当然是我这边的原因了,搞这WF才2周,跟着他的demo边做边学,不过最近听小汤说他挺忙的,也就没好意思去请教了,因为最近的售前工作要这个,所以了,嘿嘿,贴在这儿,如若有空的话帮我指点下:
1.除了前面提到的总是在“workflowProperties.InitiationData”出错,只好加了个判断:
2。这是我这边的xsd生成init.cs后的版本:
//------------------------------------------------------------------------------
// <auto-generated>
// 此代码由工具生成。
// 运行库版本:2.0.50727.1378
//
// 对此文件的更改可能会导致不正确的行为,并且如果
// 重新生成代码,这些更改将会丢失。
// </auto-generated>
//------------------------------------------------------------------------------
后果是[System.Xml.Serialization.XmlTypeAttribute(AnonymousType=true, Namespace=http://schemas.microsoft.com/office/infopath/2003/myXSD/2007-08-23T02:39:23)] 多了好几个Namespace阿,由他的4k蹦到我的5k,,架构不一致,肯定要出错了:
Unexpected System.InvalidOperationException: XML 文档(1, 2)中有错误。 ---> System.InvalidOperationException: 不应有 <Init xmlns='http://schemas.microsoft.com/office/infopath/2003/myXSD/2007-01-30T13:00:28'>。 在 Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationReaderInit.Read4_Init() --- 内部异常堆栈跟踪的结尾
我估计它还是读你的assembly版本了,看来还得来遍干干净净的模仿!对了,还有阿,呵呵,当然不是他的原因了,attach 10次崩了9次,我的天啊,这家伙!不说了。。。。
几张跑起来的贴图:
初始化成功后:
流到第2级:
好了,就贴几张示意下了,在此基础上我做了下调整, 送审信息格式化加强,包括时间,历史原因的版本等等,方便追溯,正在考虑将这些信息,如果很多的话记录到其它的一个列表中,中国人看这个觉得不是很习惯,嘿嘿,没有办法,email通知等等,勉强能混过去!
对了还得问问晓伟,这Infopath表单模板为什么都不能打开啊,你的是有可能,但是我的是设置成完全信任的啊,居然等我关闭了就不让打开,说不安全,什么跟什么啊!
总的说WF前途无量!
1.除了前面提到的总是在“workflowProperties.InitiationData”出错,只好加了个判断:
1private void onWorkflowActivated_Invoked(object sender, ExternalDataEventArgs e)
2{
3workflowId = workflowProperties.WorkflowId;
4
5//定义任务的名称
6approveItemTitle = "请审批 " + workflowProperties.Item.DisplayName;
7rejectItemTitle = workflowProperties.Item.DisplayName + " 被退回,请审批。";
8
9//反序列化workflowProperties.InitiationData以得到初始窗体的实例
10XmlSerializer xs = new XmlSerializer(typeof(Init));
11if (workflowProperties.InitiationData != null)
12{
13XmlTextReader xtr = new XmlTextReader(new System.IO.StringReader(workflowProperties.InitiationData));
14Init init = (Init)xs.Deserialize(xtr);
15
16//将初始窗体的信息赋给Task0
17task0_Properties.Title = rejectItemTitle;
18task0_Properties.AssignedTo = workflowProperties.Originator;
19task0_Properties.ExtendedProperties["comments"] = init.comments;
20
21//设置Task1的标题和分配对象
22task1_Properties.Title = approveItemTitle;
23task1_Properties.AssignedTo = init.contact[0].AccountId;
24}
25else
26{
27//将初始窗体的信息赋给Task0
28task0_Properties.Title = rejectItemTitle;
29task0_Properties.AssignedTo = workflowProperties.Originator;
30task0_Properties.ExtendedProperties["comments"] = "comments:";
31
32//设置Task1的标题和分配对象
33task1_Properties.Title = approveItemTitle;
34task1_Properties.AssignedTo = "contososrv\\pccai";
35}
36}
37
导致这种原因不知如何更好的解决,其实最后把“新建项目是启动工作流”选项去掉,手动的启动,直接走/_layouts/IniWrkflIP.aspx...就可避免外,有出现了新的困惑: 2{
3workflowId = workflowProperties.WorkflowId;
4
5//定义任务的名称
6approveItemTitle = "请审批 " + workflowProperties.Item.DisplayName;
7rejectItemTitle = workflowProperties.Item.DisplayName + " 被退回,请审批。";
8
9//反序列化workflowProperties.InitiationData以得到初始窗体的实例
10XmlSerializer xs = new XmlSerializer(typeof(Init));
11if (workflowProperties.InitiationData != null)
12{
13XmlTextReader xtr = new XmlTextReader(new System.IO.StringReader(workflowProperties.InitiationData));
14Init init = (Init)xs.Deserialize(xtr);
15
16//将初始窗体的信息赋给Task0
17task0_Properties.Title = rejectItemTitle;
18task0_Properties.AssignedTo = workflowProperties.Originator;
19task0_Properties.ExtendedProperties["comments"] = init.comments;
20
21//设置Task1的标题和分配对象
22task1_Properties.Title = approveItemTitle;
23task1_Properties.AssignedTo = init.contact[0].AccountId;
24}
25else
26{
27//将初始窗体的信息赋给Task0
28task0_Properties.Title = rejectItemTitle;
29task0_Properties.AssignedTo = workflowProperties.Originator;
30task0_Properties.ExtendedProperties["comments"] = "comments:";
31
32//设置Task1的标题和分配对象
33task1_Properties.Title = approveItemTitle;
34task1_Properties.AssignedTo = "contososrv\\pccai";
35}
36}
37
2。这是我这边的xsd生成init.cs后的版本:
//------------------------------------------------------------------------------
// <auto-generated>
// 此代码由工具生成。
// 运行库版本:2.0.50727.1378
//
// 对此文件的更改可能会导致不正确的行为,并且如果
// 重新生成代码,这些更改将会丢失。
// </auto-generated>
//------------------------------------------------------------------------------
后果是[System.Xml.Serialization.XmlTypeAttribute(AnonymousType=true, Namespace=http://schemas.microsoft.com/office/infopath/2003/myXSD/2007-08-23T02:39:23)] 多了好几个Namespace阿,由他的4k蹦到我的5k,,架构不一致,肯定要出错了:
Unexpected System.InvalidOperationException: XML 文档(1, 2)中有错误。 ---> System.InvalidOperationException: 不应有 <Init xmlns='http://schemas.microsoft.com/office/infopath/2003/myXSD/2007-01-30T13:00:28'>。 在 Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationReaderInit.Read4_Init() --- 内部异常堆栈跟踪的结尾
我估计它还是读你的assembly版本了,看来还得来遍干干净净的模仿!对了,还有阿,呵呵,当然不是他的原因了,attach 10次崩了9次,我的天啊,这家伙!不说了。。。。
几张跑起来的贴图:
初始化成功后:
流到第2级:
好了,就贴几张示意下了,在此基础上我做了下调整, 送审信息格式化加强,包括时间,历史原因的版本等等,方便追溯,正在考虑将这些信息,如果很多的话记录到其它的一个列表中,中国人看这个觉得不是很习惯,嘿嘿,没有办法,email通知等等,勉强能混过去!
对了还得问问晓伟,这Infopath表单模板为什么都不能打开啊,你的是有可能,但是我的是设置成完全信任的啊,居然等我关闭了就不让打开,说不安全,什么跟什么啊!
总的说WF前途无量!
msn: pccai1983@hotmail.com