REST API を使用して、MS Dynamics CRM 2011 で電話/電子メール レコードを作成し、後で更新する必要があるアプリケーションに取り組んでいます。Soap API の使用はオプションではありません。
電話/メールレコードを作成する方法を理解しました(これについては、こちら またはこちらで詳しく説明されています)。
既存の通話/メール記録自体の更新も問題ありません。
私の質問は、既存の電話/メール レコードの受信者フィールドと送信者フィールド (To と From) を更新するにはどうすればよいですか?
以下に説明するさまざまなアプローチを試しましたが、これまでのところ運がありません。
phonecall_activity_parties 関係を更新しようとするとエラーがError processing request stream. Deep updates are not supported in PUT operations.
発生します - 以下のコードを参照してください
var callLogEntity = {
"Subject": "My call", "Description": "Call comments go here" };
var activityParties = [];
activityParties.push({
"PartyId": {"Id":"4A9FD17D-5890-4BF0-94AA-D68285C46039", "LogicalName":"contact"},
"ParticipationTypeMask": { "Value": 1 }
}); // sender is a contact
activityParties.push({
"PartyId": { "Id": Xrm.Page.context.getUserId(), "LogicalName": "systemuser" },
"ParticipationTypeMask": { "Value": 2 }
}); // receiver is a current user
callLogEntity.phonecall_activity_parties = activityParties;
var restQueryUrl = "http://<crm_url>/XRMServices/2011/OrganizationData.svc/" +
"PhoneCallSet(guid'" + callLogId + "')";
$.ajax({
type: "POST",
contentType: "application/json; charset=utf-8",
datatype: "json",
data: JSON.stringify(callLogEntity),
url: restQueryUrl,
beforeSend: function (XMLHttpRequest)
{
XMLHttpRequest.setRequestHeader("Accept", "application/json");
XMLHttpRequest.setRequestHeader("X-HTTP-Method", "MERGE");
},
success: function (data, textStatus, XmlHttpRequest)
{
console.log("Success");
},
error: function (XmlHttpRequest, textStatus, errorObject)
{
console.warn("Request FAILED: " + XmlHttpRequest.responseText);
}
});
この SDK の例An activityparty cannot be disassociated from an activity
の disassociateRecords メソッドを使用してアクティビティの関連付けを解除しようとすると、エラーが発生します- 以下のコードを参照してください
var restQueryUrl = "http://<crm_url>/XRMServices/2011/OrganizationData.svc/" +
"PhoneCallSet(guid'" + callLogId + "')/$links/" +
"phonecall_activity_parties(guid'" + activityPartyId + "')";
$.ajax({
type: "POST",
contentType: "application/json; charset=utf-8",
url: restQueryUrl,
beforeSend: function (XMLHttpRequest)
{
XMLHttpRequest.setRequestHeader("Accept", "application/json");
XMLHttpRequest.setRequestHeader("X-HTTP-Method", "DELETE");
},
success: function (data, textStatus, XmlHttpRequest)
{
console.log("Success");
},
error: function (XmlHttpRequest, textStatus, errorObject)
{
console.warn("Request FAILED: " + XmlHttpRequest.responseText);
}
});
Forbidden
phonecall_activity_parties で見つかった ActivityParty の 1 つを ActivityPartySet から直接削除しようとすると、エラーが発生します。
var restQueryUrl = "http://<crm_url>/XRMServices/2011/OrganizationData.svc/" +
"ActivityPartySet(guid'" + activityPartyId + "')";
// then do an AJAX POST request with "X-HTTP-Method": "DELETE" header
そのリストから各 ActivityParty を個別に更新しても、通話レコードには影響しません (つまり、MERGE 要求は成功したように見えますが、ActivityParty はまだ古いレコードを指しています)。
var activityData = {
"PartyId":{"Id":"cc1cdb40-a844-e211-ab1a-000c297d9c06","LogicalName":"contact"},
"ParticipationTypeMask":{"Value":1}
};
var restQueryUrl = "http://<crm_url>/XRMServices/2011/OrganizationData.svc/" +
"ActivityPartySet(guid'" + activityPartyId + "')";
// then do an AJAX post request with "X-HTTP-Method": "MERGE" header
// and activityData as the message body
誰かが既存の電話/電子メール記録の送信者と受信者を変更する (または「フィールドをクリアする」のように削除する) 方法に光を当てることができれば、私はそれを大いに感謝します.