AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: База знаний и проекты
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 16.02.2006, 16:48   #1  
trud is offline
trud
Участник
Лучший по профессии 2017
 
1,039 / 1630 (57) ++++++++
Регистрация: 07.06.2003
Записей в блоге: 1
Синхронизация при создании новых типов
Многие наверное сталкивались, что при создании новых строковых типов данных, Аксапта запускает синхронизацию БД, хотя очевидно, что новый тип еще нигде не используется.

Предложу некий обходной путь решения этой проблемы.

После создания нового EDT и запуска синхронизации, можно ее прервать нажав CTRL+Break. Чтобы синхронизация в дальнейшем не запускалась, можно выполнить нижепреведенный job.

Код:
static void TRUD_SyncDisable(Args _args)
{
    new SQLSyncPending().databaseTouched(false);
}
И иконка БД станет из красной снова желтой
Старый 03.04.2009, 15:58   #3  
miklenew is offline
miklenew
Участник
Аватар для miklenew
MCBMSS
1C
Лучший по профессии 2009
 
1,688 / 433 (18) +++++++
Регистрация: 10.07.2006
Адрес: г. Ликино-Дулёво
Тоже надоела ненужная синхронизация.
В результате переписал метод вот так:
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 (SQLSyncPending.databaseTouched()                                        &&
        Box::yesNo("Синхронизировать?", DialogButton::Yes) == DialogButton::Yes)
            ok = super(tableId, syncAsNeeded, continueOnError, showProgress);
    else
    {
        new SQLSyncPending().databaseTouched(false);
        ok = true;
    }
    if (ok && this.isRunningMode())
    {
        SysApplicationSetup::saveApplicationVersion(SysApplicationSetupMode::Synhronize);
        // HansBred - SP4 - PS #5544
        SysSQLInitDbTriggers::CheckExistsDBTriggers();
    }

    return ok;
}
Но теперь если я просто хочу встать на любую таблицу и синхронизировать её, то никаких действий не происходит.
Может кто знает как довести до ума?
__________________
Энергия молодых и неравнодушных способна изменить мир к лучшему.
Старый 03.04.2009, 17:50   #4  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от trud Посмотреть сообщение
Предложу некий обходной путь решения этой проблемы.
А если без программирования: выключите галочку Автосохранение в параметрах, закладка Разработка.

Не забывайте сохранять вручную после того, как создадите несколько типов.
Синхронизация будет, но только после того, как вы сами нажмете Сохранить.
__________________
полезное на axForum, github, vk, coub.
Старый 03.04.2009, 23:51   #5  
ZVV is offline
ZVV
MCITP
MCP
Oracle
MCBMSS
 
1,006 / 246 (11) ++++++
Регистрация: 13.02.2004
Адрес: Минск
->
Цитата:
Сообщение от miklenew Посмотреть сообщение
Тоже надоела ненужная синхронизация.
В результате переписал метод вот так:
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 (SQLSyncPending.databaseTouched()                                        &&
        Box::yesNo("Синхронизировать?", DialogButton::Yes) == DialogButton::Yes)
            ok = super(tableId, syncAsNeeded, continueOnError, showProgress);
    else
    {
        new SQLSyncPending().databaseTouched(false);
        ok = true;
    }
    if (ok && this.isRunningMode())
    {
        SysApplicationSetup::saveApplicationVersion(SysApplicationSetupMode::Synhronize);
        // HansBred - SP4 - PS #5544
        SysSQLInitDbTriggers::CheckExistsDBTriggers();
    }

    return ok;
}
Но теперь если я просто хочу встать на любую таблицу и синхронизировать её, то никаких действий не происходит.
Может кто знает как довести до ума?
Это из-за вот этого if (SQLSyncPending.databaseTouched() &&
Когда просто синхронизиться таблица "по требованию" то "точед"==false и у вас синхронизация никогда не выполняется. В случае же изменения EDT там будет true.
Т.е. надо спрашивать только тогда когда SQLSyncPending.databaseTouched()==true (ну или вообще всегда )
__________________
Zhirenkov Vitaly
Старый 06.04.2009, 08:59   #6  
miklenew is offline
miklenew
Участник
Аватар для miklenew
MCBMSS
1C
Лучший по профессии 2009
 
1,688 / 433 (18) +++++++
Регистрация: 10.07.2006
Адрес: г. Ликино-Дулёво
Цитата:
Сообщение от mazzy Посмотреть сообщение
А если без программирования: выключите галочку Автосохранение в параметрах, закладка Разработка.
Не забывайте сохранять вручную после того, как создадите несколько типов.
Синхронизация будет, но только после того, как вы сами нажмете Сохранить.
Нет, это не то.
Я хочу чтоб у меня был механизм с помощью которого, я бы мог дать базе понять, что всё ок синхронизировать ничего не надо.
Т.е. я знаю что с я изменил длину расширенного типа и знаю что полей ещё не создавал, зачем мне синхронизация.
А при сохранении система всё равно начнёт полную синхронизацию (не важно с галочкой или без).
__________________
Энергия молодых и неравнодушных способна изменить мир к лучшему.

Последний раз редактировалось miklenew; 06.04.2009 в 09:03.
Старый 06.04.2009, 09:03   #7  
miklenew is offline
miklenew
Участник
Аватар для miklenew
MCBMSS
1C
Лучший по профессии 2009
 
1,688 / 433 (18) +++++++
Регистрация: 10.07.2006
Адрес: г. Ликино-Дулёво
Цитата:
Сообщение от ZVV Посмотреть сообщение
Это из-за вот этого if (SQLSyncPending.databaseTouched() &&
Когда просто синхронизиться таблица "по требованию" то "точед"==false и у вас синхронизация никогда не выполняется. В случае же изменения EDT там будет true.
Т.е. надо спрашивать только тогда когда SQLSyncPending.databaseTouched()==true (ну или вообще всегда )
Эта штука даёт мне понять, что объект был изменён и нужна синхронизация.
Без неё у меня при каждом сохранении, даже если вообще ничего не делал, будет вылетать: "Синхронизировать?".
А когда я принудительно хочу что -то синхронизировать, естественно она говорит, что изменений нет и ничего не пытается синхронизировать.
В этом то и засада.
__________________
Энергия молодых и неравнодушных способна изменить мир к лучшему.
Старый 06.04.2009, 09:31   #8  
Dron AKA andy is offline
Dron AKA andy
Moderator
 
944 / 253 (10) ++++++
Регистрация: 27.03.2002
Адрес: Москва
To miklenew:

Сделайте так, как написано в ссылке в начале темы, и не изобретайте велосипед...
__________________
Андрей.
Старый 06.04.2009, 09:37   #9  
miklenew is offline
miklenew
Участник
Аватар для miklenew
MCBMSS
1C
Лучший по профессии 2009
 
1,688 / 433 (18) +++++++
Регистрация: 10.07.2006
Адрес: г. Ликино-Дулёво
Цитата:
Сообщение от Dron AKA andy Посмотреть сообщение
To miklenew:
Сделайте так, как написано в ссылке в начале темы, и не изобретайте велосипед...
Во первых это не удобно.
Даже если сделать кнопку на Tabax всё равно как-то не айс.
Во вторых CTRL+Break мне не помогает. Там всё равно похоже ждать надо.
Обычно просто заваливаю Ax32.exe и захожу заново.
А хотелось бы нормально чтоб это было.
__________________
Энергия молодых и неравнодушных способна изменить мир к лучшему.
Старый 06.04.2009, 09:47   #10  
Dron AKA andy is offline
Dron AKA andy
Moderator
 
944 / 253 (10) ++++++
Регистрация: 27.03.2002
Адрес: Москва
Лана, отвечу по существу:

X++:
    if (SQLSyncPending.databaseTouched())
    {
        if (Box::okCancel("Синхронизировать БД ?",DialogButton::Cancel) == DialogButton::Cancel)
        {
            new SQLSyncPending().databaseTouched(false); // из 2-х примеров скомпоновал один
            return false;
        }
    }
__________________
Андрей.
За это сообщение автора поблагодарили: miklenew (5).
Старый 06.04.2009, 09:57   #11  
miklenew is offline
miklenew
Участник
Аватар для miklenew
MCBMSS
1C
Лучший по профессии 2009
 
1,688 / 433 (18) +++++++
Регистрация: 10.07.2006
Адрес: г. Ликино-Дулёво
А ларчик просто открывался.
Спасибо.
__________________
Энергия молодых и неравнодушных способна изменить мир к лучшему.
Старый 06.04.2009, 10:05   #12  
Dron AKA andy is offline
Dron AKA andy
Moderator
 
944 / 253 (10) ++++++
Регистрация: 27.03.2002
Адрес: Москва
Кстати, для Oracle советую заглянуть в эту тему. Полезно иногда все же соглашаться и проводить-таки синхронизацию
__________________
Андрей.
Теги
aot, edt, синхронизация баз

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Добавление новых строк в SalesLine Qaz Qwerty DAX: База знаний и проекты 6 04.02.2009 17:23
Проблемы при создании поля Paul_ST DAX: Программирование 4 08.06.2006 13:26
Синхронизация при создании EDT Logger DAX: Программирование 4 25.04.2006 21:42
синхронизация с outlook alpine DAX: Функционал 7 09.06.2004 13:53
Синхронизация при создании функциональных ключей Андре DAX: Программирование 5 29.11.2002 11:36

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 03:09.