Пользовательский компонент *Выбор и создание записи реестра* ------------------------------------------------------------ Данный пользовательский компонент расширяет функциональность компонента выбор записи реестра, добавив к нему следующие возможности: * создание записи реестра; * просмотр файла по форме в диалоге; * удаление выбранного значения. На форме компонент отображается следующим образом: .. figure:: ../../_static/img/forms/cmp/form_registry1.png :scale: 100% Пользовательский компонент *Выбор и создание записи реестра* Html код компонента содержит следующий код: .. code-block:: xml //ссылка на документ реестра
//поле ввода для поиска записи реестра //надпись, по клику на которой откроется диалог с формой для заполнения
+Создать
//надпись, по клику по которой открывается диалог выбора записи реестра
Выбрать из реестра
//надпись для удаления выбранного значения
✕ Удалить
Значение этого пользовательского компонента будет сохраняться со значениями остальных компонентов, в этом заключается отличие от пользовательского компонента *Кнопка*, который просто выполнял действие по клику. Способ хранения выбранного значения, как и поведение всего компонента, описывается скриптом в блоке JAVASCRIPT код. Данные компонента будут храниться в виде: .. code-block:: json { "id":"custom-zthfcc", "type":"custom", "value":"Услуга3", "key":"c38e83a0-c065-4dec-a334-d32e63fcb0b4" } Здесь *id* - это идентификатор компонента, *type* - тип, *value* - значение, *key* - ключ компонента За способ хранения данных компонента отвечает следующий кусок кода: .. code-block:: js /** * метод реализовывает получение данных компонента для хранения * @param blockNumber * @returns {*} */ model.getAsfData = function (blockNumber) { return AS.FORMS.ASFDataUtils.getBaseAsfData(model.asfProperty, blockNumber, model.textValue, model.value); }; Здесь в качестве *value* передаем параметр model.textValue, который обновляется каждый раз при изменении значения компонента: .. code-block:: js /** * обновить текстовое представление записи реестра */ model.updateTextView = function () { if (!model.getValue()) { model.textValue = ""; model.asfDataId = null; model.trigger(AS.FORMS.EVENT_TYPE.dataLoad, [model]); return; } AS.FORMS.ApiUtils.getAsfDataUUID(model.getValue(), function (newAsfDataId) { model.asfDataId = newAsfDataId; if(!registry) return; AS.FORMS.ApiUtils.getDocMeaningContent(registry.registryID, newAsfDataId, function (text) { if (text === null || text === '') { model.textValue = i18n.tr('Документ'); } else { model.textValue = text; } model.trigger(AS.FORMS.EVENT_TYPE.dataLoad, [model]); }); }); }; Переопределяем метод ``setAsfData`` модели, в данном случае в качестве значения выступает ``key`` (ид документа выбранной записи). .. code-block:: js /** * метод реализовывает вставку asfData * @param asfData */ model.setAsfData = function (asfData) { model.setValue(asfData.key); }; В скрипте компонента на форме необходимо прописать код реестра, записи которого будут выбраны либо созданы. Это указывается следующим образом: .. figure:: ../../_static/img/forms/cmp/form_registry2.png :scale: 100% Скрипт компонента на форме В результате получим следующий компонент: .. figure:: ../../_static/img/forms/cmp/form_registry3.png :scale: 100% Полный javascript код компонента с комментариями: .. code-block:: js /** * обновить текстовое представление записи реестра */ model.updateTextView = function () { if (!model.getValue()) { model.textValue = ""; model.asfDataId = null; model.trigger(AS.FORMS.EVENT_TYPE.dataLoad, [model]); return; } AS.FORMS.ApiUtils.getAsfDataUUID(model.getValue(), function (newAsfDataId) { model.asfDataId = newAsfDataId; AS.FORMS.ApiUtils.getDocMeaningContent(registry.registryID, newAsfDataId, function (text) { if (text === null || text === '') { model.textValue = i18n.tr('Документ'); } else { model.textValue = text; } model.trigger(AS.FORMS.EVENT_TYPE.dataLoad, [model]); }); }); }; /** * получить тесктовое представление записи реестра * @returns {string|string|*} */ model.getTextValue = function () { return model.textValue; }; // подписываемся на событие модели об изменении содержания, чтобы подгрузить дополнительные данные model.on(AS.FORMS.EVENT_TYPE.valueChange, function () { model.updateTextView(); }); /** * метод реализовывает вставку asfData * @param asfData */ model.setAsfData = function (asfData) { model.setValue(asfData.key); }; /** * метод реализовывает получение данных компонента для хранения * @param blockNumber * @returns {*} */ model.getAsfData = function (blockNumber) { return AS.FORMS.ASFDataUtils.getBaseAsfData(model.asfProperty, blockNumber, model.textValue, model.value); }; /* инициализация отображения */ /** * реестр * @type {object} */ var registry = null; /** * видимые колонки реестра * @type {Array} */ var registryColumns = []; /** * поле ввода для поиска записей реестра * @type {XMLList|*} */ var input = jQuery(view.container).children("[innerId='name']"); /** * поле для отображения выбранной записи реестра * @type {XMLList|*} */ var textView = jQuery(view.container).children("[innerId='textView']"); /** * кнопка добавления записи * @type {XMLList|*} */ var addIcon = jQuery(view.container).children("[innerId='add']"); /** * кнопка выбора записи из реестра * @type {XMLList|*} */ var browseIcon = jQuery(view.container).children("[innerId='browse']"); /** * кнопка удаления текущей выбранной записи * @type {XMLList|*} */ var deleteIcon = jQuery(view.container).children("[innerId='delete']"); // кнопку удаления текущей выбраннйо записи скрываем deleteIcon.hide(); // по нажатию на кнопку "выбрать из реестра" открываем стандартный диалог выбра записи реестра browseIcon.click(function () { AS.SERVICES.showRegisterLinkDialog(registry, function (documentId) { model.setValue(documentId); }); }); // по нажатию на кнопку "создать" открываем форму создания записи реестра addIcon.click(function () { if (!registry.rr_create) { alert("У вас нет прав на создание записей данного реестра"); return; } var createPlayerDiv = jQuery("
"); createPlayerDiv.css("width", "1000px"); createPlayerDiv.css("height", "700px"); createPlayerDiv.css("border", "1px solid #afafaf"); var saveButton = jQuery("