InfoPath 的浏览器表单不支持加载并显示图片,当然在模板中可以插入图片,但是如果想显示数据库的一幅图片,或是动态加载一张图片就无能为力了。

基实这个问题可以通过在浏览器表单中使用: "格式文本框(Rich TextBox) + 托管代码" 来解决,通过对格式式文框的innerHTML赋HTML标记,来插入一组<img></img>标记从而来显示图片,在插入HTML代码时,必须要以如下内容开始:

<html xmlns=\"http://www.w3.org/1999/xhtml\"><div>

以如下内容结束:

</div></html>

为帮助读者同时了解托管代码与格式文框的用法,本文做出如下讲解:

1. 如何在启用浏览器功能的InfoPath 2007 的表单中添加托管代码,创建模板,并如何部署到SharePoint 服务器中运行;

2. 在InfoPath From Services模板(使用1个文本框,用来输入图片的URL;1个格式文本框,用来显示这个图片),添加代码来动态显示图片。

本文适合对InfoPath和SharePoint有着基础认识的,并且有着C#语言开发功底的开发人员、IT技术人员。

  1. 配置InfoPath 启用托管代码:

    重新运行Office的"安装程序",在安装的时候,勾选Visual Studio Tools for Application 即VSTA -> 从本机运行,如下的图示:

    .

  2. 新建InfoPath 模板:

    打开InfoPath 2007 ,选择"设计模板"然后新建一个空白的模板,

    为了进行VSTA的托管代码设计,必须在"工具"->"表单选项"如下2个地方进行设置:

    1) "兼容性"选项卡中

    按下图的设置"设计一个可在浏览器或InfoPath中打开的表单模板"

    2) "安全和信任"选项卡中,设置"为此表单模板签名"

  3. 设计表单模板

    在模板中添加1个"文本框"控件(双击命名为:TextBox)、1个"按钮"(双击文本设置成"显示")、1个"格式文本框"(重命名为:RichTextBox),

    然后双击"显示"按钮,点击"编辑表单代码",系统会自动打开按钮的单击事件,在事件方法的函数中我们写上如下3行的代码:

XPathNavigator navigatorMainDataSource = this.MainDataSource.CreateNavigator();

string stringRichTextBoxHTML = "<html xmlns=\"http://www.w3.org/1999/xhtml\"><div><img src='"

+ navigatorMainDataSource.SelectSingleNode("/my:myFields/my:TextBox", this.NamespaceManager).Value

+ "' alt='test'></img></div></html>";

navigatorMainDataSource.SelectSingleNode("/my:myFields/my:RichTextBox", this.NamespaceManager).InnerXml = stringRichTextBoxHTML;

第1行:找到主数据源的XpathNavigator对象

第2行:从TextBox节点中读取URL值,包裹上<img>标记,并且前后加上格式化文本框所必须的HTML标记。

第3行:把HTML标记,赋给"格式文本框"RichTextBox

4、生成模板

在InfoPath中点击"文件"->"发布",如下图设置发布向导:

选择发布到SharePoint服务器后,点击"下一步":

在文本框中输入SharePoint网站的URL,然后点击下一步:

出现上面的提示,什么也不要选,直接点击下一步,如果和上面的图不一样,请确认本文章的第2步,您有没有漏掉什么步骤;

在上面的图中,选择把模板发布到C:\ ,并且文件名为"显示图片",然后一路点击"下一步",直到关闭发布向导。

5、发布模板到SharePoint服务器管理中心

打开SharePoint网站的"管理中心", 在"应用程序管理"页面"InfoPath Forms Services "节,选择上载表单模板

点击浏览,并点击页中的"上载",上传第4步生成的"C:\显示图片.xsn"文件到管理中心

如果页面提示:

该表单模板已被成功上载到场。若要在网站集中启用该表单模板,请从网站集中的"管理表单模板"页或功能激活页来激活该表单模板。

就表示模板及代码没有任何问题。

然后,打开"管理表单模板",在这里可以看到我们上传的模板,这时点击激活到网站集,选择我们要使用模板的网站集,然后点确定.

6、在InfoPath表单库中,加入该模板

我们打开第5步中(我们把模板激活到的)那个网站,这里我们是http://oss ,然后在网站中选择一个InfoPath表单库,

如果没有,您可以新建一个,但必须设置并保证在表单库的"高级设置"中如下2个的选项是打开的:

然后在该表单库的设置页面,点击如下图的链接"从现有网站内容类型添加":

然后系统会将上传的模板在内容类型"Microsoft Office InfoPath"里,列出来,如下图把"显示图片"这个模板添加进去,然后点确定:

这样就完成了把模板添加进入表单库的任务!

7、使用模板

在表单库中,点击"新建"会显示如下图的"显示图片"模板

打开后,我们把博客园LOGO的地址URL复制进去,点击"显示",看看是不是很神奇!

 文章总结:

VSTA托管代码在INFOPATH领域好比是手足之关系,本文介绍了应用代码必须设置的选项和详细步骤,本文的所有代码和方法也适用于InfoPath 2010,对于格式化文本框,通过VSTA的托管代码可以完成非常多的功能,以补充INFOPATH不足,除了可以显示图片以外,我们可以几乎在其中插入任何HTML代码,比如<a>的超链代码,比如<p>段落,比如<table>的表格,本文仅用若干行代码抛砖引玉,希望开发者自行思考,扩展InfoPath更多的特性。

如何在启用SharePoint浏览器功能的InfoPath 表单中添加托管代码以动态地加载并显示图片的更多相关文章

  1. ie9下浏览器 cosole.log()会阻止j下面的s加载

    ie9下浏览器 cosole.log()会阻止j下面的s加载,删掉多余的console.log().

  2. js 利用canvas + flv.js实现视频流 截屏 、本地下载功能实现,兼容火狐,谷歌;canvas截屏跨域问题,无音频视频流加载不显示问题

    项目:物联网监控项目----后台视频流管理(前端实现视频截屏功能) 本文就不同视频源分情况展示: 1 本地视频(项目同目录视频)截屏(canvas.getContext("2d).drawI ...

  3. VS2013启动浏览器链接(BrowserLink),导致页面脚本错误和页面加载变慢

    页面脚本出错场景:

  4. Restful风格,PUT修改功能请求,表单中存在文件报错-HTTP Status 405 - Request method 'POST' not supported

    解决方案配置如下 <!-- 配置文件上传解析器 --> <bean id="multipartResolver" class="org.springfr ...

  5. android 下 利用webview实现浏览器功能

    android 下 利用webview实现浏览器功能(一): 1.界面添加WEBVIEW控件. 2.在界面.JAVA代码页面(protected void onCreate(Bundle savedI ...

  6. selenium3加载浏览器

    浏览器禁用更新: 因为selenium对浏览器的支持是有限制的.当浏览器更新到最新版本时,需要下载支持最新版本的插件.有时候selenium还没有更新到支持最新版本的插件,但本地已经更新到最新版本了. ...

  7. 浏览器加载和渲染HTML的过程(标准定义的过程以及现代浏览器的优化)

    先看一下标准定义的浏览器渲染过程(网上找的): 浏览器打开网页的过程 用户第一次访问网址,浏览器向服务器发出请求,服务器返回html文件: 浏览器开始载入html代码,发现 head 标签内有一个 l ...

  8. [WebKit]浏览器的加载与页面性能优化

    非常棒.非常系统的一份资料,值得阅读! 原文来自百度泛用户体验. 作者:nwind 本文将探讨浏览器渲染的loading过程,主要有2个目的: 了解浏览器在loading过程中的实现细节,具体都做了什 ...

  9. 使用HTML5的页面资源预加载(Link prefetch)功能加速你的页面加载速度

    不管是浏览器的开发者还是普通web应用的开发者,他们都在做一个共同的努力:让Web浏览有更快的速度感觉.有很多已知的技术都可以让你的网站速度变得更快:使用CSS sprites,使用图片优化工具,使用 ...

随机推荐

  1. Android Junit测试框架

    对应用进行单元测试: 使用Junit测试框架,是正规Android开发的必用技术.在Junit中可以得到组件,可以模拟发送事件和检测程序处理的正确性. 1.配置指令集和函数库: (1)配置指令集,指定 ...

  2. Gephi可视化(二)——Gephi Toolkit叫板Prefuse

    继在园子里写的<Gephi可视化(一)——使用Gephi Toolkit创建Gephi应用>介绍了如何使用Gephi Toolkit工具集进行可视化编程后,本篇对Gephi Toolkit ...

  3. Chrome开发者工具详解(1)-Elements、Console、Sources面板

    Chrome开发者工具详解(1)-Elements.Console.Sources面板 Chrome开发者工具面板 面板上包含了Elements面板.Console面板.Sources面板.Netwo ...

  4. 表单input项使用label,同时引用Bootstrap库,导致input点击效果区增大

    产品姐姐想法多,点击input项才能聚焦进行操作,点击外部不能有反应 好了...直入正题 为了让标签更加语义化,在表单项中,我们往往会使用label进行包裹 <label for="l ...

  5. Redis使用总结(2):Python接口

    安装redis-py sudo pip2 install redis 牛刀小试 redis连接实例是线程安全的,可以直接将redis连接实例设置为一个全局变量直接使用.如果需要另一个Redis实例(o ...

  6. ChatRichTextBox : RichTextBox

    using System; using System.Collections.Generic; using System.Text; using System.Windows.Forms; using ...

  7. 温故而知新--sql存储过程复习

    存储过程是已编译好的T-SQL语句的集合,可以随时调用,速度快,不易出错. 可以传递参数,普通参数和输出参数(output) 实例1 create proc Newpro @testVarA int, ...

  8. exception throw in progress runner thread_VS2015中SVN源代码无说明提交异常

    1-问题描述:通过SVN将代码变更提交服务器时,你可能会遇到以下异常:  exception throw in progress runner thread 2-解决办法: SVN代码源代码管理和TF ...

  9. iOS 阶段学习第23天笔记(XML数据格式介绍)

    iOS学习(OC语言)知识点整理 一.XML数据格式介绍 1)概念:xml是extensible markup language扩展的标记语言,一般用来表示.传输和存储数据 2)xml与json目前使 ...

  10. spring容器加载完毕做一件事情(利用ContextRefreshedEvent事件)转

    关键字:spring容器加载完毕做一件事情(利用ContextRefreshedEvent事件) 应用场景:很多时候我们想要在某个类加载完毕时干某件事情,但是使用了spring管理对象,我们这个类引用 ...