使用c#

时间:2016-09-14 12:26:57

标签: dynamics-crm dynamics-crm-2013 dynamics-crm-online

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

代码:

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;

但是对于所有模块,有不同的名称与联系有关。例如,它是parentcontactid但发票是customerid。

那么是否存在与实体名称中的联系人相关的获取属性名称的解决方案?因为如果每个实体的其他内容都不像我在启动时那样解决。

请建议我回答。

1 个答案:

答案 0 :(得分:1)

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

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

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