Мы используем элемент управления sap.m.UploadCollection начиная с версии 1.44.24 SAPUI5.Мы используем элемент управления со свойством instantUpload = "false".В событии change мы используем следующий код для добавления x-csrf-token в качестве параметра заголовка, и он работает:
var oModel = this.getView().getModel();
var oUploadCollection = oEvent.getSource();
oModel.refreshSecurityToken();
var oHeaders = oModel.oHeaders;
var sToken = oHeaders['x-csrf-token'];
// Header Token
var oCustomerHeaderToken = new sap.m.UploadCollectionParameter({
name: "x-csrf-token",
value: sToken
});
oUploadCollection._oFileUploader.setUploadUrl(url);
oUploadCollection.addHeaderParameter(oCustomerHeaderToken);
Теперь мы обновили наш SAPUI5 до 1.52.9, и функция перетаскивания показаласьчтобы были добавлены в элемент управления.Если мы не используем функцию перетаскивания, все работает нормально.Теперь, если мы используем функцию перетаскивания, параметр заголовка добавляется к событию изменения.
Проблема в том, что теперь я получаю 405 (метод не разрешен) при вызове метода загрузки, который мы вызываемвручную, поскольку для InstantUpload установлено значение false.
Когда я отлаживаю метод загрузки, кажется, что параметр заголовка потерян или отсутствует в контроллере FileUploader-dbg.js, параметр заголовка отсутствует в массиве aRequestHeaders.Если я отлаживаю добавление «обычного» файла без функции перетаскивания, параметр header устанавливается внутри массива aRequestHeaders.Любая помощь в этом вопросе?
На первом изображении показана проблема, с которой у меня не работает параметр: Проблема перетаскивания .
На втором изображении показано рабочееСценарий: Рабочий сценарий .
Представление xml выглядит следующим образом:
<form:content>
<UploadCollection id="UploadCollection" maximumFilenameLength="155" multiple="false" change="onChange" instantUpload="false" fileDeleted="onFileDeleted" filenameLengthExceed="onFileNameExceed" fileSizeExceed="onFileSizeExceed" typeMissmatch="onTypeMissmatch"
uploadComplete="onUploadComplete" beforeUploadStarts="onBeforeUploadStarts" selectionChange="onSelectionChange" uploadTerminated="onUploadTerminated" noDataText="{i18n>textnoAttachment_Invoice}" mimeType="application/pdf" fileType="pdf, PDF">
</UploadCollection>
</form:content>
Контроллер, основанный на успешном вызове OData, выглядит следующим образом:
_onCreateSuccess: function(oCheckIn) {
var oModelControlsUI = this.getView().getModel("controlsUI");
oModelControlsUI.setProperty("/buttonSubmitEnable", false);
oModelControlsUI.setProperty("/buttonCancelEnable", false);
var sId = oCheckIn.WiId;
var oModel = this.getModel();
var BindingContext = this.getView().getBindingContext();
var objectView = BindingContext.getObject();
objectView.WiId = sId;
this._sId = sId;
// Create a new entry in the Model with the newly created entry
var oFormInfoContext = oModel.createEntry("/CheckInProcSet", {
properties: objectView
});
//Bind the element to the view not just the form
this.getView().setBindingContext(oFormInfoContext);
oModel.refresh();
//Upload the attachment
var oCollection = this.getView().byId("UploadCollection");
oCollection.upload();
}
Метод onBeforeUploadStarts выглядит следующим образом:
onBeforeUploadStarts: function(oEvent) {
// Header Slug
// Add additional parameter
// Get the Model for the form
var oModel = this.getModel();
this.getView().setModel(oModel);
var BindingContext = this.getView().getBindingContext();
var objectView = BindingContext.getObject();
var workitemID = objectView.WiId;
var doctype = objectView.Ncitype;
var oCustomerHeaderSlug = new sap.m.UploadCollectionParameter({
name: "slug",
value: oEvent.getParameter("fileName") + "|" + workitemID + "|" + doctype
});
oEvent.getParameters().addHeaderParameter(oCustomerHeaderSlug);
// Request the returned entity in JSON format so that we can insert
// the uploaded file into the upload collection for display
oEvent.getParameters().addHeaderParameter(new sap.m.UploadCollectionParameter({
name: "accept",
value: "application/json"
}));
},
Дайте мне знать, если вам нужна дополнительная информация.
Спасибо