Для выполнения примера необходимо создать html-страницу и выполнить следующие действия:
1. Добавить ссылки на css-файлы PP.css и PP.Rds.css.
Также нужно добавить ссылки на следующие js-файлы:
PP.js;
PP.Metabase.js;
PP.Rds.js;
resources.ru.js.
2. В толстом клиенте должен быть создать справочник НСИ с наименованием «Time units», идентификатором «TIME_UNITS» и ключом 8093. В данном справочнике помимо предопределённых атрибутов должны быть добавлены следующие атрибуты:
Идентификатор |
Наименование | Тип данных | Множественные значения | Скрыт | Комментарии |
UNIT_VALUE |
Значение | Вещественный | Нет | Нет | Нет |
DESCRIPTION |
Описание | Строковый | Нет | Нет | Нет |
UNITS_SYSTEM |
Система мер | Целый | Да | Нет | Связан со справочником «System of units» по атрибуту «Наименование» |
UNITS_SYSTEM_DESCRIPTION |
Описание системы мер | Строковый | Нет | Да | Заимствованный атрибут. Связан с атрибутом «DESCRIPTION» из справочника «System of untits» |
В настройках справочника включить следующее пункты:
«Элементы могут изменяться во времени»;
«Элементы имеют справочник на другие языки»;
«Элементы имею дискреционные права доступа»;
«Элементы имеют признак скрытости».
Для справочника как минимум должны быть определены два субъекта доступа «ADMIN» и «АДМИНИСТРАТОРЫ».
3. Также должен быть создан справочник НСИ с наименованием «System of units», идентификатором «UNITS_SYSTEMS» и ключом 8096, с которым нужно связать справочник «Time units» через атрибут «UNITS_SYSTEM».
Справочник «System of units» помимо предопределённых атрибутов должен содержать атрибут «DESCRIPTION», аналогичный одноимённому атрибуту из справочника «Time units».
4. Добавить сценарий, создающий контейнер для справочника НСИ «Time units»:
<script type="text/javascript">
PP.ImagePath = "../build/img/"; // Путь к папке с изображениями
PP.ScriptPath = "../build/"; // Путь к папке со сценариями
PP.CSSPath = "../build/"; // Путь к папке с файлами стилей
// Укажем путь к корневой папке, содержащей файлы ресурсов
PP.resourceManager.setRootResourcesFolder("../resources/");
// Установим языковые настройки для ресурсов
PP.setCurrentCulture(PP.Cultures.ru)
var dictionaryBox; // Контейнер для справочника НСИ
var dictionaryKey = 8093; // Ключ справочника
// Функция для открытия справочника по его ключу
function openDictionary(rdsService, key) {
var dictionary = rdsService.openRds(key, null);
return dictionary;
};
function Ready() {
// Укажем путь к корневой папке, содержащей файлы ресурсов
PP.resourceManager.setRootResourcesFolder("../resources/");
// Установим языковые настройки для ресурсов
PP.setCurrentCulture(PP.Cultures.ru);
var waiter = new PP.Ui.Waiter();
// Создадим соединение с репозиторием
var metabase = new PP.Mb.Metabase({
PPServiceUrl: "PPService.axd?action=proxy",
Id: "PROGNOZPLATFORM",
UserCreds: {
UserName: "user",
Password: "password"
},
StartRequest: function () {
// При запросе метаданных отобразим компонент типа PP.Ui.Waiter
waiter.show();
},
EndRequest: function (sender, args) {
// Скроем компонент типа PP.Ui.Waiter
waiter.hide();
},
Error: function (sender, args) {
// Выведем описание ошибки
console.log(args.ResponseText);
}
});
// Откроем соединение с репозиторием
metabase.open();
var rdsService = new PP.Rds.RdsService({
Metabase: metabase,
RdsOpened: function (sender, args) {
console.log("Ключ открытого справочника: %s", args.Dictionary.getKey());
console.log("Идентификатор открытого справочника: %s", args.Dictionary.getId());
},
RdsClosed: function (sender, args) {
console.log("Наименование закрытого справочника: %s", args.Dictionary.getName());
}
});
// Откроем справочник НСИ с заданным ключом
var dictionary = openDictionary(rdsService, dictionaryKey);
// Установим моникёр для редактирования структуры
dictionary.setEditOdId(dictionary.getOdId());
// Если имеются невидимые элементы, то отобразим их
dictionaryBox = new PP.Rds.Ui.DictionaryBox({
Source: dictionary,
ImagePath: "../build/img/",
ParentNode: "dictionaryBox",
Width: 800,
Height: 400,
Open: function (sender, args) {
dictionary = openDictionary(rdsService, dictionaryKey);
dictionaryBox.setSource(dictionary);
},
Close: function (sender, args) {
// Уберём справочник из контейнера
dictionaryBox.excludeSource(dictionary);
// Закроем справочник
rdsService.closeRds(dictionary, function (sender, args) {
console.log("Ключ закрытого справочника: %s",
args.Args.Dictionary.getKey())
});
dictionaryBox.refreshAll();
},
Exit: function (sender, args) {
sender.dispose();
console.log("Контейнер со справочником закрыт");
}
});
// Обновим контейнер справочника НСИ
dictionaryBox.refreshAll();
};
</script>
5. В теге <body> разместить блок с идентификатором «dictionaryBox» для хранения контейнера со справочником НСИ:
<body onload="Ready()"> <div id="dictionaryBox" style="border: 1px #C3C3C3 solid; width: 805px"></div> </body>
Для выполнения пользовательских сценариев над контейнером со справочником НСИ, в том числе примеров, приведённых на страницах описания свойств, методов и событий данного компонента и составляющих его элементов, требуется разместить код либо в функции «Ready», либо в консоли браузера.
В результате выполнения примера на html-странице будет размещен компонент PP.Rds.DictionaryBox:

В консоли браузера в результате срабатывания обработчика события RdsOpened были выведены ключ и идентификатор открытого справочника:
Ключ открытого справочника: 8093
Идентификатор открытого справочника: TIME_UNITS
После вызова команды «Закрыть» в пункте главного меню «Файл» справочник будет удалён из контейнера:

При этом будут сработаны события RdsService.RdsClosed и DictionaryBox.Close, которые выведут в консоли браузера наименование и ключ закрытого справочника соответственно:
Наименование закрытого справочника: Time units
Ключ закрытого справочника: 8093
Если выбрать пункт меню «Открыть», то в контейнер будет загружен справочник НСИ с тем же ключом.
После вызова команды «Выход» в пункте главного меню «Файл» контейнер со справочником НСИ будет полностью удалён со страницы. Уведомление об этом будет выведено в консоли браузера.
См. также: