[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并指給相應的開發員解決。最終的頁面展示如下圖。
?????????? 1:綁定解決人員數據,代碼如下。
?
Code
///?<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,返回結果:姜敏,如果當前用戶是系統帳戶的話會顯示成系統帳戶,這顯示是我們希望看到的結果。
Codetry
????????????{
???????????????
????????????????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子句 |
?????? 代碼如下:
Code///?<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
總結
以上是生活随笔為你收集整理的[MOSS开发]:通过简单BUG跟踪Demo阐述用户控件对列表的操作的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: SQL2005-使用openrowset
- 下一篇: 解决win2003安装exchangeS