最近在一个项目里碰到问题,问题发生在Moss 2007的工作流里。我们使用InfoPath 2007+Moss 2007+WWF来满足客户需求实现业务中的工作流,由于Moss的工作流是基于文档的,并且流程中的初始表单要求能够使用文档库表单的内容来初始化一些字段,所以我们的做法如下:
文档库表单发布时,把我们初始化需要的字段一一创建并发布到列表的自定义栏中,然后在流程的Initial表单里,在Loading Event中根据URL解析文档库表单的ID,通过ID获取SPListItem,然后通过该Item的字段得到文档内容,填充到初始表单中。
文档库表单发布并创建自定义栏的做法,是在InfoPath表单模版publish的时候,选择Publish to Sharepoint Doclib,然后根据提示,把DataSource里需要创建的字段主意发布到自定义栏内。
由于Infopath在发布并创建自定义栏时,对String类型的字段默认创建为单行文本,该类型MaxLength为255,而且由InfoPath自动创建的字段均为只读属性,无法修改。这导致用户填写大于255长度的文本将被截断丢失信息。
我和同事讨论这个问题的解决方法,当时出了很多意见,大多围绕在通过直接读取XML信息来解析该字段真实内容,但后来实验发现实现起来比较麻烦而且在架构上比较混乱。
最终的解决办法简单的异乎寻常:
找到长度受限的字段,写个简单的程序,使用Sharepoint对象模型找到对应SPField对象,设置ReadOnly为false,然后Field.update()。之后,便可以通过列表库设置,修改字段类型,把类型改为多行文本,长度不限,保存。
问题解决。
文档库表单发布时,把我们初始化需要的字段一一创建并发布到列表的自定义栏中,然后在流程的Initial表单里,在Loading Event中根据URL解析文档库表单的ID,通过ID获取SPListItem,然后通过该Item的字段得到文档内容,填充到初始表单中。
文档库表单发布并创建自定义栏的做法,是在InfoPath表单模版publish的时候,选择Publish to Sharepoint Doclib,然后根据提示,把DataSource里需要创建的字段主意发布到自定义栏内。
由于Infopath在发布并创建自定义栏时,对String类型的字段默认创建为单行文本,该类型MaxLength为255,而且由InfoPath自动创建的字段均为只读属性,无法修改。这导致用户填写大于255长度的文本将被截断丢失信息。
我和同事讨论这个问题的解决方法,当时出了很多意见,大多围绕在通过直接读取XML信息来解析该字段真实内容,但后来实验发现实现起来比较麻烦而且在架构上比较混乱。
最终的解决办法简单的异乎寻常:
找到长度受限的字段,写个简单的程序,使用Sharepoint对象模型找到对应SPField对象,设置ReadOnly为false,然后Field.update()。之后,便可以通过列表库设置,修改字段类型,把类型改为多行文本,长度不限,保存。
问题解决。