JOJ
踏踏实实做人,认认真真做事!放纵自己就是毁灭自己!

记录一下今天学习的Infopath, infopath表单发布到sharepoint后,在aspx页面中展示!

1. 无代码的Infopath, 没有使用VSTA编写代码

2. 有代码的Infopath

 

打开infopath设计如下界面: 然后打开“文件”--》“发布”--》发布到sharepoint

1

打开你刚才发布到的表单库: 新建Demo, 查看Demo属性,注意红色部分!下面XmlLocation将需要该地址

2

 

打开VS,新建ASP.NET网站项目, 在左边工具箱,“选择项”—“浏览”-->导航到: C:\Program Files\Microsoft Office Servers\12.0\Bin\Microsoft.Office.InfoPath.Server.dll ,确定后工具栏出现: XMLFormView控件,把该控件拖放到Default.aspx页面上

3

XmlLocation:填写第二图中的地址

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="InfoPathViewDemo._Default"   EnableSessionState="true" %>

<%@ Register Assembly="Microsoft.Office.InfoPath.Server, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c"
    Namespace="Microsoft.Office.InfoPath.Server.Controls" TagPrefix="cc1" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>无标题页</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <cc1:XmlFormView ID="XmlFormView1" runat="server" Height="250px" Width="100%"  
            XmlLocation="http://dg-mlwang/InfoPath/Demo.xml" ShowFooter="false" ShowHeader="false"   />
    </div>
    
    </form>
</body>
</html>

 

OK,生成项目!

生成的DLL 拷贝至 C:\Inetpub\wwwroot\wss\VirtualDirectories\80\bin

Default.aspx 页面拷贝至: C:\Program Files\Common Files\microsoft shared\Web Server Extensions\12\TEMPLATE\LAYOUTS\infopathDemo (infopathDemo文件夹自己新建)

 

浏览器导航:http://mossServer/_layouts/infopathDemo/Default.aspx  结果效果没有出来,出现

4

Oh, MyGod, 这个问题怎么搞定哦, 试着Google一下吧… ,Google果然很强大,看来其他很多已经遇到这个问题了,有希望!

在网站的web.config中的httpmodules一节增加

<add name="Session" type="System.Web.SessionState.SessionStateModule"/>

呵呵,再次导航到:http://mossServer/_layouts/infopathDemo/Default.aspx , Oh,what? 居然涛声依旧哇!  看来N多google出来的方案,都是说在web.config中的httpmodules动手脚,结果我的怎么不行呢? 郁闷啊,郁闷啊!

 

没希望了嘛? 下午的时候,我彻底崩溃的时候,没有办法了, 叫同事来帮我看看! 我一说, 结果他一看就知道了问题所在,我那个汗,应该早点问哦!要不耻下问!

设置web.config中的httpmodules一节没错,但是网上很多人没有说 页面上还要加上 EnableSessionState="true" ,或者你也可以在web.config里面配置EnableSessionState, 多么简单的一个属性啊!

 

再次导航:  霍霍终于可以了

5

下面做一个含VSTA编写的代码的infopath表单,

 1

首先设置的属性,右键-->重复属性:显示选项卡,把“包含页脚选上”,总金额就写在页脚那里!

4

infopath表单中, 金额应该为 数量*单价 ,总金额应该为: sum(金额)

2 3

右键客户姓名右边的文本框: 编写Change事件 如下代码

        /// <summary>
        /// 用户改变的时候,客户地址也发生相应的变化
         /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        public void UserName_Changed(object sender, XmlEventArgs e)
        {
            // 在此处编写代码,用于更改主数据源。
            XPathNavigator _username =
 this.MainDataSource.CreateNavigator().SelectSingleNode("/my:myFields/my:UserName", NamespaceManager);
            //这里只是个示例,实际情况根据业务的需求
            XPathNavigator _address =
   this.MainDataSource.CreateNavigator().SelectSingleNode("/my:myFields/my:UserAddress", NamespaceManager);
            _address.SetValue(_username.Value + "' Address");
        }
接下来就是发布了!
这里因为包含了表单代码,所以必须要经过管理员审核! 设置完全信任,工具--》表单选项--》安全和信任
6
5
记住,这里保存的customer.xsn位置,就是待会管理中心上载表单时需要的路径地址
  0 
发布完成后,需要到管理中心进行设置!
导航到:管理中心 > 应用程序管理 > 管理表单模板
7
这里浏览的地址就是上面发布时你写的地址!
 8 
9
 管理中心设置完成后,导航到刚才激活的网站!
在网站集中功能中可以看到刚才激活的infopath表单
10 
在站点中,新建一个表单库:TestDemo, 导航到 设置-->表单库设置--》高级设置, 注意一定要把"允许管理内容类型"设置为“是”,默认为“否”
11 
先点击“从现有网站内容类型添加”, 找到激活的customer表单,添加进去(因为我这里截图时已经添加进去了,所以这里面没有看到customer了),添加完成后,还要记得

更改“新建”按钮的顺序和默认内容类型, 因为你添加的默认在第二位!

12
 14 
15 
在TestDemo表单库中,单击新建按钮就看到 customer 我们自己写的表单了!
16 
新建一个表单的时候,我们发现我输入名字的时候,客户地址没有改变,我们已经写了UserName_Changed事件啊!而且在设计infopath表单里面测试是可以的,但是部署到sharepoint上面怎么不行了呢?
因为还需要在客户姓名文本框的属性,设置一下他的回发事件(这个是我同事告诉我的)!
13 
到此, 你可以把XmlFormView  XmlLocation 属性修改这个示例看看!
Technorati 标签: ,
posted on 2011-03-24 10:47  JoinJ  阅读(1812)  评论(0编辑  收藏  举报