在中文电子审批流程管理中的组织机构图,往往不会让我们满意,因为它和传统意义上的组织机构图不是很一样。如下图:
Microsoft.GroupBoard.EnhancedGroup的TreeView组织机构图。

风铃的JS组织机构图(WebPart):

WebPart代码:

Code
using System;
using System.Runtime.InteropServices;
using System.Text;
using System.Web.UI;
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;
using Microsoft.GroupBoard.EnhancedGroup;
namespace Simone.SharePoint.WebParts
{
[Guid("1111f20d-84f7-4a02-9010-bcb62591d96d")]
public class JSOrgChart : System.Web.UI.WebControls.WebParts.WebPart
{
#region Private Members
private SPWeb m_web;
private SPWeb TargetWeb
{
get
{
if (m_web == null)
{
m_web = SPControl.GetContextWeb(Context);
}
return m_web;
}
}
#endregion
public JSOrgChart()
{
}
protected override void CreateChildControls()
{
base.CreateChildControls();
}
protected override void Render(HtmlTextWriter writer)
{
try
{
StringBuilder sb = new System.Text.StringBuilder();
sb.Append(@"
<script type='text/javascript' src='_layouts/JSOrgChart/ECOTree.js'></script>
<script type='text/javascript' src='_layouts/JSOrgChart/wz_tooltip.js'></script>
<link type='text/css' rel='stylesheet' href='_layouts/JSOrgChart/ECOTree.css' />
<style type='text/css'>v\:*{ behavior:url(#default#VML);}</style>
<style type='text/css'>
.copy {
font-family : ""Verdana"";
font-size : 12px;
color : #CCCCCC;
}
</style>
<div id='myTreeContainer'></div>
<script language='javascript'>
var myTree = null;
function CreateTree() {
myTree = new ECOTree('myTree','myTreeContainer');
myTree.config.colorStyle = ECOTree.CS_LEVEL;
myTree.config.nodeFill = ECOTree.NF_FLAT;
myTree.config.useTarget = false;
myTree.config.selectMode = ECOTree.SL_NONE;
myTree.config.defaultNodeWidth = 120;
myTree.config.defaultNodeHeight = 40;
myTree.config.iSubtreeSeparation = 15;
myTree.config.iSiblingSeparation =5;
myTree.config.iLevelSeparation = 30;
myTree.config.expandedImage = '_layouts/JSOrgChart/img/less.gif';
myTree.config.collapsedImage = '_layouts/JSOrgChart/img/plus.gif';
myTree.config.transImage = '_layouts/JSOrgChart/img/trans.gif';");
sb.Append(AddList());
sb.AppendLine("myTree.UpdateTree(); }; CreateTree(); ");
sb.Append("</script>");
writer.Write(sb.ToString());
}
catch (Exception ex)
{
writer.Write(ex.Message + ";" + ex.StackTrace);
}
}
private StringBuilder AddList()
{
StringBuilder sb = new StringBuilder();
Organization root = new Organization(TargetWeb, "组织");
sb.Append(String.Format("myTree.add({0},-1,'{1}');", root.ID, root.Name));
sb.Append(AddSubOrgs(root));
return sb;
}
private StringBuilder AddSubOrgs(Organization top)
{
StringBuilder sb = new StringBuilder();
foreach (Organization organization in top.SubOrganizations)
{
sb.Append(String.Format("myTree.add({0},{1},'{2}');", organization.ID, organization.ParentOrganization.ID, organization.Name));
sb.Append(AddSubOrgs(organization));
}
return sb;
}
}
}
PS:
1、

Code
Organization root = new Organization(TargetWeb, "组织");这里的"组织"是你的根组织名称。当然你会问如果根组织的名称改变了怎么办?这个问题风铃会在后续补充。
2、
关于Graphic JavaScript Tree。如果你不只想显示组织名称,还想显示组织机构其他的信息。
请将

Code
sb.Append(String.Format("myTree.add({0},{1},'{2}');", organization.ID, organization.ParentOrganization.ID, organization.Name));更改为

Code
sb.Append(String.Format("myTree.add({0},{1},'", organization.ID, organization.ParentOrganization.ID));
sb.Append(String.Format(@"<span class=""econode"" style=""padding: 0px;""><a class=""ecolink"" href=""/_layouts/egedtorg.aspx?id={0}&showdeptcode=True"" target=""_new"">{1}</a></span><br />", organization.ID, organization.Name));
sb.Append(@"<table witdth=""180px""><tr><td width=""100%"" class=""econode"" style=""text-align: center;"">");
sb.Append(String.Format(@"{0}<br />{1}<br />", organization.Code, organization.Description));
sb.AppendLine("</td></tr></table>');");我想这样就差不多了。自己在Table里面添加吧。
3、
与Microsoft.GroupBoard.EnhancedGroup有什么关系?
我用了Microsoft.GroupBoard.EnhancedGroup里面的Organization类,并利用Organization.SubOrganizations属性作了一个递归函数。(同事和我说用递归函数不好,会影响效率,
可是我早就忘记了把递归函数改成非递归函数的算法了)。
4、
"_layouts/JSOrgChart/"这个文件夹在哪里?
如果您有这个疑问的话,那我很明确的告诉您C:\Program Files\Common Files\microsoft shared\Web Server Extensions\12\TEMPLATE\LAYOUTS
当然风铃建议在做SharePoint开发时,LAYOUTS文件夹最好放在C:\inetpub\wwwroot\wss\VirtualDirectories\[端口]下,当然你需要在IIS中更改[端口]网站的虚拟目录_LAYOUTS的物理路径。
JSOrgChart内文件打包下载:http://files.cnblogs.com/windbell/JSOrgChart.rar