zoukankan      html  css  js  c++  java
  • 利用InfoPath生成XML资源文件

    由于普通列表的新建、修改或显示窗体往往不能满足一些业务的需要,我们常常需要通过“自定义表单”的方式将列表的默认窗体变成InfoPath表单模式,这样可以为其增加数据连接和简单设置很多的规则,特别是在有的时候,我们需要在一个列表中更新另外一个列表的数据,当然通过写事件能很好的满足需要,不过在不写事件的情况下也是可以采用其他方式来实现的。

    这个时候我们需要建立一些域来装载其他列表的记录,这里最简单的有一种方式,就是在当前列表中建立一些字段来存储,但是这样的话,就相当于在当前列表建立了一些与此列表无关的Field,这样做当然不好,还有一种方式,就是自己写XML文件做辅助数据源,但是很多人对这个XML文件的结构构造不是很清楚,那么有没有一种简单的方式来实现呢?

    下面就来介绍一种简单的方法,首先假设我有几种字段,分别是文本,数字,货币,日期时间,并且我希望能对这些字段做到输入的限制,那么首先打开InfoPath Designer,然后新建一个空白表单,在这个空白表单中建立4个域,具体如下:

    名称 类型 数据类型
    文本 域(元素) 文本
    数字 域(元素) 整数
    货币 域(元素) 小数
    日期时间 域(元素) 日期和时间

    然后将选择“文件”—“发布”—“导出”—“导出源文件”到某一文件夹,然后会看到该InfoPath导出生成了如下5个文件:

    manifest.xsf——InfoPath的定义文件,定义整个InfoPath的组成结构,里面会指定该InfoPath的其它文件,并且必须是InfoPath中的第一个文件

    myschema.xsd——InfoPath的架构文件,定义该InfoPath里面的包含的域和域的类型

    sampledata.xml——包含InfoPath的域

    template.xml——新建表单的时候进行实例化InfoPath

    view1.xsl——存储InfoPath中视图样式的文件

    在这5个文件中,我们需要用到myschema.xsd和sampledata.xml这两个文件,用记事本打开这两个文件,先看看里面的XML的具体内容。

    myschema.xsd如下:

    View Code
     1 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
    2 <xsd:schema targetNamespace="http://schemas.microsoft.com/office/infopath/2003/myXSD/2011-12-22T14:43:59" xmlns:my="http://schemas.microsoft.com/office/infopath/2003/myXSD/2011-12-22T14:43:59" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    3 <xsd:element name="myFields">
    4 <xsd:complexType>
    5 <xsd:sequence>
    6 <xsd:element ref="my:文本" minOccurs="0"/>
    7 <xsd:element ref="my:数字" minOccurs="0"/>
    8 <xsd:element ref="my:货币" minOccurs="0"/>
    9 <xsd:element ref="my:日期时间" minOccurs="0"/>
    10 </xsd:sequence>
    11 <xsd:anyAttribute processContents="lax" namespace="http://www.w3.org/XML/1998/namespace"/>
    12 </xsd:complexType>
    13 </xsd:element>
    14 <xsd:element name="文本" type="xsd:string"/>
    15 <xsd:element name="数字" nillable="true" type="xsd:integer"/>
    16 <xsd:element name="货币" nillable="true" type="xsd:double"/>
    17 <xsd:element name="日期时间" nillable="true" type="xsd:dateTime"/>
    18 </xsd:schema>

    sampledata.xml如下:

    View Code
     1 <my:myFields xmlns:my="http://schemas.microsoft.com/office/infopath/2003/myXSD/2011-12-22T14:43:59" xmlns:xd="http://schemas.microsoft.com/office/infopath/2003">
    2 <my:文本/>
    3 <my:数字/>
    4 <my:货币/>
    5 <my:日期时间/>
    6 <xd:SchemaInfo LocalName="myFields" NamespaceURI="http://schemas.microsoft.com/office/infopath/2003/myXSD/2011-12-22T14:43:59">
    7 <xd:Namespaces>
    8 <xd:Namespace LocalName="myFields" NamespaceURI="http://schemas.microsoft.com/office/infopath/2003/myXSD/2011-12-22T14:43:59"/>
    9 </xd:Namespaces>
    10 </xd:SchemaInfo>
    11 </my:myFields>

    先将sampledata.xml文件中的内容整个复制到一个新的记事本中去,然后将myschema.xsd中的内容除去下面的头文件声明外其它的内容复制:

    <?xml version="1.0" encoding="UTF-8" standalone="no"?>

    将复制的内容插入到刚刚那个记事本中节“<my:myFields>”里面,粘贴完后记事本的内容如下:

     1 <my:myFields xmlns:my="http://schemas.microsoft.com/office/infopath/2003/myXSD/2011-12-22T14:43:59" 
    2
    3 xmlns:xd="http://schemas.microsoft.com/office/infopath/2003">
    4 <xsd:schema targetNamespace="http://schemas.microsoft.com/office/infopath/2003/myXSD/2011-12-22T14:43:59"
    5
    6 xmlns:my="http://schemas.microsoft.com/office/infopath/2003/myXSD/2011-12-22T14:43:59"
    7
    8 xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    9 <xsd:element name="myFields">
    10 <xsd:complexType>
    11 <xsd:sequence>
    12 <xsd:element ref="my:文本" minOccurs="0"/>
    13 <xsd:element ref="my:数字" minOccurs="0"/>
    14 <xsd:element ref="my:货币" minOccurs="0"/>
    15 <xsd:element ref="my:日期时间" minOccurs="0"/>
    16 </xsd:sequence>
    17 <xsd:anyAttribute processContents="lax" namespace="http://www.w3.org/XML/1998/namespace"/>
    18 </xsd:complexType>
    19 </xsd:element>
    20 <xsd:element name="文本" type="xsd:string"/>
    21 <xsd:element name="数字" nillable="true" type="xsd:integer"/>
    22 <xsd:element name="货币" nillable="true" type="xsd:double"/>
    23 <xsd:element name="日期时间" nillable="true" type="xsd:dateTime"/>
    24 </xsd:schema>
    25 <my:文本/>
    26 <my:数字/>
    27 <my:货币/>
    28 <my:日期时间/>
    29 <xd:SchemaInfo LocalName="myFields"
    30
    31 NamespaceURI="http://schemas.microsoft.com/office/infopath/2003/myXSD/2011-12-22T14:43:59">
    32 <xd:Namespaces>
    33 <xd:Namespace LocalName="myFields"
    34
    35 NamespaceURI="http://schemas.microsoft.com/office/infopath/2003/myXSD/2011-12-22T14:43:59"/>
    36 </xd:Namespaces>
    37 </xd:SchemaInfo>
    38 </my:myFields>

    现在将这个记事本文件保存为XML文件,因为里面有中文字符,所以保存的时候,在编码位置要选择“UTF-8”,然后命名为123.xml:

    现在我们就可以将这个123.xml拿来用了,我们随便给一个InfoPath添加一个自XML文档接收数据的数据连接,XML文档选择123.xml,然后在InfoPath中可以清楚的看到辅助数据源123的架构:

    然后我们将其拖出来使用,可以清楚的看到所有域的数据类型都可我最开始定义的类型一致,分别是文本,整数,小数,日期和时间类型,并且日期时间是DateTime控件,这些达到了我们限定输入的要求:

    但是这里需要注意一点,用户类型没办法实现用“个人/组选取器”控件来控制输入,如果要控制用户字段输入还是只能在当前列表建立一个Field来实现。

  • 相关阅读:
    5月9日黑马java之java中四种权限修饰符
    MOOCjava之输入输出
    5月7日黑马java之final关键字的用法
    MOOCjava之数据库基础
    MOOCjava之线程
    毕业设计
    shiro 权限
    Spring Boot Thymeleaf
    Spring Boot文件处理
    Spring Boot Rest模板
  • 原文地址:https://www.cnblogs.com/leolis/p/2298757.html
Copyright © 2011-2022 走看看