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 AddAndRemoveUser(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);

        }

    }

crm操作业务部门的更多相关文章

  1. crm操作安全角色

    using System;     using Microsoft.Xrm.Sdk;     using Microsoft.Crm.Sdk.Messages;     using System.Co ...

  2. crm操作货币实体

    using System;     using Microsoft.Xrm.Sdk;     using Microsoft.Crm.Sdk.Messages; /// <summary> ...

  3. crm操作权限

    using System;     using Microsoft.Xrm.Sdk;     using Microsoft.Xrm.Sdk.Query;     using System.Colle ...

  4. crm操作知识库文章实体

    using System;     using Microsoft.Xrm.Sdk;     using Microsoft.Crm.Sdk.Messages;     using Microsoft ...

  5. crm操作观点

    using System;     using Microsoft.Xrm.Sdk;     using Microsoft.Crm.Sdk.Messages; /// <summary> ...

  6. crm操作产品实体

    using System;     using Microsoft.Xrm.Sdk;     using Microsoft.Crm.Sdk.Messages; /// <summary> ...

  7. crm操作电子邮件

    using System;     using Microsoft.Xrm.Sdk;     using Microsoft.Crm.Sdk.Messages;     using Microsoft ...

  8. crm操作销售订单实体

    using System;     using Microsoft.Xrm.Sdk;     using Microsoft.Xrm.Sdk.Query;     using Microsoft.Cr ...

  9. crm操作约会实体

    using System;     using Microsoft.Xrm.Sdk;     using Microsoft.Crm.Sdk.Messages;     using Microsoft ...

随机推荐

  1. Log4j官方文档翻译(一、基本介绍)

    简介 log4j是使用java语言编写的可靠的.快速的.灵活的日志框架,它是基于Apache的license. log4j支持c,c++,c#,perl,python,ruby等语言.在运行时通过额外 ...

  2. POJ 3368:Frequent values(线段树区间合并)

    题目大意,给出一段非降序列,求一些区间中出现频率最高的数的出现次数. 分析: 显然,区间中一个数多次出现必然是连续的,也就是最长的连续相等的一段. 用线段树解决,维护三个信息:一个区间最长连续的区间的 ...

  3. openssl Rsa 分段加密解密

    密钥长度 1024 openssl genrsa -out rsa_private_key.pem openssl rsa -in rsa_private_key.pem -pubout -out r ...

  4. 序列统计(bzoj 4403)

    Description 给定三个正整数N.L和R,统计长度在1到N之间,元素大小都在L到R之间的单调不降序列的数量.输出答案对10^6+3取模的结果. Input 输入第一行包含一个整数T,表示数据组 ...

  5. 【HDOJ5558】Alice's Classified Message(后缀数组)

    题意:给定一个长度为n的下标从0开始的小写字母字符串,每次对于当前的i寻找一个j使得后缀i与后缀j的lcp最大,(j<i)若lcp相同则取较小的 若lcp为0则输出0与当前字符,i自增1,否则输 ...

  6. JS与验证控件结合验证

    原文发布时间为:2010-05-14 -- 来源于本人的百度文章 [由搬家工具导入] 把BUTTOn中 的return CheckFive()去 掉 .. 放 到 <Form id=" ...

  7. Google 最新的 Fuchsia OS【科技讯息摘要】

    转自:http://www.cnblogs.com/pied/p/5771782.html 就是看到篇报道,有点好奇,就去FQ挖了点东西回来. 我似乎已开始就抓到了重点,没错,就是 LK . LK 是 ...

  8. 《Linux命令行与shell脚本编程大全 第3版》Linux命令行---36

    以下为阅读<Linux命令行与shell脚本编程大全 第3版>的读书笔记,为了方便记录,特地与书的内容保持同步,特意做成一节一次随笔,特记录如下:

  9. poj 3321(树状数组)

    Apple Tree Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 24954   Accepted: 7447 Descr ...

  10. n!在k进制下的后缀0

    问n! 转化成k进制后的位数和尾数的0的个数.[UVA 10061 How many zeros and how many digits?] Given a decimal integer numbe ...