Технические вопросы
7.x

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

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

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

Bpm 7.3

Нравится

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

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

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

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

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

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

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

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

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

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

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

callback-функция.

Пример использования
[javascript]
var myVariable;
var callback = function(value) {
myVariable = value;
};
this.Terrasoft.SysSettings.querySysSettingsItem("MySysSettingName", callback, this);
[/javascript]
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

Пример использования
[javascript]
var data = {
sysSettingsValues: {
someItem1: "value1",
someItem2: "value2"
}
};
var callback = function (result) {
if (result.success) {
// todo
} else {
//
}
};

this.Terrasoft.SysSettings.postSysSettingsValues(data, callback, this);
[/javascript]
или
[javascript]
this.Terrasoft.SysSettings.postSysSettingsValues(data, this.Terrasoft.emptyFn, this);
[/javascript]

Спасибо.

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

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

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

Terrasoft.SysSettings.postSysSettingsValues(data, callback, this);
[/javascript]

И подключить в 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
*/
[javascript]
postSysSettingsValue: function(code, value, callback, scope)

[/javascript]

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

Александра, тогда необходимо использовать метод 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-функции

[javascript]
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);
[/javascript]

Также хотелось бы отметить, что Вы используете не 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.

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