Автопривязка новой записи к другой сущности.

В реестре сущности1 нажимаю: Связать с новой сущностью2. Открываю окно создание сущности2 с Self.Attributes('Сущность1ID'). Не могу понять как пробросить Self.Attributes('Сущность1ID') на DataSet, в событие AfterPost нет доступа к Attributes('Сущность1ID') окна. На событиях самого окна, то запись еще не создана, то dlData уже закрыто и информация о присвоенном ID сужности2 потеряна. Вопрос, как при создание новой записи считать атрибут открытого окна и связать создаваемую запись с другой произвольной записью?

Нравится

5 комментариев

Ответ:
function btnOKOnClick(Control) {
тут dlData.Dataset('ID') доступно, сохраняем ID, оно генерится заранее
scr_BaseDBEdit.btnOKOnClick(Control);
тут dlData.Dataset('ID') уже не доступно, запись создана, можно связывать с Self.Attributes('Сущность1ID')

Я бы это делал на BeforePost, а может на OnPrepare в скрипте окна.
D этих случаях и датасет еще открыт и атрибуты никуда не пропали.

if (Self.Attributes('Сущность1ID')!= null) dlData.Dataset('Сущность1ID') = Self.Attributes('Сущность1ID');

Я так понял у вас есть сущность1, есть сущность2, в которой есть привязка к сущность1.
Или уже вас есть сущность1, сущность2, и еще таблица, которая их связывает?

Воспользуйтесь функцией открытия окна редактирования:

function CreateNewRecordButton_onClick(Control) {
var ID1 = grdData.SelectedIDs;
var Attributes = new Dictionary();
var DefaultValues = new Dictionary();
DefaultValues.Add('ID1', ID1);
ShowEditWindowEx('wnd_MyWindow', Attributes, DefaultValues);
}

В этом скрипте массив DefaultValues - массив для инициализации полей датасета открываемой карточки значениями по умолчанию.
Attributes.Add('RecordID', someID) - нужен в том случае, если нужно не создать, а открыть уже существующую запись.

"Сазанов Александр Владимирович" написал:
Или уже вас есть сущность1, сущность2, и еще таблица, которая их связывает?

Да

Всем спасибо, проблему свою решил.

Показать все комментарии