Показать сообщение отдельно
Старый 16.08.2024, 20:32   #23  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,971 / 3267 (116) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Оказывается стандартный \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).