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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 29.08.2008, 12:48   #1  
Volodymyr is offline
Volodymyr
Участник
 
36 / 21 (1) +++
Регистрация: 03.11.2006
Адрес: Киев
Получается такая ситуация, как ее преодолет незнаю.
Ниже приведена джоба, которая создает и освобождаем номер. Номерная серия должна быть Continious.
X++:
static void Job9(Args _args)
{
    NumberSeq numberSeq;
    Num       number;
    ;
    // Method DataSource.create() - craete the number
    numberSeq = NumberSeq::newGetNumFromCode('Acco_11',
                                             true);
    if (numberSeq)
    {
        number = numberSeq.num();
        info(number);
    }
 
    // Method DataSource.delete() - delete the number;
    ttsbegin;
    numberSeq.abort();
    //super() - delete line
    ttscommit;
}
Если мы работаем в одной компании то все ок.
Можно зайти в Basic->Setup->Number sequence->NumberSequence и посмотреть List.
На отркывшейся форме видно что номер имеет статус Free

Переделаем джобу, для вытягивания номерной серии из другой компании.
X++:
static void Job9(Args _args)
{
    NumberSeq numberSeq;
    Num       number;
    ;
    // Method DataSource.create() - craete the number
    changecompany('VVV')
    {
        numberSeq = NumberSeq::newGetNumFromCode('Acco_11',
                                             true);
        if (numberSeq)
        {
            number = numberSeq.num();
            info(number);
        }
    }
    // Method DataSource.delete() - delete the number;
    ttsbegin;
    changecompany('VVV')
    {
        numberSeq.abort();
    }
    //super() - delete line
    ttscommit;
}
Перейдем в другую компани и посмотрим там NumberSequenceList, там номер имеет тип Active-Undecided.

Таблица NumberSequenceList будет проапдейтчена, если переменная abortIdx больше нуля. При вызове numberSeq.abort();
происходить увеличение abortIdx на единицу, т.е. все ок вродебы.

Но последний ttscommit для апдейта таблици NumberSequenceList, должен переключится в компанию VVV, но при переключении в эту компанию вызывается ttsbegin, который сбрасывает переменную abortIdx.

Application->ttsNotifyCommit()->this.numberSeqGlobal().ttsNotifyCommit();->this.runAutoClean();->Line 23

В результате маемо те що маемо =), т.е. Undecided.

Убрать просто ttsbegin-ttscommit я не могу потомучто если у нас не выполнится удаление линии на форме, то и номерная серия должна вернутся в исходное положение, откатится =)
Старый 29.08.2008, 12:59   #2  
Lemming is offline
Lemming
Участник
Аватар для Lemming
 
1,144 / 343 (14) ++++++
Регистрация: 20.04.2004
Адрес: Москва, Чайнатаун в Люблино
Записей в блоге: 10
Цитата:
Сообщение от Volodymyr Посмотреть сообщение
...
Но последний ttscommit для апдейта таблици NumberSequenceList, должен переключится в компанию VVV, но при переключении в эту компанию вызывается ttsbegin, который сбрасывает переменную abortIdx.
...
На вскидку, а если так попробовать:

X++:
    changecompany('VVV')
    {
        ttsbegin;

        numberSeq.abort();

        ttscommit;

    }
Старый 29.08.2008, 14:01   #3  
Volodymyr is offline
Volodymyr
Участник
 
36 / 21 (1) +++
Регистрация: 03.11.2006
Адрес: Киев
Да так сработает, но так к сожалению нельзя.
Потомучто метод super() иnumberSeq.abort(); должны находится в одной транзакции.
Table.Delete()
X++:
void delete()
{
    ttsbegin;
        changecompany('VMI')
        {
            numberSeq.abort();
        }
        super();
    ttscommit;
}
Старый 29.08.2008, 14:14   #4  
Lemming is offline
Lemming
Участник
Аватар для Lemming
 
1,144 / 343 (14) ++++++
Регистрация: 20.04.2004
Адрес: Москва, Чайнатаун в Люблино
Записей в блоге: 10
Цитата:
Сообщение от Volodymyr Посмотреть сообщение
Да так сработает, но так к сожалению нельзя.
Потомучто метод super() иnumberSeq.abort(); должны находится в одной транзакции.
Table.Delete()
Вообще как то все муторно получается...Насколько я понял, в момент удаления записи в текущей компании Вам нужно освободить номер сгенерированный в другой компании. Попробуйте посмотреть в сторону NumberSeq::release(); (только осторожней с ним, могут быть блокировки)
Старый 29.08.2008, 15:36   #5  
Volodymyr is offline
Volodymyr
Участник
 
36 / 21 (1) +++
Регистрация: 03.11.2006
Адрес: Киев
Да именно. Нужно удалить номер с другой компании, так как он сгенерировался в другой компании.
Форма работает с классом NumberSeqFormHandler, поэтому я хочу использовать стандартный подход
Спасибо за участие
 


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

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

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