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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 17.09.2010, 17:46   #7  
Poleax is offline
Poleax
Модератор
Аватар для Poleax
MCP
MCBMSS
Злыдни
 
1,353 / 595 (22) +++++++
Регистрация: 17.02.2005
Адрес: msk
Записей в блоге: 34
Post
По аналогии с выше приведенным постом tricky, я сделал для себя выпадающий список (Lookup) для всех полей таблицы не являющимися системными:
Результат:
Название: fieldsUser.png
Просмотров: 2247

Размер: 40.5 Кб
  1. В \Data Dictionary\Base Enums\SysPickListType добавить элемент, назовем его к примеру FieldsUsersLabels (Пользовательские поля с названием)
  2. В классе создадим метод \Classes\Global\pickFieldUserLabel
    X++:
    static int pickFieldUserLabel(tableId tableId)
    {
        Object  formRun;
        Args    args;
        ;
        args = new Args(formstr(SysPick));
        args.parm(strRFix(int2str(SysPickListType::FieldsUsersLabels),2)+int2str(tableId));
        formRun = classfactory.formRunClass(args);
        formRun.init();
        formRun.run();
        formRun.wait();
        if (formRun.selection())
            return formRun.selection();
        return 0;
    }
  3. В класс создадим метод \Classes\sysPickList\fillFieldsUserLabesMap:
    X++:
    public static client container fillFieldsUserLabesMap(str _argsParm)
    {
        TmpSysTableField    tmpSysTableField;
        DictTable           dictTable       = new DictTable(str2int(_argsParm));
        Map                 map             = new Map(Types::Integer, Types::String);
        
        //Variables
        DictField               dictField;
        SysDimension            dim;
        str                     num = '';
        
        ;
        if (dictTable &&
            dictTable.rights() > AccessType::NoAccess)
        {
            tmpSysTableField = TmpSysTableField::findTableFields(tmpSysTableField, dictTable.id());
    
            while select tmpSysTableField
            {
                dictField  = new dictField(dictTable.id(), tmpSysTableField.ExtendedFieldId);
                
                if(!dictField.isSystem())
                {
                    if(tmpSysTableField.FieldName LIKE "*Dimension*")
                        num = "[" + int2str(enum2int(str2Enum(dim, tmpSysTableField.FieldLabel)) + 1) + "]";
                    else
                        num = "";
                        
                    map.insert(tmpSysTableField.ExtendedFieldId, tmpSysTableField.FieldName + num + " (" + tmpSysTableField.FieldLabel + ")" );
                }
            }
        }
        return map.pack();
    }
  4. В методе init этого же класса добавить примерно такие строки (в блоке switch(sysPickListType)):
    X++:
            case SysPickListType::FieldsUsersLabels :
                imageRes    = #imageField;
                caption     = "Пользовательские поля с названием";
                designWidth = #designLargeWidth;
                if (!map)
                {
                    map = Map::create(sysPickList::fillFieldsUserLabesMap(parmTxt));
                }
                break;
  5. Вызываем метод:
    X++:
    Global::pickFieldUserLabel(tableNum(CustTable));

Для примера можно выбрать форму для изучения \Forms\PBATreeTable.

Пример Lookup метода:
X++:
void lookup()
{
    fieldId id;
//AnyUserTable  - таблица куда сохраняем поле
    ;

    id = pickFieldUserLabel(tableNum(CustTable));

    if (! id)
        return;

    AnyUserTable.FieldName = fieldid2name(tableNum(CustTable),id);

    AnyUserTable_ds.refresh();
}
P.S. Спасибо tricky , за хороший пост.
__________________

This posting is provided "AS IS" with no warranties, and confers no rights.
За это сообщение автора поблагодарили: mazzy (2), Lemming (5), lev (2), mallard (2), Proba (1).
Теги
ax3.0, ax4.0, lookup, lookupfield, полезное, программно

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Как получить имена полей, которые есть у таблицы? 3oppo DAX: Программирование 2 22.12.2006 14:30
Свойство AllowEdit полей таблицы Lucky13 DAX: Программирование 4 29.07.2005 14:14
Список полей таблиц на базе конкретного EDT Владимир Максимов DAX: Программирование 10 06.10.2004 14:45
Изменение ID-ов полей таблицы somebody DAX: Программирование 5 02.02.2004 19:57
Объединить несколько полей таблицы в одном поле Grid-а на форме? storer DAX: Программирование 2 12.11.2003 14:08
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

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

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

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