我使用SAP的Restful应用程序框架构建了oData V4-Service。 我使用此服务构建了 Fiori 应用程序 (Fiori Elements)。现在,我尝试创建一个自定义操作来打开 XML 片段(上传文档并确认/拒绝某些数据)。 但是这个Fragment的Button-Actions不会被触发。
我对 Fiori 开发还很陌生,因此我无法解释为什么......我使用在互联网上找到的教程构建我的应用程序。
在我的manifest.json中我创建了这个编码
"toOpenNotification/@com.sap.vocabularies.UI.v1.LineItem": {
"actions": {
"ExtEquipmentObjectPage": {
"press": "my.custom.service.ext.controller.ExtEquipmentObjectPage.onClose",
"visible": true,
"enabled": true,
"requiresSelection": true,
"text": "Close Notification"
}
}
}
这是调用ExtEquipmentObjectPage的onClose方法。
sap.ui.define([
"sap/ui/core/mvc/Controller",
"sap/ui/core/Fragment"
], function (Controller, Fragment) {
'use strict';
return {
pDialog: null,
onClose: function (oEvent) {
//var oView = this.getView();
if (!this.pDialog) {
this.loadFragment({
// id: "excel_upload",
name: "my.custom.service.ext.fragment.ExcelUpload",
type: "XML",
controller: this
}).then((oDialog) => {
//var oFileUploader = Fragment.byId("excel_upload", "uploadSet");
//oFileUploader.removeAllItems();
this.pDialog = oDialog;
this.pDialog.open();
})
.catch(error => alert(error.message));
} else {
//var oFileUploader = Fragment.byId("excel_upload", "uploadSet");
//oFileUploader.removeAllItems();
this.pDialog.open();
}
debugger;
},
onUploadSet: function (oEvent) {
},
onTempDownload: function (oEvent) {
},
onCloseDialog: function (oEvent) {
debugger;
this.pDialog.close();
},
onBeforeUploadStart: function (oEvent) {
},
onUploadSetComplete: function (oEvent) {
},
onItemRemoved: function (oEvent) {
}
};
});
我的片段看起来像这样
<core:FragmentDefinition xmlns="sap.m" xmlns:l="sap.ui.layout" xmlns:core="sap.ui.core" xmlns:u="sap.ui.unified" xmlns:upload="sap.m.upload">
<Dialog id="uploadDialogSet" title="Excel Upload">
<content>
<upload:UploadSet uploadEnabled="true" id="uploadSet" items="{path: '/', templateShareable: false}" fileTypes="pdf" maxFileNameLength="200" beforeUploadStarts="onBeforeUploadStart" uploadCompleted="onUploadSetComplete" afterItemRemoved="onItemRemoved"
terminationEnabled="true">
<upload:UploadSetItem id="uplSetIt" visibleRemove="true" visibleEdit="false" fileName="{name}" url="/upload">
<upload:attributes>
<ObjectAttribute id="ObjAttr" title="Uploaded by" text="{user}" active="false"/>
</upload:attributes>
</upload:UploadSetItem>
</upload:UploadSet>
</content>
<buttons>
<Button id="BtnTemplate" text="Success" press="onTempDownload" icon="sap-icon://accept" type="Success"/>
<Button id="BtnUpload" text="Failure" press="onUploadSet" icon="sap-icon://error" type="Reject"/>
<Button id="BtnClose" press="onCloseDialog" text="Cancel" icon="sap-icon://close-command-field"/>
</buttons>
<endButton>
<Button id="BtnOk" press=".onCloseDialog" text="Ok"/>
</endButton>
</Dialog>
</core:FragmentDefinition>
这通常会打开片段
但是单击“成功/失败/取消”按钮不会触发诸如“成功”/“失败”/“取消”之类的方法。 “关闭对话框”...
我的假设是我没有“正确的控制器”,因为像 this.getView(), ... 这样的方法会导致错误。 因此我尝试了类似的事情
function (Controller, UIComponent, HashChanger, Log) {
"use strict";
return Controller.extend("my.custom.service.controller.ExtEquipmentObjectPage", {
但没有成功...
我怎样才能实现触发操作? 有没有什么例子?
我尝试使用
创建不同的控制器return Controller.extend("my.custom.service.controller.ExtEquipmentObjectPage", {
但是后来我的控制台中出现了一些绑定错误...
好吧, 我为自己找到了解决方案。
对于我的按钮,我声明了一个处理程序
<Button core:require="{ handler: 'my/domain/appName/ext/controller/CustomActionHandler'}" id="BtnSuccess" press="handler.onSuccessClose" text="Success" icon="sap-icon://accept" type="Success"/>
此后我的处理程序的方法被触发