zoukankan      html  css  js  c++  java
  • [MOSS开发]:web part的创建与调试

          在MOSS编码过程中,应用最多的应该是web part,一个页面就是由这样不定数目的web part构成的。web part是页面的最小构成单元,在MOSS开发过程中,和传统的asp.net中应用控件不太一样,asp.net虽然支持动态添加控件,但是都是通过事先的业务逻辑来实现,而MOSS中没有这样的限制,在一个页面中,你可以非常容易的添加任意已经发布成功的web part,而不受任何业务逻辑的限制。这点就像asp.net应用程序开发过程中,拖动工具箱中的控件或者是用户控件一样,想拖谁就拖谁。

         理解Web部件:web part是实现特定功能的一系列控件的集合,类似于复合控件的概念。一个站点的用户可以通过浏览器更改其中的内容,行为等。对于web part的更改包含:增加,移动,删除,这种操作范围可以针对站点所有用户也可以针对特定用户。这一特点可以让用户可以自定义自己的站点而不影响其它用户。
         WSS V3中的web part的架构:分为如下三个方面:
             1:SPWebPartManager,它是整个web part的基础,它负责管理所有的web part区域,以及每个区域中的web part。它的主要功能就是对一个给定页面的所有web part进行管理。
             2:WebPartZone:和SPWebPartManager类似,它的主要作用是提供一个通用的用户界面,并控制web part的显示,一个页面通常会被划分成多个WebPartZone。每个区域里面会包含0到多个具体的web part, 它和SPWebPartManager一起控制着页面中的web part,没有这两个控件,任何一个web part都不能存在于页面中。
            3:具体的web part,它是一种服务器控件,它可以让用户在指定的页面上进行查找,显示,对数据和行为进行控制。
        这三者的关系图:可以看出它们是一个包含关系。

       

        web part特点:web part本身是独立的,所以开发员可以把精力都集中到实现控件的业务逻辑上。

        软件环境:MOSS 2007,VS2008 。默认情况下VS2008并不能创建web part,需要安装一个share point模块,可从网上下载。如何创建web part工程我在这也就不多说了。具体想说下编码。

        第一:如何声明一个属性。下面是声明一个颜色值属性:

    //默认值
        private KnownColor _textColor = KnownColor.Black;
            
    /// <summary>
            
    /// text color
            
    /// </summary>
            [WebBrowsable(true),
            Personalizable(PersonalizationScope.User),
            WebDescription(
    "Black"),
            Category(
    "Color"),
            WebDisplayName(
    "TextColor")
            ]       
            
    public KnownColor textColor
            {
                
    get { return this._textColor; }
                
    set { this._textColor = value; }

            }

     

         和普通属性声明不同的是上面多了许多特性标签。

         1:WebBrowsable:是否显示在属性编辑界面中,如果为true,在编辑控件时,我们在属性面板中就会看到它。

         2:Personalizable:标记为自定义属性,它是个性化的标志。下面是关于个性化Personalizable的几个概念:

             1):页面个性化的作用域:

                1>:PersonalizationScope.User;User作用域允许用户将具体的个性化设置应用到具体的用户上,因此一个用户对web part的更改对其它用户来说是不可见的。 

                2>:PersonalizationScope.Shared;Shared作用域告诉web part,应用到它上面的任何更改都会反应的所有用户身上。这相当于修改了网站的母版页的影响一样。

             2):用户的可见性:

                 1>:如果web part的作用域处理User,此时如果一个用户把页面上的一个web part进行相关更改,例如最小化,关闭,此时只有当前操作的用户受影响,其它的用户仍然是可见的, 
                 2>:如果web part的作用域处理Shared,此时如果一个用户把页面上的一个web part进行相关更改,例如最小化,关闭,此时所有用户都会看到不到这个web part。

             3):属性作用域:要想把一个属性设置成个性化,只要在指定属性上加上Personalization标签就行。

         3:WebDescription:自定义属性的描述信息。

         4:WebDisplayName:自定义属性在属性面板上显示的名称。

         5:Category:它可以把属性分组来放,当存在多个属性时非常有用。这个属性在asp.net中也有,事实上就是asp.net提供的,使用它需要引用:System.ComponentModel,在asp.net环境中编写自定义控件中经常会用到它。

        第二:如何在web part实现事件处理。一般web应用程序的事件都是由一个按钮提交引起,这里就以按钮点击为例来说明在web part中响应事件。由于在web part项目开发时没有可视化界面,要想显示出一个Button,就要手工实例化一下Button,并且给它附加上处理事件函数。代码如下:

    private Button btnSearch;
            
    private TextBox tbKey;
            
    /// <summary>
            
    /// create child controls
            
    /// </summary>
            protected override void CreateChildControls()
            {
                btnSearch 
    = new Button();
                btnSearch.Text 
    = "查询";
                btnSearch.Click 
    += new EventHandler(btnSearch_Click);
                
    this.Controls.Add(btnSearch);

                tbKey 
    = new TextBox();
                
    this.Controls.Add(tbKey);

                
    base.CreateChildControls();
            }

         

         代码说明:

            1:web part一般都是一个复合控件,所有的子控件的创建就在CreateChildControls()事件中完成;

            2:实例化一个Button,并且给它附加了文本属性,事件:如上面示例代码

            3:实现事件。

    void btnSearch_Click(object sender, EventArgs e)
    {
      
    //具体处理

    }

         第三:web part的提供和接收。web part无法通过硬编码的方式去预先访问另外一个web part,因为一个web part存在于一个页面并不是绝对的,它随时可能会被管理员删除。为了解决这个问题,MOSS提供了一个Web Part连接的机制。所以MOSS的web part分为两种:

             1:负责数据提供的(Provider Web Part);

             2:负责数据接收的(Consumer Web Part)。

         这两种控件之间是一种松耦合,两类控件只有在需要数据传递时,它们才会通才web part连接机制提供的标准接口连接起来,其它时候都只关心自己业务逻辑的实现。

         实现方式:

            1:做为数据提供方的web part,在实现完自己的业务逻辑后,需要增加一个方法,而且需要标明ConnectionProvider的特性。

            2:做为数据接收方的web part,在实现完自己的业务逻辑后,需要提供一个方法,名字可以随便起,重要的是一定要在方法上加上ConnectionConsumer的特性标签。

            3:部署以上两个web part。

            4:在页面上添加Provider web part,编辑属性-连接-发送对象-选择Consumer web part。

         连接类型:

             1:静态连接。当连接中的web part有一个或者多个不在web part区域内时,可用静态连接建立连接,它的局限性在于它不能通用浏览器接口建立,而只能通过SPWebPartManager.AddConnection 方法建立。

             2:动态连接。要求连接的web part在一个web part区域中,这是最为常见的连接,它支持浏览器接口建立。

        第四:web part的部署。这里就不重复了,可以参考这篇文章。

                 [MOSS开发]:webpart在部署时应该注意的地方

         第五:调试web part。尽管web part项目本身能够通过编译,但并不代表其业务逻辑是正确的,只要是程序就可能会存在BUG,默认MOSS网站对web part的错误提示信息并不友好,所以我们需要通过VS来调试它,从而发现问题解决问题。我们可能通过附加进程的方式来调试web part,操作如下:在工具菜单中点击DeBug-Attach to Process-定位到IIS进程上,如下图:

     

          会发现有好几个IIS进程,

     

           当前MOSS网站应用的是哪一个端口呢,我们可以通才一个dos命令来查看,在运行窗口中输入cmd-输入iisapp,将会出现下面的结果,可以看到非常清楚的看到端口20983对应IIS进程的PID为5896。在Attach to Process窗口中选中对应的IIS进程,设置好断点,然后刷新你的web part所在页面,会发现出现中断现像。

     

         总结:

               本文分析了web part中的属性,事件,连接与接收,部署与调试,比较基础,也是最重要的部分。希望大家多多提意见。



        
      
  • 相关阅读:
    对vue-cli各个目录的理解 和 在 vue 中使用json-server
    发论文的一些常见问题
    latex初步入门:springer llncs
    docker tomcat8 mysql8部署常见错误
    docker快速部署本地项目到服务器(tomcat8+mysql8)
    IDEA构建spring项目
    [b0042] python 归纳 (二七)_gui_tkinter_基本使用
    [b0038] python 归纳 (二三)_多进程数据共享和同步_队列Queue
    springboot进入html
    HbaseShell启动
  • 原文地址:https://www.cnblogs.com/ASPNET2008/p/1371290.html
Copyright © 2011-2022 走看看