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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 25.05.2012, 13:40   #1  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5813 (201) ++++++++++
Регистрация: 28.11.2005
Адрес: Москва
Записей в блоге: 3
Цитата:
Сообщение от SRF Посмотреть сообщение
поле modifiedDateTime, как и другие modified* можно менять, при соблюдении условий, которые обозначены выше.
Это - ваша теория или выводы на основе реальных экспериментов по изменению того же modifiedDateTime? Из моего скромного опыта, при отправке запроса на обновление записи ядро вообще "не смотрит", что там прописано в поле modifiedDateTime табличного буфера, и запрос, в случае с Ораклом, получается вида
PHP код:
update SomeTable set fld1=@in1fld2=@inmodifiedDateTime=SYSUTCDATETIME()
output inserted.modifiedDateTime 
Т.е. поле в базе заполняется не значением из табличного буфера, а значением, возвращаемым системной функцией СУБД. Насколько я понимаю, в случае с SQL Server происходит то же самое, см. также Create RecID index on tables with Created/Modified DateTime fields
Старый 25.05.2012, 13:58   #2  
SRF is offline
SRF
Участник
MCBMSS
Axapta Retail User
 
376 / 562 (19) +++++++
Регистрация: 08.08.2007
Записей в блоге: 1
Цитата:
Сообщение от gl00mie Посмотреть сообщение
Это - ваша теория или выводы на основе реальных экспериментов по изменению того же modifiedDateTime?
И теория и практика - поля дат проверил джобом, остальное не стал, думаю работать будет по тому же принципу.

X++:
static void checkSystemFieldOverWrite(Args _args)
{
    CustTable   custTable;
    ;

    ttsbegin;
    
    custTable = CustTable::find('4000', true);

    new OverwriteSystemfieldsPermission().assert();
    custTable.overwriteSystemfields(true);
    custTable.(fieldNum(CustTable, modifiedDateTime))   = DateTimeUtil::newDateTime(20\05\2012, 0);
    custTable.(fieldNum(CustTable, createdDateTime))    = DateTimeUtil::newDateTime(20\05\2012, 0);
    custTable.City = 'check';
    custTable.update();

    CodeAccessPermission::revertAssert();

    ttscommit;

    info("done");
}
SQL 2008 R2 DAX2009 RU8
__________________
Sergey Nefedov
За это сообщение автора поблагодарили: gl00mie (2).
Старый 25.05.2012, 15:08   #3  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5813 (201) ++++++++++
Регистрация: 28.11.2005
Адрес: Москва
Записей в блоге: 3
Цитата:
Сообщение от SRF Посмотреть сообщение
поля дат проверил джобом, остальное не стал, думаю работать будет по тому же принципу.
Да, и правда дает на обновлении прописать другое зачение modifiedDateTime, а вот другие modifiedBy/modifiedTransactionId/createdXX - не дает, точнее, игнорирует такие попытки.
За это сообщение автора поблагодарили: SRF (1).
Старый 28.05.2012, 07:17   #4  
SRF is offline
SRF
Участник
MCBMSS
Axapta Retail User
 
376 / 562 (19) +++++++
Регистрация: 08.08.2007
Записей в блоге: 1
Насчет полей modifiedBy\modifiedTransactionId - у меня система ведет себя так :

Если обновлять поля из джоба\класса и перед обновлением запускать поиск, обновляемого курсора, как в примере ниже, то значения указанных полей просто затираются
X++:
static void checkSystemFieldOverWrite(Args _args)
{
    CustTable   custTable;
    ;

    ttsbegin;

    custTable = CustTable::find('4000', true); 

    new OverwriteSystemfieldsPermission().assert();
    custTable.overwriteSystemfields(true);
    //custTable.(fieldNum(CustTable, modifiedDateTime))   = DateTimeUtil::newDateTime(19\05\2012, 0);
    //custTable.(fieldNum(CustTable, createdDateTime))    = DateTimeUtil::newDateTime(19\05\2012, 0);
    custTable.(fieldNum(CustTable, modifiedBy))             = 'test';
    custTable.(fieldNum(CustTable, ModifiedTransactionId))  = 444444;
    custTable.City = 'check';
    custTable.update();

    CodeAccessPermission::revertAssert();

    ttscommit;

    info("done");
}
Если обновить запись, которая находится непоcредственно на форме(при этом не разрывать связь с ДС), то значения полей меняются :

X++:
static void main(Args  _args)
{
    CustTable   custTable;
    ;

    custTable = _args.record();
    new OverwriteSystemfieldsPermission().assert();
    custTable.overwriteSystemfields(true);
    //custTable.(fieldNum(CustTable, modifiedDateTime))   = DateTimeUtil::newDateTime(19\05\2012, 0);
    //custTable.(fieldNum(CustTable, createdDateTime))    = DateTimeUtil::newDateTime(19\05\2012, 0);
    custTable.(fieldNum(CustTable, modifiedBy))             = 'test';
    custTable.(fieldNum(CustTable, ModifiedTransactionId))  = 444444;
    custTable.City = 'check';
    custTable.update();

    CodeAccessPermission::revertAssert();
}
__________________
Sergey Nefedov
Старый 28.05.2012, 14:24   #5  
Dark Light is offline
Dark Light
Участник
 
64 / 49 (0) +++
Регистрация: 17.02.2009
Адрес: Омск
Цитата:
Сообщение от gl00mie Посмотреть сообщение
Да, и правда дает на обновлении прописать другое зачение modifiedDateTime, а вот другие modifiedBy/modifiedTransactionId/createdXX - не дает, точнее, игнорирует такие попытки.
Цитата:
Сообщение от SRF Посмотреть сообщение
Насчет полей modifiedBy\modifiedTransactionId - у меня система ведет себя так :

Если обновлять поля из джоба\класса и перед обновлением запускать поиск, обновляемого курсора, как в примере ниже, то значения указанных полей просто затираются.

Если обновить запись, которая находится непоcредственно на форме(при этом не разрывать связь с ДС), то значения полей меняются.
У меня из джоба меняются значения всех modified* полей. Схема в точности такая же.

Не работало, когда менял значение в поле Name на то же самое, но чтобы значения полей затирались...

Последний раз редактировалось Dark Light; 28.05.2012 в 14:28.
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Изменить текст меток по всей базе с заданными условиями Cardagant DAX: Программирование 3 23.12.2011 21:06
Достаточно ли изменить дату в таблицах inventTrans, inventTransPosting, VendPackingSlipJour? DmitryS DAX: Программирование 3 18.09.2008 14:37
Как изменить фамилию гл.буха в счет-фактуре? AX 3.0. Подскажите... Бриллиантик DAX: Функционал 5 07.05.2008 11:50
Обработка накладной – функция изменить дату Sanya DAX: Функционал 2 05.08.2005 12:50
Как программно изменить к-во в строке заказа в форме SalesTable BorDark DAX: Программирование 2 13.01.2005 17:02
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра
Комбинированный вид Комбинированный вид

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

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

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