Dynamics操作工具类

一、XRMHelper

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.Xrm.Sdk;
using System.Collections;
using Microsoft.Xrm.Sdk.Query;

namespace Utility
{
    public class XRMHelper
    {
        public IOrganizationService _serviceProxy;

        public XRMHelper(IOrganizationService service)
        {
            _serviceProxy = service;

        }
        
        //获取数据集
        public EntityCollection QueryList(string fetch)
        {
            EntityCollection results = new EntityCollection();
            try
            {
                results = _serviceProxy.RetrieveMultiple(new FetchExpression(fetch));

                if (results.Entities.Count > 0)
                {
                    Entity e = results.Entities[0];
                    return results;
                }
                else
                {
                    return results;
                }
            }
            catch (Exception ex)
            { throw ex; }
        }

        /// 
        /// 根据表名获取实体
        /// 
        /// 实体名
        /// 字段集合
        /// 
        public EntityCollection GetAllInfo(string entityName, params string[] attributes)
        {
            EntityCollection results = new EntityCollection();
            try
            {
                QueryExpression query = new QueryExpression();

                query.EntityName = entityName;

                if (attributes.Length > 0)
                {
                    query.ColumnSet = new ColumnSet(attributes);
                }
                else
                {
                    query.ColumnSet.AllColumns = true;
                }

                results = _serviceProxy.RetrieveMultiple(query);

                return results;
            }
            catch (Exception ex)
            { throw ex; }
        }

        public EntityCollection GetInfoByAttrValue(string entityName, Hashtable hashTable)
        {
            EntityCollection results = new EntityCollection();
            try
            {
                QueryExpression query = new QueryExpression();

                query.EntityName = entityName;
                query.ColumnSet.AllColumns = true;

                query.Criteria = new FilterExpression();
                query.Criteria.FilterOperator = LogicalOperator.And;

                foreach (DictionaryEntry de in hashTable)
                {
                    ConditionExpression condition = new ConditionExpression();
                    string[] strname = de.Key.ToString().Split('$');

                    condition.AttributeName = strname[0];//
                    if (strname[1] == "0")
                    {
                        condition.Operator = ConditionOperator.Equal;
                    }
                    else
                    { condition.Operator = ConditionOperator.NotEqual; }
                    condition.Values.Add(de.Value);//
                    query.Criteria.AddCondition(condition);
                }

                //取有效数据(有效:statecode=0;无效:statecode=1)
                ConditionExpression condition_statecode = new ConditionExpression();
                condition_statecode.AttributeName = "statecode";
                condition_statecode.Operator = ConditionOperator.Equal;
                condition_statecode.Values.Add(0);
                query.Criteria.AddCondition(condition_statecode);

                results = _serviceProxy.RetrieveMultiple(query);
                return results;
            }
            catch (Exception ex)
            { throw ex; }

        }

        /// 
        /// 取实体中符合条件的记录集
        /// 
        /// 实体名
        /// 字段
        /// 值
        /// 字段集合
        /// 
        public EntityCollection GetInfoByAttrValue(string entityName, string attrName, object attrValue, params string[] attributes)
        {
            EntityCollection results = new EntityCollection();
            try
            {
                if ("".Equals(attrName))
                {
                    attrName = "Guid";
                }
                QueryExpression query = new QueryExpression();

                query.EntityName = entityName;
                if (attributes.Length > 0)
                {
                    query.ColumnSet = new ColumnSet(attributes);
                }
                else
                {
                    query.ColumnSet.AllColumns = true;
                }

                query.Criteria = new FilterExpression();
                query.Criteria.FilterOperator = LogicalOperator.And;

                ConditionExpression condition = new ConditionExpression();
                condition.AttributeName = attrName;
                condition.Operator = ConditionOperator.Equal;
                condition.Values.Add(attrValue);
                query.Criteria.AddCondition(condition);

                //取有效数据(有效:statecode=0;无效:statecode=1)
                ConditionExpression condition_statecode = new ConditionExpression();
                condition_statecode.AttributeName = "statecode";
                condition_statecode.Operator = ConditionOperator.Equal;
                condition_statecode.Values.Add(0);
                query.Criteria.AddCondition(condition_statecode);

                results = _serviceProxy.RetrieveMultiple(query);
                return results;
            }
            catch (Exception ex)
            { throw ex; }

        }


        /// 
        /// 取实体中符合条件的记录集
        /// 
        /// 实体名
        /// 字段
        /// 值
        /// 排序字段
        /// 
        public EntityCollection GetInfoByAttrValue_Order(string entityName, string attrName, object attrValue, string orderName)
        {
            EntityCollection results = new EntityCollection();
            try
            {
                if ("".Equals(attrName))
                {
                    attrName = "Guid";
                }
                QueryExpression query = new QueryExpression();

                query.EntityName = entityName;
                query.ColumnSet.AllColumns = true;

                query.Criteria = new FilterExpression();
                query.Criteria.FilterOperator = LogicalOperator.And;

                ConditionExpression condition = new ConditionExpression();
                condition.AttributeName = attrName;
                condition.Operator = ConditionOperator.Equal;
                condition.Values.Add(attrValue);
                query.Criteria.AddCondition(condition);

                //取有效数据(有效:statecode=0;无效:statecode=1)
                ConditionExpression condition_statecode = new ConditionExpression();
                condition_statecode.AttributeName = "statecode";
                condition_statecode.Operator = ConditionOperator.Equal;
                condition_statecode.Values.Add(0);
                query.Criteria.AddCondition(condition_statecode);

                OrderExpression order = new OrderExpression();
                order.AttributeName = orderName;
                order.OrderType = OrderType.Descending;
                query.Orders.Add(order);

                results = _serviceProxy.RetrieveMultiple(query);
                return results;
            }
            catch (Exception ex)
            { throw ex; }

        }


        /// 
        /// 取实体中符合条件的记录集
        /// 
        /// 实体名
        /// 字段
        /// 值
        /// 
        public EntityCollection GetInfoByAttrValue_Business(string entityName, string attrName, object attrValue)
        {
            EntityCollection results = new EntityCollection();
            try
            {
                if ("".Equals(attrName))
                {
                    attrName = "Guid";
                }
                QueryExpression query = new QueryExpression();

                query.EntityName = entityName;
                query.ColumnSet.AllColumns = true;

                query.Criteria = new FilterExpression();
                query.Criteria.FilterOperator = LogicalOperator.And;

                ConditionExpression condition = new ConditionExpression();
                condition.AttributeName = attrName;
                condition.Operator = ConditionOperator.Equal;
                condition.Values.Add(attrValue);
                query.Criteria.AddCondition(condition);

                results = _serviceProxy.RetrieveMultiple(query);
                return results;
            }
            catch (Exception ex)
            { throw ex; }

        }
        /// 
        /// 取实体中符合条件的记录集
        /// 
        /// 实体名
        /// 字段
        /// 条件(0是等于,1是不等于)
        /// 值
        /// 
        public EntityCollection GetInfoByAttrValue(string entityName, string attrName, string optor, object attrValue,  string[] attributes)
        {
            EntityCollection results = new EntityCollection();
            try
            {
                if ("".Equals(attrName))
                {
                    attrName = "Guid";
                }
                QueryExpression query = new QueryExpression();

                query.EntityName = entityName;
                if (attributes.Length > 0)
                {
                    query.ColumnSet = new ColumnSet(attributes);
                }
                else
                {
                    query.ColumnSet.AllColumns = true;
                }

                query.Criteria = new FilterExpression();
                query.Criteria.FilterOperator = LogicalOperator.And;

                ConditionExpression condition = new ConditionExpression();
                condition.AttributeName = attrName;
                //condition.Operator = ConditionOperator.Equal;
                if (optor == "0")
                {
                    condition.Operator = ConditionOperator.Equal;
                }
                else if (optor == "1")
                {
                    condition.Operator = ConditionOperator.NotEqual;
                }
                condition.Values.Add(attrValue);
                query.Criteria.AddCondition(condition);
                //取有效数据(有效:statecode=0;无效:statecode=1)
                ConditionExpression condition_statecode = new ConditionExpression();
                condition_statecode.AttributeName = "statecode";
                condition_statecode.Operator = ConditionOperator.Equal;
                condition_statecode.Values.Add(0);
                query.Criteria.AddCondition(condition_statecode);

                results = _serviceProxy.RetrieveMultiple(query);
                return results;
            }
            catch (Exception ex)
            { throw ex; }

        }


        /// 
        /// Update数据
        /// 
        /// 实体集
        public void Delete(string entityName, Guid guid)
        {
            try
            {
                _serviceProxy.Delete(entityName, guid);
            }
            catch (Exception ex)
            { throw ex; }
        }
        /// 
        /// Update数据
        /// 
        /// 实体集
        public void Update(Entity entity)
        {
            try
            {
                _serviceProxy.Update(entity);
            }
            catch (Exception ex)
            { throw ex; }
        }

        /// 
        /// INSERT数据
        /// 
        /// 实体集
        public void Create(Entity entity)
        {
            try
            {
                _serviceProxy.Create(entity);
            }
            catch (Exception ex)
            { throw ex; }
        }
        /// 
        /// INSERT数据
        /// 
        /// 实体集
        /// 主表的GUID
        public Guid Create_guid(Entity entity)
        {
            try
            {
                return _serviceProxy.Create(entity);
            }
            catch (Exception ex)
            { throw ex; }
        }


        public void Execute(OrganizationRequest requst)
        {
            try
            {
                _serviceProxy.Execute(requst);
            }
            catch (Exception ex)
            { throw ex; }
        }


    }
}

二、EntityConvert

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.Crm.Sdk.Messages;
using Microsoft.Xrm.Sdk;
using Microsoft.Xrm.Sdk.Messages;
using Microsoft.Xrm.Sdk.Metadata;

namespace Utility
{
    public class EntityConvert
    {
        public static int OptionSetStartValue = 171060000;

        public static T GetFieldValue(Microsoft.Xrm.Sdk.Entity entity, string fieldname)
        {
            try
            {
                if (entity == null)
                {
                    return default(T);
                }

                if (!entity.Attributes.Keys.Contains(fieldname))
                {
                    return default(T);
                }

                object value = entity[fieldname];

                if (value is T)
                {
                    return (T)value;
                }
            }
            catch (Exception e)
            {
                throw e;
            }

            return default(T);
        }

        public static void SetFieldValue(Microsoft.Xrm.Sdk.Entity entity, string fieldname, object oValue)
        {
            try
            {
                if (entity == null)
                {
                    throw new ArgumentNullException(entity.ToString());
                }
                if (!entity.Attributes.Keys.Contains(fieldname))
                {
                    entity.Attributes.Add(fieldname, oValue);
                }

                entity[fieldname] = oValue;
            }
            catch (Exception e)
            {
                throw e;
            }
        }


    }

    public static class EntityExtensions
    {
        public static void SetFieldValue(this Microsoft.Xrm.Sdk.Entity entity, string fieldname, object oValue)
        {
            try
            {
                if (entity == null)
                {
                    throw new ArgumentNullException(entity.ToString());
                }
                if (!entity.Attributes.Keys.Contains(fieldname))
                {
                    entity.Attributes.Add(fieldname, oValue);
                }
                entity[fieldname] = oValue;
            }
            catch (Exception e)
            {
                throw e;
            }
        }

        public static T GetFieldValue(this Microsoft.Xrm.Sdk.Entity entity, string fieldname)
        {
            try
            {
                if (entity == null)
                {
                    return default(T);
                }

                if (!entity.Attributes.Keys.Contains(fieldname))
                {
                    return default(T);
                }

                object value = entity[fieldname];

                if (value is T)
                {
                    return (T)value;
                }
            }
            catch (Exception e)
            {
                throw e;
            }

            return default(T);
        }

    }

    public enum EnumOptType
    {
        /// 
        /// Create
        /// 
        create,
        /// 
        ///Update
        /// 
        update,
        /// 
        ///Delete
        /// 
        delete,

    }

    /// 
    /// The event pipeline is divided into multiple stages, of which 4 are available to register custom developed or 3rd party plug-ins. 
    /// Multiple plug-ins that are registered in each stage can be further be ordered (ranked) within that stage during plug-in registration.
    /// 
    public class PipelineStages
    {
        private PipelineStages() { }
        public const int PreValidation = 10;
        public const int PreOperation = 20;
        public const int MainOperation = 30;
        public const int PostOperation = 40;
    }


    public class HelpCode
    {
        #region Help Method

        /// 
        /// 获取OptionSetValue的显示名称
        /// 
        /// 
        /// 
        /// 
        /// 
        public static string GetOptionSetText(IOrganizationService service, string _globalOptionSetName, int _optionSetValue)
        {
            string displayText = string.Empty;

            // Use the RetrieveOptionSetRequest message to retrieve  
            // a global option set by it's name.

            RetrieveOptionSetRequest retrieveOptionSetRequest = new RetrieveOptionSetRequest
            {
                Name = _globalOptionSetName
            };
            // Execute the request.

            RetrieveOptionSetResponse retrieveOptionSetResponse = (RetrieveOptionSetResponse)service.Execute(retrieveOptionSetRequest);

            // Access the retrieved OptionSetMetadata.

            OptionSetMetadata retrievedOptionSetMetadata = (OptionSetMetadata)retrieveOptionSetResponse.OptionSetMetadata;

            // Get the current options list for the retrieved attribute.

            Dictionary optiondictionary = retrievedOptionSetMetadata.Options.ToDictionary(v => v.Value);
            if (optiondictionary.Keys.Contains(_optionSetValue))
            {
                displayText = optiondictionary[_optionSetValue].Label.UserLocalizedLabel.Label.ToString();
            }

            return displayText;
        }
        /// 
        /// 修改OWNERID
        /// 
        /// crm_team_id
        /// entityName
        /// 业务单据ID
        public static void AssignRequest_team(EntityReference team_id, string entityName, Guid crm_bussiness_id, IOrganizationService adminservice)
        {
            AssignRequest assignRequest = new AssignRequest()
            {
                Assignee = new EntityReference
                {
                    LogicalName = "team",
                    Id = team_id.Id

                },
                Target = new EntityReference(entityName, crm_bussiness_id)
            };
            adminservice.Execute(assignRequest);
        }

        /// 
        /// 修改OWNERID
        /// 
        /// 用户ID
        /// entityName
        /// 业务单据ID
        public void AssignRequest_user(EntityReference uesr_id, string entityName, Guid crm_bussiness_id, IOrganizationService adminservice)
        {
            AssignRequest assignRequest = new AssignRequest()
            {
                Assignee = new EntityReference
                {
                    LogicalName = "systemuser",
                    Id = uesr_id.Id

                },
                Target = new EntityReference(entityName, crm_bussiness_id)
            };
            adminservice.Execute(assignRequest);
        }


        /// 
        /// 共享记录
        /// 
        /// 
        /// 要共享给用户或者团队
        /// 要共享的记录
        public void Grant(EntityReference teamOrSystem, EntityReference target, IOrganizationService adminservice)
        {
            GrantAccessRequest grantAccessRequest = new GrantAccessRequest
            {
                PrincipalAccess = new PrincipalAccess

                {

                    Principal = teamOrSystem,
                    //AccessMask = AccessRights.ReadAccess
                    AccessMask = AccessRights.ReadAccess | AccessRights.WriteAccess

                },

                Target = target,

            };
            adminservice.Execute(grantAccessRequest);
        }

        /// 
        /// 
        /// 
        /// 分配的团队或者角色或者用户的guid
        /// 分配方式0团队1角色2用户
        /// 共享实体记录的guid
        /// 共享实体的实体名称
        public void ShareRecord(Guid _objId, int _objType, Guid _objRecordId, string _objEntityName, IOrganizationService adminservice)
        {
            try
            {
                string _objName = string.Empty;
                if (_objType == 0)
                {
                    _objName = "team";
                }
                else if (_objType == 1)
                {
                    _objName = "role";
                }
                else
                {
                    _objName = "systemuser";
                }

                GrantAccessRequest grantAccessRequest = new GrantAccessRequest()
                {
                    Target = new EntityReference(_objEntityName, _objRecordId),
                    PrincipalAccess = new PrincipalAccess()
                    {
                        Principal = new EntityReference(_objName, _objId),
                        AccessMask = AccessRights.ReadAccess
                    }
                };

                adminservice.Execute(grantAccessRequest);

            }
            catch (Exception ex)
            {
                throw;
            }
        }


        #endregion
    }
}

三、PlugInBase

 using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using System.Collections;
using Microsoft.Xrm.Sdk;
using Microsoft.Xrm.Sdk.Metadata;
using Microsoft.Xrm.Sdk.Query;
using Microsoft.Xrm.Sdk.Messages;
using Microsoft.Crm.Sdk.Messages;

namespace Utility
{
    public class PlugInBase : IPlugin
    {
        #region Class Variables
        /// 
        /// 
        /// 
        private IServiceProvider m_ServiceProvider = null;

        protected IServiceProvider ServiceProvider
        {
            get { return m_ServiceProvider; }
            set { m_ServiceProvider = value; }
        }

        /// 
        /// 
        /// 
        IOrganizationService m_OrgService = null;

        public IOrganizationService OrgService
        {
            get { return m_OrgService; }
            set { m_OrgService = value; }
        }

        /// 
        /// 
        /// 
        IPluginExecutionContext _context = null;

        public IPluginExecutionContext ConText
        {
            get { return _context; }
            set { _context = value; }
        }

        /// 
        /// 
        /// 
        Entity m_CurrentEntity = null;

        public Entity CurrentEntity
        {
            get { return m_CurrentEntity; }
            set { m_CurrentEntity = value; }
        }

        /// 
        /// 
        /// 
        private string m_Messagename = "";

        public string Messagename
        {
            get { return m_Messagename; }
            set { m_Messagename = value; }
        }

        /// 
        /// 
        /// 
        private int m_Depth = 0;

        public int Depth
        {
            get { return m_Depth; }
            set { m_Depth = value; }
        }

        #endregion

        #region Interface

        public virtual void Execute(IServiceProvider serviceProvider)
        {

            // Obtain the execution context from the service provider.
            IPluginExecutionContext context = (IPluginExecutionContext)serviceProvider.GetService(typeof(IPluginExecutionContext));

            // Get a reference to the Organization service.
            IOrganizationServiceFactory factory = (IOrganizationServiceFactory)serviceProvider.GetService(typeof(IOrganizationServiceFactory));
            this.ServiceProvider = serviceProvider;
            this.OrgService = factory.CreateOrganizationService(context.UserId);

            this.Messagename = context.MessageName.ToLower();

            this.Depth = context.Depth;

            this.BeforeExecuteTask(context);

            if (context.InputParameters.Contains("Target") && context.InputParameters["Target"] is Entity)
            {
                this.CurrentEntity = (Entity)context.InputParameters["Target"];

                this.ExecuteTask();
            }
        }

        #endregion

        #region Methods

        public virtual void BeforeExecuteTask(IPluginExecutionContext context)
        {

        }

        public virtual void ExecuteTask()
        {
            //if (this.Messagename == "update")
            //{
            //    this.ReloadEntity();
            //}
        }




        public virtual void ReloadEntity()
        {
            Entity tmpEnity = this.OrgService.Retrieve(this.CurrentEntity.LogicalName, this.CurrentEntity.Id, new ColumnSet(true));

            string[] keyArray = (string[])CurrentEntity.Attributes.Keys.ToArray();

            for (int i = 0; i < keyArray.Length; i++)
            {
                tmpEnity[keyArray[i]] = CurrentEntity[keyArray[i]];
            }

            this.CurrentEntity = tmpEnity;
        }

        public virtual void ExecuteTask_Test()
        {
            
        }


        #endregion

        #region Help Method

        /// 
        /// 获取OptionSetValue的显示名称
        /// 
        /// 
        /// 
        /// 
        /// 
        public string GetOptionSetText(IOrganizationService service, string _globalOptionSetName, int _optionSetValue)
        {
            string displayText = string.Empty;

            // Use the RetrieveOptionSetRequest message to retrieve  
            // a global option set by it's name.

            RetrieveOptionSetRequest retrieveOptionSetRequest = new RetrieveOptionSetRequest
            {
                Name = _globalOptionSetName
            };
            // Execute the request.

            RetrieveOptionSetResponse retrieveOptionSetResponse = (RetrieveOptionSetResponse)service.Execute(retrieveOptionSetRequest);

            // Access the retrieved OptionSetMetadata.

            OptionSetMetadata retrievedOptionSetMetadata = (OptionSetMetadata)retrieveOptionSetResponse.OptionSetMetadata;

            // Get the current options list for the retrieved attribute.

            Dictionary optiondictionary = retrievedOptionSetMetadata.Options.ToDictionary(v => v.Value);
            if (optiondictionary.Keys.Contains(_optionSetValue))
            {
                displayText = optiondictionary[_optionSetValue].Label.UserLocalizedLabel.Label.ToString();
            }

            return displayText;
        }

        /// 
        /// 查询当前插件实体,并按照版本号降序排列
        /// 
        /// 
        /// 
        /// 
        public DataCollection QueryEntity(FilterExpression filter, params string[] outPropertyList)
        {
            //查询实体
            QueryExpression query = new QueryExpression();
            query.EntityName = this.CurrentEntity.LogicalName;
            query.Criteria = filter;
            query.ColumnSet = new ColumnSet(outPropertyList);

            //获取查询结果
            EntityCollection results = this.OrgService.RetrieveMultiple(query);

            if (results == null)
            {
                return null;
            }
            else
            {
                return results.Entities;
            }
        }

        protected DataCollection QueryEntity(FilterExpression filter, string orderFieldName, OrderType orderType, params string[] outPropertyList)
        {
            //查询当前插件实体,并按照版本号降序排列
            QueryExpression query = new QueryExpression();
            query.EntityName = this.CurrentEntity.LogicalName;
            query.Criteria = filter;
            query.ColumnSet = new ColumnSet(outPropertyList);
            query.AddOrder(orderFieldName, orderType);

            //获取查询结果
            EntityCollection results = this.OrgService.RetrieveMultiple(query);

            if (results == null)
            {
                return null;
            }
            else
            {
                return results.Entities;
            }
        }

        /// 
        /// 修改OWNERID
        /// 
        /// crm_team_id
        /// entityName
        /// 业务单据ID
        public void AssignRequest_team(EntityReference team_id, string entityName, Guid crm_bussiness_id, XRMHelper crmHelper)
        {
            AssignRequest assignRequest = new AssignRequest()
            {
                Assignee = new EntityReference
                {
                    LogicalName = "team",
                    Id = team_id.Id

                },
                Target = new EntityReference(entityName, crm_bussiness_id)
            };
            crmHelper._serviceProxy.Execute(assignRequest);
        }

        /// 
        /// 修改OWNERID
        /// 
        /// 用户ID
        /// entityName
        /// 业务单据ID
        public void AssignRequest_user(EntityReference uesr_id, string entityName, Guid crm_bussiness_id, XRMHelper crmHelper)
        {
            AssignRequest assignRequest = new AssignRequest()
            {
                Assignee = new EntityReference
                {
                    LogicalName = "systemuser",
                    Id = uesr_id.Id

                },
                Target = new EntityReference(entityName, crm_bussiness_id)
            };
            crmHelper._serviceProxy.Execute(assignRequest);
        }


        /// 
        /// 共享记录
        /// 
        /// 
        /// 要共享给用户或者团队
        /// 要共享的记录
        public void Grant(XRMHelper crmHelper, EntityReference teamOrSystem, EntityReference target)
        {
            GrantAccessRequest grantAccessRequest = new GrantAccessRequest
            {
                PrincipalAccess = new PrincipalAccess

                {

                    Principal = teamOrSystem,
                    //AccessMask = AccessRights.ReadAccess
                    AccessMask = AccessRights.ReadAccess | AccessRights.WriteAccess

                },

                Target = target,

            };
            crmHelper._serviceProxy.Execute(grantAccessRequest);
        }

        /// 
        /// 
        /// 
        /// 分配的团队或者角色或者用户的guid
        /// 分配方式0团队1角色2用户
        /// 共享实体记录的guid
        /// 共享实体的实体名称
        public void ShareRecord(Guid _objId, int _objType, Guid _objRecordId, string _objEntityName, XRMHelper crmHelper)
        {
            try
            {
                string _objName = string.Empty;
                if (_objType == 0)
                {
                    _objName = "team";
                }
                else if (_objType == 1)
                {
                    _objName = "role";
                }
                else
                {
                    _objName = "systemuser";
                }

                GrantAccessRequest grantAccessRequest = new GrantAccessRequest()
                {
                    Target = new EntityReference(_objEntityName, _objRecordId),
                    PrincipalAccess = new PrincipalAccess()
                    {
                        Principal = new EntityReference(_objName, _objId),
                        AccessMask = AccessRights.ReadAccess
                    }
                };

                crmHelper._serviceProxy.Execute(grantAccessRequest);

            }
            catch (Exception ex)
            {
                throw;
            }
        }


        #endregion
    }
}

四、PluginServiceProvider

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

namespace Utility
{
    public class PluginServiceProvider
    {
        public int Index = 1;
        public ITracingService TracingService { get; set; }
        public IPluginExecutionContext Context { get; set; }
        public IOrganizationServiceFactory ServiceFactory { get; set; }
        public IOrganizationService UserService { get; set; }
        public IOrganizationService SysService { get; set; }

        public PluginServiceProvider() { }

        public PluginServiceProvider(IServiceProvider serviceProvider)
        {
            TracingService = GetService(serviceProvider);
            Context = GetService(serviceProvider);
            ServiceFactory = GetService(serviceProvider);
            SysService = this.ServiceFactory.CreateOrganizationService(null);
            UserService = this.ServiceFactory.CreateOrganizationService(this.Context.UserId);
        }

        public T GetService(IServiceProvider serviceProvider)
        {
            return (T)serviceProvider.GetService(typeof(T));
        }

        public bool IsNotNull(object o)
        {
            return o != null && o != DBNull.Value && !string.IsNullOrEmpty(o.ToString());
        }

        public bool IsNotNull(Entity en, string name)
        {
            return en.Contains(name) && IsNotNull(en[name]);
        }

        public bool IsEntity()
        {
            CheckNull(Context, "IPluginExecutionContext");
            return Context.InputParameters.Contains("Target");
        }

        public bool EqualCurrentEntity(string name)
        {
            return IsEntity() && GetCurrentEntityName() == name.ToLower();
        }

        public string GetCurrentEntityName()
        {
            CheckNull(Context, "IPluginExecutionContext");
            return Context.PrimaryEntityName.ToLower();
        }

        public bool EqualEntityName_Action_State(string entityName, string action, int state)
        {
            CheckNull(Context, "IPluginExecutionContext");
            return Context.PrimaryEntityName.ToLower().Equals(entityName.ToLower()) &&
                Context.MessageName.ToLower().Equals(action.ToLower()) && Context.Stage == state;
        }

        public bool EqualAction_Or_MessageName(int state, string Action)
        {
            TracingService.Trace("EqualAction_Or_MessageName");
            if (Context.Stage == state) {
                if (Action != null && Action.ToLower() == Context.MessageName.ToLower()) {
                    return true;
                }
            }

            return false;
        } 

        public void CheckNull(object o, string name)
        {
            if (o == null)
            {
                throw new InvalidPluginExecutionException(name + " is null!");
            }
        }

        public void MessageShow(string msg)
        {
            throw new InvalidPluginExecutionException(msg);
        }
        //获取当前用户的语言
        public int? GetCurrentUserLanguageId()
        {
            IOrganizationService service = SysService;
            Guid userid = Context.UserId;
            QueryExpression mySavedQuery = new QueryExpression
            {
                ColumnSet = new ColumnSet("systemuserid", "uilanguageid"),
                EntityName = "usersettings",
                Criteria = new FilterExpression()
                {
                    FilterOperator = Microsoft.Xrm.Sdk.Query.LogicalOperator.And,
                    Conditions =  
                {        
                    new ConditionExpression  
                    {  
                        AttributeName = "systemuserid",  
                        Operator = ConditionOperator.Equal,  
                        Values = {userid}  
                    }  
                }
                }
            };

            EntityCollection ec = service.RetrieveMultiple(mySavedQuery);
            if (ec != null && ec.Entities != null && ec.Entities.Count > 0 && ec.Entities[0].Contains("uilanguageid"))
            {
                return (int)(ec.Entities[0]["uilanguageid"]);
            }
            else
            {
                return null;
            }
        }
        public static void WriteError(string error, string filepath)
        {
            string logpath = "D:\\Frensworkz\\interface\\crm";
            if (filepath != null && !string.IsNullOrEmpty(filepath)) { logpath = filepath; }
            System.IO.StreamWriter sr;
            string logFilePath = logpath + "_" + DateTime.Today.ToString("yyyy-MM-dd") + ".log";
            if (System.IO.Directory.Exists(System.IO.Path.GetDirectoryName(logFilePath)) == false)
            {
                System.IO.Directory.CreateDirectory(System.IO.Path.GetDirectoryName(logFilePath));
            }
            if (System.IO.File.Exists(logFilePath))
            {
                sr = System.IO.File.AppendText(logFilePath);
            }
            else
            {
                sr = System.IO.File.CreateText(logFilePath);
            }
            sr.WriteLine(DateTime.Now.ToString("--------yyyy/MM/dd HH:mm:ss--------"));
            sr.WriteLine(error);
            sr.Close();
        }
    } 
}

五、Log

using System;
using System.Collections.Generic;
using System.Text;
using Microsoft.Xrm.Sdk;
using System.IO;

namespace HP.Crm2013.Consoles
{
    class Log
    {
        //将日志文件写入指定的文件
        public static void WriteLog(string content, string logFile)
        {
            System.IO.StreamWriter sr;
            try
            {
                if (System.IO.Directory.Exists(System.IO.Path.GetDirectoryName(logFile)) == false)
                {
                    System.IO.Directory.CreateDirectory(System.IO.Path.GetDirectoryName(logFile));
                }
                if (System.IO.File.Exists(logFile))
                {
                    sr = System.IO.File.AppendText(logFile);
                }
                else
                {
                    sr = System.IO.File.CreateText(logFile);

                }
                sr.WriteLine(DateTime.Now.ToString("yyyy/MM/dd H:mm:ss  ") + content);
                sr.Close();
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        public static void WriteLog(Exception ex, string logFile)
        {
            StringBuilder builder = new StringBuilder();
            builder.AppendLine("Message: " + ex.Message);
            builder.AppendLine("StackTrace: " + ex.StackTrace);
            if (ex.TargetSite != null)
            {
                builder.AppendLine("MemberName: " + ex.TargetSite.Name);
            }
            WriteLog(builder.ToString(), logFile);
        }

        /// 
        /// 记录异常到日志表
        /// 
        /// 数据同步方向
        /// 同步表(FROM方向)
        /// 同步表的ID
        /// 异常信息
        public static void JobWasExecutedWriteJobInfo(IOrganizationService crmService, string syndirection, string syntable, string syntableid, string jobExceptionMsg)
        {
            try
            {
                Entity logEntity = new Entity("new_error_log");
                logEntity["new_func_name"] = syndirection;//同步方向
                logEntity["new_syntable"] = syntable;//同步表
                logEntity["new_syntableid"] = syntableid;//数据ID
                logEntity["new_name"] = "数据同步执行出现异常";
                logEntity["new_date"] = DateTime.Now;
                logEntity["new_stacktrace"] = jobExceptionMsg;
                crmService.Create(logEntity);
            }
            catch (Exception ex)
            {
                //throw ex; 
            }
        }

        /// 
        /// 
        /// 
        /// 
        /// 
        /// Job 开始执行/Job 执行完毕
        public static void JobInfo_mark(IOrganizationService crmService, string syndirection, string strName)
        {
            Entity logEntity = new Entity("new_error_log");
            logEntity["new_func_name"] = syndirection;//同步方向
            logEntity["new_name"] = strName;
            logEntity["new_date"] = DateTime.Now;
            crmService.Create(logEntity);
        }

        /// 
        /// 
        /// 
        /// 实体的code
        /// 失败内容
        /// 失败原因
        /// 
        /// 路径
        public static void createInterfaceHandlerLog_ZF(int ent_Opt, string requestContent, string errorMessage, IOrganizationService crmService, string logPathFile)
        {
            try
            {
                Entity interfaceHandlerEntity = new Entity("new_interface_handler");
                interfaceHandlerEntity["new_entity"] = new OptionSetValue(ent_Opt);
                interfaceHandlerEntity["new_execution_mode"] = true;    //Asynchronous
                interfaceHandlerEntity["statuscode"] = new OptionSetValue(100000002);
                interfaceHandlerEntity["new_request_content"] = requestContent;
                interfaceHandlerEntity["new_failure_reason"] = errorMessage;
                crmService.Create(interfaceHandlerEntity);
            }
            catch (Exception ex)
            {
                Log.WriteLog("Create Interface Handler Log Error: " + ex.Message + "; RequestContent: " + requestContent + "; ErrorMessage: " + errorMessage, logPathFile);
            }
        }

        /// 
        /// Interface Handler Status
        /// 
        public enum HandleStatus
        {
            NotHandle = 1,
            Handling = 100000000,
            Succeeded = 100000001,
            Failed = 100000002
        }
    }
}

你可能感兴趣的:(html,c#)