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. http的一些知识

    TCP/IP协议分层 应用层 TFP DNS DNS域名解析的过程 在浏览器DNS缓存中搜索 读取系统的hosts文件,查找其中是否有对应的ip 向本地配置的首选DNS服务器发起域名解析请求 HTTP ...

  2. bzoj1086【SCOI2005】王室联邦

    题意:http://www.lydsy.com/JudgeOnline/problem.php?id=1086 sol  :这题水水啊,直接大力DFS就行了 首先当且仅当x<B时无解 对于以x为 ...

  3. 2 - Django基础

    一.Django流程 Django是使用python编写的web框架,遵守MTV设计思想. 实现原理: 1,浏览器发起请求. 2,Django根据URL Conf指向view(Views) 3,vie ...

  4. 在vue中使用sass

    首先安装node-sass和sass-loader cnpm install node-sass && sass-loader --save 在webpack.config.js 的m ...

  5. Vue实现增删改查功能

    简单的表单CURD功能demo <!DOCTYPE html> <html> <head> <meta charset="UTF-8"&g ...

  6. 洛谷 [P3723] 礼物

    FFT https://www.luogu.org/problemnew/solution/P3723 重点在于构造卷积的形式 #include <iostream> #include & ...

  7. 学习 表单验证插件validate

    <!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  8. Educational Codeforces Round 37 A B C D E F

    A. water the garden Code #include <bits/stdc++.h> #define maxn 210 using namespace std; typede ...

  9. duilib入门简明教程 -- 部分bug (11) (转)

    原文转自:http://www.cnblogs.com/Alberl/p/3344886.html  一.WindowImplBase的bug     在第8个教程[2013 duilib入门简明教程 ...

  10. Python 数据类型-2

    序列 包括:字符串 列表 元组 索引操作和切片操作 索引操作:可以从序列中抓取一个特定的项目 切片操作: 获取序列的一个切片,即一部分序列 序列的通用方法: len() 求序列的长度 + 连接2个序列 ...