Передать Id выбранной записи детали на страницу редактирования
Вопрос
Подскажите как реализовать следующую задачу: есть преднастроенная страница с добавленной на нее деталью Контактов (Физ. лиц). Необходимо иметь возможность выделить конкретную запись грида детали и получить ее ID в основную страницу. Как это лучше реализовать?
Ответ
Для получения идентификатора текущей записи детали в родительской карточке редактирования используя механизм подписки/публикации сообщений между соответствующими модулями - алгоритм будет примерно следующий:
Для начала необходимо в коде карточки и детали добавить адресное сообщение с одним и тем же названием, но в карточке с типом "Подписка", а в детали - с типом "Публикация". Например, для карточки редактирования:
messages: { "GetContactDetailActiveRecordId": { mode: Terrasoft.MessageMode.PTP, direction: Terrasoft.MessageDirectionType.SUBSCRIBE } }
Для детали точно так же, только в свойстве direction необходимо указать
Terrasoft.MessageDirectionType.PUBLISH
Далее при инициализации карточки редактирования (метод init) нужно подписаться на это сообщение, а в функции обратного вызова получить значение из детали и сохранить его в атрибут модели карточки:
init: function() { this.callParent(arguments); this.sandbox.subscribe("GetContactDetailActiveRecordId", function(recordId) { this.set("ContactDetailActiveRecordId", recordId); }, this, [contactDetailSandboxId]); }
Значение contactDetailSandboxId Вам необходимо определить самостоятельно (оно формируется в зависимости от названия детали). В коде детали оно хранится в свойстве this.sandbox.id.
Наконец, в коде детали, при обработке нажатия на кнопку необходимо просто опубликовать сообщение, передав значение текущей записи:
onButtonClick: function() { this.sandbox.publish("GetContactDetailActiveRecordId", this.get("ActiveRow"), [this.sandbox.id]); }