Это очень плохая практика - жестко кодировать GUID, и вы обнаружили проблемы с ним.Как вы указали выше, у нас не может быть одинаковых идентификаторов GUID, но у нас одинаковое имя.Итак, нам нужно запросить название страны, используя JScript и jQuery для получения GUID.
Для того, чтобы удалить информацию со стороны клиента (или из формы сущности):
- Мы будем использовать / использовать REST Endpoint (тестирование в браузере).
- Загрузить jQuery lib.
- Загрузить Json2 lib.
- Использовать функцию AJAX из библиотеки jQuery.
- Определите вашу сущность, столбцы и критерии.
Давайте посмотрим на запрос конечной точки REST.
http://yourHostName/yourOrg/XRMServices/2011/OrganizationData.svc/new_CountrytSet?$select=new_Name,new_CountryId&$filter=new_Name eq 'Canada'
Возьмем этот URL-адрес, подставьте ваши фактические значения и вставьте его вв вашем браузере вы обнаружите, что ответ возвращается в формате 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);
}
});
Но перед тем, как скопировать код в форму, вы должны загрузить библиотеку jQuery с здесь Затем загрузить ее в качестве веб-ресурса, добавить этот веб-ресурс в форму Загрузить библиотеки.
Вот полный код, который нужно вставить в обработчик события загрузки формы:
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 в качестве веб-интерфейсаresource.
Для получения дополнительной информации о REST Endpoint .