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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 07.08.2018, 16:24   #1  
opsvlad is offline
opsvlad
Участник
 
118 / 13 (1) ++
Регистрация: 05.07.2018
Проверка на существующую запись при insert
Здравствуйте можете подсказать, что я делаю не правильно в условии.
Вот суть задания:
Если в таблице уже существует запись с комбинацией значений полей VersionPeriod == «выбранное значение «Год планирования»» && ParentVersionId == ‘’ – процесс создания новой записи прерывается, пользователю выводится InfoLog с сообщением о том, что Годовой план ремонтов на требуемый период уже в системе создан.
Вот сам метод:
X++:
public void run()
{
    TSRPlanVersions versionsTable;
    ;
   if ( versionsTable.VersionPeriod ==  versionPeriod && versionsTable.ParentVersionId == "")
        {
         throw error("Годовой план ремонтов на требуемый период уже в системе создан");
        }
    else
        {
       ttsbegin;
       versionsTable.selectForUpdate(true);
       versionsTable.VersionId = NumberSeq::newGetNum(TSRParameters::numRef_Req_TSRVersionId()).num();
       versionsTable.VersionName = versionName;
       versionsTable.VersionPeriod = versionPeriod;
       versionsTable.insert();
       info("Record added");
       ttscommit;

        }
}
versionPeriod - это EDT TSRVersionPeriod поля VersionPeriod
Старый 07.08.2018, 17:15   #2  
БАХ43 is offline
БАХ43
Участник
 
44 / 33 (2) +++
Регистрация: 15.02.2013
Адрес: г.Москва, г. Зеленоград
А откуда versionsTable берется?
Вместо строки
X++:
if ( versionsTable.VersionPeriod ==  versionPeriod && versionsTable.ParentVersionId == "")
Делай
X++:
select firstonly versionsTable
         where versionsTable.VersionPeriod ==  versionPeriod && versionsTable.ParentVersionId == "";
if (versionsTable)
{
error...
}
__________________
Я прибыл к вам из Кантемировской дивизии. А там, как известно, дураков не держат!
За это сообщение автора поблагодарили: opsvlad (1).
Старый 07.08.2018, 20:14   #3  
opsvlad is offline
opsvlad
Участник
 
118 / 13 (1) ++
Регистрация: 05.07.2018
Спасибо, очень выручили. Проверил у себя дома на тестовой Axapte, все работает
X++:
static void JobInsertTest(Args _args)
{
   RHotelBookingTable testTable;
   
   select firstonly testTable
   where testTable.RHotelName  == "Test"; //запись Test существует
   
   if (testTable)
   {
      Global::error("Bad");
   }
   else
   {
        ttsbegin;
      testTable.selectForUpdate(true);
      testTable.RHotelBookingId = "1";
      testTable.RHotelName = "Test2";
      testTable.insert();
        ttscommit;
   }

}
Старый 08.08.2018, 00:18   #4  
БАХ43 is offline
БАХ43
Участник
 
44 / 33 (2) +++
Регистрация: 15.02.2013
Адрес: г.Москва, г. Зеленоград
Всегда пожалуйста. У меня тоже это были первые грабли, когда переходил с Паскаля на SQl-ориентированные базы.
ЗЫ: За сообщения можно благодарить (ставить спасибо или наоборот) на зеленых точках-кружочках полуквадратных. Иногда приятно - душу греет...
__________________
Я прибыл к вам из Кантемировской дивизии. А там, как известно, дураков не держат!
Старый 08.08.2018, 15:39   #5  
user_ax is offline
user_ax
Участник
Аватар для user_ax
 
585 / 37 (3) +++
Регистрация: 07.10.2012
Адрес: ZP
Какой-то оторванный от реальности пример. Почему проверка на дубликат делается в некоем методе run(), а не validateWrite() или на крайняк insert() ? С точки зрения системі так будет правильнее.
Ещё, для вставки записи в базу необязатлеьно выбирать переменную на обновление (selectforUpdate()).

Делайте это на validateWrite() таблицы\датасорса, если вам нужна эта проверка по всей системе. А если только с какой-то операции ( sysOperationFramework), тогда отдельный метод validate().

Так, просто к слову
Старый 08.08.2018, 16:06   #6  
opsvlad is offline
opsvlad
Участник
 
118 / 13 (1) ++
Регистрация: 05.07.2018
можно сразу эту проверку там написать и использовать CheckFailed
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
ax2012 - почему не находит по RecID УЖЕ существующую запись? mazzy DAX: Программирование 14 21.11.2014 10:20
Не корректно сохраняет запись в inventTable Starling DAX: Программирование 8 31.03.2008 15:30
Про Insert, DoInsert и IAxaptaRecord::Insert murad DAX: Программирование 5 23.05.2006 12:26
Ошибка при импорте демоданных (Axapta 3.0 CIS SP1) KocDm DAX: Администрирование 2 11.08.2005 12:04
Вставка нового значения в существующую запись Александр Костоусов DAX: Программирование 4 16.09.2004 16:13
Опции темы Поиск в этой теме
Поиск в этой теме:

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

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

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

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 04:24.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.