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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 19.01.2008, 18:52   #1  
petr is offline
petr
Участник
Соотечественники
 
561 / 201 (8) ++++++
Регистрация: 30.05.2005
Адрес: Швейцария
Ну, я может не самый удачный пример привел. Просто хотел показать, что конструкция:
X++:
    classObj = new SysDictClass(_classNum);

    if (classObj &&
        classObj.hasStaticMethod(staticName))
    {
        casPerm.assert();

        //BP Deviation Documented
        return classObj.callStatic(staticName);
    }
или
X++:
    classObj = new SysDictClass(_classNum);
    object   = classObj.makeObject();

    if (classObj &&
        classObj.hasObjectMethod(objectName))
    {
        casPerm.assert();

        //BP Deviation Documented
        return classObj.callObject(objectName, object);
    }
имеет право на существование, и без нее не реализовать некоторые вещи проблематично (я ухожу от кванвора всеобщности), а уж как она получит название метода (либо из константы, либо как параметр функции) - это не так уж и важно.

И во втором случае, как раз и получается передача функции (в нашем случае ее имени) как параметр.

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

Цитата:
Сообщение от belugin Посмотреть сообщение
Кстати, из за статичности метода main, его приходится дублировать во всех потомках....
Мне вот только немного непонятно про дублирование метода main.

Если наследник по сути делает тоже самое, что и родитель (только немного иначе), у него метод main я и не перекрываю, просто в construct родителя инициализирую класс наследника.

Если же наследник делает что-то другое, то и menuitem другая, и в наследнике свой main и я не считаю, что в данном случае это будет дублированием.
За это сообщение автора поблагодарили: alex55 (1).
Старый 21.01.2008, 07:50   #2  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от lemchey_white Посмотреть сообщение
Всем доброго времени суток, подскажите пожалуйста возможна ли передача функции в другую функцию в качестве параметра?
Цитата:
Сообщение от petr Посмотреть сообщение
Просто хотел показать, что конструкция
имеет право на существование, и без нее не реализовать некоторые вещи проблематично (я ухожу от кванвора всеобщности), а уж как она получит название метода (либо из константы, либо как параметр функции) - это не так уж и важно.
Вам не кажется, что в ходе обсуждения произошла подмена вопроса?

Во-первых, это пример не передачи "функции", а вызова совершенно конретной для разных классов.

Во-вторых, продолжаю настаивать, что вместо "передачи функции" более правильным способом является создание семейства классов, в каждом из наследников которого имеется своя реализация "функции", а затем передавать объект и вызывать эту реализацию.

В-третьих, готов согласиться, что в некоторых случаях создание и поддержка подобного семейства является более трудоемким нежели грамотные проверки до вызова. Но число таких случаев сильно ограничено. И каждый случай должен быть хорошо обоснован программистом.

В большинстве случаев не надо передавать методы.
В большинстве случаев надо создавать семейства классов (пример SysFileDeployer, axdBase, ImageListAppl, LedgerBalance и т.п.)

В стандартной ax4.0 sp2 имеется всего 128 случаев работы с методами напрямую.
многие из этих случаев являются антипаттернами (показывают как НЕ надо делать)

Код:
Class SysDictClass.hasObjectMethod
\Data Dictionary\Tables\AifPipelineComponent\Methods\description
\Classes\SysDictClass\hasObjectMethod
\Classes\AxInternalBase\setParmMethodAsNotMandatory
\Classes\AxdBase\setParmMethodAsMandatory
\Classes\BatchJournalRun\canClassGoBatchJournal
\Classes\SysBPCheckMemberFunction\checkUseOfCASProtectedAPIs
\Classes\SysLabelFind\controlName2Id
\Classes\SysTest\hasMethod
\Forms\AifPipelineComponent\Data Sources\AifPipelineComponent\Methods\active
\Forms\AifPipelineComponent\Methods\generateComponentLookupTable
\Forms\SysRecordTemplateTable\Methods\disableIfButton
\Forms\SysRecordTemplateTable\Methods\disableIfHasDataMethod

Class SysDictClass.hasStaticMethod
\Classes\RunBase\getDescription
\Classes\SysDictClass\hasStaticMethod
\Classes\RunBase\getHelpText
\Classes\SysBPCheckClassNode\checkConstructors
\Forms\SysClassWizard\Methods\frameworkSetDescription

class SysMethodInfo
\Classes\SysDictClass\hasObjectMethod
\Classes\Global\tableHasInstanceMethod
\Classes\Global\tableHasStaticMethod
\Classes\SysDictClass\hasStaticMethod
\Classes\RunBaseReport\initReportRun
\Classes\SysMethodInfo\path
\Classes\AxdBaseCreate\insertInPropertyInfoMap
\Classes\AxdBaseGenerateXSD\addClassProperties
\Classes\AxdBaseGenerateXSD\addDocumentProperties
\Classes\AxdBaseRead\buildMethodInfoMap
\Classes\WebLet\getDescription
\Classes\WebLet\getHelpText
\Classes\WebLet\inContext
\Classes\WebLet\isEnabled
\Classes\ProjListProjTransLayout\setNoOfDecimals
\Classes\SysApplicationObjectPathInfo\methodInfo
\Classes\xUtilElements\runMode
\Classes\SysBPCheckClassNode\checkAbstract
\Classes\SysBPCheckClassNode\checkConstructors
\Classes\SysBPCheckClassNode\verifyConstructMethod
\Classes\SysMethodInfo\getSource
\Classes\SysBPCheckFormEditControl\checkLabelUse
\Classes\SysBPCheckMemberFunction\check
\Classes\SysBPCheckMemberFunction\checkSource
\Classes\SysBPCheckMemberFunction\checkAccessSpecifier
\Classes\SysBPCheckMemberFunction\checkVariables
\Classes\SysMethodInfo\superMethodInfo
\Classes\SysMethodInfo\subMethodInfoList
\Classes\SysBPCheckMemberFunction\checkAOS
\Classes\SysMethodInfo\runMode
\Classes\SysBPCheckMemberFunction\initTmpxRefReferences
\Classes\SysBPCheckMemberFunction\classDeclaration
\Classes\SysBPCheckMemberFunction\checkHelpUse
\Classes\SysBPCheckMemberFunction\checkLabelUse
\Classes\SysBPCheckMemberFunction\checkUsed
\Classes\SysBPCheckMemberFunction\checkUsedMemberFunction
\Classes\SysBPCheckMemberFunction\checkUsedMemberFunctionServer
\Classes\SysBPCheckMemberFunction\pseuduUtilElements
\Classes\SysBPCheckMemberFunction\checkVariablesUse
\Classes\SysBPCheckMemberFunction\dispose
\Classes\SysBPCheckMemberFunction\init
\Classes\SysBPCheckReportControl\checkGeneral
\Classes\SysBPCheckReportControl\checkLabelUse
\Classes\SysFormBuildDataSource\getMethodInfo
\Classes\SysLabelFind\doFormEditControl
\Classes\SysMethodInfo\superMethodNode
\Classes\SysMethodInfo\toString
\Classes\SysSecurity\getFormDisplayMethods
\Classes\SysTreenodeWashClassNode\checkConstructors
\Classes\xUtilIdElements\runMode

Class DictMethod
\Classes\smmSalesManagementQueries\allowedMethods
\Classes\RunBase\checkCloseDialog
\Classes\AifServiceableMethodValidator\validateMethodSignature
\Classes\AifServiceableMethodValidator\hasMethod
\Classes\AifServiceableMethodValidator\hasPublicAccess
\Classes\AifServiceableMethodValidator\hasValidParameters
\Classes\AifServiceableMethodValidator\hasValidReturnType
\Classes\AifServiceableMethodValidator\validateReceiveDocument
\Classes\AifServiceableMethodValidator\validateReceiveDocumentList
\Classes\AifServiceableMethodValidator\validateSendDocument
\Classes\AifServiceableMethodValidator\validateSendDocumentList
\Classes\AifServiceableMethodValidator\validateQueryDocuments
\Classes\AifServiceableMethodValidator\validateQueryEntityKeys
\Classes\AifServiceableMethodValidator\validateProcessEntity
\Classes\AifServiceableMethodValidator\validateProcessEntityList
\Classes\AifWebMethodGenerator\getWebMethodParameterTypes
\Classes\EditorScripts\getApplicableScripts
\Classes\EditorScripts\showScripts
\Classes\LedgerGDPdUDataExport\findSMethodBaseType
\Classes\LedgerGDPdUDataExport\findSNumOfDecimals
\Classes\LedgerGDPdUDataExport\findMethodBaseType
\Classes\LedgerGDPdUDataExport\findNumOfDecimals
\Classes\LedgerGDPdUFieldWizard\fillMethodNameList
\Classes\SysDictClass\invokeObjectMethod
\Classes\SysApplCheck\checkTableFieldPnameMustBeUnique
\Classes\SysApplCheck\checkTreeNodeNameConflicts
\Classes\SysApplCheck\showTableMethodsRunOn
\Classes\SysAutoRun\execRun
\Classes\SysBPCheckClassNode\checkRunBaseImplementation
\Classes\SysBPCheckFormEditControl\checkReference
\Classes\SysBPCheckMemberFunction\checkDiscontinuation
\Classes\SysBPCheckTable\checkFieldPnameUniqueness
\Classes\SysClassWizard\createAbstractMethods
\Classes\SysCodeCoverage\postUpdate
\Classes\SysDictClass\isInheritedVariable
\Classes\SysExcelTemplateField\type
\Classes\SysExcelTemplateField\extendedTypeId
\Classes\SysExcelTemplateField\help
\Classes\SysExcelTemplateField\label
\Classes\SysHelpBookDocumentationDeveloper\genApplClassMethodHelp
\Classes\SysHelpBookDocumentationDeveloper\genApplTableMethodHelp
\Classes\SysHelpBookDocumentationSystem\methodSyntax
\Classes\SysHelpBookDocumentationDeveloper\genParmMethodHelp
\Classes\SysHelpBookDocumentationDeveloper\genConstructMethodHelp
\Classes\SysHelpBookDocumentationDeveloper\processLabels
\Classes\SysHelpBookDocumentationSystem\actualDictMethod
\Classes\SysHelpBookDocumentationSystem\genClassMethodHelp
\Classes\SysHelpBookDocumentationSystem\processLabels
\Classes\SysHelpClassMethodWebLet\designView
\Classes\SysMethodInfo\classDeclaration
\Classes\SysTestCase\testMethods
\Classes\SysUmlObjectModel\reverseEngineerClassProperties
\Classes\SysUmlObjectModel\reverseEngineerMethod
\Classes\SysUmlObjectModel\reverseEngineerParameters
\Classes\SysUmlObjectModel\reverseEngineerTableProperties
\Classes\WebReportGraph\makeTitle
__________________
полезное на axForum, github, vk, coub.
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Передача в Веб-форму объекта в качестве параметра IvanS DAX: Программирование 4 17.04.2008 15:07
Передача параметра laxer DAX: Программирование 2 19.01.2006 09:08
Передача массива как параметра DreamCreator DAX: Программирование 1 26.01.2005 16:58
Передача параметра из формы в отчет liza DAX: Программирование 1 29.09.2003 14:04
Передача параметра в репорт 2 Андре DAX: Программирование 1 29.08.2002 14:09

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

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

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