загружаемая коллекция - это сложный стандартный элемент управления, который можно использовать для управления вложениями.На рабочем столе открывается диалоговое окно файла, на мобильном устройстве - параметры фотографии ios или android, что означает выбор фотографии с рулона камеры или создание новой фотографии.
Довольно простой пример, включая URL загрузки и другие обработчики, которые вам понадобятся.Доступно больше опций, настройте их в соответствии с вашими потребностями.В вашем XML:
<UploadCollection
uploadUrl="{path:'Key',formatter:'.headerUrl'}/Attachments"
items="{Attachments}"
change="onAttachUploadChange"
fileDeleted="onAttachDelete"
uploadEnabled="true"
uploadComplete="onAttachUploadComplete">
<UploadCollectionItem
documentId="{DocID}"
contributor="{CreatedBy}"
fileName="{ComponentName}"
fileSize="{path:'ComponentSize',formatter:'.formatter.parseFloat'}"
mimeType="{MIMEType}"
thumbnailUrl="{parts:[{path:'MIMEType'},{path:'DocID'}],formatter:'.thumbnailURL'}"
uploadedDate="{path:'CreatedAt', formatter:'.formatter.Date'}" url="{path:'DocID',formatter:'.attachmentURL'}" visibleEdit="false"
visibleDelete="true" />
</UploadCollection>
Вот обработчики.Особенно важен onAttachUploadChange
.Я должен отметить, что нет явного поста.Если uploadUrl установлен правильно, сообщение все равно будет запущено.
onAttachUploadChange: function(oEvent) {
var csrf = this.getModel().getSecurityToken();
var oUploader = oEvent.getSource();
var fileName = oEvent.getParameter('files')[0].name;
oUploader.removeAllHeaderParameters();
oUploader.insertHeaderParameter(new UploadCollectionParameter({
name: 'x-csrf-token',
value: csrf
}));
oUploader.insertHeaderParameter(new UploadCollectionParameter({
name: 'Slug',
value: fileName
}));
},
onAttachDelete: function(oEvent) {
var id = oEvent.getParameter('documentId');
var oModel = this.getModel();
//set busy indicator maybe?
oModel.remove(`/Attachments('${encodeURIComponent(id)}')`, {
success: (odata, response) => {
//successful removal
//oModel.refresh();
},
error: err => console.log(err)
});
},
onAttachUploadComplete: function(oEvent) {
var mParams = oEvent.getParameter('mParameters');
//handle errors an success in here. Check `mParams`.
}
как для форматеров, чтобы определить URL, это зависит от ваших настроек.В приведенном ниже случае поток настроен на текущий контекст привязки, и в этом случае это один из способов сделать это.Вам понадобится весь URI, включая биты /sap/opu/...
и т.д.
headerUrl: function() {
return this.getModel().sServiceUrl + this.getView().getBindingContext().getPath()
},
URL-адрес для вложений аналогичен, но обычно указывает на сущность самой службы вложений.
attachmentURL: function(docid) {
return this.getModel().sServiceUrl + "/Attachments('" + docid + "')/$value";
},
Вы можете придумать это, чтобы проверить, является ли это изображение, и в этом случае вы можете включить тип пантомимы, чтобы показать миниатюру.
Возможно, есть лучшие способы сделать это, но я нашел это довольно гибким ...