sharepoint工作流的开发其实有好多东西可以讲,但是我觉得这个可能是初学者比较模糊的地方,因此单独拿出来说下。如果没有做过工作流开发可能看以下的内容会觉得有点不知所云,唉~慢慢来吧,我其实是想写一个系列,可是也不知道从哪里开头。
使用vs2005或者vs2008开发sharepoint工作流,通常表单部分使用Infopath设计,Infopath的数据存储其实就是一个XML文件,当用户填写完Infopath表单,该XML传递到sharepoint宿主环境,这个时候可通过SPWorkflowTaskProperties.ExtendedProperties[域名]访问用户填写的内容,同时也可以给它赋值从而改变Infopath表单中的内容。自己做了一个图,简单说明一下数据是如何在对象模型和Infopath之间传递的。
首先说明几个概念:
1、在Infopath中有主数据源和辅助数据源,主数据源只有一个,辅助数据源可以有多个。
2、为了与vs传递数据必须在Infopath中建立一个辅助数据源,名称必须是ItemMetadata,XML格式必须是<z:row xmlns:z="#RowsetSchema" ows_域名1="" ows_域名2="" ... ... />
3、主数据源中的域名要与辅助数据源中的域名一一对应,如:域名1、域名2... ...
理解了上面的基本知识后就可以开始通过对象模型来读取和设置Infopath表单的值了。
1、读值:
string 变量1 = SPWorkflowTaskProperties.ExtendedProperties["域名1"].ToString(); , 变量1是Infopath表单中主数据源中域名1的值
2、赋值:
SPWorkflowTaskProperties.ExtendedProperties["域名1"] = 变量2, Infopath表单中辅助数据源的ows_域名1的值变成了变量2,注意该操作将改变的是辅助数据源中的值,主数据源中的值并未改变。
从上面我们可以了解到赋值过程并未改变主数据源中的值,这不是我们想要的,我们需要改变主数据源的值,那怎么做呢?再接着往下看。
在Infopath表单中,设置主数据源中域名1的默认值为@ows_域名1,这样当打开表单时主数据源中域名1的值就被改成与辅助数据源中域名1的值一致了。
好了,到此我们就清楚了,Infopath表单提交给宿主时,SPWorkflowTaskProperties.ExtendedProperties["域名1"]中保存的是主数据源中的值。SPWorkflowTaskProperties.ExtendedProperties["域名1"]再次传递到Infopath表单中时,不是直接传递给主数据源,而是给了辅助数据源,因此我们要设置主数据源的默认值为对应的辅助数据源,这样才能最终将值传递到主数据源。
今天舌头有点结巴,也不知道说清楚没有,唉~ 好久没打字,都退化了。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?