一、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
}
}
}