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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 13.06.2008, 12:31   #1  
SergeK is offline
SergeK
Участник
 
16 / 10 (1) +
Регистрация: 10.06.2008
Foreign Key в Ax
Вероятно для большинства нижеизложенное не представляет интереса, но для начинающих, как я, это не так. Речь идет о том, как правильно сделать Foreign Key в MS DAX 4.0.

Хочу сделать пару таблиц master-detail.
Для этого в Ах 4.0 делаю следующее:
1.Создаю EDT TestId.
2.Создаю таблицы TestMaster и TestDetail. В каждую из них кидаю TestId и Descripnion.
3.Создаю для таблицы TestMaster уникальный индекс TestIdx по полю TestId. Делаю его PrimaryIndex для этой таблицы.
4.Для таблицы TestDetail делаю не уникальный индекс по полю TestId.
5.В EDT TestId делаю relation TestId == TestMaster.TestId
6.В свойствах полей TestId в обеих таблицах ставлю Mandatory = Yes.
7.Для таблицы TestMaster делаю DeleteAction = Restricted по отношению к таблице TestDetail.

Вроде бы все. Можно смотреть результат .
Открываю Обозреватель таблиц для TestMaster и TestDetail.
Пытаюсь вставить значение в TestDetail. Не получается . Хорошо .
Вставляю пару строк в TestMaster (1 и 2). Вставляю пару строк в TestDetail для каждого значения из Master.
Пытаюсь удалить из TestMaster. Не получается . Хорошо .
Удаляю из TestDetail и снова пытаюсь удалить из TestMaster. Получается .
Захожу на TestMaster и пытаюсь поменять TestId с 2 на 3. Получается .
Ничего себе, строки в TestDetail стали сиротами!

Отпив и бутылочки корвалола продолжаю тестировать.
Создаю job такого содержания:
Код:
static void TestJobMD(Args _args)
{
    TestDetail testDetail;
; 
    ttsbegin;
    TestDetail.TestId = "100";
    TestDetail.Description = "Test 100";
 
    if (TestDetail.validateWrite())
        TestDetail.insert();
    ttscommit; 
}
Выполняю. Проходит!!! Не верю! Открываю Обозреватель таблиц - таки да!

Допиваю остатки корвалола продолжаю. Создаю еще job:
Код:
static void TestDeleteMD(Args _args)
{
    TestMaster testMaster;
;
    ttsbegin;
    select forupdate testMaster
        where testMaster.TestId == "2";

    if ( testMaster.validateDelete())
         testMaster.delete();
    ttscommit;
}
Предварительно в TestMaster возвращаю строку с TestId = 2.
Запускаю. Не проходит. Ну хоть тут Слава Богу.

А теперь вопрос к знатокам. Я что-то не так сделал?

Как человек, долго работавший с Oracle добавлю. Там (да и в MS SQL) таких проблем просто нет!
Пару строк в скрипте создания таблиц.(Primary Key + Foreign Key) и вы получаете надежную ссылочную целостность, выдерживающую прямое попадание любой ядерной бомбы, запущенной умелой рукой пользователя .
А в Ах что получается: спасение утопающих - дело рук самих утопающих? Т.е. программист должен сам все проверять?

Еще раз повторю. Может я что-то не так сделал? Тогда готов посыпать голову пеплом.
Теги
ax4.0

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Dynamics AX: Managing Your Supply Chain Using Microsoft Dynamics AX 2009 - Book Review Blog bot DAX Blogs 0 31.03.2009 23:06
axStart: Microsoft Dynamics AX 2009 Hot Topics Web Seminar Series Blog bot DAX Blogs 0 06.08.2008 12:05
Arijit Basu: AX 2009 - Quick Overview Blog bot DAX Blogs 4 19.05.2008 14:47
Arijit Basu: Reporting & BI in AX: An Overview [Level 100] Blog bot DAX Blogs 0 07.01.2008 16:01
при построении перекрёстных ссылок выдаётся сообщение об ошибках mmmax DAX: Программирование 10 21.01.2005 12:42

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

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

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