CRM 2011 - установка значения по умолчанию с помощью JScript - PullRequest
0 голосов
/ 10 февраля 2012

У нас есть CRM 2011 на предпосылке. Объект «Контакт» был настроен для использования поиска в пользовательском объекте «Страна», а не просто в текстовом поле. При создании нового контакта мы бы хотели, чтобы поле страны было установлено в Канаде по умолчанию. У меня есть следующая функция, которая делает это:

            function SetDefaultCountryCode(countryFieldId) {

                var _canadaId = "{FC167B4D-1C3B-E111-8904-F2EA3FE25706}";

                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);
                    }
                }
            }

В форме OnLoad я вызываю такую ​​функцию:

    // set Country fields to Canada if not set
    SetDefaultCountryCode('cga_address1country');

У нас есть два сервера - DEV и TEST. Этот JScript прекрасно работает в DEV. Когда я запускаю его в TEST, он не работает, потому что Canada в TEST имеет другой идентификатор (GUID) - когда я создаю его вручную. Я надеялся, что смогу экспортировать значения сущностей Country из DEV и импортировать их в TEST, сохранив их GUID. К сожалению, это не сработало. Я экспортирую данные в файл Excel, и в нем есть GUID стран. Я также удаляю все существующие записи стран в TEST перед импортом. Когда я пытаюсь импортировать его, импорт завершается успешно, но не создает никаких записей. Если я добавлю новую строку в файл Excel без указания Guid, она будет импортирована. Мне кажется, что функция импорта не была предназначена для сохранения идентификаторов GUID записей. Но это также означает, что мой скрипт не будет работать, потому что он зависит от GUID.

У меня здесь два вопроса:

  1. Можно ли экспортировать / импортировать данные объекта с сохранением идентификатора GUID?

  2. Если у меня не может быть одинаковых идентификаторов GUID в DEV и TEST, как я могу заставить JScript работать правильно?

Заранее благодарю за любую помощь / обратную связь.

Ответы [ 2 ]

6 голосов
/ 10 февраля 2012

Это очень плохая практика - жестко кодировать GUID, и вы обнаружили проблемы с ним.Как вы указали выше, у нас не может быть одинаковых идентификаторов GUID, но у нас одинаковое имя.Итак, нам нужно запросить название страны, используя JScript и jQuery для получения GUID.

Для того, чтобы удалить информацию со стороны клиента (или из формы сущности):

  1. Мы будем использовать / использовать REST Endpoint (тестирование в браузере).
  2. Загрузить jQuery lib.
  3. Загрузить Json2 lib.
  4. Использовать функцию AJAX из библиотеки jQuery.
  5. Определите вашу сущность, столбцы и критерии.

Давайте посмотрим на запрос конечной точки 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 .

4 голосов
/ 10 февраля 2012

Действительно возможно экспортировать и импортировать записи вместе с их руководствами, но не изначально. Вам нужно создать приложение, которое будет экспортировать данные для вас, а затем создавать идентичные записи через API CRM в целевой среде. Вам просто нужно очистить поля, которые недопустимы для create (createon, statecode и т. Д.), И просто указать тот же Guid. CRM создаст запись с этим Guid.

Старый 4.0 Инструмент данных конфигурации делает это. Я не могу вспомнить, работает ли он против организации 2011 года, но это может быть отправной точкой.

...