[MOSS开发]:通过简单BUG跟踪Demo阐述用户控件对列表的操作

     下面的文章我想以一个具体的BUG跟踪Demo来说明MOSS的具体应用,这里面会应用到下面的知识点:

         1:用户组,用户的创建,权限分配;

         2:列表的概念以及创建;

         3:利用用户控件来完成表单的增加加功能;

         4:当前域用户查看自己BUG。

     BUG跟踪软件在一些大型公司一般都有,上次在客户公司做项目时,他们用一个叫做QC的软件,以WEB形式展现,有大概以下几点功能:

          1:域用户可以提交BUG给指定的人员去解决;

          2:程序员可以根据条件查询自己的BUG数据并返回处理结果;

          3:管理员可以通过BUG报表清晰的看出整个项目的BUG解决程序。

    非常好用。下面我就根据这一原理做一个简单的Demo,简化版的,只是实现思路而已。既然要用到列表,这里就像说下WSS VS MO,目前WSS v3 共有35个命名空间,经常使用的核心名称空间如下:

          1:Microsoft.SharePoint;

          2:Microsoft.SharePoint.WebControls;

          3:Microsoft.SharePoint.Utilities;

          4:Microsoft.SharePoint.Administration;

          5:Microsoft.SharePoint.Navigation;

          6:Microsoft.SharePoint.WebPartPages;

          7:Microsoft.SharePoint.Workflow;

          8Microsoft.SharePointSearch.Query。

      WSS V3的几个核心类关系图如下:SPSite是核心类之一,它是SPWeb 对象集合,代表站点集。SPWeb 则代表一个具体的站点,它包含SPList集合。SPList代表列表或者是文档库,它是SPListItem 的对象集合。SPListItem类代表列表中的行,或者是文档库中的独立文档,通过它可以访问到具体的行数据或者是文档内的数据。

   

       第一:测试员要想报一个bug给开发员解决,那么首先要创建用户组和成员。

          1:确保公司有一个统一的域环境,(没有域环境谈何MOSS);

          2:增加用户到域;

          3:在MOSS站点中添加组。操作步骤:网站操作-网站设置-人员和组-新建-新建用户组。

                1):首先要创建一个manager的组,用来充当管理员,同时给manager组加上相应的权限,可以根据实际情况,我这里加的是完全控制。

                2):再加一个开发人员的组developer,在加权限时,加上参与讨论和读取,相当于可写可读;

                3):再加一个测试组tester,权限和developer一样就行。

         4:将用户划分到相应的组。在上面的三个组中,分别加入相应的用户。

    第二:列表的创建。MOSS中的列表是整个MOSS的数据基础,其实相当于数据库中的一个表。对应我们的BUG系统,很明显需要一个记录BUG详情的列表,这里我创建了一个名为bug2的列表,为了以后的数据查询方便,在这里创建列表栏名时需要注意一个问题:首次创建栏名时,系统会根据栏名生成系统中对应的表字段名(internal name),但它有一个要求,这个栏名最好是字母,且中间不要产生空格,因为在生成internal name时,会将空格以及中文编码,这样会导致开发员做列表查询时不清楚表字段的名称。下面的栏名都是不太好的做法:解决人员,解决 人员,jack chen,纯英文字段对于中文系统来说还是不完美的,我们可以第二次修改栏名为中文,这样在显示上就友好些,且internal name不会因此发生变化。为了简单我这里创建了以下字段:

          1:BUG标题:sTitel;

          2:BUG描述:sDesc ;

          3:重要性:importance,一个下拉框,重要,一般,低三种。

          4:解决人员:sUser,存储域用户名称,友好的(例如:姜敏),不是登录名。

          5:项目:project,一般在开发时,一个开发员会同时接手几个项目。

          6:状态:status,默认值为未解决。如果开发员解决后可以更改成已解决状态。

    第三:用户控件的创建。由于web part项目开发起来比起用户控件麻烦一点,这里我采用用户控件的形式来实现。创建一个web application工程,然后创建一个QCWeb.ascx控件,用来让测试人员填写BUG并指给相应的开发员解决。最终的页面展示如下图。


           下面比较重要的就是绑定解决人员的下拉框和提交BUG:

           1:绑定解决人员数据,代码如下。
 
ContractedBlock.gifExpandedBlockStart.gifCode
/// <summary>
        
/// 绑定开发人员名单
        
/// </summary>
        private void getDeveloper()
        {
            DataTable dr 
= new DataTable();            
            dr.Columns.Add(
"sName"typeof(string));
            SPWeb rootWeb 
= SPControl.GetContextSite(Context).RootWeb;
            
foreach (SPUser user in rootWeb.Groups["developer"].Users)
            {
                
if (user.Name != "系统帐户")
                {
                    DataRow dt 
=dr.NewRow ();
                    dt[
0= user.Name;
                    dr.Rows.Add(dt);
                
                }
            
            }
            
            
this.ddlDeveloper.DataSource = dr;
            
this.ddlDeveloper.DataTextField = "sName";
            
this.ddlDeveloper.DataValueField = "sName";
            
this.ddlDeveloper.DataBind();
 
        
        }

         

          代码说明:根据rootWeb.Groups["developer"].Users获取开发人员所有组员的人员集合,除掉系统帐户,把所有的用户信息附加到下拉列表框中。下面是关于操作用户和用户组的对象模型说明:

                      1):SPUser:用户对象,域用户;

                      2):SPUserCollection:用户对象集合;例如:rootWeb.Groups["developer"].Users

                      3):SPGroup:用户组;

                      4):SPGroupCollection:用户组的集合。

          2:提交BUG的事件程序如下:我在开发时遇到一个问题就是如何取域用户的友好名称?例如当前的域:a.com,用户名:jiangmin,域用户信息中的友好名称为姜敏。我总结以了以个几种关于取域用户信息的方法:

                     1):User.Identity.Name;  //读取域登录用户名,格式为Domainname\\username (域名名称"用户名称),返回结果a.com\\jiangmin;    

                     2):username返回结果jiangmin ;

                     3):SPContext.Current.Web.CurrentUser.Name,返回结果:姜敏,如果当前用户是系统帐户的话会显示成系统帐户,这显示是我们希望看到的结果。

ContractedBlock.gifExpandedBlockStart.gifCode
try
            {
               
                SPWeb web 
= SPControl.GetContextSite(Context).RootWeb;
                SPList list 
= web.Lists[sourceList];
                SPListItemCollection lists 
= list.Items;
                SPListItem listItem 
= list.Items.Add();
                listItem[
"sTitle"= this.txtTitle.Text.Trim();
                listItem[
"sDesc"= this.txtDesc.Text;
                listItem[
"importance"= this.ddlimportance.SelectedValue;
                SPUser developer
=null ;
                
foreach (SPUser user in web.Groups["developer"].Users)
                {
                    
if (user.Name == this.ddlDeveloper.SelectedValue)
                    {
                        developer 
= user;
                        
break;

                    }


                }
                listItem[
"sUser"= developer;
                listItem[
"project"= this.ddlProject.SelectedValue;
                listItem.Update();
                
this.lblResult.Text = "发布成功";
            }
            
catch (Exception ex)
            {
                
this.lblResult.Text = "发布失败";          
            }

 

            代码说明:BUG数据的增加,主要利用了SPListItem对象的Update方法来实现数据增加。同时此对象还有一个Delete的方法,用于删除数据用。
      第四:扩展用户控件,让域用户能够查看自己的BUG数据。对于开发人员来说最理想的情况就是只显示自己的BUG数据。对于数据的查询我这里要用到SPQueyr对象的相关方法。下表是CAML查询的一些简单说明: 

元素说明
And 并且
BeginsWith 以某字符串开始的
Contains 包含某字符串
Eq 等于
FieldRef一个字段的引用 (在GroupBy 中使用)
Geq 大于等于
GroupBy 分组
Gt 大于
IsNotNull 非空
IsNull
Leq小于等于
Lt 小于
Neq 不等于
Now当前时间
Or
OrderBy 排序
Today 今天的日期
TodayIso今天的日期(ISO格式)
Where Where子句

       代码如下:

ContractedBlock.gifExpandedBlockStart.gifCode
/// <summary>
        
/// 绑定BUG数据
        
/// </summary>
        private void dbindMyBug()
        {
            SPWeb web 
= SPControl.GetContextSite(Context).RootWeb;
            SPList list 
= web.Lists[sourceList];
            SPQuery query 
= new SPQuery();
            
//检索所有的项目
            query.ViewAttributes = "Scope='RecursiveAll'";
            
string cmal ="";
            cmal 
= "<Where><Contains><FieldRef Name=\"sUser\" /><Value Type=\"User\">" + SPContext.Current.Web.CurrentUser.Name + "</Value></Contains></Where>";
            query.Query 
= cmal;
            
int i = 1;
            query.RowLimit 
= 100;
            
do
            {
                
                SPListItemCollection listItems 
= list.GetItems(query);
                DataTable dr 
= listItems.GetDataTable();
                
this.GridView1.DataSource = dr;
                
this.GridView1.DataBind();
                query.ListItemCollectionPosition 
= listItems.ListItemCollectionPosition;
               
                i
++;

            }
            
while (query.ListItemCollectionPosition != null);
        
        }

 

       上面的查询主要应用了caml查询,如对这种语言不太熟悉的话,可能利用这个工具:U2U Caml Query Builde,具体怎样操作我就不帖图了,非常容易上手,感兴趣的朋友可以去网上搜索下。值的注意的是:

          1:写caml查询语句中从Where标签开始就行,不要带上Query,因为系统在调用query.Query方法时会自己加上这个标签,如果在查询语句中包含了Qurey标签,则会出现查询结果错误的结果。

          2:query.RowLimit的意思相当于SQL中的top n,取前多少条记录的意思。这个属性在做自定义分页时会非常有用。

          3:query.ViewFields:查询结果中要显示的字段。例如:<FieldRef Name="sUser" />;

          4:query.Query:查询条件,这里可以包含分组与排序条件。

 

       总结:

              本文利用一个简单的BUG系统的部分DEMO展示了利用用户控件来操作列表数据的过程。同时包含了WSS v3核心类的介绍,用户人员和组的添加,权限分配,caml语言简介及查询示例。
 

转载于:https://www.cnblogs.com/ASPNET2008/archive/2009/01/11/1372079.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/363408.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Maven的课堂笔记4

9.Maven与MyEclipse2014结合 MyEclipse10以上的版本,对Maven支持的就比较好 9.2 Myeclipse配置 本地文件夹的C盘的.m2文件夹下必须得有这个settings.xml文件 不配置这个settings.xml文件的话,myeclipse会从互联网上下载需要的jar包. 9.3 修改pom文件 添加jar包 <project xml…

vue动画

vue 提供了一些显示、隐藏一些不同的过渡&#xff0c;效果主要跟 v-if v-show 动态组件 1. vue 给动画分了 6 个过程&#xff0c;在 css 中扮演 6 个类 .v-enter  定义动画的开始状态 .v-enter-active  定义动画生效时的状态 .v-enter-to  定义动画结束是的状态 .v-leave…

图数据库的知识表示与推理

图形数据库及其技术生态系统可以为知识表示和推理问题提供优雅&#xff0c;有效的解决方案。 要了解这种说法&#xff0c;我们必须首先了解什么是图形。 图是一种数据结构。 图数据结构的类型很多&#xff0c;但出于本文的目的&#xff0c;我们将重点介绍一种已被称为属性图的类…

vegas 为盖斯

vegas 为盖斯 S键 分割素材U键 分开视频和音频I键渲染开始O渲染结束 默认布局 为盖斯新建项目的参数 剪好后渲染 插入字幕 转载于:https://www.cnblogs.com/GaoNa/p/10562504.html

COMET彗星(三)构建自己的COMET核心

主题列表&#xff1a; COMET彗星&#xff08;一&#xff09;SERVER PUSH介绍 COMET彗星&#xff08;二&#xff09;基于SERVER PUSH的消息传输 引言&#xff1a; 在上一篇随笔中&#xff0c;对COMET使用的类和作用进行了简短的介绍&#xff0c;从本篇随笔开始&#xff0c;将从实…

如何在JavaServer Pages中使用Salesforce REST API

摘要&#xff1a;本教程提供了一个JSP示例以及如何将其与Salesforce REST API集成。 我们将逐步完成创建外部客户端以使用Force.com &#xff08;同时使用HTTP&#xff08;S&#xff09;和JSON&#xff09;管理您的数据的分步过程。 在此示例中&#xff0c;我将Mac OS X 10.9.…

写在08年“愚人节”

从博客园学了很多东西&#xff0c;是时候该回馈了。谢谢博客园给我们提供这么好的平台交流技术。 刚发了文章习惯性的看了下自己博客的首页代码&#xff0c;感觉日历不够精良。 我做过的一个ajax日历&#xff0c;可以参考解放日报 艺术家具版的日期直达功能的日历&#xff0c;用…

JQuery实现点击按钮切换图片(附源码)--JQuery基础

JQuery实现切换图片相对比较简单&#xff0c;直接贴代码了哈&#xff0c;有注释噢&#xff01;疑问请追加评论哈&#xff0c;不足之处还请大佬们指出&#xff01; 1、案例代码&#xff1a; demo.html&#xff1a; <!DOCTYPE html><html><head>   <me…

CSS3盒子模型

web前端必须了解的CSS3盒子模型 1、需要了解的属性以及属性值 display:box或者display:inline-box box-orient:horizontal | vertical (水平 垂直) 定义盒模型的布局方向 box-direction:normal reverse(正序 反序) 元素排列顺序 box-ordinal-group:number(数值) 设置元素…

与JBoss Fuse,Jenkins和Nexus的持续集成

最近&#xff0c;我正在整理一个快速启动的Maven项目&#xff0c;以展示一种组织JBoss Fuse项目的可行方法。 该项目可在Github上找到&#xff1a; https &#xff1a; //github.com/paoloantinori/fuse_ci 这是我与朋友詹姆斯罗林斯 &#xff08; James Rawlings&#xff09…

html5表单与PHP交互

1、示例代码 前端&#xff1a; <!DOCTYPE html><html><head><meta charset"utf-8"> <title>html5表单与PHP交互</title></head><body><form action"http://localhost/jh.php" method"post"…

【DP】【期望】$P1850$换教室

【DP】【期望】\(P1850\)换教室 链接 题目描述 有 \(2n\) 节课程安排在$ n$ 个时间段上。在第 \(i\)&#xff08;\(1 \leq i \leq n\)&#xff09;个时间段上&#xff0c;两节内容相同的课程同时在不同的地点进行&#xff0c;其中&#xff0c;牛牛预先被安排在教室 \(c_i\)上课…

高并发服务器逻辑处理瓶颈,如何解决?

https://mp.weixin.qq.com/s/GHHHvgURdZpNJ1Ec6RHgPg 高并发衡量指标 响应时间&#xff1a;系统对请求做出响应的时间&#xff0c;即一个http请求返回所用的时间&#xff1b;吞吐量&#xff1a;单位时间内处理的请求数量&#xff1b;QPS&#xff08;TPS&#xff09;&#xff1a…

Java 8 StampedLocks与ReadWriteLocks和同步

同步部分就像访问您的岳父母。 您希望尽可能少出现。 关于锁定&#xff0c;规则是相同的–您想花费最短的时间在关键区域内获取锁定&#xff0c;以防止形成瓶颈。 锁定的核心语言惯用法一直是用于方法和离散块的synced关键字。 这个关键字实际上已硬连接到HotSpot JVM中。 我们…

MSN on 2/16/2009

转载于:https://www.cnblogs.com/zxlin25/archive/2009/02/16/1391207.html

开发微信小程序中SSL协议的申请、证书绑定、TLS 版本处理等

在上篇随笔《基于微信小程序的系统开发准备工作》介绍了开发微信小程序的一些前期的架构设计、技术路线 、工具准备等方面内容&#xff0c;本篇随笔继续这个步骤&#xff0c;逐步介绍我们实际开发过程中对SSL协议的申请及后期处理过程&#xff0c;包括证书的IIS端口绑定&#x…

【面向对象】对比JavaScript、Go、Ada、Python、C++、Java、PHP的访问限制。

在不同编程语言中&#xff0c;控制成员&#xff08;变量、方法、类等&#xff09;可见性的机制不尽相同。以下是对比JavaScript、Go、Ada、Python、C、Java、PHP所使用的访问限制关键字和约定&#xff1a; 一、JavaScript ### JavaScript访问限制 早期的JavaScript并没有类似…

Web API应用架构设计分析(1)

Web API 是一种应用接口框架&#xff0c;它能够构建HTTP服务以支撑更广泛的客户端&#xff08;包括浏览器&#xff0c;手机和平板电脑等移动设备&#xff09;的框架&#xff0c; ASP.NET Web API 是一种用于在 .NET Framework 上构建 RESTful 应用程序的理想平台。本文主要以AS…

MapXtreme2008中操作矢量符号和定制符号

本文部分说明内容摘自网络文章&#xff0c;经过本人在MapXtreme2008中编写相关的演示例子&#xff0c;详细说明如何操作MapXtreme2008提供的矢量符号和定制符号。 MapXtreme 在其安装过程中自动安装 10 种 MapInfo 特定的 TrueType 字体。这些字体为用户提供了字形符号选择&am…

转载:97特瑞心得

单位里无聊打着玩的心得&#xff0c;写了段时间了&#xff0c;基本是哪天想到什么就打上去&#xff0c;狗屁不通的地方请大家包涵。97特瑞玩了有10年多了吧,97刚出来的时候就玩的特瑞&#xff0c;别人都八神&#xff0c;萝卜特&#xff0c;克拉克的时代我就坚持用特瑞&#xff…