JS:
<script type="text/javascript" src="js/jquery/jquery-2.1.4.min.js"></script>
<link rel="stylesheet" href="myPlugin/bootstrap/css/bootstrap.min.css" />
<script type="text/javascript" src="myPlugin/bootstrap/js/bootstrap.min.js"></script>
<link rel="stylesheet" href="myPlugin/bootstrap-table/bootstrap-table.min.css" />
<script type="text/javascript" src="myPlugin/bootstrap-table/bootstrap-table.min.js"></script>
<script type="text/javascript" src="myPlugin/bootstrap-table/locale/bootstrap-table-zh-CN.min.js"></script>
<script type="text/javascript">
$(function () {
GetTable();
})
//加载表格数据
function GetTable() {
$('#table').bootstrapTable({
method: 'get',
url: 'myContacts.ashx',
cache: false,
striped: true,
pagination: true,
dataType: "json",
pageList: [10, 20, 50, 100, 200],
pageSize: 10,
pageNumber: 1,
search: true,
sidePagination: 'server',
showColumns: true,
minimumCountColumns: 2,
clickToSelect: true,
showToggle: true,
columns: [{
field: 'Useraccount',
title: '账号',
visible: false,
sortable: true
},
{
field: 'Username',
title: '姓名',
sortable: true
}, {
field: 'Userdepartment',
title: '部门',
sortable: true
}, {
field: 'Usertitle',
title: '职务',
sortable: true
}, {
field: 'Usermobile',
title: '手机',
sortable: true
}, {
field: 'UsertelephoneNumber',
title: '电话',
sortable: true
}, {
field: 'Usermail',
title: '邮箱',
sortable: true
}, {
field: 'Userstate',
title: '状态',
visible: false,
sortable: true
}],
});
}
//刷新
function EnterpriseContactsRefresh() {
$('#table').bootstrapTable('refresh', {
url: 'myContacts.ashx',
query: { foo: 'r' }
});
}
</script>
HTML:
<div id="custom-toolbar" style="float: right; margin-top: 9px;">
<button name="refresh" title="刷新" class="btn btn-default" type="button" οnclick="EnterpriseContactsRefresh()">
<i class="glyphicon glyphicon-refresh icon-refresh"></i>
</button>
</div>
<table id="table"></table>
myContacts.ashx:
using System;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web;
namespace Test
{
/// <summary>
/// myContacts的摘要说明
/// </summary>
public class myContacts : IHttpHandler
{
public void ProcessRequest(HttpContext context)
{
var json = CommonMethod.GetContacts(context);
context.Response.ContentType = "application/json";
context.Response.Write(json);
}
public bool IsReusable
{
get
{
return true;
}
}
}
}
CommonMethod.cs
using System;
using System.Collections.Generic;
using System.DirectoryServices;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Web;
using System.Web.Script.Serialization;
namespace Test
{
/// <summary>
/// 通讯录用户属性
/// </summary>
public class ColProperty
{
/// <summary>
/// 账号
/// </summary>
public string Useraccount { get; set; }
/// <summary>
/// 姓名
/// </summary>
public string Username { get; set; }
/// <summary>
/// 部门
/// </summary>
public string Userdepartment { get; set; }
/// <summary>
/// 职位
/// </summary>
public string Usertitle { get; set; }
/// <summary>
/// 手机
/// </summary>
public string Usermobile { get; set; }
/// <summary>
/// 座机
/// </summary>
public string UsertelephoneNumber { get; set; }
/// <summary>
/// 邮箱
/// </summary>
public string Usermail { get; set; }
/// <summary>
/// 状态
/// </summary>
public string Userstate { get; set; }
}
/// <summary>
/// 要返回的所有通讯录用户对象
/// </summary>
public class JsonObj
{
public List<ColProperty> rows { get; set; }
public int total { get; set; }
}
public class CommonMethod
{
#region 企业通讯录
/// <summary>
/// 储存所有用户对象
/// </summary>
public static List<ColProperty> ColArray = new List<ColProperty>();
/// <summary>
/// 获取企业通讯录
/// </summary>
/// <param name="context">HttpContext</param>
/// <returns>Json格式用户对象</returns>
public static string GetContacts(HttpContext context)
{
var json = "";
try
{
string order = context.Request.QueryString["order"];// asc desc
string limit = context.Request.QueryString["limit"];//每页显示数量
string offset = context.Request.QueryString["offset"];//从第几项开始
string search = context.Request.QueryString["search"];//搜索关键字
string sort = context.Request.QueryString["sort"];//排序的字段
string foo = context.Request.QueryString["foo"];//刷新
if (ColArray.Count == 0 || (foo != null && foo == "r"))//需要从AD中读取数据
{
ColArray = new List<ColProperty>();
GetUserFromAD(ADHelper.deRoot.Children);//获得AD里的所有用户
}
json = GetAllUser(order, limit, offset, search, sort);
}
catch (Exception)
{
json = "[]";
throw;
}
return json;
}
/// <summary>
/// 获取所有用户
/// </summary>
/// <param name="order">正序/倒序</param>
/// <param name="limit">每页显示多少个</param>
/// <param name="offset">从第几个开始</param>
/// <param name="search">搜索关键字</param>
/// <param name="sort">排序字段</param>
/// <returns></returns>
private static string GetAllUser(string order, string limit, string offset, string search, string sort)
{
int i_limit = int.Parse(limit);
int i_offset = int.Parse(offset);
int count = ColArray.Count;
List<ColProperty> UserArray = ColArray;
if (search != null && search != "")
{
UserArray = ColArray.FindAll(delegate(ColProperty cp)//根据关键字搜索筛选
{
return cp.Useraccount.Contains(search) || cp.Username.Contains(search) || cp.Userdepartment.Contains(search) || cp.Usertitle.Contains(search) || cp.Usermobile.Contains(search) || cp.UsertelephoneNumber.Contains(search) || cp.Usermail.Contains(search) || cp.Userstate.Contains(search);
});
count = UserArray.Count;
}
if (i_limit + i_offset > UserArray.Count)
{
i_limit = UserArray.Count - i_offset;
}
UserArray = UserArray.GetRange(i_offset, i_limit);//根据页数筛选
if (sort != null)//根据某个字段排序
{
UserArray = SortArray(order, sort, UserArray);
}
JsonObj obj = new JsonObj() { rows = UserArray, total = count };
JavaScriptSerializer jss = new JavaScriptSerializer();
var json = jss.Serialize(obj);
return json;
}
/// <summary>
/// 遍历DirectoryEntry获取所有用户
/// </summary>
/// <param name="des">DirectoryEntries</param>
public static void GetUserFromAD(DirectoryEntries des)
{
foreach (DirectoryEntry deUser in des)
{
if (deUser.Properties["cn"].Value != null)
{
string Useraccount = "";
string Username = "";
string Userdepartment = "";
string Usertitle = "";
string Usermobile = "";
string UsertelephoneNumber = "";
string Usermail = "";
string Userstate = "禁用";
Useraccount = deUser.Properties["sAMAccountName"].Value.ToString();
Username = deUser.Properties["cn"].Value.ToString();
if (deUser.Properties["department"].Value != null)
{
Userdepartment = deUser.Properties["department"].Value.ToString();
}
if (deUser.Properties["title"].Value != null)
{
Usertitle = deUser.Properties["title"].Value.ToString();
}
if (deUser.Properties["mobile"].Value != null)
{
Usermobile = deUser.Properties["mobile"].Value.ToString();
}
if (deUser.Properties["telephoneNumber"].Value != null)
{
UsertelephoneNumber = deUser.Properties["telephoneNumber"].Value.ToString();
}
if (deUser.Properties["mail"].Value != null)
{
Usermail = deUser.Properties["mail"].Value.ToString();
}
if (deUser.Properties["userAccountControl"].Value.ToString() == "512")
{
Userstate = "启用";
}
ColProperty cp = new ColProperty() { Useraccount = Useraccount, Username = Username, Userdepartment = Userdepartment, Usertitle = Usertitle, Usermobile = Usermobile, UsertelephoneNumber = UsertelephoneNumber, Usermail = Usermail, Userstate = Userstate };
if (!ColArray.Contains(cp))
{
ColArray.Add(cp);
}
}
if (deUser.Children != null)
{
GetUserFromAD(deUser.Children);
}
}
}
/// <summary>
/// 对List进行排序
/// </summary>
/// <param name="order">正序/倒序</param>
/// <param name="sort">排序字段</param>
/// <param name="UserArray">List</param>
/// <returns>List</returns>
private static List<ColProperty> SortArray(string order, string sort, List<ColProperty> UserArray)
{
if (order == "asc")
{
switch (sort)
{
case "Useraccount":
UserArray = UserArray.OrderBy(cp => cp.Useraccount).ToList<ColProperty>();
break;
case "Username":
UserArray = UserArray.OrderBy(cp => cp.Username).ToList<ColProperty>();
break;
case "Userdepartment":
UserArray = UserArray.OrderBy(cp => cp.Userdepartment).ToList<ColProperty>();
break;
case "Usertitle":
UserArray = UserArray.OrderBy(cp => cp.Usertitle).ToList<ColProperty>();
break;
case "Usermobile":
UserArray = UserArray.OrderBy(cp => cp.Usermobile).ToList<ColProperty>();
break;
case "UsertelephoneNumber":
UserArray = UserArray.OrderBy(cp => cp.UsertelephoneNumber).ToList<ColProperty>();
break;
case "Usermail":
UserArray = UserArray.OrderBy(cp => cp.Usermail).ToList<ColProperty>();
break;
case "Userstate":
UserArray = UserArray.OrderBy(cp => cp.Userstate).ToList<ColProperty>();
break;
}
}
else
{
switch (sort)
{
case "Useraccount":
UserArray = UserArray.OrderByDescending(cp => cp.Useraccount).ToList<ColProperty>();
break;
case "Username":
UserArray = UserArray.OrderByDescending(cp => cp.Username).ToList<ColProperty>();
break;
case "Userdepartment":
UserArray = UserArray.OrderByDescending(cp => cp.Userdepartment).ToList<ColProperty>();
break;
case "Usertitle":
UserArray = UserArray.OrderByDescending(cp => cp.Usertitle).ToList<ColProperty>();
break;
case "Usermobile":
UserArray = UserArray.OrderByDescending(cp => cp.Usermobile).ToList<ColProperty>();
break;
case "UsertelephoneNumber":
UserArray = UserArray.OrderByDescending(cp => cp.UsertelephoneNumber).ToList<ColProperty>();
break;
case "Usermail":
UserArray = UserArray.OrderByDescending(cp => cp.Usermail).ToList<ColProperty>();
break;
case "Userstate":
UserArray = UserArray.OrderByDescending(cp => cp.Userstate).ToList<ColProperty>();
break;
}
}
return UserArray;
}
#endregion
}
}
ADHelper.cs:
using System;
using System.Collections.Generic;
using System.DirectoryServices;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Test
{
public class ADHelper
{
/// <summary>
/// ldap用户
/// </summary>
public static string ldap = "LDAP://127.0.0.1/OU=测试组织机构,DC=abcd,DC=com";
/// <summary>
/// AD管理员用户名
/// </summary>
public static string winuser = "administrator";
/// <summary>
/// AD管理员密码
/// </summary>
public static string winpwd = "**********";
/// <summary>
/// 根对象
/// </summary>
public static DirectoryEntry deRoot = new DirectoryEntry(ldap, winuser, winpwd, AuthenticationTypes.Secure);
/// <summary>
///查找并返回对象,查找范围包括参数ldap下的所有对象
/// </summary>
/// <param name="objectName">名称</param>
/// <param name="catalog">类型(OU、Group、User)</param>
/// <param name="t_ldap">ldap</param>
/// <returns>是否存在</returns>
public static DirectoryEntry ObjectExist(string objectName, string catalog, string t_ldap)
{
try
{
DirectoryEntry de = new DirectoryEntry(t_ldap, winuser, winpwd, AuthenticationTypes.Secure); ;
DirectorySearcher deSearch = new DirectorySearcher();
deSearch.SearchRoot = de;
switch (catalog)
{
case "User": deSearch.Filter = "(&(objectClass=user) (cn=" + objectName + "))"; break;
case "Group": deSearch.Filter = "(&(objectClass=group) (cn=" + objectName + "))"; break;
case "OU": deSearch.Filter = "(&(objectClass=OrganizationalUnit) (OU=" + objectName + "))"; break;
case "UserD": deSearch.Filter = "(&(objectClass=user) (distinguishedName=" + objectName + "))"; break;
default: break;
}
de.Close();
SearchResultCollection results = deSearch.FindAll();
if (results.Count == 0)
{
return null;
}
else
{
return results[0].GetDirectoryEntry();//返回找到的对象
}
}
catch (Exception ex)
{
return null;
throw ex;
}
}
}
}