按名称获取营销列表 ID

Get Marketing list ID by name

我正在尝试根据列表名称获取在 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 的管理员能够识别用户在我们网站上填写时事通讯表格时应该添加到的营销列表。我觉得让他们找营销列表的guid会过分(自己费了一番工夫才找到的)

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

retrieve 使用 RetrieveRequest 的实体记录,该实体的架构名称 (DB table) 应作为第一个参数传递,主键 (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);

以下代码获取 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;