sharepoint workflow里如何 获取infopath的值 (审批用)

huxuanchenxy 2009-09-04 04:59:50
我了解的东东,和一些已经完成的步骤如下:

1.绑定到workflow里的审批infopath不能写代码(必须 表单选项 ----删除代码),否则审批界面看不到自定义的审批infopath,那要如何提交 此infopath审批表单的值呢?

2.我用规则提交到 asp.net 宿主,经过调试按钮点击事件是进workflow的,说明可以把infopath传值到workflow.

3.网上说要什么 xml序列化,但是例子都是initform(初始表单),
(1)已用 vs2008工具 把demoapp1的项目 的xds 生成 myschema.cs 并且重命名为 demoapp1.cs放到workflow目录下
(2)在onworkflowactivited事件里,大致代码如下:
-------------------------------------------
XmlSerializer serializer = new XmlSerializer(typeof(demoapp1));
XmlTextReader reader = new XmlTextReader(new System.IO.StringReader(workflowProperties.InitiationData));---- 问题在这里,workflowProperties.InitiationData
这个不知道要写些什么
demoapp1 dapp1 = (demoapp1)serializer.Deserialize(reader);
string s = dapp1.comment.ToString();
------------------------------------------
我想把接受demoapp1(infopath)的值放在 ontaskchanged 事件里写,以便判断审批的内容。
我想大概是通过反序列化把demoapp1的值传出来吧。

---------------------------------------------
问题:
1.我思路是不是有问题

2.如果有问题,应该怎样在ontaskchanged 里获取 绑定到workflow的infopath的值?
...全文
1093 35 打赏 收藏 转发到动态 举报
写回复
用AI写文章
35 条回复
切换为时间正序
请发表友善的回复…
发表回复
ching888 2010-05-12
  • 打赏
  • 举报
回复
XPathNavigator nodeNav = ipFormNav.SelectSingleNode(
"//my:field1", nsManager);
执行到这里执行不下去的这个错误是::
因为在表单里没有选证书的,选择后再发布,就可以了。
chinawangjin 2010-01-09
  • 打赏
  • 举报
回复
XPathNavigator nodeNav = ipFormNav.SelectSingleNode(
"//my:field1", nsManager);


我的执行到这里执行不下去,怎么定义"//my:field1"这个名字和路径?请指教。
yuanyuyuyu 2009-09-09
  • 打赏
  • 举报
回复
你把你要实现的流程说一下,我看着有点乱了
huxuanchenxy 2009-09-09
  • 打赏
  • 举报
回复
这段话写在workflow里就能解决问题了

SPFile file = workflowProperties.Item.File;

if (file == null)
return;

// Get the binary data of the file
byte[] xmlFormData = null;
xmlFormData = file.OpenBinary();

// Load the data into an XPathDocument object
XPathDocument ipForm = null;

if (xmlFormData != null)
{
using (MemoryStream ms = new MemoryStream(xmlFormData))
{
ipForm = new XPathDocument(ms);
ms.Close();
}
}

if (ipForm == null)
return;

// Create an XPathNavigator object to navigate the XML
XPathNavigator ipFormNav = ipForm.CreateNavigator();

ipFormNav.MoveToFollowing(XPathNodeType.Element);
XmlNamespaceManager nsManager =
new XmlNamespaceManager(new NameTable());

foreach (KeyValuePair<string, string> ns
in ipFormNav.GetNamespacesInScope(XmlNamespaceScope.All))
{
if (ns.Key == String.Empty)
{
nsManager.AddNamespace("def", ns.Value);
}
else
{
nsManager.AddNamespace(ns.Key, ns.Value);
}
}

// Retrieve the value of the field in the InfoPath form
XPathNavigator nodeNav = ipFormNav.SelectSingleNode(
"//my:field1", nsManager);

string ipFieldValue = string.Empty;
if (nodeNav != null)
{
ipFieldValue = nodeNav.Value;

// Add an item to a list and use the value of the field
// as the title for the new item
if (!String.IsNullOrEmpty(ipFieldValue))
{
using (SPSite site = new SPSite(workflowProperties.SiteId))
{
using (SPWeb web = site.OpenWeb())
{
SPList list = web.GetList("/Lists/Fruits");

if (list != null)
{
SPListItem item = list.Items.Add();
item["Title"] = ipFieldValue;
item.Update();
}
web.Close();
}
site.Close();
}
}
}
HugoWong 2009-09-09
  • 打赏
  • 举报
回复
1,可以传参数
2,1,fileurl错误的话,自然得不到SPLIST
2,2,Review是指你的LIST所关联的工作流名称(
huxuanchenxy 2009-09-09
  • 打赏
  • 举报
回复
http://wyf.pardonsoft.com/blogview.asp?id=159
1.根据这篇文章,是不是usersubmit1能启动工作流的同时,把参数传到工作流里面去?

2.但是有两个地方有疑问

(1)SPListItem mylistitem = mysite.RootWeb.GetListItem(fileurl); 抛异常 null
(2)SPWorkflowAssociation mywfass = mylist.WorkflowAssociations.GetAssociationByName("Review", System.Globalization.CultureInfo.CurrentCulture);这里的Review是指什么?

yuanyuyuyu 2009-09-09
  • 打赏
  • 举报
回复
你完全可以利用视图来控制。
huxuanchenxy 2009-09-09
  • 打赏
  • 举报
回复
这个办法不错!
有一个问题会不会产生:
当表单的值传入列表时,如果表单的字段很多,能不能只在“后台”操作,不在sp网站上显示,否则有两个不便的地方
1.看上去列数太多
2.用户提交的数据在sp上显示,不安全
yuanyuyuyu 2009-09-09
  • 打赏
  • 举报
回复
我明白你的意思了,你是想在提交表单里提取想要的数据,加载到审批的表单里

我的思路是:1.在提交表单发布成网站内容时将想要的值发布成栏,然后可以用视图隐藏或显示。
2.当启动工作流后,在工作流中读取这些栏 workflowProperties.item["栏名"]
3.在创建任务时将值传给任务属性。
yuanyuyuyu 2009-09-09
  • 打赏
  • 举报
回复
邮件啊,之前的问题解决了?

huxuanchenxy 2009-09-09
  • 打赏
  • 举报
回复
下面是成功后的流程,有不对的地方请指出
1.用户新建表单

2.填写表单,并在文本框输入“发票内容”

3.在列表里看到工作流已启动

4.为了测试,直接点“进行中”进入(应该换一个账号,在用户任务里面选任务点击)

5.看到用户提交的“发票内容”已经显示给审批者看了

6.最后点按钮完成,这里直接写true,这是下面要问的问题:如何让用户,审批者知道审批者已经点了批准或者拒绝?

HugoWong 2009-09-08
  • 打赏
  • 举报
回复
我想要这样的逻辑:
1.usersubmit1(用户提交表单包含field1)
2.用户新建提交后,当审批者打开审批界面(leadapp1),看到field1的值

我想象中的是这样解决的:
usersubmit1(field1)(infopath) ---》huwf1(ExtendedProperties )(workflow) ----> leadapp1(show)(infopath),这样想法对吗?
====================================================

在leadapp1所对应的工作流任务的_MethodInvoking设置ExtendedProperties["leadapp1中ITEMMETADATA中对应的字段"],

在leadapp1中通过自己的ITEMMETADATA.XML取得相应的值
huxuanchenxy 2009-09-08
  • 打赏
  • 举报
回复
“itemmetadata.xml和接收数据源有没有设置好,直接绑定出来就行了”
是不是意味着 usersubmit1这个表单要发布到 wf里去,要用xsd工具生成一个类什么的?
我现在这个用户表单(usersubmit1)没发布到wf里,发布到sp里,通过内容绑定到列表的,这也能用itemmetadata.xml辅助数据源?
HugoWong 2009-09-08
  • 打赏
  • 举报
回复
审批界面那时候field1这个值还没获得呢怎么办
========================================
itemmetadata.xml和接收数据源有没有设置好,直接绑定出来就行了
huxuanchenxy 2009-09-08
  • 打赏
  • 举报
回复
在 onTaskChanged1_Invoked 放 取得TaskProperties1.ExtendedProperties["field1"](用户提交表单),
那么审批者看到的审批界面那时候field1这个值还没获得呢怎么办。

我想要这样的逻辑:
1.usersubmit1(用户提交表单包含field1)
2.用户新建提交后,当审批者打开审批界面(leadapp1),看到field1的值

我想象中的是这样解决的:
usersubmit1(field1)(infopath) ---》huwf1(ExtendedProperties )(workflow) ----> leadapp1(show)(infopath),这样想法对吗?
HugoWong 2009-09-08
  • 打赏
  • 举报
回复
是我表达错误了,对不起,获取审批表单的值已经成功了。

现在我要获取用户提交表单的值,显示在审批表单上
usersubmit1里有个field1
前面试了一下,在工作流里的createTask1_MethodInvoking事件添加string temp = TaskProperties1.ExtendedProperties["field1"].ToString();失败提示对象未引用,工作流里怎样获取用户表单的值?
============
事件没理清;
_MethodInvoking 设置TaskProperties1.ExtendedProperties["field1"]

_Invoked 取得TaskProperties1.ExtendedProperties["field1"]
huxuanchenxy 2009-09-08
  • 打赏
  • 举报
回复
#10楼 的问题帮忙看一下,好吗
HugoWong 2009-09-08
  • 打赏
  • 举报
回复
中文应该是支持的,你自己可以在CONSOLE测试一下.

这里的“列表字段名”是指你的图片中的"类型","名称"....;

也可以用workflowProperties.Item[INDEX]等.
huxuanchenxy 2009-09-08
  • 打赏
  • 举报
回复
workflowProperties.Item["列表字段名"]
这里的“列表字段名”是指什么?是不是

这里的“类型”“名称”?这是中文的,支持吗,或者说要查它们的确切英文列表字段名?
加载更多回复(15)

3,245

社区成员

发帖
与我相关
我的任务
社区描述
企业开发 SharePoint
社区管理员
  • SharePoint社区
  • 霖雨 - LinyuLoveTJ
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧