AXForum  
Вернуться   AXForum > Microsoft Dynamics CRM > Dynamics CRM: Разработка
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 02.04.2020, 01:00   #1  
flav is offline
flav
Участник
 
11 / 10 (1) +
Регистрация: 06.02.2020
Изменение контента вебресурса из js и страница настройки решения
И снова здравствуйте)

В общем, понадобилось мне хранить настройки для моего приложения в вебресурсе отдельно. Вынуть или редактировать через обычный просмотрщик я их могу - первое делается фетчем. Файл имеет расширение js и для системы выглядит как валидный, внутри же лежит json с нужными данными.

Так вот, дошел я, значит, до создания страницы настройки решения. То есть имеется у нас маленькая такая страничка хтмл, где менеджер, который может накосячить в json коде, будет вводить нужные значения в поля, это будет собираться и записываться в файл конфига. Сборку мы опустим, поскольку пока я тестировал саму возможность изменения конфига, использовался рабочий датасет.

Вот здесь и произошел у меня, господа, что называется, затык. Известно, что вебресурс мы спокойно можем апдейтить. Контент там хранится в поле content. Есть еще поле contentJson, но оно всегда null и вообще имеет странный тип данных memo. Казалось бы - просто перезапиши поле content. Но не тут то было - оказалось, что мой "причесанный" и читабельный в редакторе json в запросе к системе по урлу (через обычный /api/data/v9.0/webresourceset? и тд) возвращает мешанину из символов, вроде этой:

content:"ewogICAgInJvbGVzIjogewogICAgICAgICJtYW5hZ2VyIjogIjVkNzRkYjM0LTRkMzItZTg..."

При этом в самом редакторе видим:


Как-то ну вообще странно.

Попытка заполнить поле через JSON.stringify успехом не увенчалась - вебресурс сломался и пришлось заново его подгрузить из проводника.

И вот сам вопрос - КАК мне адекватно скормить ему мой json, чтобы он его скушал, не подавился, и была возможность его читать и редактировать? Мб я что-то не так сделал с Json.stringify?

Кто-нибудь такое реализовывал? Речь если что только о js.

З.Ы.
Видел где-то давно (>2 лет назад) материал, кратко описывающий это, но не могу найти.

Последний раз редактировалось flav; 02.04.2020 в 01:09. Причина: Добавлен скриншот
Старый 02.04.2020, 01:54   #2  
flav is offline
flav
Участник
 
11 / 10 (1) +
Регистрация: 06.02.2020
Ууупс, кажется я понял - у этого контента формат base64 string
Я все равно напишу сюда решение)
Старый 02.04.2020, 03:40   #3  
flav is offline
flav
Участник
 
11 / 10 (1) +
Регистрация: 06.02.2020
В общем-то, все получилось. Вам нужно закодировать ваш json в base64 строку с помощью atob/btoa и отправить это дело в запросе. Только не забудьте его опубликовать)
Я использую вот эту библиотеку: https://github.com/hso-nn/crm-sdk/bl...#7-webresource

Она также паблишит все без вас. В итоге код выглядит очень просто:

import {Webresource} from "crm-sdk";


//кодируем в формат base64
let formattedConfig = btoa(JSON.stringify(config));

//применяем изменения в файл (абстракция)
let webresource = Webresource.get(null, {
name: <имя вебресурса>,
select: ["name", "webresourcetype"]
}).then(function (webresource) {
webresource.content = formattedConfig;
webresource.save().then(function () {
console.log('Saved config file');
});
});


Почти то же самое можно сделать и без библиотек, только потребуется дополнительное действие для публикации.
Также при возникновении каких-либо ошибок при форматировании (например, если у вас в объекте будут спецсимволы или кириллица, хотя она у меня работает нормально), используйте эти рекомендации: https://itchief.ru/lessons/javascrip...-btoa-and-atob. Также тут есть разъяснения по работе atob/btoa.

Для старых браузеров можно использовать:
new Buffer.from('string').toString('base64')
или
Buffer.from('string').toString('base64')

P.S.
Если Вам нужно, чтобы в конструкторе json был читаемым, используйте Json.stringify вот так:
let pretty = JSON.stringify(obj, null, 2);

Последний раз редактировалось flav; 02.04.2020 в 03:50.
Теги
dynamics 365, webresource, конфигурация

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Microsoft Dynamics CRM Team Blog: New Microsoft CRM SDK Sample: Sdk.Soap.js Blog bot Dynamics CRM: Blogs 0 29.04.2014 04:15
Ошибка при настройки ADFS + IFD Lovilas Dynamics CRM: Администрирование 6 08.11.2013 11:53
axforum blogs: Полезная доработка JS библотеки SDK.REST Blog bot Dynamics CRM: Blogs 0 07.11.2013 11:11
Не устанавливается начальная страница по умолчанию Tony Green Dynamics CRM: Администрирование 3 28.10.2009 13:11
mscrm4ever: CRM 4.0 Creating a JS Resource Manager Blog bot Dynamics CRM: Blogs 0 27.06.2009 10:05

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

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