利用Office套件中的Infopath工具,我们可以非常方便的建立自己的电子表单,当然我们可以把这种表单发布到SharePoint进行共享使用。这是企业应用中最为常见的一种电子表单开发和应用场景。

    在SharePoint中使用Infopath是非常简单的。但有时企业会出现一些莫名其妙的问题,我在这里记录一些常见或使用中需要注意的事项,以方便大家查阅。希望大家在使用过程中遇到了问题,也及时的通知我,并将问题的解决方法写入本文中。

    小注:听说微软将不再升级Infopath,2013版将是最后一版。不过我还没有得到确切的结论,不知道微软将以什么软体去替代它,这要看下一版的SharePoint的新功能特性才能知道了。

    各种问题汇集于此。大家可通过搜索页面关键词来查找了。如果内容过多,我会把它写成续篇。

    1、检查SharePoint的Infopath服务是否开启了浏览器支持。  

Get-SPInfoPathFormsService

    默认是开启的,如果你发现你的infopath表单在sharepoint中不能通过浏览器打开,则可通过上述的命令去检查一下,如果是false则说明了关闭了浏览器支持。不用紧张,当然有命令来开启它了。  

Set-SPInfoPathFormsService -AllowUserFormBrowserEnabling $true -AllowUserFormBrowserRendering $true

    当然,不要忘记检查表单库的高级设置中,是否启用“在浏览器中打开”。

    2、InfoPath表单中能否写C#代码

    这是当然可以的,不过你要熟悉一下特殊的对象模型才可以。

    3、InfoPath调用WebService进行数据写入时的注意事项

    在Infopath中定义了WebServie的写入数据的连接器后,记得要到SharePoint站点中创建“数据连接库”并添加数据连接,以信任允许电子表单调用webservice。

    4、username函数的使用问题

    在infopath中有个username函数,用于获得当前用户的账户信息。当使用此函数参与函数的组合使用或利用这个函数进行记录筛选过滤时,此函数会失效。这可能是个bug,不过这个问题有个解决的办法,你只需要在表单任何位置放置一个计算控件,并将username函数值定义在控件的默认值上就可以了,别忘了把这个控件隐藏起来哦。这是我的解决办法,开发者如遇到此问题,可以尝试我这种方法。

    5、域的类型使用

    域(属性)类型,在发布到sharepoint中后,此类型的字段是可以被sharepoint修改的,而域(字段)类型,则是只读的。sharepoint工程师可以利用工具检查这些字段的属性值就能得到答案。当然也可以通过sharepoint API模型来修改这些字段的属性值。

    6、infopath的视图

    infopath中还有视图的概念,利用视图我们可以定义出很多表单。我们可以在表单的规则管理器上切换视图,当然你可以设定一些条件。在流程开发时,此功能非常有效。

    7、对infopath文件的认知

    infopath文件的扩展名为xsn,这是种压缩文件。你可以利用解压工具打开它看看。电子表单通过xml的描述方式组织定义。这种技术被很多表单设计公司所利用。XML定义被存储到sharepoint内容数据库中,当浏览者需要访问表单时,sharepoint通过FormService服务将xml定义体解析成html协议的内容体(这是模板引擎在起作用)响应到浏览器的客户端,这就是大致的原理。

    8、数据连接超时问题

    当表单实际调用webservice时,因网速或其他原因而造成连接超时。这时,我们可以修改数据连接超时时限来解决此问题。

Set-SPInfoPathFormsService -MaxDataConnectionResponseSize 3

    9、表单的安全控制


    •     当表单使用http认证时需要SSL加密;

    •     当有包含用户名和密码的数据库连接新的数据连接文件时;

    •     当运行自定义表单通过数据连接文件访问数据源时;

    •     当表单需要访问与sharepoint不同的数据源时;

    我们可以使用一下命令来进行控制处理  

Set-SPInfoPathFormsService –RequireSslForDataConnections $true –AllowEmbeddedSqlForDataConnection $true –AllowUdcAuthenticationForDataConnections $true –AllowUserFormCrossDomainDataConnections $true

    解释一下这个命令的参数:

    RequireSslForDataConnectionsTrue为表单使用HTTP认证时需要SSL加密。

    AllowEmbeddedSqlForDataConnection:当有包含用户名和密码的数据库连接信息的数据连接文件时,设置为True。

    AllowUdcAuthenticationForDataConnections:是否允许自定义表单通过数据连接文件访问数据源。

    AllowUserFormCrossDomainDataConnections:当表单需要访问与SharePoint不同的数据源时,设置为True。

    10、设置会话状态

Set-SPInfoPathFormsService –MaxPostbacksPerSession 110 –ActiveSessionTimeout 720

    11、启用视图状态

Set-SPInfoPathFormsService –AllowViewState $true –ViewStateThreshold  40961

    12、用命令验证和上传表单模板

Test-SPInfoPathFormTemplate  -Path "<<full path to InfoPath form template>>"    Install-SPInfoPathFormTemplate-Path "<<full path to InfoPath form template>>"

    13、用命令一次上传多个表单模板

"<<path of form 1>>" , "<<path of form 2>" , "<<path of form 3>>" |  Install-SPInfoPathFormTemplate

    这里用到了管道命令,大家注意点。并不是命令写反了。

    14、激活、停用网站集的表单模板

Enable-SPInfoPathFormTemplate  -Identity "<<name of form template>>"  -Site "<<URL of Site Collection>>"    Disable-SPInfoPathFormTemplate  -Identity "<<name of form template>>"  -Site "<<URL of Site Collection>>"

    15、从InfoPath表单服务移除一个表单

Uninstall-SPInfoPathFormTemplate -Identity "<<name of form template>>"

    16、禁用InfoPath表单服务中的某个表单

Stop-SPInfoPathFormTemplate -Identity "<<name of form template>>"

    17、启用InfoPath的Web服务代理

Set-SPInfoPathWebServiceProxy -Identity "<<URL of web application>>"  -AllowWebServiceProxy $true  Set-SPInfoPathWebServiceProxy -Identity "<<URL of web application>>"  -AllowForUserForms $true

    18、InfoPath无法保存表单

    当在InfoPath发布表单时,可能会提示你无法保存表单的错误信息,如下图

   

    解决方法:在Window系统中安装启用“桌面体验”功能。