博客统计信息

用户名:mazong1123
文章数:12
评论数:39
访问量:6682
无忧币:25
博客积分:210
博客等级:2
注册日期:2009-08-17

我最近发表的评论

InfoPath 错误查看器 回复
这个配色是InfoPath 2007提供的,我..
使用WebClient从S.. 回复
WebRequest可以阿, 但是URL还是要带..
Notes, 随笔 回复
只是做个笔记, 后来发现用OneNote挺..
InfoPath Inside .. 回复
呵呵, InfoPath还是有很多需要改进..
使用WebClient从S.. 回复
我当初选这里是因为可以上传附件. ..

我的技术圈(0)

更多>>

公告

目前关注于InfoPath + Workflow + SharePoint
任何.NET技术方面的合作可与我联系mazong1123img@163.com

2012-01-07 16:16:57
InfoPath Analyzer为InfoPath 表单设计人员提供方便的功能,包括

直接编辑InfoPath 内置Html
查找字段绑定的控件
根据名字查找字段
根据ID查找控件
数据信息集中管理

直接编辑InfoPath 内置Html
 
字段与绑定的控件
 
搜索字段
 
信息数据集中呈现:
类别:未分类|阅读(13)|回复(0)|(0)阅读全文>>
2010-04-23 23:04:56
阅读完本文后, 你将可以自定义InfoPath Logic Inspector, 并且能够轻松地做到下图所示的改动.
 
Logic
 
我将会以一个更复杂且更实用的例子来示范如何自定义InfoPath Logic Inspector.
 
InfoPath Logic Inspector 的局限
 
InfoPath Logic Inspector最令人头痛的事莫过于无法复制其中的内容. 再加上它是一个模式对话框, 对于InfoPath 开发人员来说实在是不方便. 如果能够提供复制当前内容的功能, 将会方便很多.
 
InfoPath Logic Inspector 到底是什么?
 
既然InfoPath没有暴露任何有关Logic Inspector的接口, 那么就需要我们自己探索了. 首先要弄清楚Logic Inspector到底是由什么控件组成的. 使用Visual Studio的工具Spy++, 可以很容易查看到Logic Inspector实际上是一个IE控件.
 

OK. 接下来, 我们要将Logic Inspector中的内容抓取出来. 下面的代码展示了如何获取IE控件中的内容. 在文章的附件中会有完整的代码.
EnumWindows(new EnumWindowsProc(EvalWindow), IntPtr.Zero);               foreach (IntPtr hwnd in ipHwnds)              {                  StringBuilder sb = new StringBuilder(256);                  GetWindowText(hwnd, sb, 256);                   IntPtr hwndIPIE = IntPtr.Zero;                  IntPtr parentHwnd = hwnd;                  String className = String.Empty;                  while (!className.Equals("Internet Explorer_Server"))                  {                      EnumChildProc childProc = new EnumChildProc(EnumChildWindows);                      EnumChildWindows(parentHwnd, childProc, ref hwndIPIE);                      className = GetClassName(hwndIPIE);                      parentHwnd = hwndIPIE;                  }                   IHTMLDocument2 htmlDoc = IEDOMFromhWnd(hwndIPIE);                  String htmlText = htmlDoc.body.parentElement.outerHTML;                   StreamWriter sw = new StreamWriter(String.Format("d:\\{0}.html", sb.ToString()));                  sw.Write(htmlText);                  sw.Close();              }  
以下是从Logic Inspector 抓取的内容:
<html> <head>     <title>Logic Inspector</title>     <meta content="text/html; charset=utf-8" http-equiv="Content-Type"></meta> </head> <frameset id="idframeset" framespacing="2" border="2" cols="50%,50%"> <FRAME id=overallFrame src="res://1033\ipdsintl.dll/InspectorOverallFrames.html" scrolling=yes> <FRAME id=fieldFrame src="res://1033\ipdsintl.dll/InspectorFieldFrames.html" scrolling=yes> </frameset> </html> 
很明显, Logic Inspector 由2个Frame组成: "overallFrame" 和 "fieldFrame". 从名字即可知道"overallFrame"指代Logic Inspector的左半部, "fieldFrame" 指代Logic Inspector的右半部.
如果你足够细心, 就会发现一个奇妙的地方. 这2个Frame的source居然是从一个dll中读取的. 而这个ipdsintl.dll就是揭开InfoPath 秘密的重点.
IPDSINTL.DLL -- InfoPath 的资源文件
首先我们要找到IPDSINTL.DLL到底在哪. 从它的上级目录"1033"来看, 这个文件应该在Microsoft Office文件夹下. 如我所料, 它确实是老老实实呆在这的:
%ProgramFiles%\Microsoft Office\Office12\1033\IPDSINTL.DLL
把这个DLL拖到Visual Studio中, 可以看到其实它是InfoPath重要的资源文件.
 
 
还记得2个frame的路径吗? 赶紧看看HTML文件夹下的内容吧:
 
2010-03-21 12:08:31
InfoPath 内置错误查找功能的局限及原因
 
InfoPath 内置的错误查找功能只能定位当前视图的错误, 并且一次只能定位一个.

 
这样看似匪夷所思的设计, 其实是因为InfoPath整体设计导致的. 首先, 这里所说的错误是针对数据而言的, 例如field1不能为空. 考虑以下情况:
 
1. field1在view1和view2中都有绑定的控件.
2. field1没有任何绑定的控件.
 
对于情况1, 从视图的角度来看, 应该有2个错误分别存在于view1和view2中; 以数据而言, 只有1个错误.
对于情况2, 从视图的角度来看, 没有错误; 以数据而言, 有1个错误.
 
很显然, 为了正确地判断错误信息, 应该从数据的角度来看待错误, InfoPath正是这样看待错误的. 因此, InfoPath的错误信息中并不保存视图信息, 这也导致"Go to Next Error"只能定位到当前视图上含有错误信息的控件.
 
扩展InfoPath错误查找功能
 
InfoPath内置查看功能的最大局限就在于无法跨视图定位含有错误的Field绑定的所有控件。为了扩展其功能,需要2个步骤:
 
1. 获取当前表单的所有错误字段。
2. 获取字段绑定的控件所在视图。
3. 切换到错误控件所在视图并选中该控件。
 
对于步骤1,可以使用Microsoft.Office.Interop.InfoPath.XDocument.Errors.
 
对于步骤2,首先要获取当前表单的模板(xsn)位置,可以使用
Microsoft.Office.Interop.InfoPath.XDocument.Solution.URI
. 其次解压xsn文件,再在*.xsl文件中查找错误字段。
 
对于步骤3,使用Microsoft.Office.Interop.InfoPath.XDocument.View.SwitchView 切换视图,并使用Microsoft.Office.Interop.InfoPath.XDocument.View.SelectText选中错误字段绑定的控件。
 
完成了以上3个步骤,扩展错误查找功能基本就完成了。
 
InfoPath 错误查看器 (InfoPath Error Viewer)
 
可以利用InfoPath Add-in的开发技术将错误查找功能集成到InfoPath中,这样,一个新的插件InfoPath Error Viewer就诞生了。


 
下载 InfoPath Error Viewer
 
注意:安装时请右键-〉以管理员身份运行[/img]..
2010-03-20 11:52:31
一些Notes, 不要过分期待
类别:Notes|阅读(29)|回复(1)|(0)阅读全文>>

 有时候,我们有需要写一个小工具批量下载发布到不同的SharePoint Form Library中的InfoPath template.
 
假设InfoPath template的URL为:
http://Servername/FormLib/template.xsn
 
那么写出以下代码是顺理成章的:
WebClient wc = new WebClient();

wc.Credentials = System.Net.CredentialCache.DefaultCredentials;
2010-01-15 15:05:01
 
本文描述在InfoPath中如何实现动态增/减dropdown list item. 废话不多说,入主题。
 
打开Visual Studio 2008,创建一个InfoPath Template 项目。
 
Design
在设计模式中创建一个Dropdown list,一个Button,一个TextBox:
 

 
创建一个新的repeating field:
 
将repeating field 绑定到一个Multi-Selection listbox上。
 
打开Dropdown list 的属性:

选择 "Look up values in the form's data source", 并在"Entries"里选择新建的repeating field: dpItemValue.
这个工具是做项目时写的,没太多机会更新了,所以搬出来共享了。
 
Microsoft Office InfoPath有很多无奈的缺陷。比如无法搜索一个指定的data field,无法查看一个data field 绑定的Control,不能一目了然地看到所有的Data Source.
 
使用InfoPath Inside Viewer 可以轻松解决这些问题。首先,它将所有的数据源都列在一个TreeView中:

 
可以清楚地看到一个data field 绑定的Control:

 
可以模糊搜索data field:

 
InfoPath Inside Viewer可以独立于Microsoft Office InfoPath运行,即使系统没有安装MS InfoPath,也可使用。
 
下载:InfoPath Inside Viewer Beta 3[/img]..
2009-12-18 15:01:34
Now InfoPath debugger 1.3 released. With variety new features and enhanced user experience, it’s facilitating to monitor the data in an InfoPath form.
New Features:
Switch Roles at Runtime
Usually, some business logics require the specific user to see the specific part of InfoPath form. It can be easily controlled by using User Role feature in InfoPath. However, it does not facilitate to switch user accounts when testing the role dependent logics. The fanciest thing in this version of Inf..
2009-10-06 09:17:21
Background
 
InfoPath 是Microsoft出品的一个制作电子表单的工具,可能是因为当初没有想到会有这么多Developer会使用InfoPath (全拜SharePoint所赐),InfoPath中居然没有调试功能。试想一下,一个Button触发m个rule, 一个rule有n个action, 随着Form的业务逻辑增加,没有调试功能的缺陷被逐渐放大。一个Button会改变十几个Data Field的值,而这些变化没办法监测,只能在文档中记载,以至于文档成为了InfoPath Developer的调试工具。
 
好在InfoPath还可以添加托管代码,可以将过于复杂的业务逻辑写到托管代码中。但这样..

最近在开发InfoPath Form的时候遇到一个需求:需要一个HyperLink,用户点击它后,隐藏某些控件。这个小需求却不能很容易地解决,原因在于InfoPath的HyperLink控件并不支持添加Rule. 如果你研究过InfoPath的Source File,会发现其实在mainifest文件中,并没有把HyperLink当作控件,所以不可能为它设置Rule或触发事件。
 
为了解决这个需求,最容易想到的就是利用Button来代替HyperLink. 但是用户却要求界面上显示成HyperLink样式,那么我们就要将Button格式化成HyperLink样式。
 
首先,拖动一个Button控件到Form中,并..
 <<   1   2   >>   页数 ( 1/2 )