Business Unit Helper

using System;
using System.Linq;
using Microsoft.Xrm.Sdk;
using Microsoft.Crm.Sdk.Messages;
using System.Collections.Generic;
using Microsoft.Xrm.Sdk.Messages;

/// <summary>
/// 操作业务部门
/// </summary>
public class BusinessUnitHelper
{
    public static readonly string entityName = "businessunit";
    public Guid businessunitId = Guid.Empty;

    /// <summary>
    /// 创建业务部门
    /// </summary> 
    public void CreateUnit(IOrganizationService service)
    {
        Entity en = new Entity() { LogicalName = entityName };
        en["name"] = "软件开发部";
        businessunitId = service.Create(en);
    }

    /// <summary>
    /// 修改业务部门
    /// </summary> 
    public void UpdateUnit(IOrganizationService service)
    {
        Entity en = new Entity() { LogicalName = entityName, Id = businessunitId };
        en["name"] = "软件开发事业部";
        service.Update(en);
    }

    /// <summary>
    /// 设置业务部门的上级部门
    /// </summary>
    /// <param name="service">服务</param>
    /// <param name="parentId">上级业务部门id</param>
    public void SetParentBusinessUnit(IOrganizationService service, Guid parentId)
    {
        SetParentBusinessUnitRequest request = new SetParentBusinessUnitRequest();
        //当前业务部门id
        request.BusinessUnitId = businessunitId;
        //上级业务部门id
        request.ParentId = parentId;
        service.Execute(request);
    }

    /// <summary>
    /// 检索业务部门层次结构中的所有业务部门
    /// </summary> 
    public void SearchBusinessUnit(IOrganizationService service)
    {
        RetrieveBusinessHierarchyBusinessUnitRequest request = new RetrieveBusinessHierarchyBusinessUnitRequest();
        request.EntityId = businessunitId;
        request.ColumnSet = new Microsoft.Xrm.Sdk.Query.ColumnSet("name", "parentbusinessunitid");
        RetrieveBusinessHierarchyBusinessUnitResponse response =
            (RetrieveBusinessHierarchyBusinessUnitResponse)service.Execute(request);
        if (response != null && response.EntityCollection != null)
        {
            List<BusinessUnit> list = new List<BusinessUnit>();
            EntityCollection ecResult = response.EntityCollection;
            int index = 1;
            #region 获取所有的部门
            foreach (Entity en in ecResult.Entities)
            {
                BusinessUnit unitE = new BusinessUnit();
                unitE.businessUnitId = en.Id;
                unitE.name = en.Contains("name") && en["name"] != null ? en["name"].ToString() : string.Empty;
                if (en.Contains("parentbusinessunitid") && en["parentbusinessunitid"] != null)
                {
                    EntityReference parEr = en["parentbusinessunitid"] as EntityReference;
                    unitE.parentBusinessUnitId = parEr.Id;
                }
                unitE.order = index;

                list.Add(unitE);
                index++;
            }
            #endregion
            #region 重置业务部门的顺序
            foreach (BusinessUnit model in list)
            {
                var result = list.Where(a => a.parentBusinessUnitId == a.businessUnitId);
                if (result != null && result.Count() > 0)
                {
                    var parModel = result.FirstOrDefault();
                    if (model.order + 1 != parModel.order)
                    {
                        parModel.order = model.order + 1;
                    }
                }
            }
            #endregion
        }
    }

    public class BusinessUnit
    {
        public Guid businessUnitId { get; set; }
        public string name { get; set; }
        public Guid parentBusinessUnitId { get; set; }
        public int order { get; set; }
    }

    /// <summary>
    /// 添加用户或者移除用户
    /// </summary>
    /// <param name="service">服务</param>
    /// <param name="userId">用户</param>
    public void AddAndRemoveUser(IOrganizationService service, Guid userId)
    {
        //添加用户
        AddConnection(service, "business_unit_system_users",
            new EntityReference() { LogicalName = "systemuser", Id = userId });
        //移除用户
        RemoveConnection(service, "business_unit_system_users",
            new EntityReference() { LogicalName = "systemuser", Id = userId });
    }

    /// <summary>
    /// 添加团队或者移除团队
    /// </summary>
    /// <param name="service">服务</param>
    /// <param name="teamId">团队</param>
    public void AddAndRemoveTeam(IOrganizationService service, Guid teamId)
    {
        //添加团队
        AddConnection(service, "business_unit_teams",
            new EntityReference() { LogicalName = "team", Id = teamId });
        //移除团队
        RemoveConnection(service, "business_unit_teams",
            new EntityReference() { LogicalName = "team", Id = teamId });
    }

    /// <summary>
    /// 停用或者启用业务部门
    /// </summary>
    public void SetBusinessUnitState(IOrganizationService service)
    {
        //启用业务部门
        UpdateState(service, businessunitId, 0, -1);
        //停用业务部门
        UpdateState(service, businessunitId, -1, -1);
    }

    /// <summary>
    /// 删除业务部门
    /// </summary> 
    public void DeleteUnit(IOrganizationService service)
    {
        service.Delete(entityName, businessunitId);
    }

    private void UpdateState(IOrganizationService service, Guid id, int state, int status)
    {
        SetStateRequest setState = new SetStateRequest()
        {
            EntityMoniker = new EntityReference()
            {
                Id = id,
                LogicalName = entityName
            },
            State = new OptionSetValue(state),
            Status = new OptionSetValue(status)
        };
        service.Execute(setState);
    }

    public void AddConnection(IOrganizationService service, string name, params EntityReference[] array)
    {
        Relationship ship = new Relationship(name);
        AssociateRequest request = new AssociateRequest();
        request.Relationship = ship;
        request.Target = new EntityReference()
        {
            LogicalName = entityName, Id = businessunitId
        };
        request.RelatedEntities = new EntityReferenceCollection();
        request.RelatedEntities.AddRange(array);
        service.Execute(request);
    }

    public void RemoveConnection(IOrganizationService service, string name, params EntityReference[] array)
    {
        Relationship ship = new Relationship(name);
        DisassociateRequest request = new DisassociateRequest();
        request.Relationship = ship; request.Target = new EntityReference()
        {
            LogicalName = entityName,
            Id = businessunitId
        };
        request.RelatedEntities = new EntityReferenceCollection();
        request.RelatedEntities.AddRange(array);
        service.Execute(request);
    }
}
原文地址:https://www.cnblogs.com/bennylam/p/9921485.html