Пример создания компонента DictionaryBox

Для выполнения примера необходимо создать html-страницу и выполнить следующие действия:

1. Добавить ссылки на css-файлы PP.css и PP.Rds.css.

Также нужно добавить ссылки на следующие 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
 

Если выбрать пункт меню «Открыть», то в контейнер будет загружен справочник НСИ с тем же ключом.

После вызова команды «Выход» в пункте главного меню «Файл» контейнер со справочником НСИ будет полностью удалён со страницы. Уведомление об этом будет выведено в консоли браузера.

См. также:

DictionaryBox