hahahhahaha

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);

posted @ 2016-10-14 10:44  SupermanBlog  阅读(1205)  评论(0编辑  收藏  举报