Цитата:
Сообщение от
itfs
Идея интересная, но ведь MV refresh-ить надо иначе они устареют.
С уважением, itfs.
Ясен хрен надо. Совсем задолбался со всем этим переосом - забыл аксаптовский код приложить. Надо немного подправить appl.dbSynchronize. Вьюшки будут рефрешиться перед каждой синхронизацией. Созданы они с параметром REFRESH по умолчанию, т.е. FORCE (по изменениям, если не выйдет, то целиком) - рефрешатся обе вместе около одной секунды. Синхронизацию аксапта вызывает при любом сохранении объекта в АОТ, но ИМХО лучше помечтать секунду при сохранении объекта, чем мечтать почти час при полной синхронизации. Прикрутить автоматическое обновление прям на сервере ON COMMIT к этим вьюшкам у меня не получилось (хотя надо признать не очень то и старался). Если кто все таки сделает обновление ON COMMIT, расскажите пжл
X++:
boolean dbSynchronize(tableId tableId = 0, // 0 = all tables, non-zero is a valid table handle
boolean syncAsNeeded = true, // true = objects touched in the AOT, false = unconditional synchronize
boolean continueOnError = true,
boolean showProgress = true ) // true = report all problems, but throw only after all tables are synchronized, false = stop synchronize after first error/problem
{
SqlSyncPending sqlSyncPending = new SqlSyncPending();
boolean ok;
;
setPrefix("@SYS22807");
if (SqlSystem::databaseBackendId() == DataBaseId::Oracle)
{
new Connection().createStatement().executeUpdate("BEGIN DBMS_MVIEW.REFRESH('USER_IND_COLUMNS, USER_INDEXES'); END;");
}
ok = super(tableId, syncAsNeeded, continueOnError, showProgress);
if (ok && this.isRunningMode())
{
SysApplicationSetup::saveApplicationVersion(SysApplicationSetupMode::Synhronize);
}
return ok;
}