Добро пожаловать в мой блог! Изначально он не задумывался как блог CRM разработчика, но жизнь сама внесла нужные коррективы. Тут я публикою все свои наблюдения относительно обозначенных в заголовке систем. Если Вы найдете в нем что-то интересное для Вас, как для заказчика, то буду рад сотрудничать с Вами! В моей компетенции 100% задач по MS CRM 3.0/4.0/2011:
MVP 2010, 2011
- Консалтинг
- Проектирование
- Разработка
- Обучение
MVP 2010, 2011
Полезная доработка JS библотеки SDK.REST
Запись от Артем Enot Грунин размещена 07.11.2013 в 10:47
Теги java script, sdk
Сегодня поучаствовал в одном из обсуждений на форуме и вспомнил, что задолжал общественности одну полезную доработку стандартной JS библиотеки в составе SDK, SDK.REST.js.
Для интерпретации JSON результата библиотека использует функцию
К ней у меня нет претензий, однако почему бы не ограничиваться только датами? Есть и другие типы, которые по недосмотру разработчиков по разному устроены в JS и .NET API. Для того чтобы прозрачнее интерпретировать JSON результат я использовал следующую функцию:
Она позволяет приводить EntityReference к JS объекту Lookup, а так же извлекает примитивное значение из объектов Money и OptionSetValue. Отмечу так же, что мой обработчик возвращает null вместо пустого EntityReference, как это делает стандартная библиотека.
Для интерпретации 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; }
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; }
Всего комментариев 0