Dynamics CRM 常用 C# 方法集合
Plugin(C#)
分派
AssignRequest assign = new AssignRequest();
assign.Assignee = prEntity["ownerid"] as EntityReference;
assign.Target = new EntityReference("new_budgetused", new_budgetusedId);
_service.Execute(assign);
共享
#region 插件中CRM共享共用方法
/// <summary>
/// 共享
/// </summary>
/// <param name="initentityName">要求共享的实体名称</param>
/// <param name="userId">要求共享的实体GUID</param>
/// <param name="entityName">指定共享的实体名称</param>
/// <param name="entityId">指定共享的实体GUID</param>
/// <param name="service">CRM组织服务</param>
private void ShareEntity(string initentityName, Guid userId, string entityName, Guid entityId, IOrganizationService service)
{
GrantAccessRequest grant = new GrantAccessRequest();
grant.PrincipalAccess = new PrincipalAccess
{
//读、写、附加等权限共享
AccessMask = AccessRights.ReadAccess | AccessRights.WriteAccess | AccessRights.AppendAccess,
Principal = new EntityReference(initentityName, userId)//共享给某个用户
};
grant.Target = new EntityReference(entityName, entityId);//要共享的对象
service.Execute(grant);
}
#endregion
取消共享
public void RevokeShareRecords(string LogicName,string targetEntityName,string usedAttrName, IOrganizationService service, Guid targetEntityId,string[] attrs,object[] values,string[] columnSet)
{
QueryByAttribute query = new QueryByAttribute(LogicName);
query.Attributes.AddRange(attrs);
query.Values.AddRange(values);
query.ColumnSet = new ColumnSet(columnSet);
EntityCollection userCollection = service.RetrieveMultiple(query);
foreach (Entity entity in userCollection.Entities)
{
//Guid AttrId = (Guid)entity.Attributes[SegmentInfo.SystemUserId];
Guid UserId = (Guid)entity.Attributes[usedAttrName];
EntityReference er = new EntityReference("systemuser", UserId);
RevokeAccessRequest revokeAccessRequest = new RevokeAccessRequest {
Revokee = new EntityReference("systemuser", UserId),
Target = new EntityReference(targetEntityName, targetEntityId)
};
service.Execute(revokeAccessRequest);
}
}
查询
string fetchxml = @"<fetch version='1.0' output-format='xml-platform' mapping='logical' distinct='false'>
<entity name='" + objecttype + @"'>
<attribute name='new_name' />
<filter type='and'>
<condition attribute='statecode' operator='eq' value='0' />
<condition attribute='new_name' operator='eq' value='" + name + @"' />
</filter>
</entity>
</fetch>";
EntityCollection entityCollection = service.RetrieveMultiple(new FetchExpression(fetchxml));
获取最顶级的上下文,用于获取当前操作用户
public IPluginExecutionContext GetTopContext(IPluginExecutionContext currentContext)
{
IPluginExecutionContext topContext = currentContext;
for (int i = 0; i <= currentContext.Depth; i++)
{
if (topContext.ParentContext != null)
{
topContext = topContext.ParentContext;
}
}
return topContext;
}
获取sharepoint上的文档
public static DataCollection<Entity> RetrieveSharepointNotes(IOrganizationService service)
{
QueryExpression query = new QueryExpression("annotation")
{
//ColumnSet = new ColumnSet(true),
Criteria =
{
Filters =
{
new FilterExpression(LogicalOperator.Or)
{
Conditions =
{
new ConditionExpression("subject",ConditionOperator.Equal, "Attachment Error"),
},
Filters =
{
new FilterExpression(LogicalOperator.And)
{
Conditions =
{
new ConditionExpression("subject", ConditionOperator.Equal, "File Attachment"),
new ConditionExpression("notetext", ConditionOperator.Like, "http://spark.partners.extranet.microsoft.com%"),
}
}
}
}
}
}
};
EntityCollection ec = service.RetrieveMultiple(query);
return ec.Entities;
}
Query 转化为FetchXML/ FetchXML转化为Query
public static string ConvertQueryToFetchXml(QueryExpression query, IOrganizationService crmService)
{
QueryExpressionToFetchXmlRequest request = new QueryExpressionToFetchXmlRequest();
request.Query = query;
QueryExpressionToFetchXmlResponse response
= (QueryExpressionToFetchXmlResponse)crmService.Execute(request);
return response.FetchXml;
}
public static QueryExpression ConvertFetchXmlToQuery(string fetchXml, IOrganizationService crmService)
{
FetchXmlToQueryExpressionRequest fetchXmlRequest = new FetchXmlToQueryExpressionRequest();
fetchXmlRequest.FetchXml = fetchXml;
FetchXmlToQueryExpressionResponse fetchXmlResponse
= (FetchXmlToQueryExpressionResponse)crmService.Execute(fetchXmlRequest);
return fetchXmlResponse.Query;
}
获取optionset字段的显示名
//string name = GetPickListText("opportunity", "new_opportunitystate", 0, service);
public static string GetPickListText(string entityName, string attributeName, int optionSetValue, IOrganizationService service)
{
string AttributeName = attributeName;
string EntityLogicalName = entityName;
RetrieveEntityRequest retrieveDetails = new RetrieveEntityRequest();
retrieveDetails.EntityFilters = EntityFilters.All;
retrieveDetails.LogicalName = EntityLogicalName;
RetrieveEntityResponse retrieveEntityResponseObj = (RetrieveEntityResponse)service.Execute(retrieveDetails);
EntityMetadata metadata = retrieveEntityResponseObj.EntityMetadata;
PicklistAttributeMetadata picklistMetadata = metadata.Attributes.FirstOrDefault(attribute => String.Equals(attribute.LogicalName, attributeName, StringComparison.OrdinalIgnoreCase)) as PicklistAttributeMetadata;
OptionSetMetadata options = picklistMetadata.OptionSet;
IList<OptionMetadata> picklistOption = (from o in options.Options where o.Value.Value == optionSetValue select o).ToList();
string picklistLabel = (picklistOption.First()).Label.UserLocalizedLabel.Label;
return picklistLabel;
}
改变记录的状态
public static void ChangeRecordState(IOrganizationService service, EntityReference entityMoniker, OptionSetValue state, OptionSetValue status)
{
SetStateRequest req = new SetStateRequest
{
EntityMoniker = entityMoniker,
State = state,
Status = status
};
service.Execute(req);
}
从template创建邮件
public static void CreateEmailFromTemplate(IOrganizationService service, EntityCollection sendFromCol, EntityCollection sendToCol, string emailSubject, string previewTriggerVaule, EntityReference regard, Guid contactId, Entity template, string btnOrder)
{
if (template != null)
{
// Use the InstantiateTemplate message to create an e-mail message using a template.
InstantiateTemplateRequest instTemplateReq = new InstantiateTemplateRequest
{
TemplateId = template.Id,
ObjectId = contactId,
ObjectType = "contact"
};
InstantiateTemplateResponse instTemplateResp = (InstantiateTemplateResponse)service.Execute(instTemplateReq);
Entity email = instTemplateResp.EntityCollection.Entities[0];
email.Attributes["new_campaigninvatationid"] = previewTriggerVaule;
email.Attributes["subject"] = emailSubject;
email.Attributes.Add("from", sendFromCol);
service.Create(email);
}
}
查询N:N记录
public static EntityCollection RetrieveNNRecords(IOrganizationService service, Guid ToEntityId, string FromEntity, string ToEntity, string RelationShip)
{
QueryExpression qe = new QueryExpression()
{
EntityName = FromEntity,
ColumnSet = new ColumnSet(true),
Criteria =
{
FilterOperator = LogicalOperator.And,
Conditions =
{
new ConditionExpression("statecode",ConditionOperator.Equal,0)
}
},
LinkEntities =
{
new LinkEntity()
{
LinkFromEntityName = FromEntity,
LinkToEntityName = RelationShip,
LinkFromAttributeName = FromEntity+"id",
LinkToAttributeName = FromEntity+"id",
EntityAlias = RelationShip,
Columns = new ColumnSet(),
JoinOperator = JoinOperator.Inner,
LinkEntities =
{
new LinkEntity()
{
LinkFromEntityName = FromEntity,
LinkToEntityName = ToEntity,
LinkFromAttributeName = ToEntity+"id",
LinkToAttributeName = ToEntity+"id",
EntityAlias =ToEntity,
Columns = new ColumnSet(),
JoinOperator = JoinOperator.Inner,
LinkCriteria = new FilterExpression
{
Conditions =
{
new ConditionExpression
{
AttributeName = ToEntity+"id",
Operator = ConditionOperator.Equal,
Values = {
ToEntityId
}
}
}
}
}
}
}
}
};
return service.RetrieveMultiple(qe);
}
}
用户是否有指定的security role
public static bool UserHaveSpeficySecurityRole(IOrganizationService service, string roleName, Guid userID)
{
bool result = false;
QueryExpression query = new QueryExpression()
{
EntityName = "role",
ColumnSet = new ColumnSet(),
Criteria = new FilterExpression { FilterOperator = LogicalOperator.And, Conditions = { newConditionExpression { AttributeName = "name", Operator = ConditionOperator.Equal, Values = { roleName } } } },
LinkEntities =
{
new LinkEntity
{
LinkFromEntityName = "role",
LinkFromAttributeName = "roleid",
LinkToEntityName = "systemuserroles",
LinkToAttributeName = "roleid",
LinkCriteria = new FilterExpression
{
FilterOperator = LogicalOperator.And,
Conditions =
{
new ConditionExpression
{
AttributeName = "systemuserid",
Operator = ConditionOperator.Equal,
Values = { userID}
}
}
}
}
}
};
EntityCollection resultColl = service.RetrieveMultiple(query);
result = resultColl.Entities.Count > 0 ? true : false;
return result;
}
查询一条记录分派给哪些用户
public static List<EntityReference> RetrieveSharedPrincipalsAndAccess(IOrganizationService service, EntityReference entityRef)
{
try
{
var accessRequest = new RetrieveSharedPrincipalsAndAccessRequest
{
Target = entityRef
};
RetrieveSharedPrincipalsAndAccessResponse accessResponse = (RetrieveSharedPrincipalsAndAccessResponse)service.Execute(accessRequest);
List<EntityReference> accessList = null;
if (accessResponse != null && accessResponse.PrincipalAccesses.Length > 0)
{
accessList = new List<EntityReference>();
for (int i = 0; i < accessResponse.PrincipalAccesses.Length; i++)
{
EntityReference accessOwner = accessResponse.PrincipalAccesses[i].Principal;
accessList.Add(accessOwner);
}
}
return accessList;
}
catch (Exception e)
{
throw new Exception("Customized Plugin RetrieveSharedPrincipalsAndAccess Error: " + e.Message);
}
}
拿到拥有指定security role的所有用户
public static ArrayList getUsersinRole(string Role_Name, IOrganizationService service)
{
ArrayList usersinrole = new ArrayList();
StringBuilder fetch2 = new StringBuilder();
fetch2.Append("<fetch mapping='logical' count='50' version='1.0'> ");
fetch2.Append(" <entity name='systemuser'>");
fetch2.Append(" <attribute name='fullname'/> ");
fetch2.Append(" <link-entity name='systemuserroles' to='systemuserid' from='systemuserid'> ");
fetch2.Append(" <link-entity name='role' to='roleid' from='roleid'> ");
fetch2.Append(" <filter> ");
fetch2.Append(" <condition attribute='name' operator='eq' value='" + Role_Name + "'/> ");
fetch2.Append(" </filter> ");
fetch2.Append(" </link-entity> ");
fetch2.Append(" </link-entity>");
fetch2.Append(" </entity> ");
fetch2.Append("</fetch>");
EntityCollection result = service.RetrieveMultiple(new FetchExpression(fetch2.ToString()));
foreach (var c in result.Entities)
{
usersinrole.Add(c.Attributes["fullname"].ToString());
}
return usersinrole;
}
判断用户是否是某团队的一员
public bool IsMemberInTeam(IOrganizationService service, Guid teamId, Guid memberId)
{
OrganizationServiceContext context = new OrganizationServiceContext(service);
var query = from relationship in context.CreateQuery("teammembership")
where relationship.GetAttributeValue<Guid>("teamid") == teamId
&& relationship.GetAttributeValue<Guid>("systemuserid") == memberId
select relationship;
return query.FirstOrDefault() != null;
}
添加用户到一个团队
OrganizationRequest request = new AddMembersTeamRequest { MemberIds = new Guid[] { user.Id }, TeamId = team.Id };
var response = service.Execute(request) as AddMembersTeamResponse;
C# 分页查询记录
public static void DoTest(IOrganizationService service)
{
// Query using the paging cookie.
// Define the paging attributes.
// The number of records per page to retrieve.
int fetchCount = 20;
// Initialize the page number.
int pageNumber = 1;
// Define the order expression to retrieve the records.
OrderExpression order = new OrderExpression();
order.AttributeName = "name";
order.OrderType = OrderType.Ascending;
// Create the query expression and add condition.
QueryExpression pagequery = new QueryExpression();
pagequery.EntityName = "opportunity";
// pagequery.Criteria.AddCondition(pagecondition);
pagequery.Orders.Add(order);
pagequery.ColumnSet.AddColumns();
// Assign the pageinfo properties to the query expression.
pagequery.PageInfo = new PagingInfo();
pagequery.PageInfo.Count = fetchCount;
pagequery.PageInfo.PageNumber = pageNumber;
// The current paging cookie. When retrieving the first page,
// pagingCookie should be null.
pagequery.PageInfo.PagingCookie = null;
while (true)
{
// Retrieve the page.
EntityCollection results = service.RetrieveMultiple(pagequery);
if (results.Entities != null)
{
for (int i = 0; i < results.Entities.Count;i++ )
{
Console.WriteLine(" {0} {1}", results.Entities[i].Id, i + 1);
}
}
// Check for more records, if it returns true.
if (results.MoreRecords)
{
// Increment the page number to retrieve the next page.
pagequery.PageInfo.PageNumber++;
// Set the paging cookie to the paging cookie returned from current results.
pagequery.PageInfo.PagingCookie = results.PagingCookie;
}
else
{
// If no more records are in the result nodes, exit the loop.
break;
}
}
}
更新用户所在的业务部门
SetBusinessSystemUserRequest req = new SetBusinessSystemUserRequest();
req.BusinessId = Guid.Parse("52A18602-09B8-E511-80C2-807DB137DB06"); BU的GUID
req.UserId = Guid.Parse("7F038A46-5BB4-E511-80C6-DD48FB4179EC"); User的GUID
req.ReassignPrincipal = new EntityReference("systemuser", Guid.Parse("7F038A46-5BB4-E511-80C6-DD48FB4179EC")); User的GUID
service.Execute(req);
Dynamics CRM 常用 C# 方法集合的更多相关文章
- Dynamics CRM 常用 JS 方法集合
JS部分 拿到字段的值 var value= Xrm.Page.getAttribute("attributename").getValue(); Xrm.Page.getAttr ...
- Microsoft Dynamics CRM 常用JS语法(已转成vs2017语法提示)
背景 最近接触到Microsoft Dynamics CRM的开发.前端js是必不可少的部分,奈何没有一个语法提示,点不出来后续的语句. 在vscode上面搜索插件的时候发现,有一个大神写的插件htt ...
- Microsoft Dynamics CRM4.0 和 Microsoft Dynamics CRM 2011 JScript 方法对比
CRM 2011 如果需要再IE里面调试,可以按F12在前面加上contentIFrame,比如 contentIFrame.document.getElementById("字段" ...
- Dynamics CRM 常用的JS
常用JS(一) Xrm.Page.context.getUserId(): //获取当前用户id Xrm.Page.context.getUserName(): //获取当前用 ...
- javascript技巧及常用事件方法集合(全)
事件源对象 event.srcElement.tagName event.srcElement.type 捕获释放 event.srcElement.setCapture(); event.srcE ...
- Dynamics CRM plugin调试方法之Profiler
https://blog.csdn.net/vic0228/article/details/72903815
- c#一些常用的方法集合
是从一个asp.net mvc的项目里看到的.挺实用的. 通过身份证号码获取出生日期和性别 通过身份证号码获取出生日期和性别 #region 由身份证获得出生日期 public static stri ...
- 常用js方法集合
var func={ //对象转jsonstring getJsonStr: function(jsonObj) { var temp = []; for (var key in jsonObj) { ...
- Microsoft Dynamics CRM 2011的组织服务中的RetrieveMultiple方法(转)
本篇文章,介绍Microsoft Dynamics CRM 2011的组织服务中的RetrieveMultiple方法. RetreiveMultiple方法,用于获取实体的多个实例,该方法的签名如下 ...
随机推荐
- uploadify3.1 参数 中文详解
langFile: 'http://www.static-xxx.nu/uploader/uploadifyLang_en.js',//语言包的路径,能设置所有的提示文字 swf: 'http://w ...
- ICE 介绍及实现
.ICE是什么? ICE是ZEROC的开源通信协议产品,它的全称是:The Internet Communications Engine,翻译为中文是互联网通信引擎,是一个面向对象的中间件,使我们能够 ...
- angularJS环境安装
第一步: 安装node.js,进入node.js官网(http://nodejs.org/)下载安装相应的node.js版本:
- (转)jQuery插件开发全解析
jQuery插件的开发包括两种: 一种是类级别的插件开发,即给jQuery添加新的全局函数,相当于给jQuery类本身添加方法.jQuery的全局函数就是属于jQuery命名空间的函数,另一种是对象级 ...
- AngularJs练习Demo15自定义服务
@{ Layout = null; } <!DOCTYPE html> <html> <head> <meta name="viewport&quo ...
- JSON.parse(),JSON.stringify(),jQuery.parseJSON()的用法
1. JSON.parse(jsonString): 在一个字符串中解析出JSON对象 var str = '[{"href":"baidu.com",&quo ...
- GDI相关基础知识
原文链接:http://blog.csdn.net/poem_qianmo/article/details/7333886 GDI(Graphics Device Interface) 图形设备接口, ...
- ZOJ3558 How Many Sets III(公式题)
转载请注明出处: http://www.cnblogs.com/fraud/ ——by fraud How Many Sets III Time Limit: 2 Seconds ...
- uva 1595 - Symmetry
思路:首先,如果这些点对称,那么它们的对称轴是x = m(m是所有点横坐标的平均值): 把这些点放到一个集合里,然后扫描每个点,计算出它关于x = m的对称点,看这个点是否在集合里面. 如果有 ...
- nginx_http核心模块(二)
对一些常用的配置项做一些解释:详细请看官方文档:http://nginx.org/en/docs/http/ngx_http_core_module.html 1. alias Syntax: ali ...