28.07.2009, 20:23 | #1 |
DAX 3.0;4.0;5.0
|
DeleteAction на Unit table
DeleteAction на Unit table для SalesQuotationLine не работает.
Создаем юнит, создаем sales quotation line c созданым юнитом (SalesUnit). Затем идем на юниты и удаляем созданный ранее юнит и... несмотря на то, что есть deleteAction (restricted) для SalesQuotationLine, юнит все равно удаляестя. Фишка в том, что у SalesQuotationLine есть еще одно поле наследуемое от EDT UnitId (PackingUnit) и система выбирает ЭТО поле, сравнивает значение с удаляемым юнитом (например, пустое поле) и наш юнит удален. Если кто-нибудь сталкивался с подобной проблемой и решал ее, то поделитесь плиз. Quick fix: ValidateDelete на Unit table, но это мне не оч нравится. Kv: 4.0.2503.743; Av:4.0.2503.743. |
|
28.07.2009, 21:22 | #2 |
Administrator
|
Есть еще вариант - сменить EDT у поля PackingUnit на EDT без Relation. В этом случае подцепится все правильно. Правда при этом потеряется лукап - но его можно попробовать сделать через Relation на таблице (с одиночным полем), а если и это не прокатит - то уж перекрытый метод lookup на форме и класс SysTableLookup всегда могут выручить.
Напрямую не сталкивался с этим, но сталкивался с тем, что то, что задевает модуль CRM как-то не отлажено что ли (явно не является предметом массового спроса). К примеру - без добавления полей с договорами - в предложения - трассировка стека вылезает и т.д. Поэтому - тут не так уж страшно попрограммировать
__________________
Возможно сделать все. Вопрос времени |
|
29.07.2009, 08:09 | #3 |
Участник
|
Цитата:
Если нужно только переместить проверку по Delete Action c поля PakingUnit на SalesUnit, то по идее достаточно создать Relation на таблице SalesQuotationLine (SalesQuotationLine.SalesUnit == Unit.UnitId). Если же нужно сделать так, чтобы проверялись оба поля, то тут без программирования видимо не обойтись, поскольку по всей видимости при проверке Delete Action (в случае отсутствия на таблицах Relation), AX ищет первое поле с данным EDT и проверяет его. P.S. К слову, по таблице UnitConvert тоже есть Delete Action, только Cascade, так вот, удаляются только те записи, у которых в поле FromUnit установлена данная единица. Также можно настроить constraint на уровне СУБД.
__________________
Sergey Nefedov |
|
29.07.2009, 12:53 | #4 |
DAX 3.0;4.0;5.0
|
Спасибо за ответы.
Выбран вариант с SalesQuotationLine (SalesQuotationLine.SalesUnit == Unit.UnitId). По двум полям все равно не работает так как это стандартное поведение аксапты. Из двух полей будет выбираться то, у которого ID меньше. |
|