在InfoPath表单内提交表单并启动工作流

在InfoPath表单内提交表单并启动工作流

MOSS中对工作流的强大支持,让我们可以做很多应用。

举个例子,我们可以用表单库做审批表单,然后给这个表单库附加一个流程。

我们可能希望用户在填写表单的时候,在表单中填一些在启动工作流时需要用的信息,比如设置审批人等等。

我们的表单会像下面这样,包括待审批内容,和设置审批者等其他工作流设置。

我们也希望用户在点“保存”的时候,提交表单并同时根据用户设置的审批人来启动工作流。

MOSS默认的模式是,提交完表单以后,在另一个页面启动工作流,需要做两步操作,这样的用户体验比较不好

最好的体检就是“一步到位”,只需要在一个界面完成提交和启动的工作。

所以,我们就需要在InfoPath Form Services表单中的“保存”按钮上做一些工作来满足这种需求。

我提供的思路如下:

利用VSTA给表单库的表单模板里的“保存”按钮添加代码来完成提交表单和启动工作流的任务

1)设计表单模板的时候,为InfoPath表单设置一个提交连接(DataConnection)

可以看到这个提交连接会包括提交到的文档库的URl和默认的文件名命名规则。这个提交连接是我们提交表单和启动工作流所需要的。

2)给InfoPath表单的“保存”的按钮添加代码(以下代码为示例):

XPathNavigator field2 = this.MainDataSource.CreateNavigator().SelectSingleNode("/my:myFields/my:field2", NamespaceManager);
//取到提交连接的对象,FileSubmitConnection对应的是提交到SharePoint文档库的连接类
FileSubmitConnection osssubmit = (FileSubmitConnection)this.DataConnections["OSSSubmit"];
//我们可以通过表单里面的某个项目来作为表单提交的时候的文件名,或者用其他的命名规则,或者用户指定都可以
string tempfilename = field2.Value +"_"+ DateTime.Now.ToString().Replace(":","_");
//设置提交表单的文件名
osssubmit.Filename.SetStringValue(tempfilename+".xml");
//执行提交
osssubmit.Execute();
//到这一步,表单已经提交到了文档库,接下来启动表单的工作流
try
{
//根据提交连接的FolderUrl属性可以取到文档库所在的网站集
SPSite mysite = new SPSite(osssubmit.FolderUrl);
//根据表单的名称和FolderUrl可以把提交上去的表单的完整URL拼出来
string fileurl = osssubmit.FolderUrl+"/"+tempfilename+".xml";
if(osssubmit.FolderUrl.EndsWith("/"))
{
fileurl = osssubmit.FolderUrl+tempfilename+".xml";
}
//利用FolderUrl可以根据SPWeb.GetList方法取到文档库对应的SPList对象
SPList mylist = mysite.RootWeb.GetList(osssubmit.FolderUrl);
//根据前面拼出来的已上传得表单的完整URL可以取到表单对应的SPListItem对象
SPListItem mylistitem = mysite.RootWeb.GetListItem(fileurl);
//取到文档库绑定的某个工作流关联
SPWorkflowAssociation mywfass = mylist.WorkflowAssociations.GetAssociationByName("Review", System.Globalization.CultureInfo.CurrentCulture);
//EventData中就是工作流启动的时候需要的参数,比如审批人等信息,用表单中用户设置的启动参数替换EventData中的相应信息即可 

/*关联信息定义了工作流启动的参数,格式如下XML所示,我们需要做的只是用表单里面的对应字段值替换这个XML里面的对应内容即可,红色标示的部分

<my:myFields xml:lang=\"zh-CN\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"xmlns:my=\"http://schemas.microsoft.com/office/infopath/2003/myXSD/2006-12-16T05:28:36\"xmlns:xd=\"http://schemas.microsoft.com/office/infopath/2003\">

<my:instructions>Review it!</my:instructions>

<my:assignees>litwareinc\\Administrator;litwareinc\\DemoUser2</my:assignees>

</my:myFields>

*/
string EventData = mywfass.AssociationData;
mysite.AllowUnsafeUpdates = true;
mysite.RootWeb.AllowUnsafeUpdates = true;

//根据设定的信息,启动工作流
mysite.WorkflowManager.StartWorkflow(mylistitem, mywfass, EventData);
}
catch{ }

更新:示例下载 here

时间: 2025-01-01 19:33:31

在InfoPath表单内提交表单并启动工作流的相关文章

js日期/时间比较函数,以及js校验表单后提交表单的三种方法,表单验证,以及三种结合

<pre class="html" name="code"> js日期比较(yyyy-mm-dd) function duibi(a, b) { var arr = a.split("-"); var starttime = new Date(arr[0], arr[1], arr[2]); var starttimes = starttime.getTime(); var arrs = b.split("-");

重置表单和提交表单中遇到的小问题

function hidden_edit(){ //隐藏编辑店员 $(".form-horizontal")[0].reset(); //重置的表单中 name值必须和数据库的name值相对应,在按返回键时,才能重置表单内容,如果某一项name的不能重置,那就说明数据库中没有此项name值 $(".y-edit").css("display","none"); $(".y-clerk").css("

bootstrap 基础表单 内联表单 横向表单

<!DOCTYPE html> <html> <head> <title></title> <meta charset="utf-8"> <link rel="stylesheet" type="text/css" href="dist/css/bootstrap.css"> </head> <body> <p c

MVC中使用内建的HTML辅助方法产生表单元素提交表单与button按钮事件的陷阱

网站模板页有个登陆的退出按钮,当点击时跳转到登陆页面. <button onclick="logout()" >退出</button> $("#logOut").click(function () { location.href = "@Url.Action("Logout", "Account")"; }); 然后再某个页面楼主用了HTML辅助方法产生表单元素,代码如下所示: @H

js校验表单后提交表单的三种方法总结(转)

第一种: 代码如下: <script type="text/javascript"> function check(form) { if(form.userId.value=='') { alert("请输入用户帐号!"); form.userId.focus(); return false; } if(form.password.value==''){ alert("请输入登录密码!"); form.password.focus()

js校验表单后提交表单的三种方法总结

第一种: <script type="text/javascript"> function check(form) { if(form.userId.value=='') { alert("请输入用户帐号!"); form.userId.focus(); return false; } if(form.password.value==''){ alert("请输入登录密码!"); form.password.focus(); retu

提交表单的4种方式

1,超链接 <!-- 链接到page2 --> <a href="page2.jsp">链接到page2</a><br> <!-- 链接到page2,弹出新窗口 --> <a href="page2.jsp" target="_blank">链接到page2</a><br> <!-- 相对路径链接到page2 --> <a href=

JavaScript怎么提交表单!!!

使用JavaScript来提交表单 function inVote(td) { var name = td.name; td.form.action = "vote.jsp?tablename="+name; td.form.submit(); } 1,表单对象.action设置提交的位置 2.表单对象.submit();提交表单 版权声明:本文为博主原创文章,未经博主允许不得转载.

阻止form元素内的input标签回车提交表单

<form></form>标签内input元素回车会默认提交表单. 阻止回车默认提交表单: $('form').on('keydown', function (event) { if (event.keyCode == 13) return false; }) 原文地址:https://www.cnblogs.com/wujiaqi/p/10248828.html