按名称

时间:2018-05-22 10:58:46

标签: c# asp.net dynamics-crm dynamics-crm-2011

我正在尝试根据列表名称获取在Microsoft Dynamics中创建的营销列表的ID。然后我将使用id将crm联系人添加到列表中(我可以使用列表的id做得很好)

我在文档中找不到任何解释如何执行此操作的说明。我尝试了以下代码,但我得到的错误是该名称没有实体存在:

    var request = new RetrieveRequest();
    request.Target = new EntityReference("new list 1", listId);
    RetrieveResponse response = _organizationService.Execute(request) as RetrieveResponse;

我最终要做的是让crm的管理员能够识别用户在我们网站上填写时事通讯表时应添加的营销列表。我认为要求他们找到营销清单的内容是太过分了(我自己找了一些工作需要花费一些时间)

任何人都可以共享一些代码,使用列表名称作为标识符来获取列表的ID,或者让我知道是否可以使用列表名称而不是id来将联系人添加到列表中?

2 个答案:

答案 0 :(得分:2)

以下代码获取Dynamics中name "new list 1"的所有列表。然后,如果找到一个或多个匹配项,则存储返回的第一个列表的Id;如果未找到匹配项,则存储Guid.Empty。在您的场景中,应该始终只有一个匹配。

var query = new QueryExpression
{
    EntityName = "list",
    ColumnSet = new ColumnSet(false)
};

query.Criteria.AddCondition("name", ConditionOperator.Equal, "new list 1";

var matchingLists = _organizationService.RetrieveMultiple(query);

var defaultListId = matchingLists?.Entities.FirstOrDefault()?.Id ?? Guid.Empty;

答案 1 :(得分:1)

使用RetrieveRequestretrieve实体记录,该实体的模式名称(DB表)应作为第一个参数传递,主键(GUID)作为第二个传递。对于营销列表,它是list& listid。您还应该提到ColumnSet。

request.Target = new EntityReference("list", listId);

但要实现您的目标,您必须使用querybyattribute或queryexpression,然后RetrieveMultiple将帮助您从列表名称中获取ID。

FilterExpression filter = new FilterExpression();
filter.FilterOperator = LogicalOperator.And;
filter.AddCondition(new ConditionExpression("name", ConditionOperator.Equal, "new list 1"));
QueryExpression query = new QueryExpression("list");
query.Criteria.AddFilter(filter);

var result = Context.SystemService.RetrieveMultiple(query);

之后使用AddListMembersListRequestAddMemberListRequest将成员添加到该列表中。

// Add a list of contacts to the marketing list.
var addMemberListReq = new AddListMembersListRequest
{
    MemberIds = new[] { _contactIdList[0], _contactIdList[2] },
    ListId = listId
};

_serviceProxy.Execute(addMemberListReq);