sap.m.UploadCollection Перетащите выпустить sapui5 1.52.9 - PullRequest
0 голосов
/ 07 сентября 2018

Мы используем элемент управления 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"
            }));
},

Дайте мне знать, если вам нужна дополнительная информация.

Спасибо

1 Ответ

0 голосов
/ 29 октября 2018

это проблема, о которой сообщалось на GitHub ( выпуск GitHub 2199 ). Ответ есть в GitHub, но в основном:

SAP предложила нам использовать событие beforefileuploadStart вместо изменений событие для установки параметра заголовка. Это работает. Некоторые ограничения с этот метод тоже. Объект oEvent не имеет информации о файлах для пример размера файла, загруженного времени и т. д. Он имеет только имя файла.

Спасибо Jn

...