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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 03.06.2008, 13:22   #1  
Андрей К. is offline
Андрей К.
Постигающий
 
152 / 10 (1) +
Регистрация: 09.04.2007
Значение display метода по его названию
Доброго времени суток.
Стоит задача: из списка дисплейметодов определенной таблицы(список уже реализован) необходимо выбрать интересующий метод (хранится лишь его название) и выводить значение этого дисплейметода у текущего курсора.

может кто-тоо сталкивался с подобным и подскажет, как, зная имя метода, достать его значение ?
заранее благодарен

Последний раз редактировалось Андрей К.; 03.06.2008 в 13:26.
Старый 03.06.2008, 13:39   #2  
Alex_KD is offline
Alex_KD
Участник
AxAssist
MCBMSS
Соотечественники
 
522 / 361 (14) ++++++
Регистрация: 06.07.2006
Адрес: Melbourne, Down Under
Может имеет смысл подобное реализовывать настройками?
Если стоит Галка1, показывать дисплей1
Если стоит Галка2, показывать дисплей2.....
__________________
AxAssist 2012 - Productivity Tool for Dynamics AX 2012/2009/4.0/3.0
Старый 03.06.2008, 13:50   #3  
Андрей К. is offline
Андрей К.
Постигающий
 
152 / 10 (1) +
Регистрация: 09.04.2007
настройками не получится...предполагается выбор любой из таблиц и соответственно любого из ее дисплейметодов
Старый 03.06.2008, 13:56   #4  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,210 / 4091 (195) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от Андрей К. Посмотреть сообщение
настройками не получится...предполагается выбор любой из таблиц и соответственно любого из ее дисплейметодов
Замечательная дырка в безопасности

Оффтопик про "программисткий подход", извините.
Динамические чекбоксы в неизвестном количестве
Про программистский подход, программистское мышление и стереотипы
__________________
Полезное на axForum, GitHub, Facebook, mazzy.priot, mazzy.music, coub.
За это сообщение автора поблагодарили: Андрей К. (1).
Старый 03.06.2008, 14:45   #5  
Alex_KD is offline
Alex_KD
Участник
AxAssist
MCBMSS
Соотечественники
 
522 / 361 (14) ++++++
Регистрация: 06.07.2006
Адрес: Melbourne, Down Under
Цитата:
Сообщение от Андрей К. Посмотреть сообщение
настройками не получится...предполагается выбор любой из таблиц и соответственно любого из ее дисплейметодов
Помнится там еще из возвращаемого типа берется лейбл, который подставляется в грид.
Интересно кто эти дисплей методы будет выбирать..пользователи?
__________________
AxAssist 2012 - Productivity Tool for Dynamics AX 2012/2009/4.0/3.0
Старый 03.06.2008, 14:00   #6  
ivas is offline
ivas
Участник
Аватар для ivas
 
247 / 65 (3) ++++
Регистрация: 22.12.2005
Цитата:
Сообщение от Андрей К. Посмотреть сообщение
Доброго времени суток.
Стоит задача: из списка дисплейметодов определенной таблицы(список уже реализован) необходимо выбрать интересующий метод (хранится лишь его название) и выводить значение этого дисплейметода у текущего курсора.

может кто-тоо сталкивался с подобным и подскажет, как, зная имя метода, достать его значение ?
заранее благодарен
попробуйте через SysDictClass
вот реализация правда для отчетов
X++:
void addString(ReportControl _reportControl, ReportSection _reportSection, common _cursor, SysDictClass _classObj)
{
    ReportStringControl  reportControl = _reportControl;
    str                  s;
    ;

    txt += this.font(reportControl.fontSize(), reportControl.bold(),
                     reportControl.italic(),  reportControl.font());

    if (reportControl.dataField())
    {
        s = _cursor.(reportControl.dataField());
    }
    if (reportControl.dataMethod())
    {
        s = _classObj.callObject(reportControl.dataMethod(), _reportSection);
    }

...................

}
__________________
aLL woRk aNd nO JoY MAKes jAck a dULL Boy
За это сообщение автора поблагодарили: Андрей К. (1).
Старый 03.06.2008, 14:01   #7  
_scorp_ is offline
_scorp_
Участник
Аватар для _scorp_
MCBMSS
 
485 / 368 (13) ++++++
Регистрация: 25.07.2007
Адрес: Москва
X++:
static void Job8(Args _args)
{
    LedgerTable lt;
    DictTable dt;
    ;
    select firstonly lt;
    dt = new DictTable(tablenum(LedgerTable));
    info(dt.callObject("taxCode", lt));
 
}
За это сообщение автора поблагодарили: Андрей К. (1).
Старый 03.06.2008, 14:04   #8  
TasmanianDevil is offline
TasmanianDevil
Мрачный тип
Аватар для TasmanianDevil
Злыдни
 
863 / 355 (13) ++++++
Регистрация: 24.01.2005
Адрес: Томск
Дисплей-метод может возвращать в принципе любой тип примитивный - как там с контролами будет ? Как себя поведет система при попытке контрола преобразовать полученное не родное значение к его родному примитивному типу ?

А вообще - вот :
X++:
display AnyType anyMethod()
{
DictTable  tbl = new DictTable(this.tableId);
;
<       >;
return tbl.callObject(<  >, this);
}
P.S. Упс, опередили
__________________
Мы летаем, кружимся, нагоняем ужасы ...
За это сообщение автора поблагодарили: Андрей К. (1).
Старый 03.06.2008, 14:09   #9  
Андрей К. is offline
Андрей К.
Постигающий
 
152 / 10 (1) +
Регистрация: 09.04.2007
Спасибо за помощь!
Старый 03.06.2008, 15:42   #10  
macklakov is offline
macklakov
NavAx
Аватар для macklakov
 
1,969 / 878 (33) +++++++
Регистрация: 03.04.2002
Адрес: Australia
Цитата:
Сообщение от Андрей К. Посмотреть сообщение
Доброго времени суток.
Стоит задача: из списка дисплейметодов определенной таблицы(список уже реализован) необходимо выбрать интересующий метод (хранится лишь его название) и выводить значение этого дисплейметода у текущего курсора.

может кто-тоо сталкивался с подобным и подскажет, как, зная имя метода, достать его значение ?
заранее благодарен
Если я правильно понимаю, будет m таблиц, на каждой из которых n методов с одинаковой сигнатурой

Я бы реализовал это так:
Отмапить таблицы и реализовать на мапе n методов, которые делегируют поведение соответствующим методам таблиц.
На форме показывать мап. На форме же реализовать дисплей, который выберет один из n методов мапы и делегирует ему свое поведение.

В чем приемущество: легко дебажить и код читаемый т.к. нет метапрограммирования. Подозреваю, что и работать будет быстрее
P.S. А еще лучше вывести все n методов в грид и просто управлять видимостью
__________________
Isn't it nice when things just work?
За это сообщение автора поблагодарили: mazzy (2).
Старый 03.06.2008, 15:55   #11  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,210 / 4091 (195) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от macklakov Посмотреть сообщение
На форме же реализовать дисплей, который выберет один из n методов мапы и делегирует ему свое поведение.
Эх... Еще одну попытку сделаю, поддержку Alex_KD

Написано "который веберет"
Кто выберет? Пользователь? Как он выберет? По названию метода? А пользователю что-нибудь говорит название метода?

Т.е. на самом деле варианта два:
1. машиноориентированный: Заставлять пользователя выбирать из названий методов. Никаких хелпов, подсказок, описаний. Если пользователю что-то непонятно, то он должен лезть в код. Т.е. этот подход рассчитан на программиста, а не на пользователя.
2. человекоориентированный: сделать обертку над методами, чтобы дать описания, инструкции, хелпы, подсказки и прочую мутотень. Скорее всего, описания должны быть не на программистком матерном, а на пользовательском языке - языке предметной области.

Если все равно делается обертка, то поставленная в исходном сообщении задача НЕ ИМЕЕТ практического смысла.
В обертке все равно будет switch/case по заранее предусмотренным пунктам.

Да, конечно, если программист захочет добавить функционал, то в первом случае он должен добавить всего лишь один метод, а во втором - расширить обертку. Но это только кажется. Поскольку в первом случае "настраивать" систему сможет только програмист. Поэтому в первом случае программист делает никому не нужную работу - вместо того, чтобы просто запрограммировать выбор в коде, он делает никому не нужный интерфейс, которым сможет воспользоваться только он сам (и то только в первое время - потом забудет как это работает и все равно полезет в код по новой).
__________________
Полезное на axForum, GitHub, Facebook, mazzy.priot, mazzy.music, coub.
Старый 03.06.2008, 19:12   #12  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,526 / 1009 (37) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
Цитата:
Сообщение от mazzy Посмотреть сообщение
Т.е. на самом деле варианта два:
1. машиноориентированный:
2. человекоориентированный:
Эх... Тоже не удержался

На самом деле, вариант один: программистский! Поскольку все-равно, рано или поздно, но программисту придется лезть в код, чтобы понять, "как оно тикает".

Всякие там "человекоориентированные" настройки - это кажущаяся автоматизация. Количество разных птичек и галочек в Axapte просто безумное. Ни один человек не в состоянии их всех упомнить. Вот и получается такое "гуано". Птичек уж больно много .

А если еще вспомнить про текучку кадров, изменение ТЗ в процессе разработки, постянные авралы и т.д. и т.п., то ... Нет, лучше не вспоминать

Собственно, написание "человекоориентированного" интерфейса задача сопоставимая с написанием подробной справки по данному функционалу. Сопоставимая по результату. Хотя "настоящие программисты", конечно, не пишут не то, что справку, а даже комментарии в коде

Я бы рассмотрел задачу написание ОДНОГО метода, но который возвращает разные значения в зависимости от переданных параметров. Ну, или метод-диспетчер (класс-диспетчер), который вызывает соответствующие методы через switch/case. А в качестве параметра использовать BaseEnum, который "человеческим" языком объясняет какой метод надо вызывать.

Чем проще функционал, тем тебе же потом будет легче. Кто же еще снова полезет ковырятся в этом коде
Старый 03.06.2008, 20:20   #13  
macklakov is offline
macklakov
NavAx
Аватар для macklakov
 
1,969 / 878 (33) +++++++
Регистрация: 03.04.2002
Адрес: Australia
Цитата:
Сообщение от Владимир Максимов Посмотреть сообщение
Количество разных птичек и галочек в Axapte просто безумное. Ни один человек не в состоянии их всех упомнить.
Но ведь мета-программирование этой проблемы не решает
Сергей как раз говорит, что лучше захардкодить все реально существующие варианты, чем ваять очередное "универсальное решение" на все случаи жизни.

Мне недавно пришлось столкнуться с настройкой, в которой нужно выбрать класс, который будет производить рассчет. Ни консультанту ни программисту от таких решений не легче. Консультант все равно до конца не понимает, чем один класс от другого отличается. А разработчику совсем беда, дебажить рассчет, который эти классы использует, практически не реально.
И даже писатель стоящих скилзов не получил. Писать такие модификации не сложно, гордиться здесь нечем
__________________
Isn't it nice when things just work?
Старый 03.06.2008, 21:00   #14  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,526 / 1009 (37) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
Цитата:
Сообщение от macklakov Посмотреть сообщение
Но ведь мета-программирование этой проблемы не решает Сергей как раз говорит, что лучше захардкодить все реально существующие варианты, чем ваять очередное "универсальное решение" на все случаи жизни.
Так я с этим и не спорю. Я "прицепился" к делению интерфейса на "машино-" и "человеко-" ориентированный в том понимании, как это описал Сергей. Как мне кажется, разница между ними в такой постановке весьма условная.
Старый 04.06.2008, 07:25   #15  
TasmanianDevil is offline
TasmanianDevil
Мрачный тип
Аватар для TasmanianDevil
Злыдни
 
863 / 355 (13) ++++++
Регистрация: 24.01.2005
Адрес: Томск
Цитата:
Сообщение от macklakov Посмотреть сообщение
... лучше захардкодить все реально существующие варианты, чем ваять очередное "универсальное решение" на все случаи жизни...
N-угольные колеса вместо круглых ?
А потом при появлении нового варианта перетачивать на (N+1)-угольное, то бишь допрограммируя ?

Цитата:
Сообщение от macklakov Посмотреть сообщение
Мне недавно пришлось столкнуться с настройкой, в которой нужно выбрать класс, который будет производить рассчет. Ни консультанту ни программисту от таких решений не легче.
Простите, а чем это отличается функционально от выбора в какой-либо настройке некоего значения Enum'а, по которому в дальнейшем некий суперкласс породит своего потомка с отличным от других функционалом расчета? Программисту - труднее(отсутствует в момент написания проверка на типы и количество аргументов и нет подсветки синтаксиса), консультанту же должно быть по барабану.

Цитата:
Сообщение от macklakov Посмотреть сообщение
Консультант все равно до конца не понимает, чем один класс от другого отличается. А разработчику совсем беда, дебажить рассчет, который эти классы использует, практически не реально.
Проблемы консультанта, притом большие, если Enum в настройке он понимает, а класс - нет. Консультант без некоей доли общего программерского багажа по своей предметной части гораздо менее ценен, чем имеющий такой багаж.
Дебажить беда ? Дебажится аки "отче наш", единственная проблема навскидку видится в невозможности увидеть внутреннюю структуру объекта нашего класса, создаваемого через абстрактный объект, в области его жизни, однако при вызове любых методов оного - все как на ладони внутри этих методов. Ежели есть еще какие подводные камни - поведайте, буду весьма благодарен, особенно если на проекте в аттачменте приведете примеры таких проблем.

Цитата:
Сообщение от macklakov Посмотреть сообщение
И даже писатель стоящих скилзов не получил. Писать такие модификации не сложно, гордиться здесь нечем
Это, скорее всего, ему решать - поимел он полезный опыт или нет, гордиться ему или стыдиться. Скорее всего поимел, ибо как правило, мысль о подобных "универсализмах" приходит после того как вдоволь "наелся" рутинным допрограммированием и просыпается разумная лень оптимизаторская, что не есть плохо, но вот хорошо ли это - зависит от реализации задуманного.

Спорить можно долго, но давайте озадачимся вопросом - зачем они вообще были сделаны в системе, эти возможность и доступность вызова метода класса по имени для разработчика ? Атавизм это или возможность расширения ?
Вложения
Тип файла: xpo TestDictClass.xpo (2.4 Кб, 389 просмотров)
__________________
Мы летаем, кружимся, нагоняем ужасы ...

Последний раз редактировалось TasmanianDevil; 04.06.2008 в 07:33. Причина: XPO-шку забыл вклеить
Старый 03.06.2008, 16:07   #16  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,210 / 4091 (195) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от macklakov Посмотреть сообщение
Я бы реализовал это так:
Отмапить таблицы и реализовать на мапе n методов, которые делегируют поведение соответствующим методам таблиц.
На форме показывать мап. На форме же реализовать дисплей, который выберет один из n методов мапы и делегирует ему свое поведение.
Если на проекте сознательно выбирается машиноориентированный программистский подход, то я бы предпочел такое решение, нежели динамическое программирование (DictTable-CallObject) без проверок и с постоянной угрозой runtime-ошибок.
__________________
Полезное на axForum, GitHub, Facebook, mazzy.priot, mazzy.music, coub.
Старый 04.06.2008, 09:28   #17  
sukhanchik is offline
sukhanchik
Moderator
Аватар для sukhanchik
MCBMSS
Злыдни
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
2,887 / 2725 (96) +++++++++
Регистрация: 13.06.2004
Адрес: Москва
Немного ОФФ:
Приятели, занимающиеся 1С (естественно не на внешнем проекте ), рассказывали, как они сделали красную кнопку "Сделать ВСЕ", которая при нажатии чего-то делала (сообщения выдавала), после чего выводилось сообщение - "Все сделано. Повторить?" Естественно - все было муляжом - однако какая была реакция пользователей! Всем очень понравилось - у некоторых даже вопросов не возникло... Вот только руководство озадачилось - а что же кнопка делает? Ну конечно - до скандала доводить не стали - все убрали. Но зато все прониклись, как поучительным примером.
__________________
Возможно сделать все. Вопрос времени
Старый 04.06.2008, 11:40   #18  
axaLearner is offline
axaLearner
Участник
 
88 / 17 (1) ++
Регистрация: 24.06.2004
Адрес: God knows
Имхо, нормальная задача. Как пример, универсальный генератор отчетов. Создается word - шаблон с закладками. В настройках системы этот шаблон указан. И есть функциоанальность настройки этого отчета - открывается форма вроде SysQueryForm, где в гриде показаны все закладки нашего шаблона, пользователь может скомпоновать запрос (стандартное добавление источников данных в SysQueryForm) и каждой зайкладке поставить в соответствие поле либо display метод, что особенно критично если принять во внимание невозможность создания больших и вервистых запросов в связке DAX + MSSQL. Предположим этот отчет вызывается из карточки сотрудника; пользователь запускает отчет, который из отфильтрованного по текущему сотруднику Query, тянет поля и методы источников данных в отчет.
В принципе, программировать все равно надо, но для добавления нового отчета надо всего лишь добавить в параметрах системы ссылку на его шаблон и сделать кнопку на форме. Но согласитесь, очень удобно то что пользователь может сам добавлять новые закладки в шаблон и без участия программиста связывать их с источниками данных системы, вносить изменения.
PS. Мы такое реализовали на одном из проектов, как раз в модуле управления персоналом.
Старый 04.06.2008, 12:27   #19  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,210 / 4091 (195) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Ваше описание основано на одном предположении
Цитата:
Сообщение от axaLearner Посмотреть сообщение
пользователь может скомпоновать запрос
Вы всерьез уверены, что пользователь СМОЖЕТ скомпоновать запрос? Тем более в форме, подобной SysQueryForm?
По-моему, вы привели замечательный пример... хм... не "человекоориентированного" подхода

Да, я знаю, что такие пользователи есть. Но их единицы. Мы рассказываем о такой возможности SysQueryForm всем пользователям. Но пользуются этой фичей единицы. И то только если консультант создаст запрос и сохранит его в списке используемых запросов.

Итак, повторюсь: вы делаете, делаете некую супер-фичу. Ваша супер-фича основывается на том, что пользователь будет формировать запрос.
Вы всерьез уверены, что пользователь СМОЖЕТ скомпоновать запрос?
__________________
Полезное на axForum, GitHub, Facebook, mazzy.priot, mazzy.music, coub.
Старый 04.06.2008, 12:56   #20  
axaLearner is offline
axaLearner
Участник
 
88 / 17 (1) ++
Регистрация: 24.06.2004
Адрес: God knows
Цитата:
Сообщение от mazzy Посмотреть сообщение
Ваше описание основано на одном предположении...
Если вы склонны цепляться к словам, то я лишь уточню, что под пользователем системы я имелл ввиду человека, который будет настраивать этот отчет. Как правило у клиента есть человек, которой "на ты" с системой, будь то внутренний консультант или специалист поддержки, для которого задача модификации отчета сведется к минимальной настройке. Я лишь хотел показать ПРАКТИЧЕСКОЕ использование обозначеннного в названии данной ветки предмета и ни в коем случае не ввязываться в обсуждение "человеко\добавьте свое-ориентированных" подходов.
Теги
display метод

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Вызов display метода Ashir DAX: Программирование 4 08.12.2005 16:32
Не копирует из display-метода в буфер обмена akvi DAX: Программирование 6 08.12.2005 13:14
кэширование display метода macklakov DAX: Программирование 6 03.12.2005 14:58
Можно ли задать Caption для display-метода? Andronov DAX: Программирование 6 29.05.2003 14:18
edit и display методы Maxim Gorbunov DAX: База знаний и проекты 4 15.01.2002 12:58
Опции темы Поиск в этой теме
Поиск в этой теме:

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

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

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

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