使用Infopath时要注意的有哪些
转:http://www.cnblogs.com/dujun0618/articles/750088.html
在用appendChild时注意
1^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
var fatherNode = XDocument.DOM.selectSingleNode("/tr:青少年活动中心/ns1:统计报表[my:表单编号='" + tid + "']/my:记录组");
var sonNode = XDocument.DOM.selectSingleNode("/tr:青少年活动中心/ns1:统计报表[my:表单编号='" + tid + "']/my:记录组/my:组");
var sonNodeList = XDocument.DOM.selectNodes("/tr:青少年活动中心/ns1:统计报表[my:表单编号='" + tid + "']/my:记录组/my:组");
2^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
sonNodeList.removeAll();
3^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
var cloneNodeList=sonNode.cloneNode(true);
cloneNodeList.selectSingleNode("my:日期").text=t3;
//取得各种单据的申请时间信息
cloneNodeList.selectSingleNode("my:公出申请单").text = getTimeValue("公出申请单",ygname,t3);
cloneNodeList.selectSingleNode("my:加班审批单").text = getTimeValue("加班审批单",ygname,t3);
cloneNodeList.selectSingleNode("my:事病假单").text = getTimeValue("事病假单",ygname,t3);
cloneNodeList.selectSingleNode("my:调休申请单").text = getTimeValue("调休申请单",ygname,t3);
cloneNodeList.selectSingleNode("my:年休假申请单").text = getTimeValue("年休假申请单",ygname,t3);
fatherNode.appendChild(cloneNodeList);
要用这个方法,进行自动增加子结点。一定要注意,"my:记录组"的子结点里只有"my:组",不能有其它结点或组。如果一定要有,那么在appendChild时,也一定要将"my:记录组"的子结点补全才行。
my:记录组/my:组
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
var parentnode = XDocument.DOM.selectSingleNode("/my:青少年活动中心/my:老师组/my:老师/my:时间组");
var sonnode = XDocument.DOM.selectSingleNode("/my:青少年活动中心/my:老师组/my:老师/my:时间组/my:时间");
parentnode.appendChild(sonnode.cloneNode(true));//正确的
parentnode.appendChild(sonnode);//错误的,因为sonnode已经是指针指定好了,所以总是加本身。
cloneNode(true)的作用是复制sonnode结点的副本,并且子结点也复制。
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
用appendChild的前提是添加结点的父结点是重复结点。
用count()函数注意
count(/my:温州圣火/my:模板结构/my:电梯类型参数[my:生产编号 = /my:温州圣火/my:生产编号用于生成序号]/my:部件组[my:部件类型 = /my:温州圣火/my:部件类型用于生成序号]/my:标准部件/my:组/my:部件信息组/my:编号)
count()函数里只能是正规的xpath语句,并且还不能饮食双引号。不能用concat()函数组合成的xpath语句。
[my:部件类型 = /my:温州圣火/my:部件类型用于生成序号]过滤里能用绝对路径就尽量用。
无法打开infopath表单的原因
XDocument.GetDOM("员工信息录入表").selectNodes(ns1:姓名); 这样会打不开表单,我当时也不相信,脚本还没引发但是运行表单时会检查的。
改成
XDocument.GetDOM("员工信息录入表").selectNodes(/dfs:myFields/dfs:dataFields/tns:GetDataResponse/tns:GetDataResult/tr:员工基本信息/ns1:姓名);就没错了。
总之表单打开时会检查脚本的语法。
有时命名空间太长,分号不能在第二行,不然也打不开。
使用View.ExecuteAction命令时重复表结构问题
my:生产表/my:生产(表内容)
一般添加重复表时默认结构是my:group1/my:group2,my:group2是重复表名可重复,而my:group1是它的父结点非重复的。
我在使用XDocument.View.ExecuteAction("xCollection::insert","生产_9"),提示错误,当时以为是XmlToEdit名称不能用中文名,然后换成字母后也出错。
原来在添加重复表时,把重复表的父结点删掉,换成重复节的结点。而重复节是可重复的。所以就出错了。
规则不能自调用
在本字段里设规则时,不能对本规则进行值的改变。这样会进入死循环的,不过系统是不会死循环的,它会在几次调用后自动跳出。
"在该表单的代码中出现错误。为单次数据更新调用 OnAfterChange 事件的次数已超过允许的最大值。"
xsl样式转换出来的字段里规则不能响应
xsl样式转换出来的字段里规则不能响应,而在重复表的新增删规则是可以用的。
XSLT中注意命名空间
//xslt样式
//---------------------------------------------------------------------------------------------
xslContent = '<?xml version="1.0" encoding="gb2312" ?><xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:my="http://schemas.microsoft.com/office/infopath/2003/myXSD/2006-05-23T07:44:28">'
xslContent +='<xsl:template match="/"><my:工资组><xsl:for-each select="my:统计组/my:老师组/my:老师">'
xslContent +='<my:人名组><my:教师姓名><xsl:value-of select="my:姓名"/></my:教师姓名>'
xslContent +='<my:课时数></my:课时数>'
xslContent +='<my:课时标准></my:课时标准>'
xslContent +='<my:金额></my:金额>'
xslContent +='<my:补发金额></my:补发金额>'
xslContent +='<my:总金额></my:总金额>'
xslContent +='<my:纳税金额></my:纳税金额>'
xslContent +='<my:税后金额></my:税后金额>'
xslContent +='<my:备注1></my:备注1></my:人名组></xsl:for-each>'
xslContent +='</my:工资组></xsl:template></xsl:stylesheet>'
//-------------------------------------------------------------------------------------------------
xmlns:my="http://schemas.microsoft.com/office/infopath/2003/myXSD/2006-05-23T07:44:28" 这个命名空间的申明不能省去,因为里面有my:前缀。不然不会成形。
var xslDom = XDocument.CreateDOM();
xslDom.loadXML(xslContent);
XDocument.UI.Alert(xslContent);
XDocument.UI.Alert(xslDom.xml);
Xpath中空白字符是有效的
[my:所属部件=' 原料']
[my:所属部件='原料']
这两个是有区别的。
Xpath路径(区分大小写)
var ylid = XDocument.DOM.selectSingleNode('my:myFields/my:原材料信息/my:编号').text;
单引号和双引号都行
里面一定要区分大小写
my:myFields F是大写
XDocument.CreateDOM()对象命名空间的申明方法
transDOM = XDocument.CreateDOM();
transDOM.loadXML(xmlDOM.transformNode(xslDOM));
-----------------------------------------
transDOM.setProperty("SelectionNamespaces", 'xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:my="http://schemas.microsoft.com/office/infopath/2003/myXSD/2006-05-23T07:44:28" xmlns:xd="http://schemas.microsoft.com/office/infopath/2003"');
-------------------------------------------
和主数据源的命名空间一样申明
XDocument.DOM.setProperty("SelectionNamespaces", 'xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:my="http://schemas.microsoft.com/office/infopath/2003/myXSD/2006-05-23T07:44:28" xmlns:xd="http://schemas.microsoft.com/office/infopath/2003"');
XDocument.CreateDOM()对象和结点对象
function CTRL8_5::OnClick(eventObj)
{
var strUrl = "http://localhost/testform3.xml";
var oXmlHttp = new ActiveXObject("MSXML2.XMLHTTP");
oXmlHttp.Open("GET", strUrl, false);
oXmlHttp.Send();
XDocument.UI.Alert(oXmlHttp.responseXML.xml);
XDocument.UI.Alert(oXmlHttp.responseXML.selectSingleNode("/my:myFields/my:mybooks").xml);
var rexml = oXmlHttp.responseXML.selectSingleNode("/my:myFields/my:mybooks");
var renode = XDocument.CreateDOM();
renode.loadXML(rexml.xml);
XDocument.UI.Alert(renode.xml);
var node = XDocument.DOM.selectSingleNode("/my:myFields/my:mybooks");
node.parentNode.appendChild(renode.documentElement);
oXmlHttp.Open("PUT", strUrl, false);
oXmlHttp.Send(XDocument.DOM.xml);
}
renode对象加载了XML后,它不selectSingleNode对象不一样,还要renode.documentElement这样得到根结点。然后才和selectSingleNode对象一样使用。
transformNode中XML被转换结点和XSL中查询路径
如果单纯是XML文件那么<>内的结点名不一定要my:等前缀,有也没事,那就全当成名字处理,这样在XSL语句中选择路径时就要结点全名了。
前缀只是在infopath中用于表示结点结构。是一种构架规则。
last()用在不同地方有区别
/my:温州圣火/my:模板结构/my:备注[last()]
用作下拉时会取出每张表的备注的最后结,而备注只有一个结,所有相当于取出所有的备注了。
/my:温州圣火/my:模板结构[last()]/my:备注
用作下拉时会取出最后一张表的备注。
======================================================================
concat("/my:温州圣火[my:模板结构/my:所属部件='", ., "']/my:模板结构[last()]/my:编号")
这样是先找到符合条件结点,然后取出最后一个。
concat("/my:温州圣火/my:模板结构[my:所属部件='", ., "' and last()]/my:编号")
这个并不能实现取出符合条件的最后一个。
使用Infopath时要注意的有哪些相关推荐
- 一步一步搞定InfoPath(02)--配置VSTA
一步一步InfoPath(02)--安装VSTA环境 VSTA(Visual Studio Tools for Applications)安装 计算机需要安装了 Microsoft .NET Fram ...
- SharePoint 2013 InfoPath 无法保存下列表单
在使用InfoPath发布表单,发布到SharePoint服务器报错,如下介绍: 环境:Windows 2012 DateCenter + Sql 2012 + SharePoint 2013 + O ...
- 一步步学习微软InfoPath2010和SP2010--第四章节--处理SP列表表单(6)--列表表单的局限...
当SharePoint列表作为InfoPath表单被自定义时,当涉及到SharePoint ASP.NET页.作为InfoPath表单的SharePoint列表和表单库表单之间的表单行为时,有一些细微 ...
- 一步步学习微软InfoPath2010和SP2010--第一章节--介绍InfoPath2010
本章你将学到: 1. 历数使用SP2010的同时,使用InfoPath2010表单的好处. 2. 使用MS Office后台功能创建新的InfoPath表单 3. 导航InfoPath界面 4. 创建 ...
- 在程序中设置infopath中的整型等域值时出错解决方法
最近一直和infopath表单打交道,碰到的问题也比较多,刚刚就碰到一个在程序中修改infopath表单中域的内容时出错的问题,写出来与大家共享一下,我想这个问题,可能玩infopath的话,迟早会碰 ...
- infopath创建时添加重复节
添加重复节,可以在填写表格的时候重复的添加相同的格式项 点击开始-控件,选择重复节 2.在已插入重复节的区域中添加所需的域即可
- infopath java包_InfoPath 2013 修补程序包 (Ipeditor x none.msp) 的描述︰ 2014 年 4 月 8,...
修补程序信息 可以从 Microsoft 获得受支持的修复程序.然而,此修补程序仅用于解决本文中描述的问题.此修复程序仅适用于遇到本文中描述的问题的系统.此修补程序可能会接受进一步的测试.因此,如果这 ...
- SharePoint2013 Online中InfoPath 无法调用WebService
传说微软office365中国区服务器已经迁移到国内,试了下速度果然比之前快了很多,不过随后测试了个简单的功能,还是直接被打击了. 准备在online版本中做一个简单的报销流程测试测试,于是先用Inf ...
- [译]在启用浏览器功能的INFOPATH表单中实现基于SQL SERVER的多级联动的下拉式列表...
翻译:实现多级联动的下拉式列表 原文:http://blogs.msdn.com/infopath/archive/2006/10/12/cascading-dropdowns-in-browser- ...
- 使用脚本将数据从辅助数据源传送到 InfoPath 域
概要 在 Microsoft Office InfoPath 2003中,不能直接将表单中的域绑定到辅助数据源中的数据.但是,本文介绍如何以编程方式转换辅助数据源中的数据,然后在运行时将转换后的数据传 ...
最新文章
- 安装VMWare tools,以及解决安装后/mnt中有hgfs但没共享文件的方法
- oracle配置oracle Database Configuration Assistant失败是什么原因?
- CentOS 6.0安装RPMforge源
- python交作业的格式_python作业4
- python条件查询 或 in_64.Python中ORM查询条件:in和关联模型
- 查询blob字段_一次注解开发实战-我使用注解对微服务的跨库查询做了封装
- dos进入mysql不记得密码_windos mysql 忘记密码,无密码登录,重新登录
- linux查询机器信息,linux_机器信息查询
- tbb::atomic和std::atomic的区别 废弃
- 单机安装DynamicsAX2012R3VM
- 收件服务器位置,如何查看邮箱的收件服务器地址
- 2020中科院信工所夏令营面试
- Android实现截屏功能(已适配Android11)
- K Simple question (第十届山东理工大学ACM网络编程擂台赛 正式赛)
- 疫情之下,征信有逾期如何处理?
- 2021-05-12 MongoDB面试题 MongoDB副本集选举条件有那些
- GTK 框架(Frames)
- BUUCTF——rsa系列(4)
- 窗口全屏化得方法大全(5种方法,你都知道吗?)
- OpenCV实战——文本检测