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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 04.09.2006, 16:41   #1  
Lucky13 is offline
Lucky13
Участник
1C
 
714 / 198 (8) ++++++
Регистрация: 21.10.2004
Использование метода merge на таблице
Хочу задействовать метод merge на таблице для своих целей, но возникла проблема - кнопка Merge для моей таблицы не появляется. Знаю что она изначально скрыта - я ее открыл, знаю что ей нужен первичной ключ - он есть, но все равно на InventTable кнопка есть, а на моей таблице нет.
Замечено что:
\Forms\SysRecordInfo\Methods\init
X++:
   if (formObjectSet)
    {
        common      = formObjectSet.cursor();
        dictTable   = new SysDictTable(common.tableId);
        dictField   = new SysDictField(dictTable.id(), dictTable.primaryKeyField());
        dictField2  = new DictField(tableNum(userInfo), fieldNum(userInfo, password));

        if (!dictField ||
//...
В InventTable переменная dictField создается, а в случае с моей таблицей равно null.

Подскажите, пожалуйста, каким должен быть PrimaryKey, чтобы данный метод работал аналогично таблице InventTable?
Старый 04.09.2006, 16:48   #2  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
А у вас в свойсте таблицы стоит ваш первичный ключ?
Старый 04.09.2006, 16:53   #3  
Lucky13 is offline
Lucky13
Участник
1C
 
714 / 198 (8) ++++++
Регистрация: 21.10.2004
Да, в моей таблице создан уникальный индекс и он указан в свойстве PrimaryIndex таблицы
Старый 04.09.2006, 17:08   #4  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
У меня все ОК.
Раз у вас появляется она для ном. справочника, значит дело именно в вашей таблице.

Смотрите построчно и проверяйте, выполняются ли условия все.
К примеру, возможно у вас свойства AllowEdit и AllowEditOnCreate оба установлены в No - а нужно, чтобы rights было >= Edit (то есть, к примеру, AllowEditOnCreate = Yes)
Старый 04.09.2006, 17:10   #5  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
Возможно ваш первичный ключ состоит из больше чем одного поля - это тоже скрывает кнопулю

P.S. ну, и правда на таблицу - Delete уровня должны быть
Старый 04.09.2006, 17:18   #6  
tricky is offline
tricky
Участник
 
140 / 64 (3) ++++
Регистрация: 03.05.2005
Адрес: Гуково
Быть может ваш индекс был случайно выключен? (Enabled == No)
Старый 04.09.2006, 17:21   #7  
Lucky13 is offline
Lucky13
Участник
1C
 
714 / 198 (8) ++++++
Регистрация: 21.10.2004
Цитата:
Сообщение от kashperuk
Возможно ваш первичный ключ состоит из больше чем одного поля - это тоже скрывает кнопулю
Первичный ключ содержит одно поле
Цитата:
Сообщение от kashperuk
P.S. ну, и правда на таблицу - Delete уровня должны быть
Права - Delete
Цитата:
Сообщение от kashperuk
К примеру, возможно у вас свойства AllowEdit и AllowEditOnCreate оба установлены в No - а нужно, чтобы rights было >= Edit (то есть, к примеру, AllowEditOnCreate = Yes)
Права - Delete
До этой проверки даже не доходит
X++:
if (formObjectSet)
    {
        common      = formObjectSet.cursor();
        dictTable   = new SysDictTable(common.tableId);
        dictField   = new SysDictField(dictTable.id(), dictTable.primaryKeyField());
        dictField2  = new DictField(tableNum(userInfo), fieldNum(userInfo, password));

        if (!dictField ||
//...
Сваливается по самому первому условию (в моем случае dictField = null). Создается впечатление, что PrimaryKey какой-то неправильный
Старый 04.09.2006, 17:25   #8  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
а что в класс SysDictField метод new передается?
Старый 04.09.2006, 17:33   #9  
Lucky13 is offline
Lucky13
Участник
1C
 
714 / 198 (8) ++++++
Регистрация: 21.10.2004
Цитата:
Сообщение от kashperuk
а что в класс SysDictField метод new передается?
Id моей таблицы - первый параметр и 0 - второй параметр
Что тоже странно т.к. в случае с InventTable второй параметр = 2 (Id поля ItemId), а в моем случае 0, хотя Id моего поля = 50005
Старый 05.09.2006, 10:30   #10  
Lucky13 is offline
Lucky13
Участник
1C
 
714 / 198 (8) ++++++
Регистрация: 21.10.2004
Хотелось бы узнать как работает нижепрведенный Job. Может это глюк только у меня.
X++:
DictTable dictTable = new DictTable(TableNum(Table));
;
Info(int2str(dictTable.primaryKeyField()));
В качестве Table нужно подставить:
1. Какую-нибудь стандартную таблицу у которой есть первичный индекс (например, Unit)
2. Дубль этой таблицы (CopyOfUnit)
3. Какую-нибудь таблицу созданную на usr-слое с первичным индексом

У меня выдает:
1 - 1
2 - 0
3 - 0

Результаты экспериментов 2 и 3 выглядят странно, особенно 2.
Буду очень благодарен если кто-то проведет данный эксперимент в своей системе и приведет результат здесь.
Старый 05.09.2006, 10:34   #11  
oip is offline
oip
Axapta
Лучший по профессии 2014
 
2,564 / 1416 (53) ++++++++
Регистрация: 28.11.2005
Записей в блоге: 1
1 - 1
2 - 0
3 - 0
За это сообщение автора поблагодарили: Lucky13 (1).
Старый 05.09.2006, 10:41   #12  
Lucky13 is offline
Lucky13
Участник
1C
 
714 / 198 (8) ++++++
Регистрация: 21.10.2004
Спасибо, oip.
Кто-нибудь может объяснить результат п.2. Почему у дубликата таблицы невозможно найти поле первичного индекса, ведь он идентичен основной таблице.
Старый 05.09.2006, 11:36   #13  
sukhanchik is offline
sukhanchik
Administrator
Аватар для sukhanchik
MCBMSS
Злыдни
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,309 / 3546 (125) ++++++++++
Регистрация: 13.06.2004
Адрес: Москва
1 - 1
2 - 0 (логику так и не понял - почему)
3 - 40027 (Таблица создавалась на cus-слое - соотв это ID поля, входящего в Primary Index). Если в Primary Index входит более одного поля - то возвращается ноль.
__________________
Возможно сделать все. Вопрос времени
Старый 05.09.2006, 11:43   #14  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
Да, на var слое у меня 3 - тоже ненулевое.

А вот 2ое странно.
Кто прольет свет?
Старый 05.09.2006, 11:49   #15  
oip is offline
oip
Axapta
Лучший по профессии 2014
 
2,564 / 1416 (53) ++++++++
Регистрация: 28.11.2005
Записей в блоге: 1
Для некоторых таблиц на usp слое у меня не 0, для некоторых - 0. Закономерности пока не понял. Сейчас покопаю.

Последний раз редактировалось oip; 05.09.2006 в 11:53.
Старый 05.09.2006, 11:58   #16  
Lucky13 is offline
Lucky13
Участник
1C
 
714 / 198 (8) ++++++
Регистрация: 21.10.2004
2ое по прежнему не ясно

2 sukhanchik, kashperuk
Поясните по поводу 3.
То что поле в индексе должно быть одно - понятно. Каким образом нужно создать таблицу чтобы вернул не 0?
У меня в моих таблицах всегда 0
Т.е. создаю таблицу с одним полем. Создаю уникальный индекс по этому полю. Указываю его в св-ве PrimaryIndex таблицы.
Что я делаю не так?
Старый 05.09.2006, 11:59   #17  
Lucky13 is offline
Lucky13
Участник
1C
 
714 / 198 (8) ++++++
Регистрация: 21.10.2004
Цитата:
Сообщение от oip
Для некоторых таблиц на usp слое у меня не 0, для некоторых - 0. Закономерности пока не понял. Сейчас покопаю.
usp имеется в виду usr? У меня на usr слое тоже самое - где-то 0, где-то не 0. Почему не понятно.
Старый 05.09.2006, 12:03   #18  
oip is offline
oip
Axapta
Лучший по профессии 2014
 
2,564 / 1416 (53) ++++++++
Регистрация: 28.11.2005
Записей в блоге: 1
На usr у меня у всех 0. А я именно про usp.
Старый 05.09.2006, 12:09   #19  
ivas is offline
ivas
Участник
Аватар для ivas
 
252 / 68 (3) ++++
Регистрация: 22.12.2005
может вам проще такую конструкцию использовать:
PHP код:
    DictTable dictTable = new DictTable(TableNum(Table));
    
Dictindex idx = new DictIndex(TableNum(Table), dictTable.primaryIndex());
    ;
//    Info(int2str(dictTable.primaryIndex()));
    
Info(int2str(idx.field(1))); 
Старый 05.09.2006, 12:13   #20  
oip is offline
oip
Axapta
Лучший по профессии 2014
 
2,564 / 1416 (53) ++++++++
Регистрация: 28.11.2005
Записей в блоге: 1
В общем, для таблиц, которые были созданы "давно" - возвращает не 0. Для созданных "недавно" - 0. Видимо 0 в "не0" превращается после какой-то операции. Вопрос: какой?

Последний раз редактировалось oip; 05.09.2006 в 12:15.
Теги
merge, primarykeyfield

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Фильтрование записей при "переходе к основной таблице" demID DAX: Программирование 10 18.11.2015 12:52
вызов метода, динамически определённого на таблице wojzeh DAX: Программирование 3 01.08.2008 17:44
Двойное кэширование метода на таблице PavelSR DAX: Программирование 8 14.06.2007 08:04
Использование edit метода на таблицах, для которых MaxAccessMode=View bio_unit DAX: Программирование 5 23.03.2007 17:17
Axapta Lessons: Merge Customer Records Blog bot DAX Blogs 0 28.10.2006 18:22

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

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

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