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. Redis实现缓存,你应该懂的哪些思路!

    场景一:类似于微博,实现关注和被关注功能. 思路: 对每个用户使用两个集合类型键,用来存储关注别人的用户和被该用户关注的用户.当用户A关注用户B的时候,执行两步操作: sadd user:A B sa ...

  2. ZOJ 3940 Modulo Query(YY+二分)

    Modulo Query Time Limit: 2 Seconds      Memory Limit: 65536 KB One day, Peter came across a function ...

  3. BZOJ3561 DZY Loves Math VI 【莫比乌斯反演】

    题目 给定正整数n,m.求 输入格式 一行两个整数n,m. 输出格式 一个整数,为答案模1000000007后的值. 输入样例 5 4 输出样例 424 提示 数据规模: 1<=n,m<= ...

  4. import组件的时候报错

    去webpack.base.js配置 resolve: { extensions: ['.js', '.vue', '.json'], alias: { 'vue$': 'vue/dist/vue.e ...

  5. Linux基础值定时任务

    Linux计划任务:列行公事 在Linux中,通过crontab与at这两个来实现这些功能 at:是一个可以处理仅执行一次就结束的指令 crontab:把你指定的工作或任务,按照你设定的周期一直循环执 ...

  6. Codeforces Round #449 Div. 2 A B C (暂时)

    A. Scarborough Fair 题意 对给定的长度为\(n\)的字符串进行\(m\)次操作,每次将一段区间内的某一个字符替换成另一个字符. 思路 直接模拟 Code #include < ...

  7. android中与Adapter相关的控件----ViewFlipper

    ViewFlipper(翻转视图) 一.ViewFlipper是一个多页面管理的控件,与ViewPager不同,ViewPager的是一页一页的的,而ViewFlipper则是一层一层的.图片轮播或者 ...

  8. vue中v-model的一点使用心得

    我的data里面有个值是字典的对象:  config_template: {}, 这个值会被后端返回的数据填充,填充后大概是这样的: u 'config_template': { u 'startSh ...

  9. hdu 5020(斜率的表示+STL)

    Revenge of Collinearity Time Limit: 8000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/ ...

  10. 生成唯一标识符 ,通用唯一标识符 UUID

    import java.util.UUID; /** * UUID生成工具 * */ public final class UuidGenUtils { /** * 生成一个UUID串(32个字符,其 ...