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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 07.03.2003, 13:46   #1  
Maxim Gorbunov is offline
Maxim Gorbunov
Administrator
Соотечественники
Лучший по профессии 2009
 
2,483 / 645 (26) +++++++
Регистрация: 27.11.2001
Адрес: Dubai, UAE
Создание методов find и exist
Тут как-то ребята из Коламбуса предлагали за деньги свой модуль Developer+, который в числе прочего мог создавать на таблицах методы find и exist. Я решил, что идея неплохая (самому понадобилась такая фенька), и написал что-то, что, по моему мнению, делает то же самое.

В отличие от Коламбуса, денег не прошу. По совершенно непонятным причинам для NSC условия точно такие же, как и для всех остальных

Пользуйтесь.

P.S.: После импортирования MenuItem из проекта следует добавить в SysContextMenu (AOT - Menus - SysContextMenu)
__________________
Not registered yet? Register here!
Have comments, questions, suggestions or anything else regarding our web site? Don't hesitate, send them to me
За это сообщение автора поблагодарили: e@gle (1).
Старый 07.03.2003, 13:52   #2  
Maxim Gorbunov is offline
Maxim Gorbunov
Administrator
Соотечественники
Лучший по профессии 2009
 
2,483 / 645 (26) +++++++
Регистрация: 27.11.2001
Адрес: Dubai, UAE
Случайно нажал Опубликовать раньше времени.

Рома, когда уже, в конце концов, можно будет аттачить файлы при Редактировании?!

P.S.: Собственно проект: http://www.axforum.info/forums/attac...s=&postid=9595
Вложения
Тип файла: xpo prjcreatestandardmethods.xpo (6.9 Кб, 699 просмотров)
__________________
Not registered yet? Register here!
Have comments, questions, suggestions or anything else regarding our web site? Don't hesitate, send them to me
За это сообщение автора поблагодарили: jasper (1).
Старый 07.03.2003, 17:46   #3  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
можно вопрос?
твой проект на построен на аддон-технологии или напрямую пишет в Dict*?
Старый 10.03.2003, 14:37   #4  
Maxim Gorbunov is offline
Maxim Gorbunov
Administrator
Соотечественники
Лучший по профессии 2009
 
2,483 / 645 (26) +++++++
Регистрация: 27.11.2001
Адрес: Dubai, UAE
Не понял вопрос...
Что такое Add-On технология?
А в Dict разве можно писать? Я пока только читать с их помощью научился...
__________________
Not registered yet? Register here!
Have comments, questions, suggestions or anything else regarding our web site? Don't hesitate, send them to me
Старый 10.03.2003, 18:06   #5  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Прежде всего: Ты КРУТ! спасибо.

Далее. Переформулирую вопрос, заглянув в Аксапту в спокойной обстановке.

Ты написал добавление метода используя add-in или Script-технологию?

Теперь вижу, что добавил add-in меню.
А почему не выбрал технологию скриптов?
Почему не написал Script похожий на Script / Template / Method / Edit?
Показалось сложным? Неправильным? Неудобным?

И еще вопрос:
зачем приводишь к атомарным типам? Это задумка или так получилось?
Сейчас не проходят сравнения текстовых полей поскольку
переменные str нельзя сравнивать с str N.

Кроме того, даты могут лежать и в неупакованном виде. Тогда для сравнения будет важны параметры представления даты. А ты их обрезаешь.


И еще:
То что ты использовал job - это так получилось или задумано для тех, кто не имеет доступа к полному исходному коду Х++?

И еще:
ты, похоже, совсем не используешь метки. Это задумано или так получилось?

В конце еще раз повторю - ты крут!
Спасибо за классную идею и пример реализации.
Старый 10.03.2003, 18:36   #6  
Maxim Gorbunov is offline
Maxim Gorbunov
Administrator
Соотечественники
Лучший по профессии 2009
 
2,483 / 645 (26) +++++++
Регистрация: 27.11.2001
Адрес: Dubai, UAE
Цитата:
Изначально опубликовано mazzy
А почему не выбрал технологию скриптов?
Почему не написал Script похожий на Script / Template / Method / Edit?
Показалось сложным? Неправильным? Неудобным?
Если я правильно понял, то ты имел ввиду класс EditorScripts. Ну, смотри, чтобы использовать Script, тебе надо создать метод, потом нажать на кнопку и выбрать нужный скрипт (или я не знаю какого-то более быстрого способа?). А тут, ты выбираешь в AOT нужную таблицу (можно, кстати, даже сразу по несколько выбирать), потом индекс и создаешь методы. ИМХО, так просто удобней.

Цитата:
Изначально опубликовано mazzy
И еще вопрос:
зачем приводишь к атомарным типам? Это задумка или так получилось?
Спасибо за баг-репорт. Да, действительно, просто так получилось. Дело в том, что я в своих таблицах редко использую поля без EDT. Поэтому, когда писал, больше внимания именно этому случаю уделял. Атомарные типы дописывал скорее только потому, что надо было что-то писать после else

Цитата:
Изначально опубликовано mazzy
Кроме того, даты могут лежать и в неупакованном виде. Тогда для сравнения будет важны параметры представления даты. А ты их обрезаешь.
Снова спасибо. Да, надо подумать об этом тоже. Постараюсь в ближайшие дни что-нибудь придумать.

Цитата:
Изначально опубликовано mazzy
То что ты использовал job - это так получилось или задумано для тех, кто не имеет доступа к полному исходному коду Х++?
Так получилось... Просто подумал, что класс заводить ради одного метода несерьезно. Можно попытаться развить идею на счет доступа к полному исходному коду. Хотя, если честно, с трудом представляю людей, у которых есть доступ к Jobs и Tables, но нет доступа к Classes.

Цитата:
Изначально опубликовано mazzy
И еще:
ты, похоже, совсем не используешь метки. Это задумано или так получилось?
Скорее, так получилось. Я, обычно, использую метки для крупных (или сравнительно крупных) проектов. Для остальных модификаций стараюсь поддерживать один общий меточный файл. Здесь же особо и метки негде использовать (я насчитал 4 вхождения "голого" текста). Потом, все-таки не считаю эту реализацию окончательной. А, по моему мнению, текст менять на метки стоит уже только перед релизом, чтобы не наплодить лишних пустых ссылок.

Кстати, хотел запаковать шаблон для кода методов в Macro, но не получилось. Судя по всему, есть ошибка лексического анализатора, которая не позволяет создать и подключить, например, следующее макроопределение:
PHP код:
#define.A(")") 
А если попытаться подключить пустой макрос, можно обнаружить просто замечательные результаты
__________________
Not registered yet? Register here!
Have comments, questions, suggestions or anything else regarding our web site? Don't hesitate, send them to me
Старый 10.03.2003, 21:07   #7  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Ок. Огромное спасибо.
Хотя насчет sript'а я бы поспорил.

Насчет типов. Просто я не нашел у себя таблиц без find и exist, поэтому тестировал на новых левых таблицах.
Старый 11.03.2003, 10:44   #8  
Wamr is offline
Wamr
----------------
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
 
1,737 / 858 (32) +++++++
Регистрация: 15.01.2002
Адрес: Москва
Записей в блоге: 7
Хорошо, что есть люди, которые облегчают жизнь другим. Спасибо.

Понимаю, что этод job писался "для себя", просто хочется отметить
- уникальный индекс не всегда есть
- find и пр. на временных таблицах большого смысла иметь не будут.
- было бы неплохо создавать все 4 метода (хотя checkExist, txtNotExist редко встречаются)

Аттач - код который я случайно обнаружил у нас в приложении, и которым никогда не пользовался... подозреваю, что это та самая часть Dev+
Вложения
Тип файла: xpo trud_createstandarttablemethods.xpo (12.2 Кб, 437 просмотров)
Старый 11.03.2003, 12:41   #9  
Maxim Gorbunov is offline
Maxim Gorbunov
Administrator
Соотечественники
Лучший по профессии 2009
 
2,483 / 645 (26) +++++++
Регистрация: 27.11.2001
Адрес: Dubai, UAE
Во-первых, спасибо за еще один вариант решения проблемы. Посмотрел. Идея та же самая.
Цитата:
Изначально опубликовано Wamr
- уникальный индекс не всегда есть
А мне он и не нужен. Был бы какой-нибудь
Когда я писал, столкнулся с такой проблемой: как-то надо было выбрать множество полей, по которому строить методы. Самым разумным вариантом мне показалось, выбрать какой-либо индекс. В том классе, который ты мне отправил, действительно выбирается первый уникальный индекс. Я предоставил выбор (и ответственность ) пользователю: перед созданием можно выбрать индекс, который будет использоваться.

Цитата:
Изначально опубликовано Wamr
- find и пр. на временных таблицах большого смысла иметь не будут.
Не запускайте Job на временных таблицах
А вообще, задался таким вопросом (но не успел его решить): в зависимости от вида элемента, выбранного в AOT, отображаются не все AddIns (например, Браузер таблиц для классов не вызывается). Как это организована? Любая помощь, как говорится, приветствуется.

Цитата:
Изначально опубликовано Wamr
- было бы неплохо создавать все 4 метода (хотя checkExist, txtNotExist редко встречаются)
Их мне представляется более целесообразным создавать в виде Template. Моя точка зрения примерно такая: то, что можно после создания сразу использовать, стоит вынести в AddIns, то, что нужно доработать - в Template. Эти методы, как мне представляется, как раз для того и существуют, чтобы "оразнообразить" процесс ненахождения записи в таблице.

В заключение, выложу новую версию проекта. Пусть это будет, например, версия 0.5.
Изменения:
  • Вместо атомарных типов подставляются соответствующие базовые EDT.
  • Используются метки.
Вложения
Тип файла: rar prjcreatestandardmethods.rar (2.1 Кб, 241 просмотров)
__________________
Not registered yet? Register here!
Have comments, questions, suggestions or anything else regarding our web site? Don't hesitate, send them to me
Старый 11.03.2003, 12:50   #10  
Wamr is offline
Wamr
----------------
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
 
1,737 / 858 (32) +++++++
Регистрация: 15.01.2002
Адрес: Москва
Записей в блоге: 7
Цитата:
А вообще, задался таким вопросом (но не успел его решить): в зависимости от вида элемента, выбранного в AOT, отображаются не все AddIns (например, Браузер таблиц для классов не вызывается). Как это организована?
Как и следовало ожидать, есть класс SysContextMenu и там есть метод verifyItem, думаю, ты разберешься, что там к чему
Старый 11.03.2003, 13:36   #11  
Maxim Gorbunov is offline
Maxim Gorbunov
Administrator
Соотечественники
Лучший по профессии 2009
 
2,483 / 645 (26) +++++++
Регистрация: 27.11.2001
Адрес: Dubai, UAE
Спасибо.

Исправленная версия:
  • В AddIns пункт появляется только для постоянных таблиц (причем не Map'ов)
  • Если нет индекса на таблице, выдается соответствующее сообщение. Если индекс один - он выбирается автоматически.
Пусть сие версией 0.6 зовется
Вложения
Тип файла: rar prjcreatestandardmethods.rar (6.0 Кб, 230 просмотров)
__________________
Not registered yet? Register here!
Have comments, questions, suggestions or anything else regarding our web site? Don't hesitate, send them to me
Старый 12.03.2003, 16:22   #12  
Dron AKA andy is offline
Dron AKA andy
Moderator
 
944 / 253 (10) ++++++
Регистрация: 27.03.2002
Адрес: Москва
Никто ничего не пишет, отсюда делаю вывод, что это только у меня глючит:
АХАРТА 2.5 SP1. Импортировал проект из предыдущего сообщения. При попытке создать методы пишет "DictIndex object не инициализирован", причем 2 раз пишет. Почему?
И попутно вопрос: ставлю breakpoint в этот job - не срабатывает, хотя явно там что-то делается. Как же так?
__________________
Андрей.
Старый 12.03.2003, 17:08   #13  
slava is offline
slava
сибиряк
Самостоятельные клиенты AX
 
468 / 23 (1) +++
Регистрация: 28.12.2001
Адрес: Москва
у меня эта ошибка прет если индекс у таблицы один.
__________________
С уважением, Вячеслав.
Старый 12.03.2003, 17:13   #14  
slava is offline
slava
сибиряк
Самостоятельные клиенты AX
 
468 / 23 (1) +++
Регистрация: 28.12.2001
Адрес: Москва
2Dron AKA andy
PHP код:
................
                else if (
dictTable.indexCnt() == 1)
                 {
                    
indexId dictTable.indexNext(0);
                    
// Slava, 12/03-03, _ ** $lava_V.Trunov ** --> добавлено
                    
dictIndex = new DictIndex(dictTable.id(), indexId);
                    
// Slava, 12/03-03, _ <--
                 
}
................ 
вот это помогает
__________________
С уважением, Вячеслав.
Старый 13.03.2003, 10:37   #15  
Dron AKA andy is offline
Dron AKA andy
Moderator
 
944 / 253 (10) ++++++
Регистрация: 27.03.2002
Адрес: Москва
Спасибо, помогло.
Еще бажок (думаю, все его уже исправили, но все же): в том месте, где проверяются атомарные типы, нужно поменять местами integer и timeOfDay.
И все же, почему не срабатывает breakpoint, как думаете?
__________________
Андрей.
Старый 13.03.2003, 11:21   #16  
Алексей Контев is offline
Алексей Контев
Участник
 
118 / 31 (2) +++
Регистрация: 28.12.2001
Адрес: Барнаул
странно. уменя breakPoint работает
хотя, не в контексте данного примера, breakPoint обычно не работает в классах и под АОСом. а тут job. странно
Старый 14.03.2003, 18:37   #17  
Maxim Gorbunov is offline
Maxim Gorbunov
Administrator
Соотечественники
Лучший по профессии 2009
 
2,483 / 645 (26) +++++++
Регистрация: 27.11.2001
Адрес: Dubai, UAE
Спасибо, slava.
Действительно выложил проект с ошибкой, каюсь.
Заметил быстро, но по причине занятости в последние три дня и отсутствия вблизи Интернета не мог выложить исправленный код. Я изменил то же самое. Новый проект отличается только этим.

P.S.: Ну все, теперь это в 3.0 программить надо
Вложения
Тип файла: rar prjcreatestandardmethods.rar (5.9 Кб, 346 просмотров)
__________________
Not registered yet? Register here!
Have comments, questions, suggestions or anything else regarding our web site? Don't hesitate, send them to me
За это сообщение автора поблагодарили: leshy (1).
Старый 14.03.2003, 20:11   #18  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
он работает в 3.0
надо всего-лишь заменить конструкции типа findChild на AOTfindChild.
Старый 29.12.2006, 14:55   #20  
AlexSD is offline
AlexSD
Microsoft Dynamics
Сотрудники Microsoft Dynamics
 
257 / 302 (11) ++++++
Регистрация: 14.10.2003
А никто не догадался заглянуть в \Classes\SysDictTable\getSourceExist и \Classes\SysDictTable\getSourceFind. Я в свое время вставил эти два вызова в контексное меню на таблицах и прекрасно этим пользовался.
Если интересует могу поискать исходник.
За это сообщение автора поблагодарили: mazzy (10), belugin (11).
Теги
axapta, download, editor script, faq, полезное, скачать (download)

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
gatesasbait: System-generated find() and exist() methods on tables Blog bot DAX Blogs 0 06.08.2008 00:05
To find objects in AOT with particular properties Blog bot DAX Blogs 1 26.04.2008 07:33
daxmy: AOT Find function Blog bot DAX Blogs 0 17.08.2007 01:23
Dynamics AX Geek: cross-references & find Blog bot DAX Blogs 0 28.10.2006 16:40
Динамическое создание методов. Ratmir DAX: База знаний и проекты 19 18.08.2004 09:13

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

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

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