AXForum  
Вернуться   AXForum > Блоги > CRM, SharePoint и Черная Магия
DAX
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск Все разделы прочитаны

Добро пожаловать в мой блог! Изначально он не задумывался как блог CRM разработчика, но жизнь сама внесла нужные коррективы. Тут я публикою все свои наблюдения относительно обозначенных в заголовке систем. Если Вы найдете в нем что-то интересное для Вас, как для заказчика, то буду рад сотрудничать с Вами! В моей компетенции 100% задач по MS CRM 3.0/4.0/2011:
  • Консалтинг
  • Проектирование
  • Разработка
  • Обучение


MVP 2010, 2011
Оценить эту запись

Полезная доработка JS библотеки SDK.REST

Запись от Артем Enot Грунин размещена 07.11.2013 в 10:47
Теги java script, sdk

Сегодня поучаствовал в одном из обсуждений на форуме и вспомнил, что задолжал общественности одну полезную доработку стандартной JS библиотеки в составе SDK, SDK.REST.js.

Для интерпретации JSON результата библиотека использует функцию
X++:
_dateReviver: function (key, value)
    {
        ///<summary>
        /// Private function to convert matching string values to Date objects.
        ///</summary>
        ///<param name="key" type="String">
        /// The key used to identify the object property
        ///</param>
        ///<param name="value" type="String">
        /// The string value representing a date
        ///</param>
        var a;
        if (typeof value === 'string')
        {
            a = /Date\(([-+]?\d+)\)/.exec(value);
            if (a)
            {
                return new Date(parseInt(value.replace("/Date(", "").replace(")/", ""), 10));
            }
        }
        return value;
    }
К ней у меня нет претензий, однако почему бы не ограничиваться только датами? Есть и другие типы, которые по недосмотру разработчиков по разному устроены в JS и .NET API. Для того чтобы прозрачнее интерпретировать JSON результат я использовал следующую функцию:
X++:
_xrmTypeReviver: function (key, value)
    {
        ///<summary>
        /// Private function to convert matching string values to Date objects.
        /// agrunin: функция дополнена для преобразования EntityReference в lookup понятный Xrm.Page
        ///</summary>
        ///<param name="key" type="String">
        /// The key used to identify the object property
        ///</param>
        ///<param name="value" type="String">
        /// The string value representing a date or EntityReference
        ///</param>
        var a;
        if (typeof value === 'string')
        {
            a = /Date\(([-+]?\d+)\)/.exec(value);
            if (a)
            {
                return new Date(parseInt(value.replace("/Date(", "").replace(")/", ""), 10));
            }
        }
        else if (value != null && typeof value == 'object')
        {
            if (value["__metadata"] != undefined)
            {
                var type = value["__metadata"].type;
                switch (type)
                {
                    case "Microsoft.Crm.Sdk.Data.Services.EntityReference":
                        if (value.Id == null)
                        {
                            // Возвращаем null вместо пустого объекта
                            return null;
                        }
                        else
                        {
                            return { id: value.Id, entityType: value.LogicalName, name: value.Name };
                        }
                    case "Microsoft.Crm.Sdk.Data.Services.Money":
                    case "Microsoft.Crm.Sdk.Data.Services.OptionSetValue":
                        return value.Value;
                    default:
                        return value;
                }
            }
        }
        return value;
    }
Она позволяет приводить EntityReference к JS объекту Lookup, а так же извлекает примитивное значение из объектов Money и OptionSetValue. Отмечу так же, что мой обработчик возвращает null вместо пустого EntityReference, как это делает стандартная библиотека.
Размещено в CRM
Просмотров 23378 Комментарии 0
Всего комментариев 0

Комментарии

 


Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 01:32.