使用c#从dynamics crm中的每个实体获取与联系人相关的字段名称

Get field name which is related to contact from each entity in dynamics crm using c#

我有一个函数可以根据模块名称相关联系人获取数据。

代码:

if (modulename == "lead" || modulename == "opportunity")
{
    contactfield= "parentcontactid";
}
else if (modulename == "salesorder" || modulename == "quote" || modulename == "incident" || modulename == "invoice")
{
    contactfield= = "customerid";
}
else
{
}


quotequery = new QueryExpression()
{
    Distinct = false,
    EntityName = modulename,
    ColumnSet = new ColumnSet(true),
    Criteria =
    {
        Filters = 
        {
            new FilterExpression
            {
                FilterOperator = LogicalOperator.And,
                Conditions = 
                {
                    new ConditionExpression("ownerid", ConditionOperator.Equal, userid),                                
                    new ConditionExpression(contactfield, ConditionOperator.Equal, lstcredential.Contactid.ToString())                                                  
                },
            }           
        }
    }
};
 queryentityCollection = _serviceProxy.RetrieveMultiple(quotequery).Entities;

但是对于所有模块来说,都有不同的名称,这与 contact.for e.g.in lead 它是 parentcontactid 但对于 invoice 它是 customerid。

那么对于从实体名称中获取与联系人相关的属性名称有什么解决方案吗?因为每个实体的 else 都不是我在开始时所做的解决方案。

请建议我回答。

如果您要在有限的一组实体上查找特定的联系人查找,我会将其硬编码在名称值对集合中,类似于您正在做的,除了可能是键值对存储:

private Dictionary<String, String> _contactMappings = new Dictionary<String, String>{"lead", "parentcontactid"}, {"incident", "contactid"};

另一种方法是 querying metadata to look for contact lookups,并缓存结果,但您不知道哪个是正确的查找。例如 incident 有 3 个查找要联系(contactidresponsiblecontactidprimarycontactid)。