Для выполнения примера необходимо создать 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
Если выбрать пункт меню «Открыть», то в контейнер будет загружен справочник НСИ с тем же ключом.
После вызова команды «Выход» в пункте главного меню «Файл» контейнер со справочником НСИ будет полностью удалён со страницы. Уведомление об этом будет выведено в консоли браузера.
См. также: