我很难通过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版本开始就支持它。