И так, друзья. Давайте попробуем получить файл с богомерзкого фронтенда в наш теплый ламповый ABAP.
Первый делом необходимо добавить в нашу сущность два поля. Строго говоря проблема будет именно если не сделаем поле MIME-типа
Переопределим метод DEFINE к классе Z*_MPC_EXT
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
METHOD define. super->define( ). DATA(lo_entity_type) = model->get_entity_type('Update'). IF lo_entity_type IS BOUND. lo_entity_type->set_is_media( ). DATA(lo_property) = lo_entity_type->get_property('File'). lo_property->set_as_content_source( ). lo_property = lo_entity_type->get_property('MimeType'). lo_property->set_as_content_type( ). ENDIF. ENDMETHOD. |
Переопределим метод UPDATE
Файл будет находиться во входной структуре IS_MEDIA_RESOURCE
Проверим зайдя в транзакцию /IWFND/GW_CLIENT - SAP Gateway Client
В отладчике можем посмотреть, что получаем
В отладке метода UPDATE_STREAM можем увидеть всё что передали с запросом.
что делать с файлом, думаю, разберетесь сами
Вот такой ответ получим в SAP Gateway Client
сервис готов, если не считать обработки самого файла, но в рамках данной статьи это не требуется
Рассмотрим передачу файла с фронтенда.
Для начала отрисуем кнопку
1 2 3 4 5 6 7 8 9 10 11 |
<l:VerticalLayout> <u:FileUploader id="fileUploader" name="myFileUpload" uploadUrl="upload/" tooltip=" " uploadComplete="handleUploadComplete"/> <Button text="Upload File" press="onSendFileToSap"/> </l:VerticalLayout> |
В контроллере обработаем событие нажатия
1 2 3 4 5 6 7 8 |
onSendFileToNexus: function (oEvent) { var oFileUpload = this.getView().byId("fileUploader"); var domRef = oFileUpload.getFocusDomRef(); var file = domRef.files[0]; var that = this; this.fileName = file.name; this.fileType = file.type; var reader = new FileReader(); |
В контроллере обработаем событие нажатия
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
onSendFileToNexus: function (oEvent) { var oFileUpload = this.getView().byId("fileUploader"); var domRef = oFileUpload.getFocusDomRef(); var file = domRef.files[0]; var that = this; this.fileName = file.name; this.fileType = file.type; var reader = new FileReader(); reader.onload = function (e) { //debugger var vContent = e.currentTarget.result var payLoad={ Filename:file.name, Filetype:file.type, Filecontent:vContent } that.putFile(payLoad); }; reader.readAsDataURL(file); }, putFile: function(payLoad){ return new Promise(function (resolve, reject) { this.getView().getModel("odataSS").update("/UploadSet('')/$value",payLoad, { method: "PUT", success: function (res) { resolve(res); }, error: function (err) { reject(err) } }); }.bind(this)); } |