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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 17.02.2009, 12:32   #1  
DSPIC is offline
DSPIC
Боец
 
1,077 / 1235 (44) ++++++++
Регистрация: 11.04.2008
Thumbs up Где же это поле?! (Form digger)
Очередной гаджет для удобства работы в системе. Уверен, пригодится как разработчикам, так и консультантам\конечным пользователям.

Основное предназначение - мгновенный и очень удобный поиск любого поля на любой форме аксапты, в т.ч. в TableBrowser.
Искать можно по метке поля на форме, либо по системному имени поля таблицы, отображаемого где-то на форме.

Возможности:
  • поиск полей на любой форме с авто позиционированием и визуальным выделением (красная рамка) искомого поля.
  • доступ к свойствам поля и копирование в буфер обмена.
  • доступ к стандартному контекстному меню разработчика.
  • быстрый доступ к редактированию формы в AOT.
  • быстрый снимок формы (snapshot).

Подробное описание здесь

Доступны версии для DAX 3.0, 4.0. Для DAX 2009 пока не решена проблема с визуальным выделением полей на форме, но это на 70% красивость и на 30% нужность. А так, в принципе, можно пользовать.

Хочу также отметить, что это beta версия, буду благодарен за сообщения о найденных ошибках\замечаниях.
Миниатюры
Нажмите на изображение для увеличения
Название: FormDigger.png
Просмотров: 621
Размер:	43.1 Кб
ID:	4326  
Вложения
Тип файла: xpo FormDigger1_0b_30.xpo (71.1 Кб, 314 просмотров)
Тип файла: xpo FormDigger1_0b_40.xpo (46.0 Кб, 385 просмотров)
За это сообщение автора поблагодарили: mazzy (5), blokva (5), belugin (5), kashperuk (5), Pasha_x (1), Logger (6), Ace of Database (2), Lucky13 (3), lev (1), Russland (2), oip (5), Kolja (1), AlexArh (1), miklenew (5), alex55 (3), nano3 (1), _scorp_ (2), Eaglet (1), Товарищ ♂uatr (1).
Старый 17.02.2009, 12:48   #2  
miklenew is offline
miklenew
Участник
Аватар для miklenew
MCBMSS
1C
Лучший по профессии 2009
 
1,688 / 433 (18) +++++++
Регистрация: 10.07.2006
Адрес: г. Ликино-Дулёво
В Tabax-e есть кнопки которые быстро открывают активную форму и активный элемент.
__________________
Энергия молодых и неравнодушных способна изменить мир к лучшему.
Старый 17.02.2009, 12:59   #3  
DSPIC is offline
DSPIC
Боец
 
1,077 / 1235 (44) ++++++++
Регистрация: 11.04.2008
Цитата:
В Tabax-e есть кнопки которые быстро открывают активную форму и активный элемент.
Суть не в этом. Инструмент для поиска полей, а не для просмотра активного элемента.
Пример: Вы не знаете, где на SalesTable находится поле "RMA-номер". Для поиска вам нужно прощелкать и просмотреть чуть ли не все закладки\поля.
В данном случае, открыв форму SalesTable, вы нажимаете "Alt+~" и вводите несколько букв искомого поля: "RM". FormDigger автоматически откроет нужную закладку на SalesTable и обведет поле "RMA-номер" красной рамкой.
Старый 17.02.2009, 13:35   #4  
Lucky13 is offline
Lucky13
Участник
1C
 
714 / 198 (8) ++++++
Регистрация: 21.10.2004
Цитата:
Сообщение от DSPIC Посмотреть сообщение
Очередной гаджет для удобства работы в системе. Уверен, пригодится как разработчикам, так и консультантам\конечным пользователям.
Прикольно. Только я думаю будет лучше убрать из проекта класс SysSetupFormRun, а изменения, которые в нем делаются, выложить сюда. А то по ошибке можно лишиться изменений в этом классе.
Старый 17.02.2009, 13:47   #5  
DSPIC is offline
DSPIC
Боец
 
1,077 / 1235 (44) ++++++++
Регистрация: 11.04.2008
Цитата:
Будет лучше убрать из проекта класс SysSetupFormRun, а изменения, которые в нем делаются, выложить сюда. А то по ошибке можно лишиться изменений в этом классе.
OK. Итеграция очень простая: одна строка в стандартный класс SysSetupFormRun,
метод \Classes\SysSetupFormRun\task

X++:
//EVO: 31.01.09 #DEV02 Find from control by name -->
if (!FormDigger::overloadButton(this, _p1))
//EVO: 31.01.09 #DEV02 Find from control by name <--
        ret = super(_p1);
Т.е. отслеживаем нажатие комбинации кнопок и блокируем вызов super(). Вообще, блокировка super() не обязательна для комбинации "Alt+~", Так что сам if можно брать, оставив только
X++:
FormDigger::overloadButton(this, _p1)
Старый 17.02.2009, 15:28   #6  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,928 / 3227 (115) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Странно, безобидное сравнение слоев перед импортом - сломало класс sysSetupFormRun

Аккуратнее. Изменения в этом классе лучше внести руками.
За это сообщение автора поблагодарили: DSPIC (1).
Старый 17.02.2009, 15:34   #7  
Lucky13 is offline
Lucky13
Участник
1C
 
714 / 198 (8) ++++++
Регистрация: 21.10.2004
Предлагаю внести небольшие изменения в метод initFromFormControl таблицы FormDiggerTmpData, а то получается не очень информативно, если на форме несколько источников
X++:
void initFromFormControl(Object _formControl, int _parentId = 0, FormRun _fr)
{
    ;

    if ( !_formControl)
        return;

    this.Name     = _formControl.userPromptText() ? _formControl.userPromptText() : _formControl.labelText();
    this.Id       = _formControl.id();
    this.ParentId = _parentId;

    if (FormDigger::formControlIsDataBound(_formControl))
    {
        this.IsDataBound = NoYes::Yes;

        if (_formControl.dataField())
        {
//добавляем имя источника
           this.FieldMethodName = _fr.form().dataSource(_formControl.dataSource()).name()+'.'+fieldId2name(_fr.form().dataSource(_formControl.dataSource()).table(), _formControl.dataField());
        }
        else
        {
            if ( !this.FieldMethodName)
            {
//добавляем имя источника и скобки к имени метода
                this.FieldMethodName = _fr.form().dataSource(_formControl.dataSource()).name()+'.'+_formControl.dataMethod()+'()';
                this.isMethod        = NoYes::Yes;
            }
        }
    }
}
За это сообщение автора поблагодарили: blokva (2), Logger (2).
Старый 17.02.2009, 16:02   #8  
DSPIC is offline
DSPIC
Боец
 
1,077 / 1235 (44) ++++++++
Регистрация: 11.04.2008
Цитата:
Сообщение от Lucky13 Посмотреть сообщение
Предлагаю внести небольшие изменения в метод initFromFormControl таблицы FormDiggerTmpData, а то получается не очень информативно, если на форме несколько источников
Согласен, только не совсем удачное место. Дело в том, что по контекстному меню доступны функции копирования, которые используют поле временной таблицы FieldMethodName. Поэтому в clipboard попадет доп. информация, что нежелательно. Поэтому лучше это на форме делать, чисто для отображения:

\Forms\FormDigger\Methods\addListItem
Но нужно во временную таблицу добавить поле для имени источника данных.
Спасибо, учтем в след. версии.
Да, ещё заметил, что здесь 2й if() лишний...
Старый 17.02.2009, 16:05   #9  
lev is offline
lev
Ищущий знания...
Аватар для lev
Oracle
MCBMSS
Axapta Retail User
 
1,723 / 491 (20) +++++++
Регистрация: 18.01.2005
Адрес: Москва
Цитата:
Сообщение от DSPIC Посмотреть сообщение
Подробное описание здесь
читал ссылку, заметил в одном месте опечатку... фраза:
"Если флаг "Find by field" («По полю») не установлен, поиск/фильтрация выполняется по наименованию поля (его пользовательской метке), если не установлен – по имени поля таблицы."

Обратите внимание дважды написано "НЕ установлен", так, в каком случае как работает? Правильно ли я понял, что если Установлен флаг то поиск по имени поля таблицы, если НЕ установлен то по наименованию поля (метке)?
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с)
С Уважением,
Елизаров Артем
За это сообщение автора поблагодарили: DSPIC (1).
Старый 17.02.2009, 16:05   #10  
DSPIC is offline
DSPIC
Боец
 
1,077 / 1235 (44) ++++++++
Регистрация: 11.04.2008
Цитата:
Сообщение от Logger Посмотреть сообщение
Странно, безобидное сравнение слоев перед импортом - сломало класс sysSetupFormRun

Аккуратнее. Изменения в этом классе лучше внести руками.
Да, полностью согласен, есть такая неприятность...
Старый 17.02.2009, 16:09   #11  
DSPIC is offline
DSPIC
Боец
 
1,077 / 1235 (44) ++++++++
Регистрация: 11.04.2008
Цитата:
Сообщение от lev Посмотреть сообщение
читал ссылку, заметил в одном месте опечатку... фраза:
"Если флаг "Find by field" («По полю») не установлен, поиск/фильтрация выполняется по наименованию поля (его пользовательской метке), если не установлен – по имени поля таблицы."

Обратите внимание дважды написано "НЕ установлен", так, в каком случае как работает? Правильно ли я понял, что если Установлен флаг то поиск по имени поля таблицы, если НЕ установлен то по наименованию поля (метке)?
Да, Вы правильно поняли.
Поправил, спасибо.
Старый 17.02.2009, 16:13   #12  
lev is offline
lev
Ищущий знания...
Аватар для lev
Oracle
MCBMSS
Axapta Retail User
 
1,723 / 491 (20) +++++++
Регистрация: 18.01.2005
Адрес: Москва
Thumbs up
Цитата:
Сообщение от DSPIC Посмотреть сообщение
Да, Вы правильно поняли.
Поправил, спасибо.
Это Вам спасибо! отличная утилита!
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с)
С Уважением,
Елизаров Артем
Старый 18.02.2009, 09:13   #13  
blokva is offline
blokva
Пенсионер
Аватар для blokva
SAP
NavAx Club
 
743 / 167 (7) ++++++
Регистрация: 04.06.2003
Адрес: Беларусь
Цитата:
Сообщение от DSPIC Посмотреть сообщение
Суть не в этом. Инструмент для поиска полей, а не для просмотра активного элемента.
Пример: Вы не знаете, где на SalesTable находится поле "RMA-номер". Для поиска вам нужно прощелкать и просмотреть чуть ли не все закладки\поля.
В данном случае, открыв форму SalesTable, вы нажимаете "Alt+~" и вводите несколько букв искомого поля: "RM". FormDigger автоматически откроет нужную закладку на SalesTable и обведет поле "RMA-номер" красной рамкой.
Дык неплохо бы еще и в виде плагина к Табаксу сделать
__________________
Законы природы еще никто не отменял!
А еще у меня растет 2 внучки!!! Кому интересно подробности тут:
http://www.baby-shine.com/
Старый 18.02.2009, 11:09   #14  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
А почему на сайте блога нету самих проектов??
Старый 18.02.2009, 11:23   #15  
Lucky13 is offline
Lucky13
Участник
1C
 
714 / 198 (8) ++++++
Регистрация: 21.10.2004
Маленькое дополнение, если кто-то пойдет моим путем:
X++:
if ( !this.FieldMethodName)
{
  if (_formControl.dataSource())
     this.FieldMethodName =    _fr.form().dataSource(_formControl.dataSource()).name()+'.'+_formControl.dataMethod()+'()';
  this.isMethod        = NoYes::Yes;
}
Добавляем проверку свойства datasource как указано выше на случай того, если контрол не связан с источником вообще. И еще увеличиваем размер поля FieldMethodName, а то в 40 символов может не влезть
Старый 18.02.2009, 11:23   #16  
DSPIC is offline
DSPIC
Боец
 
1,077 / 1235 (44) ++++++++
Регистрация: 11.04.2008
Цитата:
Сообщение от kashperuk Посмотреть сообщение
А почему на сайте блога нету самих проектов??
Честно говоря, не хватило терпения разобраться, как на blogspot можно файлы аттачить (можно ли вообще?). Дойдут руки - выложу на axaptapedia.com и в блог ссылки добавлю. Пока сорри
Старый 18.02.2009, 11:30   #17  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
Цитата:
Сообщение от Lucky13 Посмотреть сообщение
И еще увеличиваем размер поля FieldMethodName, а то в 40 символов может не влезть
40 символов - предельное значение для любого объекта АОТ
Старый 18.02.2009, 11:32   #18  
Lucky13 is offline
Lucky13
Участник
1C
 
714 / 198 (8) ++++++
Регистрация: 21.10.2004
Цитата:
Сообщение от kashperuk Посмотреть сообщение
40 символов - предельное значение для любого объекта АОТ
Для объекта АОТ да, но к имени объекта еще добавляется имя источника, поэтому в сумме длина может превысить 40 символов
Старый 18.02.2009, 12:54   #19  
DSPIC is offline
DSPIC
Боец
 
1,077 / 1235 (44) ++++++++
Регистрация: 11.04.2008
Цитата:
Сообщение от Lucky13 Посмотреть сообщение
Маленькое дополнение, если кто-то пойдет моим путем:
X++:
if ( !this.FieldMethodName)
{
  if (_formControl.dataSource())
     this.FieldMethodName =    _fr.form().dataSource(_formControl.dataSource()).name()+'.'+_formControl.dataMethod()+'()';
  this.isMethod        = NoYes::Yes;
}
Добавляем проверку свойства datasource как указано выше на случай того, если контрол не связан с источником вообще. И еще увеличиваем размер поля FieldMethodName, а то в 40 символов может не влезть
Есть проблема.
Дело в том, что в режиме поиска по полю происходит фильтрация именно по "this.FieldMethodName". Поэтому, дописав сюда дополнительные буквы вы сломаете фильтрацию... Ещё раз повторюсь, что эту доработку лучше сделать в месте, где формируется FormListControl, а не на таблице. При этом в таблицу можно добавить новое поле для имени таблицы датасорса.

Последний раз редактировалось DSPIC; 18.02.2009 в 13:10.
Старый 20.02.2009, 16:02   #20  
konfet is offline
konfet
Снова балуюсь косаптой :)
 
143 / 50 (2) ++++
Регистрация: 23.04.2003
Адрес: Moscow
Большое спасибо за Ваш труд! Очень полезная утилита. Непонятно - почему что-то похожее не было реализовано разработчиками, на системном слое.

Что бы хотелось видеть в следующей версии, если она будет (новое/исправленное):
  1. Если запустить formDigger из формы (при этом курсор находится в поле "Id") - поле "Id" окружается красной рамочкой. Но позиционирования в formDigger на поле "Id" не происходит - то есть оно не оказывается первым в списке подобно тому как это происходит в Аксапте при "переходе к основной таблице". Оно правда, выделяется серым фоном - но как-то незаметно.
  2. Если после открытия formDigger перейти в host-форме на другое поле, то перепозиционирования в formDigger на это поле не происходит, и красная рамочка вокруг него в host-форме не появляется.
  3. Функция копирования скриншота host-формы в буфер обмена переносит со скриншотом красную рамочку, но не всегда. В частности, она не делает это на полях-галочках (типа NoYes) и в некоторых других случаях (смотрелось на форме "Обработка/Отборочная накладная" в закупке) .
  4. При щелчке правой кнопкой мыши по любому элементу formDigger происходит перерисовка host-формы.
  5. Хотелось бы видеть сортировку и/или фильтрацию по типу элемента (поле, display/edit метод и тд), а также по datasource-у контрола (см. ниже).
  6. Хотелось бы видеть в formDigger информацию (в виде еще одной колонки) о datasource и/или к таблице, к которой относится выбранный контрол.
  7. При выборе пункта "свойства" в контестном меню на элементе, происходит открытие окна свойств контрола в форме. Хотелось бы иметь возможность открывать свойства поля на таблице, если контрол представляет собой табличное поле. Если же контрол - дисплей-метод на таблице или на датасурсе формы, то по двойном щелчке на нем открывается соответствующий код.
  8. Галочка Find By Field имхо практически не нужна, так как label всегда на русском, а системное имя поля - английское. Точнее так: поиск лучше производить и по label и по fieldname без необходимости переключать Find By Field.
__________________
Бесты и регарды!
За это сообщение автора поблагодарили: DSPIC (3).
Теги
ax3.0, ax4.0, download, formdigger, tools, инструменты, полезное, форма

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Как и где указать Ax, что моё поле тоже надо так обрабатывать? kostas DAX: Программирование 8 17.04.2015 00:36
Evgeny Arlionak: Где же это поле?! (Form digger) Blog bot DAX Blogs 0 17.02.2009 19:05
casperkamal: Preventing a form getting added to "LastActivated Form" in Dynamics Ax Blog bot DAX Blogs 1 27.08.2007 23:17
Axapta Lessons: Trapping keystrokes in a Form Blog bot DAX Blogs 13 01.11.2006 18:16
Говорят вышел SP2 для Axapta 3. Кто нибуть что знает на эту тему? soin DAX: Прочие вопросы 10 13.10.2003 10:43

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

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

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