Использование пользовательского элемента управления в XML -View. Ошибка после развертывания: не удается найти класс объекта - PullRequest
0 голосов
/ 05 мая 2020

Я разработал приложение ui5 и создал в нем новый настраиваемый элемент управления. Я сохранил новый элемент управления js -файл в пути «управления» моего веб-приложения (в моем примере это файл MyInput. js для элемента управления «MyControl»). Запуск моего приложения в WebIDE для тестирования проходит без проблем. Но после развертывания приложения в системе abap я теперь получаю сообщение об ошибке от XMLTemplateManager, что он не может найти класс объекта.

Здесь сокращенная версия моего представления с использованием моего элемента управления:

<mvc:View xmlns:mvc="sap.ui.core.mvc" xmlns="sap.uxap" xmlns:layout="sap.ui.layout" xmlns:m="sap.m" xmlns:forms="sap.ui.layout.form"
    xmlns:core="sap.ui.core" xmlns:ssuc="sap.suite.ui.commons" xmlns:html="http://www.w3.org/1999/xhtml"
    xmlns:table="sap.ui.table" xmlns:cmns="sap.ui.commons"
    xmlns:dvp="de.fiori4cls.Fi4ClsFV.control"
    controllerName="de.fiori4cls.Fi4ClsFV.controller.FVView" displayBlock="true">
    <m:Shell id="shell">
        <m:App id="app"> 
            <m:pages>
                <m:Page id="fvViewPage" title="{i18n>SachPruef}">
                    <m:content>
                        <dvp:MyInput                                            
                            value="{ path : 'Cls>/Currency', type : 'sap.ui.model.type.String' }"
                                     vhTitle="{i18n>Currency}"/>
                    </m:content>
                </m:Page>
            </m:pages>
        </m:App>
    </m:Shell>
</mvc:View> 

Здесь de.fiori4cls.Fi4ClsFV - это идентификатор моего приложения (как указано в manifest. json в части sap.app в атрибуте id.

Любая идея почему это работает в тесте WebIDE и почему это вызывает упомянутые ошибки при развертывании в системе abap?

С уважением, Маттиас

1 Ответ

1 голос
/ 06 мая 2020

решил проблему самостоятельно, сочетая отладку, попытку и ошибку: -)

Для тех, у кого вы столкнулись с аналогичной проблемой, вот решение. Проблема заключалась в определении моего контроля. Итак, все, что находится над представлением (см. Мой вопрос выше), пока в порядке.

Но мой (упрощенный тест) контроль начался следующим образом:

    return Input.extend("MyInput", {
            "metadata": {
                "properties": {
                    // Title of Value-Help Dialog
                    "vhTitle"   : { type : "string", defaultValue :"Title" }
                }
            },
            init : function() {
                // Call inherited Method 
                Input.prototype.init.call(this);
                this.setShowValueHelp(true);
                this.attachValueHelpRequest(this.onValueHelpRequest);
            },

            renderer: sap.m.InputRenderer,

            // ======= Events
            onValueHelpRequest : function(oEvent) {
                var me = this;
                console.log("MyInput->onValueHelpRequest->Entering");
                var lvTitle = this.getVhTitle();
                alert (lvTitle);
            }

    });

Я обнаружил, что это работает с UI5 версия 1.54 и выше. Но не с версией UI5 удар 1.54. Проблема была решена путем полной поддержки класса управления с его пространством имен. После этого я столкнулся с другой дополнительной проблемой: моя функция рендеринга не определена. Я хотел только унаследовать средство визуализации расширенного элемента управления, потому что оно не вносит никаких изменений в сам процесс визуализации. Здесь ключ заключался в том, чтобы установить класс рендерера в кавычках.

Итак, вот мой полностью рабочий тестовый элемент управления, который теперь работает с ui5 1.44 и выше.

    return Input.extend("de.fiori4cls.Fi4ClsFV.control.MyInput", {
            "metadata": {
                "properties": {
                    // Title of Value-Help Dialog
                    "vhTitle"   : { type : "string", defaultValue :"Title" }
                }
            },
            init : function() {
                // Call inherited Method 
                Input.prototype.init.call(this);
                this.setShowValueHelp(true);
                this.attachValueHelpRequest(this.onValueHelpRequest);
            },

            renderer: "sap.m.InputRenderer",

            // ======= Events
            onValueHelpRequest : function(oEvent) {
                var me = this;
                console.log("MyInput->onValueHelpRequest->Entering");
                var lvTitle = this.getVhTitle();
                alert (lvTitle);
            }

    });

Применение этого к моему «настоящему» элементу управления заставляет его работать: -)

С уважением, Маттиас

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...