Получение и запись системной настройки.

Доброго времени суток!

Подскажите как получить значение системной настройки и записать туда новое значение из кода клиентского модуля?

Bpm 7.3

Нравится

13 комментариев

Здравствуйте, Александра!

Получение системной настройки описано в топике:
http://www.community.terrasoft.ru/forum/topic/11241

Продублирую:

необходимо использовать асинхронную функцию querySysSettingsItem. Пример:

this.Terrasoft.SysSettings.querySysSettingsItem("DefaultDaysForMailChimpStatisticGathering",
        function(value) {
//это callback-функция, которая выполняется после получения значения системной настройки с сервера
                this.set("StatisticGatheringEndDate", Ext.Date.add(new Date(), "d", value));
        }, this);

А для записи системных настроек необходимо использовать postSysSettingsValues. Пример:

var postData = {
       sysSettingsValues: {
             someItem1: "value1", // someItem1 – название, value1 - значение
             someItem2: "value2"
       }
};
var callback = function (result) {
       if (result.success) {
             // todo
       } else {
             //
       }
};
Terrasoft.SysSettings.postSysSettingsValues(postData, callback, this);

Дмитрий, топик я видела.
Можете пояснить параметры функции querySysSettingsItem? value - это и есть значение системной настройки?
Системная настройка нужна для вычислений в одной из функций.
как присвоить обычной переменной это значение? Тоже внутри функции querySysSettingsItem?

postSysSettingsValues параметр callback - то, что выполняется после записи значения в настройку? можно ли передавать пустой параметр или Null?

Александра, отвечу по порядку:

querySysSettingsItem
Функция querySysSettingsItem позволяет асинхронно получить элемент системной настройки.
Параметры:
* @param {String} sysSettingsItemName – Наименование системной настройки.
* @param {Function} callback – Функция, которая будет вызвана для возврата объекта настроек, принимает
* параметр value – значение системной настройки.
* @param {Object} scope – Контекст, в котором будет вызвана функция callback.

callback-функция.

Пример использования

var myVariable;
var callback = function(value) {
       myVariable = value; 
};
this.Terrasoft.SysSettings.querySysSettingsItem("MySysSettingName", callback, this);

postSysSettingsValues
Функция postSysSettingsValues позволяет сохранить значения нескольких системных настроек.
Параметры
* @param {Object} data – Конфигурационный объект.
* @param {Object} data.sysSettingsValues – Значение для установки значений системных настроек, где имя свойства - это
* код системной настройки, а значение свойства - новое значение.
* @param {Boolean} data.isPersonal – Флаг, указывающий на то, что значения должны сохраниться как персональные.
* @param {Function} callback – Функция, которая будет вызвана при завершении запроса по установке, принимает
* параметр result – результат выполнения.
* @param {Object} scope – Контекст, в котором будет вызвана функция callback.

Если callback нет необходимости использовать, то надо передать "пустую" функцию this.Terrasoft.emptyFn

Пример использования

var data = {
       sysSettingsValues: {
             someItem1: "value1",
             someItem2: "value2"
       }
};
var callback = function (result) {
       if (result.success) {
             // todo
       } else {
             //
       }
};
 
this.Terrasoft.SysSettings.postSysSettingsValues(data, callback, this);

или

this.Terrasoft.SysSettings.postSysSettingsValues(data, this.Terrasoft.emptyFn, this);

Спасибо.

Правда сейчас ошибка: Объект не поддерживает свойство или метод "postSysSettingsValues" .

Возможно необходимо подключить какие-то объекты?

Александра, конкретизируйте, пожалуйста, ошибку.
Попробуйте убрать «this»:

Terrasoft.SysSettings.postSysSettingsValues(data, callback, this);

И подключить в define «Terrasoft» (например, define("ServiceHelper", ["ext-base", "terrasoft"], function(Ext, Terrasoft)…)

Также Вы не уточнили в какой схеме происходит ошибка. Если базовый, то необходимо название схемы, если пользовательский то необходим листинг схемы для анализа. Также уточните, в каком момент возникает ошибка (например, в консоли браузера при выполнении работ).

"Вильшанский Дмитрий" написал:

Александра, конкретизируйте, пожалуйста, ошибку.

Попробуйте убрать «this»:

Terrasoft.SysSettings.postSysSettingsValues(data, callback, this);

И подключить в define «Terrasoft» (например, define("ServiceHelper", ["ext-base", "terrasoft"], function(Ext, Terrasoft)…)

Также Вы не уточнили в какой схеме происходит ошибка. Если базовый, то необходимо название схемы, если пользовательский то необходим листинг схемы для анализа. Также уточните, в каком момент возникает ошибка (например, в консоли браузера при выполнении работ).

Terrasoft в define подключен. Убрала this, перекомпилировала, но ошибка осталась. Возникает замещаемом модуле LeadQualificationPageV2.js, возникает в момент квалификации лида, отлавливаю ошибку в консоли браузера.

Александра, тогда необходимо использовать метод postSysSettingsValue:
/**
* Асинхронно сохранить значение системной настройки
* @param {String} code Код системной настройки
* @param {Object} value Значение для установки
* @param {Function} callback Функция, которая будет вызвана при завершении запроса по установке
* @param {Object} scope Контекст, в котором будет вызвана функция callback
*/

postSysSettingsValue: function(code, value, callback, scope)

"Вильшанский Дмитрий" написал:

Александра, тогда необходимо использовать метод postSysSettingsValue:

/**

* Асинхронно сохранить значение системной настройки

* @param {String} code Код системной настройки

* @param {Object} value Значение для установки

* @param {Function} callback Функция, которая будет вызвана при завершении запроса по установке

* @param {Object} scope Контекст, в котором будет вызвана функция callback

*/

postSysSettingsValue: function(code, value, callback, scope)

Ошибка осталась. Точно такая же.
И при попытке чтения из системной настройки ничего не записывается в переменную, хот ошибки нет. Код для чтения системной настройки следующий:

var number;
var callback = function(value) {
number = value;
};
Terrasoft.SysSettings.querySysSettingsItem("OpportunityLastNumber", callback, this);

Александра, проверьте, пожалуйста, что данная системная настройка присутствует в системе, а также, что знание данной настройки заполнено (не пустое и не NULL).
Tакже прикрепите полный листинг кода замещённой схемы для анализа ошибки.

Системная настройка есть и значение в ней есть.

Ниже выкладываю замещаемую страницу.

Александра, работать с полученным значением системной настройки необходимо внутри callback-функции

var sysSettingName = "OpportunityLastNumber";
// срабатывает при получении системной настройки
var callback = function(number) {
       if (number) {
             // передаем параметр номер в Продажу
             insert.setParameterValue("UsrNumber", number, Terrasoft.DataValueType.INTEGER);
             title.push(number);
             // обновляем значение системной настройки
number = number + 1;
             Terrasoft.SysSettings.postSysSettingsValue(sysSettingName, number, Terrasoft.emptyFn, this);
             // ...
       }
};
 
// асинхронно выбираем системную настройку
 
Terrasoft.SysSettings.querySysSettingsItem(sysSettingName, callback, this);

Также хотелось бы отметить, что Вы используете не postSysSettingsValue, а postSysSettingsValues.

"Вильшанский Дмитрий" написал:

Александра, работать с полученным значением системной настройки необходимо внутри callback-функции

var sysSettingName = "OpportunityLastNumber";

// срабатывает при получении системной настройки

var callback = function(number) {

       if (number) {

             // передаем параметр номер в Продажу

             insert.setParameterValue("UsrNumber", number, Terrasoft.DataValueType.INTEGER);

             title.push(number);

             // обновляем значение системной настройки

number = number + 1;

             Terrasoft.SysSettings.postSysSettingsValue(sysSettingName, number, Terrasoft.emptyFn, this);

             // ...

       }

};



// асинхронно выбираем системную настройку



Terrasoft.SysSettings.querySysSettingsItem(sysSettingName, callback, this);

Также хотелось бы отметить, что Вы используете не postSysSettingsValue, а postSysSettingsValues.

С уважением,

Дмитрий Вильшанский

Специалист 2-й линии поддержки

Метод push внутри этой функции не работает, т.к. параметр уже преобразован в число.
А т.к. метод асинхронный, то у него обработка идет позднее, поэтому в параметр продажи и заголовок продажи ничего не записывается.
Как быть в таком случае?

Александра, код, который предоставлен ранее, это только пример реализации.

Объявление title и весь код, который завязан на результат получение системной настройки перенесите во внутрь callback.

Показать все комментарии