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. iOS voip视频调试结果

    iOS idoubs + linphone(Windows版本):OK iOS idoubs + X-Lite(Mac OS X版本):OK linphone(或X-Lite)主动发起voice请求, ...

  2. 多线程(实现Runnable接口)

    /** * 创建一个子线程, 完成1-100之间自然数的输出,同样的主线程执行同样的操作 *创建多线程的第二种方式,通过实现的方式 * 继承和实现的方式对比 * 一,联系: *  public cla ...

  3. [SDOI2011][bzoj2286] 消耗战 [虚树+dp]

    题面: 传送门 思路: 看到所有询问中的点数总和是十万级别的,就想到用虚树~\(≧▽≦)/~啦 首先,树形dp应该是很明显可以看出来的: 设dp[u]表示以u为根的子树(不包括u)中的宝藏岛全部切断的 ...

  4. Codeforces Round #364 (Div. 2) A 水

    A. Cards time limit per test 1 second memory limit per test 256 megabytes input standard input outpu ...

  5. svg图片做图标字体

    https://icomoon.io 这个网站,把svg变图标

  6. [暑假集训--数论]poj2909 Goldbach's Conjecture

    For any even number n greater than or equal to 4, there exists at least one pair of prime numbers p1 ...

  7. spring rest 请求怎样添加Basic Auth请求頭

    请自行揣摩代码 package com.hudai.platform.manager.util; import java.net.URI; import java.net.URISyntaxExcep ...

  8. Ajax 控件 的使用 以及js调用后台方法【自己总结一下】

    原文发布时间为:2009-05-16 -- 来源于本人的百度文章 [由搬家工具导入] 源码:http://download.csdn.net/source/1340120   (js调用后台方法只在源 ...

  9. js5:框架的使用,使框架之间无痕连接

    原文发布时间为:2008-11-08 -- 来源于本人的百度文章 [由搬家工具导入] <html> <head> <base target="js4" ...

  10. c# dynamic,maybe I should say it is just some shortcut for "Object", box and unbox, without the cast

    dynamic: void Main() { var b="2"; dynamic a="2"; if(a.GetType()==typeof(int))b+= ...