триггеры, точки расширения и их подписчики
Добавлено: 07 июн 2006, 13:26
Проблеема такая. Требуется добавить доп поля. Например в BaseDoc. На версиях 711 и 712 делалось просто. Менялись эти таблицы и все прекрасно работало. Галактика 8.0 собрана на атлантисе 5.1.33 и там сплошь и рядом стали юзать буферы таблиц. Теперь если меняю стандартне таблицы то возникает необходимость пересбора всей галактики и всех патчей под новый словарь. Это хлопотно. Так вот. Решил сделать проще. Добавляю свою таблицу AdditionalBaseDoc, а в неё уже толкаю свои поля и поле cBaseDoc для связи с BaseDoc. Так вот проблемма теперь в том, как их синхронизировать то. В пятом атлантисе появились такие понятия как тригеры, точки расширения и подписчики, но как то скудно про это написано в хелпе.
Я так понял что должно выглядеть примернотак:
ExtensionPoint epInsertAdditionalBaseDoc(BaseDocNrec: comp);
handler with replace InsertAdditionalBaseDoc on ExtensionPoint epInsertAdditionalBaseDoc (BaseDocNrec: comp)
action
{
if GetFirst AdditionalBaseDoc where ((BaseDocNrec == AdditionalBaseDoc.cBaseDoc)) != tsOk
insert AdditionalBaseDoc set AdditionalBaseDoc.cBaseDoc := BaseDocNrec;
result := true;
}
handler with replace tAfterInsertAdditionalBaseDoc on trigger BaseDoc after insert [99]
action
{
var BuffBaseDoc : record as table BaseDoc;
GetTableBuffer(BuffBaseDoc);
epInsertAdditionalBaseDoc(BuffBaseDoc.Nrec);
result := true;
}
но вот токо компилятор не хавает это. Ругается на GetFirst и insert.
Пробовал не делать точек расширения и ее подписчика и писать все непосредственно в подписчике тригера. Тоже ругается на GetFirst и insert.
Может кто продвинут в этом и может мне помочь. За ранее всем большое спасибо.
Я так понял что должно выглядеть примернотак:
ExtensionPoint epInsertAdditionalBaseDoc(BaseDocNrec: comp);
handler with replace InsertAdditionalBaseDoc on ExtensionPoint epInsertAdditionalBaseDoc (BaseDocNrec: comp)
action
{
if GetFirst AdditionalBaseDoc where ((BaseDocNrec == AdditionalBaseDoc.cBaseDoc)) != tsOk
insert AdditionalBaseDoc set AdditionalBaseDoc.cBaseDoc := BaseDocNrec;
result := true;
}
handler with replace tAfterInsertAdditionalBaseDoc on trigger BaseDoc after insert [99]
action
{
var BuffBaseDoc : record as table BaseDoc;
GetTableBuffer(BuffBaseDoc);
epInsertAdditionalBaseDoc(BuffBaseDoc.Nrec);
result := true;
}
но вот токо компилятор не хавает это. Ругается на GetFirst и insert.
Пробовал не делать точек расширения и ее подписчика и писать все непосредственно в подписчике тригера. Тоже ругается на GetFirst и insert.
Может кто продвинут в этом и может мне помочь. За ранее всем большое спасибо.