Lookup пользовательских полей таблицы
Запись от Poleax размещена 17.09.2010 в 17:48
По аналогии с выше приведенным постом tricky, я сделал для себя выпадающий список (Lookup) для всех полей таблицы не являющимися системными:
Результат:
Для примера можно выбрать форму для изучения \Forms\PBATreeTable.
Пример Lookup метода:
P.S. Спасибо tricky , за хороший пост.
P.S.S. Этот пост на форуме Лукап, отображающий список полей определённой таблицы
Результат:
- В \Data Dictionary\Base Enums\SysPickListType добавить элемент, назовем его к примеру FieldsUsersLabels (Пользовательские поля с названием)
- В классе создадим метод \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; }
- В класс создадим метод \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(); }
- В методе init этого же класса добавить примерно такие строки (в блоке switch(sysPickListType)):
X++:case SysPickListType::FieldsUsersLabels : imageRes = #imageField; caption = "Пользовательские поля с названием"; designWidth = #designLargeWidth; if (!map) { map = Map::create(sysPickList::fillFieldsUserLabesMap(parmTxt)); } break;
- Вызываем метод:
X++:Global::pickFieldUserLabel(tableNum(CustTable));
Для примера можно выбрать форму для изучения \Forms\PBATreeTable.
Пример Lookup метода:
X++:
void lookup() { fieldId id; //AnyUserTable - таблица куда сохраняем поле (формат поля EDT = FieldName ) ; id = pickFieldUserLabel(tableNum(CustTable)); if (! id) return; AnyUserTable.FieldName = fieldid2name(tableNum(CustTable),id); AnyUserTable_ds.refresh(); }
P.S.S. Этот пост на форуме Лукап, отображающий список полей определённой таблицы
Всего комментариев 0