绿豆.Net

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

在infopath模板自身的脚本编辑器里用js写业务代码有一年了,代码的难度一般,就是使用一些对象对XML结点进行增,删,修,查,复制,装载,翻译等操作,主要还是利用js语法和业务逻辑编程。
XDocument,UI,View,selectSingleNode,selectNodes,appendChild,replaceChild
removeChild,removeAll,cloneNode,nextSibling,transformNode,loadXML……

有时执行js代码时感觉效率不高,于是用net 2003结合IPVSPROJ2003.exe,在net中建模板,C#作为托管语言。感觉不错,好多方法和属性在打点后会自动出来,快……。调试也容易。
下面是我写的一段,输出webservice拉过来的产品数据:

using System;
using info = Microsoft.Office.Interop.InfoPath.SemiTrust;
using Microsoft.Office.Interop.InfoPath.SemiTrust;


// Office 集成属性,指明表单的 startup 类。不要修改。
[assembly: System.ComponentModel.DescriptionAttribute("InfoPathStartupClass, Version=1.0, Class=InfoPathProject1.InfoPathProject1")]

namespace InfoPathProject1
{
 // 属性中定义的命名空间前缀必须与表单定义文件(.xsf)中的同步。
 [InfoPathNamespace("xmlns:soapenc=\"http://schemas.xmlsoap.org/soap/encoding/\" xmlns:xdUtil=\"http://schemas.microsoft.com/office/infopath/2003/xslt/Util\" xmlns:ns4=\"http://schemas.microsoft.com/office/infopath/2003/myXSD/2006-08-12T00:41:12\" xmlns:xdXDocument=\"http://schemas.microsoft.com/office/infopath/2003/xslt/xDocument\" xmlns:tm=\"http://microsoft.com/wsdl/mime/textMatching/\" xmlns:xhtml=\"http://www.w3.org/1999/xhtml\" xmlns:dfs=\"http://schemas.microsoft.com/office/infopath/2003/dataFormSolution\" xmlns:xd=\"http://schemas.microsoft.com/office/infopath/2003\" xmlns:ns7=\"http://schemas.xmlsoap.org/wsdl/soap/\" xmlns:tns=\"http://tempuri.org/\" xmlns:msxsl=\"urn:schemas-microsoft-com:xslt\" xmlns:soap12=\"http://schemas.xmlsoap.org/wsdl/soap12/\" xmlns:ns3=\"http://schemas.microsoft.com/office/infopath/2003/myXSD\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:http=\"http://schemas.xmlsoap.org/wsdl/http/\" xmlns:ns6=\"http://schemas.microsoft.com/office/infopath/2003/myXSD/2006-05-23T07:44:28\" xmlns:ns5=\"http://schemas.microsoft.com/office/infopath/2003/myXSD/2006-08-14T01:23:01\" xmlns:xdMath=\"http://schemas.microsoft.com/office/infopath/2003/xslt/Math\" xmlns:xsf=\"http://schemas.microsoft.com/office/infopath/2003/solutionDefinition\" xmlns:mime=\"http://schemas.xmlsoap.org/wsdl/mime/\" xmlns:ns2=\"http://schemas.microsoft.com/office/infopath/2003/myXSD/2006-05-30T00:40:51\" xmlns:my=\"http://schemas.microsoft.com/office/infopath/2003/myXSD/2008-02-19T08-13-12\" xmlns:ns1=\"http://schemas.microsoft.com/office/infopath/2003/myXSD/2006-07-20T06:01:42\" xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:wsdl=\"http://schemas.xmlsoap.org/wsdl/\" xmlns:tr=\"http://schemas.microsoft.com/office/infopath/2003/sample/TravelRequest\" xmlns:xdDate=\"http://schemas.microsoft.com/office/infopath/2003/xslt/Date\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"")]
 public class InfoPathProject1
 {
  private info.XDocument XD;
  private info.Application thisApplication;

  public void _Startup(Application app, XDocument doc)
  {
   XD = doc;
   thisApplication = app;

   // 您可以在此添加其他初始化代码。
  }

  public void _Shutdown()
  {
  }

  // 下列函数处理程序由 Microsoft Office InfoPath 创建。不要修改类型或参数数目。
  [InfoPathEventHandler(MatchPath="CTRL8_5", EventType=InfoPathEventType.OnClick)]
  public void CTRL8_5_OnClick(DocActionEvent e)
  {
   // 行数
   string hang = XD.DOM.selectSingleNode("//my:产品个数").text;

            // 初始重复表行数
   info.IXMLDOMNode curNode = XD.DOM.selectSingleNode("//my:产品列表");
            info.IXMLDOMNode curNextNode = curNode.nextSibling;

   while(curNextNode != null)
   {
    curNode.parentNode.removeChild(curNextNode);
                curNextNode = curNode.nextSibling;
   }
           
   //XD.DOM.selectSingleNode("//my:field1").text = XD.GetDOM("aj_商品类型").xml;
   // 数据
   info.IXMLDOMDocument2 dataDOM;
   dataDOM = (info.IXMLDOMDocument2)XD.GetDOM("aj_商品类型");
   dataDOM.setProperty("SelectionNamespaces","xmlns:my=\"http://schemas.microsoft.com/office/infopath/2003/myXSD/2006-05-23T07:44:28\"");

   info.IXMLDOMNodeList dataNodeList = dataDOM.selectNodes("//my:设备型号管理[position()<=" + hang + "]");
   
   for(int i=0;i<dataNodeList.length;i++)
   {
                info.IXMLDOMNode tempNode = curNode.cloneNode(true);
    tempNode.selectSingleNode("my:大类").text = dataNodeList[i].selectSingleNode("my:分类").text;
    tempNode.selectSingleNode("my:小类").text = dataNodeList[i].selectSingleNode("my:小类").text;
    tempNode.selectSingleNode("my:名称").text = dataNodeList[i].selectSingleNode("my:名称").text;
    tempNode.selectSingleNode("my:型号").text = dataNodeList[i].selectSingleNode("my:型号").text;

    curNode.parentNode.appendChild(tempNode);
   }

  }
 }
}

posted on 2008-02-20 16:54  杜军  阅读(327)  评论(0编辑  收藏  举报