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方法,用于获取实体的多个实例,该方法的签名如下 ...
随机推荐
- 新唐Cortex-M0微控制器的省电管理
新唐科技的NUC1xx包含NUC101.NUC100.NUC120.NUC130和NUC140,是以ARM Cortex-M0为核心的32位微控制器(MCU),经由不同时钟的设定,最高可以达到 50M ...
- WPF之Binding的使用
引出: 在WPF中Binding可以比作数据的桥梁,桥梁的两端分别是Binding的源(Source)和目标(Target).一般情况下,Binding源是逻辑层对象,Binding目标是UI层的控件 ...
- hdu 1042
貌似之前也写过这个题目的解题报告...老了,记性不好 从贴一遍吧! 代码理解很容易 AC代码: #include <iostream> #include <stdio.h> # ...
- C#生成Code39(extend)条形码【非条形码字体】
Code39是条形码的一种.由于编制简单.能够对任意长度的数据进行编码.支持设备广泛等特性而被广泛采用. 能够对任意长度的数据进行编码.其局限在于印刷品的长度和条码阅读器的识别范围. 支持设备广泛.目 ...
- 会话控制session,cookie(0521)
简单介绍: 一.什么是session? 1. 定义: Session,在计算机中,尤其是在网络应用中,称为“会话”.在计算机专业术语中,Session是指一个终端用户与交互系统进行通信的时间间隔,通常 ...
- vmware安装Linux时无法打开xpdf
vmware10+redhat9 在装第二张镜像文件时,出现如下提示:无法打开xpdf-2.01-8软件包...... 解决方法: vmware中,虚拟机->设置->硬件->CD/D ...
- android DatePickerDialog配合edittext实现按日期查询
我们从网上一搜DatePickerDialog相关实现,大多都是默认的形式,也就是不带取消按钮.下边上我的代码:我将代码简单的封装到一个工具类里边 public static DatePickerDi ...
- cf Ping-Pong (Easy Version)
http://codeforces.com/contest/320/problem/B 这道题看了很长时间没看懂, 就是个dfs: #include <cstdio> #include & ...
- 【转】精简深拷贝ArrayList实例
原文网址:http://gghhgame51333.blog.51cto.com/138362/289383 精简深拷贝ArrayList实例(包括递归和序列化方法) 2007-07-12 16:50 ...
- libeXosip2(2-2) -- eXosip2 network API
eXosip2 network API General purpose API. Functions int eXosip_transport_set (osip_message_t *msg, c ...