Sharepoint中用treeview来显示组织机构的人员状态的webpart

     

ContractedBlock.gif ExpandedBlockStart.gif 列表项在列表之间的拷贝
 /// <summary>
        
/// 列表项在列表之间的拷贝
        
/// </summary>
        
/// <param name="sourceItem"></param>
        
/// <param name="destinationListName"></param>
        
/// <returns></returns>
        public static SPListItem CopyItem(SPListItem sourceItem, string destinationListName)
        {
            
//copy sourceItem to destinationList
            SPList destinationList = sourceItem.Web.Lists[destinationListName];
            SPListItem targetItem 
= destinationList.Items.Add();
            
foreach (SPField f in sourceItem.Fields)
            {
                
if (!f.ReadOnlyField && f.InternalName != "Attachments")
                {
                    targetItem[f.InternalName] 
= sourceItem[f.InternalName];
                }
            }
            
//copy attachments
            foreach (string fileName in sourceItem.Attachments)
            {
                SPFile file 
= sourceItem.ParentList.ParentWeb.GetFile(sourceItem.Attachments.UrlPrefix + fileName);
                
byte[] imageData = file.OpenBinary();
                targetItem.Attachments.Add(fileName, imageData);
            }
            targetItem.Update();
            
return targetItem;
        }

 

ContractedBlock.gif ExpandedBlockStart.gif 获取一个网站的文件系统结构的递归函数
 /// <summary>
        
/// 获取一个网站的文件系统结构的递归函数
        
/// </summary>
        
/// <param name="myFolder"></param>
        
/// <param name="level"></param>
        public void GetFolderFiles(SPFolder myFolder, string level)
        {
            
try
            {
                
string tempItem = myFolder.Item.Name;
                
if (myFolder.ContainingDocumentLibrary != Guid.Empty)
                {
                    Console.WriteLine(level 
+ myFolder.Name + "(我是文档库文件夹)");
                }
                
else
                {
                    Console.WriteLine(level 
+ myFolder.Name + "(我是列表库文件夹)");
                }
            }
            
catch
            {
                Console.WriteLine(level 
+ myFolder.Name + "(我是网站普通文件夹)");
            }
            
foreach (SPFile myFile in myFolder.Files)
            {
                Console.WriteLine(level 
+ " " + myFile.Name);
            }
            
foreach (SPFolder mySubFolder in myFolder.SubFolders)
            {
                GetFolderFiles(mySubFolder, level 
+ " ");
            }
        }

 

      使用.net操作AD域的一些代码共享

      http://blog.lickies.cn/Lists/Posts/Post.aspx?List=34201ce7%2Dcc0e%2D452a%2D949a%2Dffcf74a1780a&ID=6

      AD认证模式下如何通过表单登录来代替WINDOWS弹出窗口的方法

      http://blog.lickies.cn/Lists/Posts/Post.aspx?List=34201ce7%2Dcc0e%2D452a%2D949a%2Dffcf74a1780a&ID=4&Source=http%3A%2F%2Fblog%2Elickies%2Ecn%2FLists%2FPosts%2FAllPosts%2Easpx

      目前做的一个项目有一个需求,就是客户要求一级子部门有自己的网站,网站要求显示成员和子部门的成员,用树结构来显示。

      同时客户还有一些横向的组织,就是例如卫生工作小组、防火工作小组之类的,抽取组织结构中的人员来组成,要求这些小组也有自己的网站,网站同样显示人员状态,这里就不用树形了,因为只有一级的关系。

      定义两个内容类型:一个用来放组织结构或者工作组,继承文件夹SPFolder;一个代表人员,有一个栏目的类型为SPUser,代表这个人在网站中的信息

 

      还发现了一个细节的地方,SP的细节地方真是多啊,一不小心就掉进陷阱了。

      今天发现的就是SPFolder,SPWeb.GetFolder()和list.RootFolder.SubFolders[]取出来的SPFolder不是一样的,前者的SPFolder是孤立的,没有ParentFolder和SubFolders,这两个值都是"",后者获取的SPFolder是可以获取前后关系的。

      效果如下图

 

图1  组织结构用户图

图2  工作小组用户图

 

 

      代码如下

      

      

ContractedBlock.gif ExpandedBlockStart.gif WorkGroupMember WebPart
using System;
using System.Runtime.InteropServices;
using System.Web.UI;
using System.Collections.Generic;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Serialization;
using System.ComponentModel;

using Microsoft.SharePoint;
using Microsoft.SharePoint.WebControls;
using Microsoft.SharePoint.WebPartPages;

namespace Kimbanx.UCS.WorkGroupMemberInfo
{
    [Guid(
"a54de6b6-6626-4e10-87d8-d402db923d11")]
    
public class WorkGroupMember : System.Web.UI.WebControls.WebParts.WebPart
    {
        
private TreeView tv;
        
private string spsiteUrl;
        [WebBrowsable,
        Personalizable (PersonalizationScope.Shared ),
        Category(
"设置"),
        WebDescription(
"SPSiteUrl"),
        WebDisplayName(
"SPSiteUrl")]
        
public string SPSiteUrl
        {
            
get { return this.spsiteUrl; }
            
set { this.spsiteUrl = value; }
        }
        
private string domainUrl;
        [WebBrowsable,
        Personalizable(PersonalizationScope.Shared),
        Category(
"设置"),
         WebDescription(
"SPDomainUrl"),
         WebDisplayName(
"SPDomainUrl")]
        
public string SPDomainUrl
        {
            
get { return this.domainUrl; }
            
set { this.domainUrl = value; }
        }
        
private string spwebUrl;
        [WebBrowsable,
        Personalizable(PersonalizationScope.Shared),
        Category(
"设置"),
         WebDescription(
"SPWebUrl"),
         WebDisplayName(
"SPWebUrl")]
        
public string SPWebUrl
        {
            
get { return this.spwebUrl; }
            
set { this.spwebUrl = value; }
        }
        
private string isWGOrOUMember;
        [WebBrowsable,
        Personalizable(PersonalizationScope.Shared),
        Category(
"设置"),
        WebDescription(
"显示部门成员还是组织机构成员,1显示部门成员,2显示组织机构成员"),
        WebDisplayName(
"显示部门成员还是组织机构成员,1显示部门成员,2显示组织机构成员")]
        
public string IsWGOrOUMember
        {
            
get { return this.isWGOrOUMember; }
            
set { this.isWGOrOUMember = value; }
        }
        
private string listName;
        [WebBrowsable,
        Personalizable(PersonalizationScope.Shared),
        Category(
"设置"),
         WebDescription(
"存放部门或者组织机构的列表名称"),
         WebDisplayName(
"存放部门或者组织机构的列表名称")]
        
public string ListName
        {
            
get { return this.listName; }
            
set { this.listName = value; }
        }
        
private string ouOrWGName;
        [WebBrowsable,
        Personalizable(PersonalizationScope.Shared),
        Category(
"设置"),
        WebDescription(
" 一级部门或者组织机构的名称"),
        WebDisplayName(
"一级部门或者组织机构的名称")]
        
public string OuOrWGName
        {
            
get { return this.ouOrWGName; }
            
set { this.ouOrWGName = value; }
        }
        
private int  swb;
        [WebBrowsable,
        Personalizable(PersonalizationScope.Shared),
        Category(
"设置"),
        WebDescription(
"学校测试用"),
        WebDisplayName(
"学校测试用")]
        
public int  SWB
        {
            
get { return this.swb; }
            
set { this.swb = value; }
        }

        
public WorkGroupMember()
        {
            tv 
= new TreeView();
            
        }
        
/// <summary>
        
/// 获取部门全部成员,包括子部门成员
        
/// 同时添加成员
        
/// </summary>
        
/// <param name="title">部门标题</param>
        
/// <returns>部门全部成员,包括子部门成员的集合</returns>
        private void  getOUMembers(SPSite spsite,SPWeb spweb,SPList  ouList,SPFolder topFolder,TreeNode node)
        {
            TreeNode currOUNode;
                
                    spweb.Lists.IncludeRootFolder 
= true;

                    SPFolder folder 
=topFolder;

                    SPQuery query 
= new SPQuery();
                    query.Folder 
= folder;
                    query.Query 
= @"<Where>                                      <Eq>
                                         <FieldRef Name='ContentType' />
                                        <Value Type='Choice'>Employee</Value>
                                      </Eq>
                                  </Where>
";
                    query.ViewFields 
= "<FieldRef Name='Employee' /><FieldRef Name='Job' />";
                    SPListItemCollection  items 
= ouList.GetItems(query);
            
                    
foreach (SPListItem item in items)
                    {
                        node.ChildNodes. Add(
new TreeNode(  item.GetFormattedValue("Job")+": "+item.GetFormattedValue("Employee")));
                    }
                    
if (folder.SubFolders.Count > 0)
                    {
                        
foreach(SPFolder f in folder.SubFolders)
                        {
                            currOUNode 
= new TreeNode(f.Name,f.Name ,@"_LAYOUTS\2052\IMAGES\gfdx\OUImage.jpg");
                            node.ChildNodes.Add(currOUNode);
                            getOUMembers(spsite, spweb, ouList, f, currOUNode);
                        }
                    }
        }
        
/// <summary>
        
/// 获取部门SPFolder
        
/// </summary>
        
/// <param name="spsite"></param>
        
/// <param name="spweb"></param>
        
/// <param name="splist"></param>
        
/// <param name="topFolder"></param>
        
/// <param name="title"></param>
        
/// <returns></returns>
        private SPFolder GetTopFolder(SPSite spsite, SPWeb spweb, SPList splist,SPFolder topFolder,string title)
        {
            SPFolder returnFolder 
= null ;

            
bool isTopFolder = false;
            
foreach (SPFolder f in topFolder. SubFolders)
            {
                
if (f.Name.Equals(ouOrWGName))
                {
                    returnFolder 
= f;
                    
return returnFolder;
                }
            }
            
if (returnFolder == null)
            {
                
foreach (SPFolder f in topFolder.SubFolders)
                {
                    returnFolder 
= GetTopFolder(spsite, spweb, splist, f, title);
                    
if (returnFolder != null)
                       
return returnFolder;
                }
            }
            
//returnFolder = splist.RootFolder.SubFolders[0].SubFolders[title];
            return returnFolder;
        }
        
protected override void CreateChildControls()
        {
            
base.CreateChildControls();

            tv.Nodes.Clear();
            
try
            {
                
using (SPSite site = new SPSite(spsiteUrl ))
                {
                    
using (SPWeb web = site.AllWebs[spwebUrl ])
                    {

                        web.Lists.IncludeRootFolder 
= true;

                        
if (isWGOrOUMember.Equals("1"))
                        {
                            
#region 显示一级部门成员
                            SPList ouList 
= web.Lists[listName];

                            SPFolder topFolder
= GetTopFolder(site, web, ouList, ouList.RootFolder,ouOrWGName );
                            TreeNode ouNode 
= new TreeNode(ouOrWGName,ouOrWGName, @"_LAYOUTS\2052\IMAGES\gfdx\WGImage.jpg");
                            tv.Nodes.Add(ouNode);
                            getOUMembers(site, web, ouList, topFolder,ouNode );


                            
#endregion
                        }
                        
else if (isWGOrOUMember.Equals("2"))
                        {

                            
#region 显示组织机构成员
                            SPList ouList 
= web.Lists[listName];

                            SPFolder folder 
= ouList.RootFolder.SubFolders[ouOrWGName];

                            TreeNode WGNode 
= new TreeNode(ouOrWGName, ouOrWGName, @"_LAYOUTS\2052\IMAGES\gfdx\WGImage.jpg");
                            tv.Nodes.Add(WGNode );

                            SPQuery query 
= new SPQuery();
                            query.Folder 
= folder;
                            query.Query 
= @"<Where>                                      <Eq>
                                         <FieldRef Name='ContentType' />
                                        <Value Type='Choice'>WGMember</Value>
                                      </Eq>
                                  </Where>
";
                            query.ViewFields 
= "<FieldRef Name='WGMemberWGDuty' /><FieldRef Name='WGMemberName' /><FieldRef Name='WGMemberDuty' />";
                            SPListItemCollection items 
= ouList.GetItems(query);
                            
foreach (SPListItem item in items)
                            {

                                tv.Nodes[
0].ChildNodes.Add(new TreeNode(item.GetFormattedValue("WGMemberWGDuty"+ " " + item.GetFormattedValue("WGMemberName"+ "职务:" +
                                    item.GetFormattedValue(
"WGMemberDuty")));
                            }
                           
                            
#endregion
                        }
                         
this.Controls.Add(tv);
                    }
                }
            }
            
catch (Exception ex)
            {
                
this.Controls.Add(new LiteralControl("请注意设置中的输入数据格式,错误提示:"+ex.Message));
            }
        }
    }
}

 

 

       顺便在给大家贴上一段TreeViewDocLib,树形文档库的WebPart,网上找到的,也很好用。

 

 

 

ContractedBlock.gif ExpandedBlockStart.gif TreeViewDocLibWebPart
using System;
using System.Runtime.InteropServices;
using System.Web.UI;
using System.Collections.Generic;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Serialization;

using Microsoft.SharePoint;
using Microsoft.SharePoint.WebControls;
using Microsoft.SharePoint.WebPartPages;

namespace Kimbanx.UCS.TreeViewDocLib
{
    [Guid(
"b1882c89-e0da-4727-a414-c5622bfb1df3")]
    
public class TreeViewDocLib : System.Web.UI.WebControls.WebParts.WebPart, IWebEditable
    {
        
public System.Web.UI.WebControls.TreeView trv = new System.Web.UI.WebControls.TreeView();
        
private TreeNode rNode;
        
private SPWeb _web;
        
private SPSite _site;
        
private SPList _list;

        
public TreeViewDocLib()
        {
            
this.ExportMode = System.Web.UI.WebControls.WebParts.WebPartExportMode.All;
        }

        
private string strLibName;
        
private bool wpConfigured;

        
// Property to Assign _site library Name from Toolpart
        [WebBrowsable(true)]
        
public string LibraryName
        {
            
get
            {
                
return strLibName;
            }
            
set
            {
                strLibName 
= value;
            }
        }

        
protected override void Render(HtmlTextWriter writer)
        {
            
// TODO: add custom rendering code here.
            
// writer.Write("Output HTML");
        }

        
protected override void CreateChildControls()
        {
            
// Verifying whether the WebPart is Configured in ToolPart
            if (!string.IsNullOrEmpty(LibraryName))
            {
                wpConfigured 
= true;
            }

            
if (wpConfigured)
            {
                
//Creating the Instance of SPSite & SPWeb to open the _site
                _site = SPContext.Current.Site;
                _web 
= _site.OpenWeb();

                
// Fetching the Library Object from _site
                _list = _web.Lists[LibraryName];

                
// To Display Lines
                trv.ShowLines = true;

                
// Passing Root Node as the Parameter to Recursive Function
                rNode = new System.Web.UI.WebControls.TreeNode(_list.RootFolder.Name);
                TraverseFolder(_list.RootFolder, rNode);

                
// Adding the Root Node to Tree View
                trv.Nodes.Add(rNode);
                
this.Controls.Add(trv);
            }
        }

        
protected override void RenderContents(HtmlTextWriter writer)
        {

        }

        
public override void RenderControl(HtmlTextWriter writer)
        {
            
//Rendering the Controls in WebPart Based on the Config
            if (wpConfigured)
                trv.RenderControl(writer);
            
else
                writer.Write(
"<strong>Please Configure the Library Name in WebPart</strong>");
        }

        
public void TraverseFolder(SPFolder folder, TreeNode node)
        {
            
            TreeNode tNode 
= new System.Web.UI.WebControls.TreeNode(folder.Name);
            
try
            {
                
if (folder.Name != "Forms")
                {
                    
// Looping all Folders in Current Folder
                    foreach (SPFolder fldr in folder.SubFolders)
                    {
                        
if (fldr.Name != "Forms")
                        {
                            TreeNode trn 
= new System.Web.UI.WebControls.TreeNode(fldr.Name);
                            tNode 
= TraverseFiles(fldr, trn);
                            
//trv.Nodes.Add(tNode);
                            rNode.ChildNodes.Add(tNode);
                        }
                    }

                    
// Adding Files to the Tree Node
                    foreach (SPFile file in folder.Files)
                    {
                        TreeNode trnChild 
= new System.Web.UI.WebControls.TreeNode(file.Name, """~/_layouts/images/" + file.IconUrl, file.ServerRelativeUrl.ToString(), "");
                        rNode.ChildNodes.Add(trnChild);
                    }
                }
            }

            
catch (Exception e)
            {
                Console.WriteLine(e.Message);
            }
        }


        
public TreeNode TraverseFiles(SPFolder fldr, TreeNode node)
        {
            
try
            {
                
// Adding Files in the Current Folder
                foreach (SPFile file in fldr.Files)
                {
                    TreeNode trnChild 
= new System.Web.UI.WebControls.TreeNode(file.Name, """~/_layouts/images/" + file.IconUrl, file.ServerRelativeUrl.ToString(), "");
                    node.ChildNodes.Add(trnChild);
                }

                
// To Verify the Count of Sub Folders in Current Folder
                bool bRecurseFolders = fldr.SubFolders.Count > 0 ? true : false;

                
// If It has SubFolders Then it will call the Function Recursively
                if (bRecurseFolders)
                {
                    
for (int i = 0; i < fldr.SubFolders.Count; i++)
                    {
                        TreeNode trnChild 
= new System.Web.UI.WebControls.TreeNode(fldr.SubFolders[i].Name);
                        node.ChildNodes.Add(TraverseFiles(fldr.SubFolders[i], trnChild));
                    }
                }
            }
            
catch (Exception e)
            {
                Console.WriteLine(e.Message);
            }
            
return node;
        }

        
// Creating the ToolPart with the WebPart
        #region IWebEditable Members
        EditorPartCollection IWebEditable.CreateEditorParts ()
        {
            List
<EditorPart> editors = new List<EditorPart>();
            editors.Add(
new TreeViewEditorPart());
            
return new EditorPartCollection(editors);
        }

        
object IWebEditable.WebBrowsableObject 
        {
            
get { return this; }
        }
        
#endregion
    }
}

 

 

 

ContractedBlock.gif ExpandedBlockStart.gif TreeViewEditorPart
using System;
using System.Collections.Generic;
using System.Text;

using System.ComponentModel;
using System.Web;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using Kimbanx.UCS.TreeViewDocLib;

namespace Kimbanx.UCS.TreeViewDocLib
{
    
public class TreeViewEditorPart : EditorPart
    {
        TextBox m_txtSiteURL;
        TextBox m_txtLibName;

        
public TreeViewEditorPart()
        {
            
this.ID = "TreeViewEditorPart";
            
this.Title = "UdayEth WebControls";
        }

        
// This Function will be Triggered When the Apply or OK button Clicked in ToolPart
        public override bool ApplyChanges()
        {
            TreeViewDocLib  part 
= WebPartToEdit as TreeViewDocLib;
            
if (part != null)
            {
                part.LibraryName 
= m_txtLibName.Text;
                
return true;
            }
            
return true;
        }

        
// This Function will be Triggered when the Task Pane of the WebPart is Opened
        public override void SyncChanges()
        {
            EnsureChildControls();
            TreeViewDocLib part 
= WebPartToEdit as TreeViewDocLib;
            
if (part != null)
            {
                m_txtLibName.Text 
= part.LibraryName;
            }
        }

        
protected override void CreateChildControls()
        {
            
// Create new panel for ToolPart
            Panel userSectionBody = new Panel();

            m_txtLibName 
= new TextBox();
            Label lblLibName 
= new Label();
            lblLibName.Text 
= "Document Library Name";

            
// Adding Site Library Name to Panel
            userSectionBody.Controls.Add(lblLibName);
            userSectionBody.Controls.Add(
new LiteralControl("<BR>"));
            userSectionBody.Controls.Add(m_txtLibName);

            Controls.Add(userSectionBody);
        }

        
protected override void RenderContents(HtmlTextWriter writer)
        {
            
// Rendering Tool Part Pane
            writer.WriteLine("<b>Udayakumar Ethirajulu[SharePoint MVP]</b>");
            
base.RenderContents(writer);
        }
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值