无法通过 Dynamics 365 Web API 从市场营销列表中删除联系人



我很难通过Dynamics 365 CRM的Web API从营销列表中删除(取消链接(联系人记录。我能够使用以下逻辑成功地将联系人记录链接到营销列表:

var payload =
new JObject(
new JProperty("List",
new JObject(
new JProperty("listid", listId),
new JProperty("@odata.type", "Microsoft.Dynamics.CRM.list"))),
new JProperty("Members",
new JArray(
from c in contactIds
select new JObject(
new JProperty("contactid", c),
new JProperty("@odata.type", "Microsoft.Dynamics.CRM.contact")))));
var request = new HttpRequestMessage(HttpMethod.Post, $"AddListMembersList")
{
Content = new StringContent(JsonConvert.SerializeObject(payload), Encoding.UTF8, "application/json")
};
var response = httpClient.SendAsync(request).Result;

在learn.microsoft.com上的Web API RemoveListMembersList Action参考页中,RemoveListMembers List似乎应该使用类似的方法。所以我试着这样取消联系:

var payload =
new JObject(
new JProperty("List",
new JObject(
new JProperty("listid", listId),
new JProperty("@odata.type", "Microsoft.Dynamics.CRM.list"))),
new JProperty("Members",
new JArray(
from c in contactIds
select new JObject(
new JProperty("contactid", c),
new JProperty("@odata.type", "Microsoft.Dynamics.CRM.contact")))));
var request = new HttpRequestMessage(HttpMethod.Post, "RemoveListMembersList")
{
Content = new StringContent(JsonConvert.SerializeObject(payload), Encoding.UTF8, "application/json")
};
var response = httpClient.SendAsync(request).Result;

但我得到了这个错误:

{
"error":{
"code":"","message":"Resource not found for the segment 'RemoveListMembersList'.","innererror":{
"message":"Resource not found for the segment 'RemoveListMembersList'.","type":"Microsoft.OData.Core.UriParser.ODataUnrecognizedPathException","stacktrace":"   at Microsoft.OData.Core.UriParser.Parsers.ODataPathParser.CreateFirstSegment(String segmentText)rn   at Microsoft.OData.Core.UriParser.Parsers.ODataPathParser.ParsePath(ICollection`1 segments)rn   at Microsoft.OData.Core.UriParser.Parsers.ODataPathFactory.BindPath(ICollection`1 segments, ODataUriParserConfiguration configuration)rn   at Microsoft.OData.Core.UriParser.ODataUriParser.Initialize()rn   at System.Web.OData.Routing.DefaultODataPathHandler.Parse(IEdmModel model, String serviceRoot, String odataPath, ODataUriResolverSetttings resolverSettings, Boolean enableUriTemplateParsing)rn   at System.Web.OData.Routing.DefaultODataPathHandler.Parse(IEdmModel model, String serviceRoot, String odataPath)rn   at Microsoft.Crm.Extensibility.OData.CrmODataPathHandler.Parse(IEdmModel model, String serviceRoot, String odataPath)"
}
}
}

请求URI为:

http://baseEnvUrl/api/data/v8.2/RemoveListMembersList

改变";RemoveListMembersList"至";Microsoft.Dynamics.CRM.RemoveListMembersList"没有帮助。

我还尝试使用一种不同的方法:

var payload =
new JObject(
new JProperty("ListMember",
new JObject(
new JProperty("listmemberid", contactId),
new JProperty("@odata.type", "Microsoft.Dynamics.CRM.listmember"))));
var request = new HttpRequestMessage(HttpMethod.Post, $"lists({listId})/Microsoft.Dynamics.CRM.RemoveMemberList")
{
Content = new StringContent(JsonConvert.SerializeObject(payload), Encoding.UTF8, "application/json")
};
var response = httpClient.SendAsync(request).Result;

请求URI为:

http://baseEnvUrl/api/data/v8.2/lists(be7afd88-75d9-eb11-80dc-000d3a54c8ce)/Microsoft.Dynamics.CRM.RemoveMemberList

但是这个请求返回了一个不同的错误:

{
"error":{
"code":"","message":"Request message has unresolved parameters.","innererror":{
"message":"Request message has unresolved parameters.","type":"Microsoft.Crm.CrmHttpException","stacktrace":"   at Microsoft.Crm.Extensibility.OData.CrmODataRoutingConvention.SelectAction(ODataPath odataPath, HttpControllerContext controllerContext, ILookup`2 actionMap)rn   at System.Web.OData.Routing.ODataActionSelector.SelectAction(HttpControllerContext controllerContext)rn   at System.Web.Http.ApiController.ExecuteAsync(HttpControllerContext controllerContext, CancellationToken cancellationToken)rn   at System.Web.Http.Dispatcher.HttpControllerDispatcher.<SendAsync>d__1.MoveNext()"
}
}
}

这些请求出了什么问题?

我知道对你来说可能已经太晚了,但这是我的功能,以防有人偶然发现这个问题:

public static string UpdateMarkertingList(bool add, string listId, string contactId, HttpClient client)
{
string addOrRemove = add ? "AddListMembersList" : "RemoveListMembersList";
JObject jObject =
new JObject(
new JProperty("List",
new JObject(
new JProperty("listid", listId),
new JProperty("@odata.type", "Microsoft.Dynamics.CRM.list"))),
new JProperty("Members",
new JArray(
new JObject(
new JProperty("accountid", contactId),
new JProperty("@odata.type", "Microsoft.Dynamics.CRM.account")))));
var mlistCreateResponse = client.PostAsync(addOrRemove,
new StringContent(JObject.FromObject(jObject).ToString(),
Encoding.UTF8,
"application/json"));
return mlistCreateResponse.Result.StatusCode.ToString();
}

在我的案例中,该问题是由8.2版本的Dynamics CRM不支持RemoveListMembersList操作引起的。似乎从9.0或9.1版本开始就支持它。

最新更新