GUIDをハードコードして、その問題を発見したことは非常に悪いことです。 上記のとおり、同じGUIDを使用することはできませんが、同じ名前を使用しています。したがって、JScriptとjQueryを使用して国の名前を照会してGUIDを取得する必要があります。クライアント側(またはエンティティフォーム)からの情報をretireveするために
:
- 私たちは、RESTエンドポイント(ブラウザでのテスト)を消費/使用されます。
- アップロードjQueryライブラリ。
- アップロードJson2ライブラリ。
- jQueryライブラリのAJAX関数を使用します。
- エンティティ、列、条件を定義します。
解決策REST Endpointを照会します。
http://yourHostName/yourOrg/XRMServices/2011/OrganizationData.svc/new_CountrytSet?$select=new_Name,new_CountryId&$filter=new_Name eq 'Canada'
、このURLを取り、あなたの実際の値をsubsituteしてブラウザに貼り付けて、あなたはレスポンスがXML形式で返されることがわかります。エラーがある場合は、エンティティ名とその属性がcase senisitveであることを確認してください。
結果を確認した後、このURLをAJAX呼び出しを使用して呼び出します。
$.ajax({
type: "GET",
contentType: "application/json; charset=utf-8",
datatype: "json",
url: 'http://yourHostName/yourOrg/XRMServices/2011/OrganizationData.svc/new_CountrytSet?$select=new_Name,new_CountryId&$filter=new_Name eq 'Canada'',
beforeSend: function (XMLHttpRequest) {
//Specifying this header ensures that the results will be returned as JSON.
XMLHttpRequest.setRequestHeader("Accept", "application/json");
},
success: function (data) {
if (data.d && data.d.results) {
//var _canadaId = "{FC167B4D-1C3B-E111-8904-F2EA3FE25706}"; no longer be used
var _canadaId = data.d.results[0].ContactId;
// now we have the GUID of Canada, now I can continue my process
}
},
error: function (XmlHttpRequest) {
alert("Error : " + XmlHttpRequest.status + ": " + XmlHttpRequest.statusText + ": " + JSON.parse(XmlHttpRequest.responseText).error.message.value);
}
});
しかし、あなたはあなたのコードをフォームにコピーする前に、あなたは、フォームのロードLIBSに、このWebリソースを追加し、Webリソースとしてアップロードhere からのjQueryのlibをダウンロードする必要があります。ここで
は、フォームのLoadイベントハンドラに入れるべき完全なコードです:
var context = GetGlobalContext();
// retireve the invoice record id (Opened Form)
var invoiceId = context.getQueryStringParameters().id;
var customerId;
//Retrieve the server url, which differs on-premise from on-line and
//shouldn't be hard-coded.
// this will return something like http://yourHostName/yourOrg
var serverUrl = context.getServerUrl();
//The XRM OData end-point
var ODATA_ENDPOINT = "/XRMServices/2011/OrganizationData.svc";
var odataUri = serverUrl + ODATA_ENDPOINT;
function SetDefaultCountryCode(countryFieldId, odataUri) {
odataUri = odataUri + '/ContactSet?$select=ContactId,FullName&$filter=FullName eq \'Ahmed Shawki\'';
$.ajax({
type: "GET",
contentType: "application/json; charset=utf-8",
datatype: "json",
url: odataUri,
beforeSend: function (XMLHttpRequest) {
//Specifying this header ensures that the results will be returned as JSON.
XMLHttpRequest.setRequestHeader("Accept", "application/json");
},
success: function (data) {
if (data.d && data.d.results) {
//var _canadaId = "{FC167B4D-1C3B-E111-8904-F2EA3FE25706}"; no longer be used
var _canadaId = data.d.results[0].ContactId;
var countryControl = Xrm.Page.getAttribute(countryFieldId);
// only attempt the code if the control exists on the form
if (countryControl != null) {
var currentCountry = countryControl.getValue();
// if country is not specified, then set it to the default one (Canada)
if (currentCountry == null) {
var defaultCountry = new Object();
defaultCountry.entityType = "cga_country";
defaultCountry.id = _canadaId;
defaultCountry.name = "Canada";
var countryLookupValue = new Array();
countryLookupValue[0] = defaultCountry;
countryControl.setValue(countryLookupValue);
}
}
}
},
error: function (XmlHttpRequest) {
alert("Error : " + XmlHttpRequest.status + ": " + XmlHttpRequest.statusText + ": " + JSON.parse(XmlHttpRequest.responseText).error.message.value);
}
});
}
もう一つは、フォーム上のボックス「最初のパラメータとしてパス実行コンテキスト」をチェックすることを忘れないでくださいプロパティ。
EDIT:フォームのロードイベントハンドラにjQueryライブラリを追加するだけでなく、Json2のlibをWebリソースとして追加します。
REST Endpointの詳細については、
'Guid'をハードコーディングするのではなく、あなたが質問したことはありますか? –