猿问

CRM 工作流:如何从子网格中获取所有记录作为实体列表并执行多次检索

正如标题所暗示的,我不知道如何将 entity.attributes ["subgrid"] 转换为实体列表,在其上运行多重检索:


我现在的代码:


protected override void Execute(CodeActivityContext executionContext)

    {

        ITracingService tracingService = executionContext.GetExtension<ITracingService>();

        IWorkflowContext context = executionContext.GetExtension<IWorkflowContext>();

        IOrganizationServiceFactory serviceFactory = executionContext.GetExtension<IOrganizationServiceFactory>();

        IOrganizationService service = serviceFactory.CreateOrganizationService(context.UserId);


        var entity = (Entity)context.InputParameters["Target"];


        if (entity.LogicalName != "account")

        {

            return;

        }

        var currentAccountId = entity.Id;

        try

        {

            if (!entity.Contains("Subgrid"))

            {

                return;

            }

            var itemsOnSubgrid = entity.Attributes["Subgrid"];

            if(itemsOnSubgrid == null)

            {

                return;

            }

            else

            {

                //if subgrid exist and is not null

                //List of entities needed

            }

        }

        catch (Exception ex)

        {

            tracingService.Trace("MyWorkflow: {0}", ex.ToString());

            throw new InvalidPluginExecutionException(ex.Message);

        }

    }



婷婷同学_
浏览 166回答 2
2回答

摇曳的蔷薇

假设您正在寻找一种方法来获取特定记录的所有关联记录。如果是这样的话,我会写这样的东西。希望有帮助。private EntityCollection GetAssociatedRecords(string relationshipName, string relatedEntityName, string entityName, Guid entityId,OrganizationService service)&nbsp; &nbsp; &nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; EntityCollection result = null;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; try&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; QueryExpression query = new QueryExpression();&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; query.EntityName = relatedEntityName;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; query.ColumnSet = new ColumnSet(false);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Relationship relationship = new Relationship();&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; relationship.SchemaName = relationshipName;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; relationship.PrimaryEntityRole = EntityRole.Referencing;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; RelationshipQueryCollection relatedEntity = new RelationshipQueryCollection();&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; relatedEntity.Add(relationship, query);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; RetrieveRequest request = new RetrieveRequest();&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; request.RelatedEntitiesQuery = relatedEntity;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; request.ColumnSet = new ColumnSet(true);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; request.Target = new EntityReference&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Id = entityId,&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; LogicalName = entityName&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; };&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; RetrieveResponse response = (RetrieveResponse)service.Execute(request);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; RelatedEntityCollection relatedEntityCollection = response.Entity.RelatedEntities;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (relatedEntityCollection.Count > 0)&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (relatedEntityCollection.Values.Count > 0)&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; result = (EntityCollection)relatedEntityCollection.Values.ElementAt(0);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; catch (Exception exception)&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; throw exception;&nbsp;&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return result;&nbsp; &nbsp; &nbsp; &nbsp; }根据其他实体的角色,在引用和引用之间更改主要实体角色。希望有帮助。让我知道我的假设是否错误。

慕容708150

当您在自定义工作流程序集中编写代码时 - 此时的实体对调用它的表单一无所知,并且没有允许您访问相关记录的“子网格”属性。您将需要使用目标实体的“accountid”属性与联系人的“parentcustomerid”属性相关联,执行单独查询以检索相关联系人(作为示例)。
随时随地看视频慕课网APP
我要回答