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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 16.10.2009, 13:18   #1  
DSPIC is offline
DSPIC
Боец
 
1,077 / 1234 (44) ++++++++
Регистрация: 11.04.2008
Редактор X++ и Drag'n'Drop
Интересную функцию редактора X++ для себя открыл

Оказывается, в Редактор X++ можно перетягивать имена элементов AOT.
А в случае множественного выделения, ещё и запятые проставляются:

Нажмите на изображение для увеличения
Название: X__DrugNDrop.png
Просмотров: 492
Размер:	33.7 Кб
ID:	5270

Проверил в DAX 3.0...5.0

Последний раз редактировалось DSPIC; 16.10.2009 в 13:24.
За это сообщение автора поблагодарили: Lemming (2), lev (2), TasmanianDevil (2), AlexArh (1), Stitch_MS (2), miklenew (1), alex55 (1), JuniorAx (1).
Старый 16.10.2009, 13:28   #2  
TasmanianDevil is offline
TasmanianDevil
Мрачный тип
Аватар для TasmanianDevil
Злыдни
 
885 / 389 (14) ++++++
Регистрация: 24.01.2005
Адрес: Томск
В курсе по разработке сия фича не описывалась, спасибо
__________________
Мы летаем, кружимся, нагоняем ужасы ...
Старый 16.10.2009, 13:43   #3  
Gustav is offline
Gustav
Moderator
Аватар для Gustav
SAP
Лучший по профессии 2009
 
1,858 / 1152 (42) ++++++++
Регистрация: 24.01.2006
Адрес: Санкт-Петербург
Записей в блоге: 19
Полезно!

А то, что Job можно перетащить в Classes и будет создан класс с именем джоба и в нем статический метод main с текстом джоба, это все знают? А в существующий класс тоже можно перетащить джоб и он тоже станет статическим методом с именем джоба.
За это сообщение автора поблагодарили: Lemming (4), lev (2), Stitch_MS (2), S.Kuskov (1), Kabardian (3).
Старый 16.10.2009, 15:56   #4  
Gustav is offline
Gustav
Moderator
Аватар для Gustav
SAP
Лучший по профессии 2009
 
1,858 / 1152 (42) ++++++++
Регистрация: 24.01.2006
Адрес: Санкт-Петербург
Записей в блоге: 19
Вспоминал, вспоминал, что еще можно было прикольно таскать...
Вспомнил - запросы! Из AOT\Queries - в Редактор. Создается шаблон цикла while ... next(). Например, сохраненный запроc LedgerJournalName пропишет такое:
X++:
if (LedgerJournalName.prompt())
{
    while (LedgerJournalName.next())
    {
        LedgerJournalName = LedgerJournalName.getNo(1);
        LedgerJournalTable = LedgerJournalName.getNo(2);
    }
}
Старый 16.10.2009, 16:05   #5  
DSPIC is offline
DSPIC
Боец
 
1,077 / 1234 (44) ++++++++
Регистрация: 11.04.2008
Цитата:
Сообщение от Gustav Посмотреть сообщение
Вспоминал, вспоминал, что еще можно было прикольно таскать...
Вспомнил - запросы! Из AOT\Queries - в Редактор. Создается шаблон цикла while ... next(). Например, сохраненный запроc LedgerJournalName пропишет такое:
X++:
if (LedgerJournalName.prompt())
{
    while (LedgerJournalName.next())
    {
        LedgerJournalName = LedgerJournalName.getNo(1);
        LedgerJournalTable = LedgerJournalName.getNo(2);
    }
}
Прикольно. Но видимо что-то не дописали, не могу придумать практического применения
Старый 16.10.2009, 16:10   #6  
Gustav is offline
Gustav
Moderator
Аватар для Gustav
SAP
Лучший по профессии 2009
 
1,858 / 1152 (42) ++++++++
Регистрация: 24.01.2006
Адрес: Санкт-Петербург
Записей в блоге: 19
Цитата:
Сообщение от DSPIC Посмотреть сообщение
не могу придумать практического применения
это да, есть такое дело...

Кстати, для запросов в отчетах AOT \Reports \... \DataSources \Query - тоже работает.


P.S. Упс! А перетаскивание датасорса из запроса в редактор вставляет SQL.

Для \Queries \LedgerJournalName \Data Sources \LedgerJournalName(LedgerJournalName) получается:
X++:
SELECT * FROM LedgerJournalName JOIN * FROM LedgerJournalTable
Практическое применение тоже, правда, не сильно просматривается...

Последний раз редактировалось Gustav; 16.10.2009 в 16:23.
Старый 16.10.2009, 16:22   #7  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,875 / 3123 (112) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Еще меюитемы автоматом умеет создавать.
Тоже полезная штука.
За это сообщение автора поблагодарили: Gustav (1).
Старый 16.10.2009, 16:28   #8  
Gustav is offline
Gustav
Moderator
Аватар для Gustav
SAP
Лучший по профессии 2009
 
1,858 / 1152 (42) ++++++++
Регистрация: 24.01.2006
Адрес: Санкт-Петербург
Записей в блоге: 19
Что там на что надо тянуть?
Старый 16.10.2009, 16:35   #9  
DSPIC is offline
DSPIC
Боец
 
1,077 / 1234 (44) ++++++++
Регистрация: 11.04.2008
Цитата:
Сообщение от Gustav Посмотреть сообщение
Что там на что надо тянуть?
если форму\отчет\класс тащить drag and drop-ом в соответствующую ветку AOT, то автоматом будут созданы menuItems
За это сообщение автора поблагодарили: Gustav (1).
Старый 16.10.2009, 16:36   #10  
Lemming is offline
Lemming
Участник
Аватар для Lemming
 
1,144 / 343 (14) ++++++
Регистрация: 20.04.2004
Адрес: Москва, Чайнатаун в Люблино
Записей в блоге: 10
Цитата:
Сообщение от Gustav Посмотреть сообщение
Что там на что надо тянуть?
Класс тянем в группу менюитемов(в любую из трех) и получаем менюитем для данного класса, удобно для классов имеющих main метод для запуска.

upd: пока писал, меня опередили.

Последний раз редактировалось Lemming; 16.10.2009 в 16:39.
За это сообщение автора поблагодарили: Gustav (1).
Старый 16.10.2009, 16:41   #11  
Gustav is offline
Gustav
Moderator
Аватар для Gustav
SAP
Лучший по профессии 2009
 
1,858 / 1152 (42) ++++++++
Регистрация: 24.01.2006
Адрес: Санкт-Петербург
Записей в блоге: 19
Да, уже и сам почти написал Спасибо. Ещё и запросы формально можно - даёт! и даже потом открывает SysQueryForm, но потом после ОК - зависалово с последующей перезагрузкой (по понятным причинам).

Последний раз редактировалось Gustav; 16.10.2009 в 16:44.
Старый 16.10.2009, 17:13   #12  
lev is offline
lev
Ищущий знания...
Аватар для lev
Oracle
MCBMSS
Axapta Retail User
 
1,723 / 491 (20) +++++++
Регистрация: 18.01.2005
Адрес: Москва
ещё вот вспомнил..
можно display или edit метод в таблице перетащить в какую нибудь группу полей (Fieldgroups), и оно автоматически станет полем (в группе полей конечно, не в таблице)
потом достаточно просто восстановить форму и вуаля (если конечно Fieldgroup используется в форме и проставлено свойство AutoDataGroup в Yes)
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с)
С Уважением,
Елизаров Артем

Последний раз редактировалось lev; 16.10.2009 в 17:19.
Старый 16.10.2009, 18:54   #13  
Gustav is offline
Gustav
Moderator
Аватар для Gustav
SAP
Лучший по профессии 2009
 
1,858 / 1152 (42) ++++++++
Регистрация: 24.01.2006
Адрес: Санкт-Петербург
Записей в блоге: 19
Цитата:
Сообщение от DSPIC Посмотреть сообщение
А в случае множественного выделения, ещё и запятые проставляются:
Сейчас испытал небольшой ступор с этим новым знанием. На днях мне потребовался для экспериментов метод для определения конкретного типа FormControl такого вида:
X++:
str controlType(FormControl _control)
{
    switch (classIdGet(_control))
    {
        case classNum(FormActiveXControl)           : return 'внедренный объект';
        case classNum(FormAnimateControl)           : return 'анимация';
        case classNum(FormButtonControl)            : return 'кнопка';
        case classNum(FormButtonGroupControl)       : return ''; //'группа кнопок';
        case classNum(FormButtonSeparatorControl)   : return 'разделитель кнопок'; //'разделитель кнопок';
        case classNum(FormCheckBoxControl)          : return 'флажок';
        case classNum(FormComboBoxControl)          : return 'поле'; //'поле со списком';
        case classNum(FormCommandButtonControl)     : return 'кнопка'; //'командная кнопка';
        case classNum(FormDateControl)              : return 'поле'; //'поле даты';
        case classNum(FormFunctionButtonControl)    : return 'кнопка'; //'кнопка-пункт меню';
        case classNum(FormGridControl)              : return 'таблица';
        case classNum(FormGroupControl)             : return 'группа';
        case classNum(FormHTMLControl)              : return 'поле HTML';
        case classNum(FormIntControl)               : return 'поле'; //'целочисленное поле';
        case classNum(FormListBoxControl)           : return 'список';
        case classNum(FormListControl)              : return 'список';
        case classNum(FormMenuButtonControl)        : return 'кнопка'; //'кнопка-меню';
        case classNum(FormProgressControl)          : return 'индикатор прогресса';
        case classNum(FormRadioControl)             : return 'переключатель';
        case classNum(FormRealControl)              : return 'поле'; //'числовое поле';
        case classNum(FormStaticTextControl)        : return 'надпись';
        case classNum(FormStringControl)            : return 'поле'; //'текстовое поле';
        case classNum(FormTabControl)               : return ''; //'набор вкладок';
        case classNum(FormTableControl)             : return 'таблица';
        case classNum(FormTabPageControl)           : return 'вкладка';
        case classNum(FormTimeControl)              : return 'поле'; //'поле времени';
        case classNum(FormTreeControl)              : return 'иерархический список';
    }
    return '';
}
Я точно помнил, что получил список Form...Control'ов из AOT в виде столбца и не боролся ни с какими запятыми... Слава Богу, вспомнил довольно быстро:
  1. нащёлкиваем с Ctrl или Shift нужные классы в AOT \System Documentation \Classes
  2. далее по правой кнопке: Add-Ins \Копирование \Название
  3. переходим в Excel и вставляем (не в Редактор X++, не в Блокнот - в них буду сложности в виде длиннющей строки - а именно в Excel!)
Разумеется, работает для любых объектов.

P.S. Ну или в окно редактирования сообщения АксФорума можно вставку выполнить - тоже работает

Последний раз редактировалось Gustav; 16.10.2009 в 18:56.
Старый 16.10.2009, 19:23   #14  
DSPIC is offline
DSPIC
Боец
 
1,077 / 1234 (44) ++++++++
Регистрация: 11.04.2008
При множественном копирования имен объектов АОТ (контекстное меню\Add-Ins\Copy\Names) и последующей вставке в редактор X++ наблюдаем неприятный эффект:
все имена вставляются в одну строчку; при этом они разделены кривым символом-разделителем, который приводит к ошибке редактора и невозможности что-то в нем сохранить.
Этот баг лечится очень просто.
\Classes\SysTreeNodeNameCopyToClipboard\runsysContextMenu:

X++:
void runsysContextMenu(SysContextMenu _sysContextMenu)
{
    TreeNode aNode = _sysContextMenu.first();

    TextBuffer textBuffer = new TextBuffer();
    int lines;

    while (aNode)
    {
        if (lines)
            //copy AOT names fix, EVO -->
            //orig: textBuffer.appendText('\n');
            textBuffer.appendText(strfmt("%1%2", num2char(0x0D), num2char(0x0A)));
            //copy AOT names fix, EVO <--

        textBuffer.appendText(aNode.treeNodeName());
        lines++;
        aNode = _sysContextMenu.next();
    }
    if (lines)
        textBuffer.toClipboard();
}

Последний раз редактировалось DSPIC; 16.10.2009 в 19:29.
За это сообщение автора поблагодарили: Gustav (2).
Старый 16.10.2009, 19:37   #15  
Gustav is offline
Gustav
Moderator
Аватар для Gustav
SAP
Лучший по профессии 2009
 
1,858 / 1152 (42) ++++++++
Регистрация: 24.01.2006
Адрес: Санкт-Петербург
Записей в блоге: 19
Сейчас попробовал в оригинальной строке просто заменить n на r
X++:
// 
// textBuffer.appendText('\n');
// 
textBuffer.appendText('\r');
Редактору X++ заметно полегчало
Блокноту - всё так же нет, Excel'ю - по-прежнему хорошо
За это сообщение автора поблагодарили: mazzy (2).
Старый 16.10.2009, 19:40   #16  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от DSPIC Посмотреть сообщение
все имена вставляются в одну строчку; при этом они разделены кривым символом-разделителем
Почему кривым? нормальный юниксоидный разделитель. \n = 0x0A

Может стоит строку попроще сделать textBuffer.appendText('\r\n');
Это виндовый разделитель 0x0D 0x0A.
__________________
полезное на axForum, github, vk, coub.
Старый 16.10.2009, 20:06   #17  
DSPIC is offline
DSPIC
Боец
 
1,077 / 1234 (44) ++++++++
Регистрация: 11.04.2008
Цитата:
Сообщение от mazzy Посмотреть сообщение
Почему кривым? нормальный юниксоидный разделитель. \n = 0x0A

Может стоит строку попроще сделать textBuffer.appendText('\r\n');
Это виндовый разделитель 0x0D 0x0A.
Кривым, потому что он вставляется в редактор не в виде \n, а ввиде кривизны. Т.е. проблема где-то внутри, может зависит от кодировок, шрифтов и всего этого хозяйства.
Используя явные HEX байты, мы на 100% отсекаем эту ошибку преобразования, поэтому:
Цитата:
Может стоит строку попроще сделать textBuffer.appendText('\r\n');
- проще, но могут быть проблемы

Насколько я помню, \n = 0x0D + 0x0A, а \r - это возврат каретки

P.S. Из теории
Цитата:
...

Управляющие символы

Основная статья: Управляющие символы

Различные операционные системы придерживаются своего представления перевода строки и конца файла. В UNIX перевод строки состоит из одного символа LF (0x0A), в Mac OS — из символа CR (0x0D), а в DOS и Microsoft Windows перевод строки кодируется последовательностью двух символов CR LF. В DOS и Microsoft Windows конец файла кодируется символом 0x1A, а в UNIX символ конца файла не употребляется
...
UPD: Нет, здесь вот в таблицу сведено

http://wapedia.mobi/ru/%D0%A3%D0%BF%...BE%D0%BB%D1%8B

т.е. для винды нужно сделать возврат каретки+перевод строки: 0x0D + 0x0A = '\n'
, а '\r' - это пол дела

Последний раз редактировалось DSPIC; 16.10.2009 в 20:19.
Теги
ax2009, ax3.0, ax4.0, drag-n-drop, полезное, редактор

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
если форму\отчет\класс тащить drag and drop-ом в соответствующую ветку AOT, то автоматом будут созданы menuItems DSPIC DAX: База знаний и проекты 2 20.02.2009 18:35
jinx: Drag & Drop in Masken Blog bot DAX auf Deutsch 0 16.10.2007 16:10
axcoder: Video: howto drag and drop nodes from XPO to application Blog bot DAX Blogs 1 21.08.2007 11:44
jerry-dynamics: Where can you drag and drop an extended data type to? Blog bot DAX Blogs 0 16.06.2007 11:20
Palle Agermark: Drag and Drop files to Dynamics AX Blog bot DAX Blogs 0 28.10.2006 16:40

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

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

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