13.06.2008, 12:31 | #1 |
Участник
|
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; } Запускаю. Не проходит. Ну хоть тут Слава Богу. А теперь вопрос к знатокам. Я что-то не так сделал? Как человек, долго работавший с Oracle добавлю. Там (да и в MS SQL) таких проблем просто нет! Пару строк в скрипте создания таблиц.(Primary Key + Foreign Key) и вы получаете надежную ссылочную целостность, выдерживающую прямое попадание любой ядерной бомбы, запущенной умелой рукой пользователя . А в Ах что получается: спасение утопающих - дело рук самих утопающих? Т.е. программист должен сам все проверять? Еще раз повторю. Может я что-то не так сделал? Тогда готов посыпать голову пеплом. |
|
Теги |
ax4.0 |
|
|