![]() |
#23 |
Участник
|
Оказывается стандартный \Classes\SysDictClass\hasObjectMethod
неправильно работает для методов FormStringControl.Id() SysMethodInfo.getAttribute() SysDictMethod.getAttribute() DictMethod.getAttribute() так происходит из-за того, что используемый в нем метод dictMethod.compiledOk() некорректно работает для случаев когда метод не определен на классе, но наследуется от родительского класса, который является системным (для обычных классов все ок) Вот исправление X++: public boolean hasObjectMethod_MRC( IdentifierName methodName ) { SysDictMethod dictMethod = new SysDictMethod(UtilElementType::ClassInstanceMethod, this.id(), methodName); ClassId actualClassId; ; if (!dictMethod) { return false; } // JEV008634 "Tech_Автоматическое убирание Bold шрифта на формах", PKoz 16.08.2024 --> // данное изменение потребовалось потому что стандартный метод hasObjectMethod неверно работает для методов // FormStringControl.Id() // SysMethodInfo.getAttribute() // SysDictMethod.getAttribute() // DictMethod.getAttribute() // так происходит из-за того, что используемый в нем метод dictMethod.compiledOk() // некорреткно работает для случаев когда метод не определен на классе, но наследуется от родительского класса, // который является системным (для обычных классов все ок) // но работать будет медленнее из медленного вызова methodsActualClassId // поэтому результат лучше кешировать if (!dictMethod.compiledOk()) { actualClassId = this.methodsActualClassId(methodName); if (!actualClassId) { return false; } dictMethod = new SysDictMethod(UtilElementType::ClassInstanceMethod, actualClassId, methodName); } // JEV008634 "Tech_Автоматическое убирание Bold шрифта на формах", PKoz 16.08.2024 <-- if (!dictMethod.compiledOk()) { return false; } return true; } |
|
|
За это сообщение автора поблагодарили: S.Kuskov (10), Pandasama (3). |
Теги |
formhasmethod, sysdictclass, метод, проверка |
|
|