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. POJ 2184:Cow Exhibition(01背包变形)

    题意:有n个奶牛,每个奶牛有一个smart值和一个fun值,可能为正也可能为负,要求选出n只奶牛使他们smart值的和s与fun值得和f都非负,且s+f值要求最大. 分析: 一道很好的背包DP题,我们 ...

  2. Socket通信——服务器和客户端相互通信

    所谓socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄.应用程序通常通过"套接字"向网络发出请求或者应答网络请求.  Socket和S ...

  3. 二进制包部署Kubernetes集群

    今天这篇文章教给大家如何快速部署一套Kubernetes集群.K8S集群部署有几种方式:kubeadm.minikube和二进制包.前两者属于自动部署,简化部署操作,我们这里强烈推荐初学者使用二进制包 ...

  4. BZOJ3998 [TJOI2015]弦论 【后缀自动机】

    题目 对于一个给定长度为N的字符串,求它的第K小子串是什么. 输入格式 第一行是一个仅由小写英文字母构成的字符串S 第二行为两个整数T和K,T为0则表示不同位置的相同子串算作一个.T=1则表示不同位置 ...

  5. group by timestamp

    SELECT DATE_FORMAT( deteline, "%Y-%m-%d %H" ) , COUNT( * )  FROM test GROUP BY DATE_FORMAT ...

  6. hdu 5930 GCD 线段树上二分/ 强行合并维护信息

    from NOIP2016模拟题28 题目大意 n个点的序列,权值\(<=10^6\) q个操作 1.单点修改 2.求所有区间gcd中,不同数个数 分析 1.以一个点为端点,向左或向右的gcd种 ...

  7. 标准IO与文件IO 的区别

    先来了解下什么是标准IO以及文件IO. 标准IO:标准I/O是ANSI C建立的一个标准I/O模型,是一个标准函数包和stdio.h头文件中的定义,具有一定的可移植性.标准IO库处理很多细节.例如缓存 ...

  8. POJ1716 Integer Intervals

    Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 13984   Accepted: 5943 Description An i ...

  9. Selenium2+python自动化1(环境安装)

    前言 目前selenium版本已经升级到3.0了,网上的大部分教程是基于2.0写的,所以在学习前先要弄清楚版本号,这点非常重要.本系列依然以selenium2为基础,目前selenium3坑比较多,暂 ...

  10. java实现服务端开启多线程处理客户端的上传图片请求

    将客户端c:\\a.jpg 上传到e:\\公司名称+6位随机数.jpg  这样为了不断开连接客户端每次上传的图片名字不重名覆盖,验证之用 这里需要注意的是Socket的终止客户端的输入方法  shut ...