Dynamics crm MSCRM,检索实体表单列表

Dynamics crm MSCRM,检索实体表单列表,dynamics-crm,Dynamics Crm,我需要一个给定实体(多种形式)的所有表格列表;我知道客户端Javascript代码中有一个解决方案,但我使用的是服务器端代码 我尝试使用此消息获取实体元数据,但在那里找不到: RetrieveEntityRequest mdRequest = new RetrieveEntityRequest() { EntityFilters = EntityFilters.All, LogicalName = entityName, Retri

我需要一个给定实体(多种形式)的所有表格列表;我知道客户端Javascript代码中有一个解决方案,但我使用的是服务器端代码

我尝试使用此消息获取实体元数据,但在那里找不到:

    RetrieveEntityRequest mdRequest = new RetrieveEntityRequest()
    {
        EntityFilters = EntityFilters.All,
        LogicalName = entityName,
        RetrieveAsIfPublished = false
    };
我尝试检索实体FormXML,但它也不存在:

private string GetFormXML(int objectTypeCode)
{
        QueryExpression q = new QueryExpression("systemform");
        q.ColumnSet = new ColumnSet("formxml");
        q.Criteria.AddCondition(new ConditionExpression("type", ConditionOperator.Equal, 2));
        q.Criteria.AddCondition(new ConditionExpression("objecttypecode", ConditionOperator.Equal, objectTypeCode));

        var entities = ctx.OrganizationService.RetrieveMultiple(q);

        if (entities != null)
        {
            return entities.Entities.First().Attributes["formxml"].ToString();
        }
        else
        {
            return "";
        }
}

有什么建议吗?

我认为systemform实体将objecttypecode作为字符串,它接受实体名称,而不是真正的实体对象类型代码。能否尝试将对象类型代码从数字更改为实体名称

private string GetFormXML(int objectTypeCode)
{
        QueryExpression q = new QueryExpression("systemform");
        q.ColumnSet = new ColumnSet("formxml");
        q.Criteria.AddCondition(new ConditionExpression("type", ConditionOperator.Equal, 2));
        q.Criteria.AddCondition(new ConditionExpression("objecttypecode", ConditionOperator.Equal, "contact"));

        var entities = ctx.OrganizationService.RetrieveMultiple(q);

        if (entities != null)
        {
            return entities.Entities.First().Attributes["formxml"].ToString();
        }
        else
        {
            return "";
        }
}
公共字典GetNevegationItems(int objectTypeCode)
{
QueryExpression q=新的QueryExpression(“systemform”);
q、 ColumnSet=新列集(“名称”、“格式”);
q、 AddCondition(新的ConditionExpression(“type”,ConditionOperator.Equal,2));
q、 AddCondition(新的ConditionExpression(“objecttypecode”,ConditionOperator.Equal,objecttypecode));
var entities=ctx.OrganizationService.RetrieveMultiple(q);
if(实体!=null)
{
字典rslt=新字典();
foreach(entities.entities中的var项)
{
rslt.Add(item.GetAttributeValue(“formid”)、item.GetAttributeValue(“name”);
}
返回rslt;
}
其他的
{
返回null;
}
}

我在检索FormXml方面没有问题,我在那里找不到我要找的内容。我在找formid描述,你没试过吗?queryExpression.ColumnSet=新列集(“formxml”、“formid”、“description”);我尝试了你的代码,得到了“一个给定实体的所有表单的列表”,什么不适合你?
        public Dictionary<Guid, string> GetNevegationItems(int objectTypeCode)
    {
        QueryExpression q = new QueryExpression("systemform");
        q.ColumnSet = new ColumnSet("name", "formid");
        q.Criteria.AddCondition(new ConditionExpression("type", ConditionOperator.Equal, 2));
        q.Criteria.AddCondition(new ConditionExpression("objecttypecode", ConditionOperator.Equal, objectTypeCode));

        var entities = ctx.OrganizationService.RetrieveMultiple(q);

        if (entities != null)
        {
            Dictionary<Guid, string> rslt = new Dictionary<Guid, string>();
            foreach (var item in entities.Entities)
            {
                rslt.Add(item.GetAttributeValue<Guid>("formid"), item.GetAttributeValue<string>("name"));
            }
            return rslt;
        }
        else
        {
            return null;
        }
    }