@sapui5/sap.ui.export 1.131.1 → 1.133.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/src/sap/ui/export/.library +1 -1
- package/src/sap/ui/export/ExportBase.js +1 -1
- package/src/sap/ui/export/ExportHandler.js +9 -3
- package/src/sap/ui/export/ExportUtils.js +10 -20
- package/src/sap/ui/export/PortableDocument.js +299 -50
- package/src/sap/ui/export/Spreadsheet.js +3 -3
- package/src/sap/ui/export/SpreadsheetExport.js +1 -1
- package/src/sap/ui/export/library.js +3 -2
- package/src/sap/ui/export/messagebundle_en_US_saptrc.properties +70 -70
- package/src/sap/ui/export/provider/DataProviderBase.js +1 -1
- package/src/sap/ui/export/util/Filter.js +1 -1
package/package.json
CHANGED
|
@@ -27,7 +27,7 @@ sap.ui.define([
|
|
|
27
27
|
* @class The <code>sap.ui.export.ExportBase</code> class allows you to export table data from a UI5 application to certain formats. This class is an abstract class that requires specific implementations for each file format.
|
|
28
28
|
*
|
|
29
29
|
* @author SAP SE
|
|
30
|
-
* @version 1.
|
|
30
|
+
* @version 1.133.0
|
|
31
31
|
*
|
|
32
32
|
* @since 1.96
|
|
33
33
|
* @alias sap.ui.export.ExportBase
|
|
@@ -7,11 +7,12 @@ sap.ui.define([
|
|
|
7
7
|
"./ExportUtils",
|
|
8
8
|
"./ExportDialog",
|
|
9
9
|
"./util/PDFCapabilities",
|
|
10
|
+
"sap/base/Log",
|
|
10
11
|
"sap/m/MessageToast",
|
|
11
12
|
"sap/ui/base/EventProvider",
|
|
12
13
|
"sap/ui/model/odata/v4/ODataModel",
|
|
13
14
|
"sap/ui/util/openWindow"
|
|
14
|
-
], function(library, ExportUtils, ExportDialog, PDFCapabilities, MessageToast, EventProvider, ODataModel, openWindow) {
|
|
15
|
+
], function(library, ExportUtils, ExportDialog, PDFCapabilities, Log, MessageToast, EventProvider, ODataModel, openWindow) {
|
|
15
16
|
"use strict";
|
|
16
17
|
|
|
17
18
|
const Destination = library.Destination;
|
|
@@ -27,7 +28,7 @@ sap.ui.define([
|
|
|
27
28
|
* @class The <code>sap.ui.export.ExportHandler</code> class allows you to export table data from an SAPUI5 application.
|
|
28
29
|
*
|
|
29
30
|
* @author SAP SE
|
|
30
|
-
* @version 1.
|
|
31
|
+
* @version 1.133.0
|
|
31
32
|
*
|
|
32
33
|
* @since 1.102
|
|
33
34
|
* @alias sap.ui.export.ExportHandler
|
|
@@ -185,7 +186,12 @@ sap.ui.define([
|
|
|
185
186
|
this._oFileShareBinding = oModel.bindList("/FileShares");
|
|
186
187
|
}
|
|
187
188
|
|
|
188
|
-
|
|
189
|
+
try {
|
|
190
|
+
return await this._oFileShareBinding.requestContexts(0);
|
|
191
|
+
} catch (oError) {
|
|
192
|
+
Log.error(oError?.message ?? oError);
|
|
193
|
+
return [];
|
|
194
|
+
}
|
|
189
195
|
};
|
|
190
196
|
|
|
191
197
|
/**
|
|
@@ -9,6 +9,7 @@ sap.ui.define([
|
|
|
9
9
|
"sap/base/Log",
|
|
10
10
|
"sap/base/i18n/Formatting",
|
|
11
11
|
"sap/base/i18n/Localization",
|
|
12
|
+
"sap/base/i18n/date/CalendarType",
|
|
12
13
|
"sap/ui/core/Element",
|
|
13
14
|
"sap/ui/core/Fragment",
|
|
14
15
|
"sap/ui/core/InvisibleMessage",
|
|
@@ -23,7 +24,7 @@ sap.ui.define([
|
|
|
23
24
|
"sap/ui/performance/trace/FESRHelper",
|
|
24
25
|
"sap/ui/util/openWindow",
|
|
25
26
|
"sap/ui/VersionInfo"
|
|
26
|
-
], function(library, Filter, BaseConfig, Log, Formatting, Localization, Element, Fragment, InvisibleMessage, Library, Locale, DateFormat, coreLibrary, syncStyleClass, LocaleData, JSONModel, ResourceModel, FESRHelper, openWindow, VersionInfo) {
|
|
27
|
+
], function(library, Filter, BaseConfig, Log, Formatting, Localization, CalendarType, Element, Fragment, InvisibleMessage, Library, Locale, DateFormat, coreLibrary, syncStyleClass, LocaleData, JSONModel, ResourceModel, FESRHelper, openWindow, VersionInfo) {
|
|
27
28
|
"use strict";
|
|
28
29
|
|
|
29
30
|
// eslint-disable-next-line
|
|
@@ -31,7 +32,6 @@ sap.ui.define([
|
|
|
31
32
|
|
|
32
33
|
// Shortcuts
|
|
33
34
|
const ValueState = coreLibrary.ValueState;
|
|
34
|
-
const CalendarType = coreLibrary.CalendarType;
|
|
35
35
|
const FileType = library.FileType;
|
|
36
36
|
const EdmType = library.EdmType;
|
|
37
37
|
const Destination = library.Destination;
|
|
@@ -75,7 +75,7 @@ sap.ui.define([
|
|
|
75
75
|
fileTypeCollection: [],
|
|
76
76
|
fileType: "XLSX",
|
|
77
77
|
destinationCollection: [
|
|
78
|
-
{key: Destination.LOCAL, text: oResourceBundle.getText("DESTINATION_LOCAL")}
|
|
78
|
+
{ key: Destination.LOCAL, text: oResourceBundle.getText("DESTINATION_LOCAL") }
|
|
79
79
|
],
|
|
80
80
|
destination: Destination.LOCAL,
|
|
81
81
|
paperSize: "DIN_A4",
|
|
@@ -88,12 +88,12 @@ sap.ui.define([
|
|
|
88
88
|
capabilities: oExportCapabilities,
|
|
89
89
|
fitToPage: false,
|
|
90
90
|
paperSizeCollection: [
|
|
91
|
-
{key: "DIN_A4", text: oResourceBundle.getText("PAPER_SIZE_A4")},
|
|
92
|
-
{key: "US_LETTER", text: oResourceBundle.getText("PAPER_SIZE_US_LETTER")}
|
|
91
|
+
{ key: "DIN_A4", text: oResourceBundle.getText("PAPER_SIZE_A4") },
|
|
92
|
+
{ key: "US_LETTER", text: oResourceBundle.getText("PAPER_SIZE_US_LETTER") }
|
|
93
93
|
],
|
|
94
94
|
orientationCollection: [
|
|
95
|
-
{key:"LANDSCAPE", text: oResourceBundle.getText("ORIENTATION_LAND")},
|
|
96
|
-
{key:"PORTRAIT", text: oResourceBundle.getText("ORIENTATION_PORT")}
|
|
95
|
+
{ key:"LANDSCAPE", text: oResourceBundle.getText("ORIENTATION_LAND") },
|
|
96
|
+
{ key:"PORTRAIT", text: oResourceBundle.getText("ORIENTATION_PORT") }
|
|
97
97
|
],
|
|
98
98
|
fontSize: 10,
|
|
99
99
|
signature: false,
|
|
@@ -144,7 +144,7 @@ sap.ui.define([
|
|
|
144
144
|
* @class Utilities related to export to enable reuse in integration scenarios (e.g. tables).
|
|
145
145
|
*
|
|
146
146
|
* @author SAP SE
|
|
147
|
-
* @version 1.
|
|
147
|
+
* @version 1.133.0
|
|
148
148
|
*
|
|
149
149
|
* @since 1.59
|
|
150
150
|
* @alias sap.ui.export.ExportUtils
|
|
@@ -246,10 +246,6 @@ sap.ui.define([
|
|
|
246
246
|
* @private
|
|
247
247
|
*/
|
|
248
248
|
getExportSettingsViaDialog: function(mCustomConfig, oExportCapabilities, bRemoteDestination, oOpener, fnCallback) {
|
|
249
|
-
function isPDFFileShareExportEnabled() {
|
|
250
|
-
return document.location.search.includes("sap-ui-xx-pdfFileShareExport=true") && oExportCapabilities?.PDF?.UploadToFileShare;
|
|
251
|
-
}
|
|
252
|
-
|
|
253
249
|
return new Promise(function (fnResolve, fnReject) {
|
|
254
250
|
let oExportSettingsDialog;
|
|
255
251
|
|
|
@@ -306,8 +302,7 @@ sap.ui.define([
|
|
|
306
302
|
return sValue === FileType.XLSX || sValue === FileType.GSHEET;
|
|
307
303
|
},
|
|
308
304
|
isDestinationEnabled: function(sFileType) {
|
|
309
|
-
|
|
310
|
-
return isPDFFileShareExportEnabled() ? sFileType !== FileType.GSHEET : sFileType === FileType.XLSX;
|
|
305
|
+
return oExportCapabilities?.PDF?.UploadToFileShare ? sFileType !== FileType.GSHEET : sFileType === FileType.XLSX;
|
|
311
306
|
},
|
|
312
307
|
hasDestinations: function(aDestinationCollection) {
|
|
313
308
|
return aDestinationCollection.length > 1;
|
|
@@ -357,11 +352,6 @@ sap.ui.define([
|
|
|
357
352
|
|
|
358
353
|
switch (oSelectedItem.getKey()) {
|
|
359
354
|
case FileType.PDF:
|
|
360
|
-
// URL Parameter dependend activation of PDF File Share Export
|
|
361
|
-
if (!isPDFFileShareExportEnabled()) {
|
|
362
|
-
oExportConfigModel.setProperty("/destination", Destination.LOCAL);
|
|
363
|
-
}
|
|
364
|
-
|
|
365
355
|
oExportConfigModel.setProperty("/includeFilterSettings", false);
|
|
366
356
|
fnSetSemanticStepName(oExportConfigModel, oExportSettingsDialog.getBeginButton());
|
|
367
357
|
break;
|
|
@@ -1218,7 +1208,7 @@ sap.ui.define([
|
|
|
1218
1208
|
*
|
|
1219
1209
|
* @param {object} oContext Context object
|
|
1220
1210
|
* @param {string} [oContext.application] Name of the application (default: "SAP UI5")
|
|
1221
|
-
* @param {string} [oContext.version] Application version (default: "1.
|
|
1211
|
+
* @param {string} [oContext.version] Application version (default: "1.133.0")
|
|
1222
1212
|
* @param {string} [oContext.title] Title that will be written to the file (NOT the filename)
|
|
1223
1213
|
* @param {string} [oContext.modifiedBy] Optional user context that will be written to the file
|
|
1224
1214
|
* @param {string} [oContext.sheetName] Name of the data sheet - Maximum length of 31 characters
|
|
@@ -22,11 +22,13 @@ sap.ui.define([
|
|
|
22
22
|
const EdmType = Library.EdmType;
|
|
23
23
|
const Status = Library.Status;
|
|
24
24
|
|
|
25
|
+
const MIME_TYPE = "application/pdf";
|
|
26
|
+
|
|
25
27
|
/**
|
|
26
28
|
* @class The <code>sap.ui.export.PortableDocument</code> class allows you to export table data from a UI5 application to a Portable Document Format (*.PDF) file.
|
|
27
29
|
*
|
|
28
30
|
* @author SAP SE
|
|
29
|
-
* @version 1.
|
|
31
|
+
* @version 1.133.0
|
|
30
32
|
*
|
|
31
33
|
* @since 1.96
|
|
32
34
|
* @alias sap.ui.export.PortableDocument
|
|
@@ -130,9 +132,11 @@ sap.ui.define([
|
|
|
130
132
|
type: "odata",
|
|
131
133
|
version: bV4ODataModel ? 4 : 2,
|
|
132
134
|
dataUrl: oDataUrl.toString(),
|
|
133
|
-
|
|
135
|
+
commonServiceUrl: this._resolveCommonServiceUrl(sServiceUrl),
|
|
136
|
+
serviceUrl: PortableDocument.harmonizeUrl(sServiceUrl),
|
|
134
137
|
headers: bV4ODataModel ? oModel.getHttpHeaders(true) : oModel.getHeaders(),
|
|
135
|
-
count: ExportUtils.getCountFromBinding(oBinding)
|
|
138
|
+
count: ExportUtils.getCountFromBinding(oBinding),
|
|
139
|
+
useBatch: bV4ODataModel || oModel.bUseBatch
|
|
136
140
|
};
|
|
137
141
|
}
|
|
138
142
|
|
|
@@ -149,10 +153,8 @@ sap.ui.define([
|
|
|
149
153
|
*
|
|
150
154
|
* @private
|
|
151
155
|
*/
|
|
152
|
-
PortableDocument.prototype.
|
|
153
|
-
|
|
154
|
-
sCurrentServiceUrl += "/";
|
|
155
|
-
}
|
|
156
|
+
PortableDocument.prototype._resolveCommonServiceUrl = function(sCurrentServiceUrl) {
|
|
157
|
+
sCurrentServiceUrl = PortableDocument.harmonizeUrl(sCurrentServiceUrl);
|
|
156
158
|
|
|
157
159
|
const isRelative = /^[\./]/.test(sCurrentServiceUrl);
|
|
158
160
|
let sReference = this._mCapabilities.DocumentDescriptionReference;
|
|
@@ -241,7 +243,7 @@ sap.ui.define([
|
|
|
241
243
|
if (this._mCapabilities.FitToPage) {
|
|
242
244
|
oDocumentDescription.Format.FitToPage = {
|
|
243
245
|
IsEnabled: mSettings.fitToPage,
|
|
244
|
-
MinimumFontSize:
|
|
246
|
+
MinimumFontSize: 1
|
|
245
247
|
};
|
|
246
248
|
}
|
|
247
249
|
|
|
@@ -284,12 +286,14 @@ sap.ui.define([
|
|
|
284
286
|
}
|
|
285
287
|
}
|
|
286
288
|
|
|
289
|
+
/* FileShare */
|
|
287
290
|
if (this._mCapabilities.UploadToFileShare && this._mCloudFileInfo) {
|
|
288
291
|
oDocumentDescription.FileName = this._mCloudFileInfo.FileShareItemName;
|
|
289
292
|
oDocumentDescription.FileShare = {
|
|
290
293
|
Repository: this._mCloudFileInfo.FileShare,
|
|
291
294
|
Folder: this._mCloudFileInfo.ParentFileShareItem
|
|
292
295
|
};
|
|
296
|
+
mSettings.dataSource.headers["SAP-Upload-To-File-Share"] = true;
|
|
293
297
|
}
|
|
294
298
|
|
|
295
299
|
/* Eliminate duplicate or unknown columns before adding them to the DocumentDescription */
|
|
@@ -360,7 +364,7 @@ sap.ui.define([
|
|
|
360
364
|
const iVersion = oDataSource.version || 2;
|
|
361
365
|
|
|
362
366
|
return iVersion === 4 ? new ODataModel({
|
|
363
|
-
serviceUrl: oDataSource.
|
|
367
|
+
serviceUrl: oDataSource.commonServiceUrl
|
|
364
368
|
}) : this._oModel;
|
|
365
369
|
};
|
|
366
370
|
|
|
@@ -481,40 +485,26 @@ sap.ui.define([
|
|
|
481
485
|
const oModel = this._getModel(oDataSource);
|
|
482
486
|
const sPath = "/" + this._getEntitySetName(oDataSource);
|
|
483
487
|
|
|
484
|
-
if (!oModel
|
|
485
|
-
|
|
488
|
+
if (!oModel?.isA(["sap.ui.model.odata.v4.ODataModel", "sap.ui.model.odata.v2.ODataModel"])) {
|
|
489
|
+
throw new Error("Unsupported Model");
|
|
486
490
|
}
|
|
487
491
|
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
const oBinding = oModel.bindList(sPath);
|
|
492
|
-
|
|
493
|
-
oBinding.attachCreateCompleted((oEvent) => {
|
|
494
|
-
if (oEvent.getParameter("success")) {
|
|
495
|
-
fnResolve(oEvent.getParameter("context").getObject()["Id"]);
|
|
496
|
-
} else {
|
|
497
|
-
fnReject();
|
|
498
|
-
}
|
|
499
|
-
});
|
|
500
|
-
|
|
501
|
-
oBinding.create(oDocumentDescription);
|
|
502
|
-
} else {
|
|
503
|
-
const bUseBatch = oModel.bUseBatch;
|
|
492
|
+
if (oModel.isA("sap.ui.model.odata.v4.ODataModel")) {
|
|
493
|
+
const oBinding = oModel.bindList(sPath);
|
|
494
|
+
const oContext = oBinding.create(oDocumentDescription);
|
|
504
495
|
|
|
505
|
-
|
|
496
|
+
return oContext.created().then(() => oContext.getObject()["Id"]);
|
|
497
|
+
} else {
|
|
498
|
+
return new Promise((fnResolve, fnReject) => {
|
|
506
499
|
oModel.create(sPath, oDocumentDescription, {
|
|
500
|
+
groupId: "documentDescription",
|
|
507
501
|
success: (oData) => {
|
|
508
|
-
oModel.setUseBatch(bUseBatch);
|
|
509
502
|
fnResolve(oData["Id"]);
|
|
510
503
|
},
|
|
511
|
-
error:
|
|
512
|
-
oModel.setUseBatch(bUseBatch);
|
|
513
|
-
fnReject(oError);
|
|
514
|
-
}
|
|
504
|
+
error: fnReject
|
|
515
505
|
});
|
|
516
|
-
}
|
|
517
|
-
}
|
|
506
|
+
});
|
|
507
|
+
}
|
|
518
508
|
};
|
|
519
509
|
|
|
520
510
|
/**
|
|
@@ -551,9 +541,9 @@ sap.ui.define([
|
|
|
551
541
|
this._request = new AbortController();
|
|
552
542
|
|
|
553
543
|
const sDocumentDescriptionId = await this.postDocumentDescription(oDocumentDescription, mSettings.dataSource);
|
|
554
|
-
const
|
|
544
|
+
const oPDFBlob = await this.sendRequest(mSettings.dataSource, sDocumentDescriptionId);
|
|
555
545
|
|
|
556
|
-
ExportUtils.saveAsFile(
|
|
546
|
+
ExportUtils.saveAsFile(oPDFBlob, mSettings.fileName);
|
|
557
547
|
ExportUtils.announceExportStatus(Status.FINISHED, { assertive: true });
|
|
558
548
|
} catch (oError) {
|
|
559
549
|
PortableDocument.showErrorMessage(oError);
|
|
@@ -565,30 +555,31 @@ sap.ui.define([
|
|
|
565
555
|
/**
|
|
566
556
|
* Requests the generated PDF via HTTP GET from the OData service.
|
|
567
557
|
*
|
|
568
|
-
* @param {
|
|
558
|
+
* @param {object} oDataSource DataSource settings of the export configuration
|
|
559
|
+
* @param {string} oDataSource.dataUrl Absolute data URL of the OData entity that should be exported as PDF
|
|
569
560
|
* @param {string} sDocumentDescriptionId GUID of the DocumentDescription that should be used for creating the PDF
|
|
570
561
|
* @returns {Promise} A Promise that gets resolved after the XHR request
|
|
571
562
|
*
|
|
572
563
|
* @private
|
|
573
564
|
*/
|
|
574
|
-
PortableDocument.prototype.sendRequest = async function(
|
|
565
|
+
PortableDocument.prototype.sendRequest = async function(oDataSource, sDocumentDescriptionId) {
|
|
575
566
|
if (this._request?.signal.aborted) {
|
|
576
567
|
throw null; // Explicitly reject the Promise without an error to indicate prior user cancellation
|
|
577
568
|
}
|
|
578
569
|
|
|
579
|
-
|
|
570
|
+
oDataSource.dataUrl = this._applyResultSize(oDataSource.dataUrl);
|
|
571
|
+
|
|
572
|
+
const oRequest = oDataSource.useBatch ? PortableDocument.createBatchRequest(oDataSource, sDocumentDescriptionId, this._request) : PortableDocument.createGetRequest(oDataSource, sDocumentDescriptionId, this._request);
|
|
580
573
|
|
|
581
574
|
try {
|
|
582
|
-
|
|
583
|
-
signal: this._request?.signal,
|
|
584
|
-
headers: {
|
|
585
|
-
"Accept": this.getMimeType(),
|
|
586
|
-
"SAP-Document-Description-Id": sDocumentDescriptionId
|
|
587
|
-
}
|
|
588
|
-
});
|
|
575
|
+
let response = await fetch(oRequest);
|
|
589
576
|
|
|
590
|
-
if (
|
|
591
|
-
|
|
577
|
+
if (oDataSource.useBatch) {
|
|
578
|
+
response = await PortableDocument.getBatchResponse(response);
|
|
579
|
+
}
|
|
580
|
+
|
|
581
|
+
if (response.status === 301 && response.headers.has("Location")) {
|
|
582
|
+
openWindow(response.headers.get("Location"), "_blank");
|
|
592
583
|
return undefined;
|
|
593
584
|
}
|
|
594
585
|
|
|
@@ -606,6 +597,264 @@ sap.ui.define([
|
|
|
606
597
|
}
|
|
607
598
|
};
|
|
608
599
|
|
|
600
|
+
/**
|
|
601
|
+
* Ensures that the given URL ends with a forward slash.
|
|
602
|
+
*
|
|
603
|
+
* @param {string} sUrl URL that is harmonized
|
|
604
|
+
*
|
|
605
|
+
* @returns {string} URL that ends with a forward slash
|
|
606
|
+
* @static
|
|
607
|
+
* @private
|
|
608
|
+
*/
|
|
609
|
+
PortableDocument.harmonizeUrl = function(sUrl) {
|
|
610
|
+
return sUrl.endsWith("/") ? sUrl : sUrl + "/";
|
|
611
|
+
};
|
|
612
|
+
|
|
613
|
+
/**
|
|
614
|
+
* Creates <code>Request</code> with method GET for the given <code>dataSource</code> and <code>SAP-Document-Description-Id</code>.
|
|
615
|
+
*
|
|
616
|
+
* @param {object} oDataSource <code>DataSource</code> settings of the export configuration
|
|
617
|
+
* @param {string} sDocumentDescriptionId GUID of the <code>DocumentDescription</code> that is used for creating the PDF
|
|
618
|
+
* @param {AbortController} oAbortController <code>AbortController</code> instance that is used to cancel the request
|
|
619
|
+
*
|
|
620
|
+
* @returns {Request} Request object that is used to fetch the PDF document
|
|
621
|
+
* @static
|
|
622
|
+
* @private
|
|
623
|
+
*/
|
|
624
|
+
PortableDocument.createGetRequest = function(oDataSource, sDocumentDescriptionId, oAbortController) {
|
|
625
|
+
const oHeaders = new Headers(oDataSource.headers);
|
|
626
|
+
|
|
627
|
+
oHeaders.set("Accept", MIME_TYPE);
|
|
628
|
+
oHeaders.set("SAP-Document-Description-Id", sDocumentDescriptionId);
|
|
629
|
+
|
|
630
|
+
return new Request(oDataSource.dataUrl, {
|
|
631
|
+
signal: oAbortController.signal,
|
|
632
|
+
headers: oHeaders
|
|
633
|
+
});
|
|
634
|
+
};
|
|
635
|
+
|
|
636
|
+
/**
|
|
637
|
+
* Creates a $batch request with a single GET request for the given <code>dataSource</code> and <code>SAP-Document-Description-Id</code>.
|
|
638
|
+
*
|
|
639
|
+
* @param {object} oDataSource DataSource settings of the export configuration
|
|
640
|
+
* @param {string} sDocumentDescriptionId GUID of the DocumentDescription that is used for creating the PDF
|
|
641
|
+
* @param {AbortController} oAbortController AbortController instance that is used to cancel the request
|
|
642
|
+
*
|
|
643
|
+
* @returns {Request} Request object that is used to fetch the PDF document
|
|
644
|
+
* @static
|
|
645
|
+
* @private
|
|
646
|
+
*/
|
|
647
|
+
PortableDocument.createBatchRequest = function(oDataSource, sDocumentDescriptionId, oAbortController) {
|
|
648
|
+
const sUrl = oDataSource.dataUrl.split(oDataSource.serviceUrl)[1];
|
|
649
|
+
const sBoundary = "batch_" + PortableDocument._createGuid();
|
|
650
|
+
const oHeaders = new Headers(oDataSource.headers);
|
|
651
|
+
|
|
652
|
+
/* Header adjustments for inner request */
|
|
653
|
+
oHeaders.set("Accept", MIME_TYPE);
|
|
654
|
+
oHeaders.set("SAP-Document-Description-Id", sDocumentDescriptionId);
|
|
655
|
+
|
|
656
|
+
const sBody = PortableDocument.createRequestBody(sUrl, sBoundary, oHeaders);
|
|
657
|
+
|
|
658
|
+
/* Header adjustments for outer request */
|
|
659
|
+
oHeaders.set("Accept", "multipart/mixed");
|
|
660
|
+
oHeaders.set("Content-Type", "multipart/mixed;boundary=" + sBoundary);
|
|
661
|
+
oHeaders.delete("SAP-Document-Description-Id");
|
|
662
|
+
oHeaders.delete("SAP-Upload-To-File-Share");
|
|
663
|
+
|
|
664
|
+
return new Request(oDataSource.serviceUrl + "$batch", {
|
|
665
|
+
body: sBody,
|
|
666
|
+
cache: "no-store",
|
|
667
|
+
headers: oHeaders,
|
|
668
|
+
method: "POST",
|
|
669
|
+
signal: oAbortController.signal
|
|
670
|
+
});
|
|
671
|
+
};
|
|
672
|
+
|
|
673
|
+
/**
|
|
674
|
+
* Creates the request body for a $batch request.
|
|
675
|
+
*
|
|
676
|
+
* @param {string} sUrl The URL that is requested
|
|
677
|
+
* @param {string} sBoundary The boundary id for the inner request
|
|
678
|
+
* @param {Headers} oHeaders The headers that are sent with the request
|
|
679
|
+
*
|
|
680
|
+
* @returns {string} The request body
|
|
681
|
+
* @static
|
|
682
|
+
* @private
|
|
683
|
+
*/
|
|
684
|
+
PortableDocument.createRequestBody = function(sUrl, sBoundary, oHeaders) {
|
|
685
|
+
const aBody = [];
|
|
686
|
+
|
|
687
|
+
aBody.push("--" + sBoundary);
|
|
688
|
+
aBody.push("Content-Type: application/http");
|
|
689
|
+
aBody.push("Content-Transfer-Encoding: binary");
|
|
690
|
+
aBody.push("");
|
|
691
|
+
aBody.push(`GET ${sUrl} HTTP/1.1`);
|
|
692
|
+
|
|
693
|
+
/* Set header information */
|
|
694
|
+
for (const [sKey, sValue] of oHeaders.entries()) {
|
|
695
|
+
aBody.push(sKey + ":" + sValue);
|
|
696
|
+
}
|
|
697
|
+
|
|
698
|
+
aBody.push("");
|
|
699
|
+
aBody.push("");
|
|
700
|
+
aBody.push("--" + sBoundary + "--");
|
|
701
|
+
aBody.push("");
|
|
702
|
+
|
|
703
|
+
return aBody.join("\r\n");
|
|
704
|
+
};
|
|
705
|
+
|
|
706
|
+
/**
|
|
707
|
+
* Unwraps the $batch response and returns a <code>Response</code> object
|
|
708
|
+
* corresponding to the inner GET request.
|
|
709
|
+
*
|
|
710
|
+
* @param {Response} oResponse The <code>Response</code> of the $batch request
|
|
711
|
+
*
|
|
712
|
+
* @returns {Promise<Response>} A <code>Promise</code> that resolves with the <code>Response</code> of the inner GET request
|
|
713
|
+
* @async
|
|
714
|
+
* @static
|
|
715
|
+
* @private
|
|
716
|
+
*/
|
|
717
|
+
PortableDocument.getBatchResponse = async function(oResponse) {
|
|
718
|
+
if (!oResponse.ok) {
|
|
719
|
+
// $batch response cannot be unwrapped when the outer request failed
|
|
720
|
+
return oResponse;
|
|
721
|
+
}
|
|
722
|
+
|
|
723
|
+
const oBuffer = await oResponse.arrayBuffer();
|
|
724
|
+
const oUint8 = new Uint8Array(oBuffer);
|
|
725
|
+
|
|
726
|
+
const {status, statusText, headers, pdfContent} = PortableDocument.parseResponseBody(oUint8);
|
|
727
|
+
|
|
728
|
+
return new Response(pdfContent, {
|
|
729
|
+
status: status,
|
|
730
|
+
statusText: statusText,
|
|
731
|
+
headers: headers
|
|
732
|
+
});
|
|
733
|
+
};
|
|
734
|
+
|
|
735
|
+
/**
|
|
736
|
+
* Detects the start index of the PDF content in the binary response.
|
|
737
|
+
* The start boundary is "%PDF-". If the response contains multiple PDFs,
|
|
738
|
+
* the first one is used.
|
|
739
|
+
*
|
|
740
|
+
* @param {Uint8Array} oTypedArray The binary data of the response
|
|
741
|
+
*
|
|
742
|
+
* @returns {number} The start index of the PDF content. If no PDF content is found, -1 is returned.
|
|
743
|
+
* @static
|
|
744
|
+
* @private
|
|
745
|
+
*/
|
|
746
|
+
PortableDocument.getStartIndex = function(oTypedArray) {
|
|
747
|
+
return oTypedArray.findIndex((element, index) => {
|
|
748
|
+
const sStartBoundary = "%PDF-";
|
|
749
|
+
|
|
750
|
+
return element === sStartBoundary.charCodeAt(0)
|
|
751
|
+
&& oTypedArray[index + 1] === sStartBoundary.charCodeAt(1)
|
|
752
|
+
&& oTypedArray[index + 2] === sStartBoundary.charCodeAt(2)
|
|
753
|
+
&& oTypedArray[index + 3] === sStartBoundary.charCodeAt(3)
|
|
754
|
+
&& oTypedArray[index + 4] === sStartBoundary.charCodeAt(4);
|
|
755
|
+
});
|
|
756
|
+
};
|
|
757
|
+
|
|
758
|
+
/**
|
|
759
|
+
* Detects the end index of the PDF content in the binary response.
|
|
760
|
+
* The end boundary is "%%EOF". If the response contains multiple PDFs,
|
|
761
|
+
* the last one is used.
|
|
762
|
+
*
|
|
763
|
+
* @param {Uint8Array} oTypedArray The binary data of the response
|
|
764
|
+
*
|
|
765
|
+
* @returns {number} The start index of the PDF content. If no PDF content is found, -1 is returned.
|
|
766
|
+
* @static
|
|
767
|
+
* @private
|
|
768
|
+
*/
|
|
769
|
+
PortableDocument.getEndIndex = function(oTypedArray) {
|
|
770
|
+
return oTypedArray.findLastIndex((element, index) => {
|
|
771
|
+
const sEndBoundary = "%%EOF";
|
|
772
|
+
|
|
773
|
+
return element === sEndBoundary.charCodeAt(4)
|
|
774
|
+
&& oTypedArray[index - 1] === sEndBoundary.charCodeAt(3)
|
|
775
|
+
&& oTypedArray[index - 2] === sEndBoundary.charCodeAt(2)
|
|
776
|
+
&& oTypedArray[index - 3] === sEndBoundary.charCodeAt(1)
|
|
777
|
+
&& oTypedArray[index - 4] === sEndBoundary.charCodeAt(0);
|
|
778
|
+
});
|
|
779
|
+
};
|
|
780
|
+
|
|
781
|
+
/**
|
|
782
|
+
* Parses the binary response of the inner request. It identifies the PDF content
|
|
783
|
+
* by its field boundaries %PDF- and %%EOF. The response status and its headers are
|
|
784
|
+
* evaluated as well.
|
|
785
|
+
*
|
|
786
|
+
* @param {Uint8Array} oTypedArray The binary response of the inner request
|
|
787
|
+
* @returns {object} An object containing the <code>status</code>, <code>statusText</code>, <code>headers</code>, and the PDF content
|
|
788
|
+
* @static
|
|
789
|
+
* @private
|
|
790
|
+
*/
|
|
791
|
+
PortableDocument.parseResponseBody = function(oTypedArray) {
|
|
792
|
+
let oPDFContent;
|
|
793
|
+
const iPDFStartIndex = PortableDocument.getStartIndex(oTypedArray);
|
|
794
|
+
const iPDFEndIndex = PortableDocument.getEndIndex(oTypedArray);
|
|
795
|
+
|
|
796
|
+
if (iPDFStartIndex !== -1 && iPDFEndIndex !== -1) {
|
|
797
|
+
// Increase end index by one, since subarray does not include the second index
|
|
798
|
+
oPDFContent = oTypedArray.subarray(iPDFStartIndex, iPDFEndIndex + 1);
|
|
799
|
+
}
|
|
800
|
+
|
|
801
|
+
/*
|
|
802
|
+
* If iPDFStartIndex is -1, the responseText is missing the last character
|
|
803
|
+
* of the response which can be ignored because it is either a line break
|
|
804
|
+
* or the trailing "-" of the batch boundary.
|
|
805
|
+
*/
|
|
806
|
+
const sResponseText = new TextDecoder().decode(oTypedArray.subarray(0, iPDFStartIndex));
|
|
807
|
+
const aLines = sResponseText.split("\r\n");
|
|
808
|
+
|
|
809
|
+
// Remove all lines prior to HTTP status
|
|
810
|
+
aLines.splice(0, aLines.findIndex((sLine) => /^HTTP\/1\.[0|1] ([1-9][0-9]{2})/.test(sLine)));
|
|
811
|
+
|
|
812
|
+
const [, iStatusCode, sStatusText] = aLines[0].match(/^HTTP\/1\.[0|1] ([1-9][0-9]{2}) ?([\w ]*)$/);
|
|
813
|
+
const reHeaders = /^([\w\-]+): ?(.+)$/;
|
|
814
|
+
const oHeaders = aLines
|
|
815
|
+
.filter((sLine) => reHeaders.test(sLine))
|
|
816
|
+
.reduce((oAccumulator, sLine) => {
|
|
817
|
+
const [, sKey, sValue] = sLine.match(reHeaders);
|
|
818
|
+
|
|
819
|
+
oAccumulator.set(sKey, sValue);
|
|
820
|
+
|
|
821
|
+
return oAccumulator;
|
|
822
|
+
}, new Headers());
|
|
823
|
+
|
|
824
|
+
return {
|
|
825
|
+
status: iStatusCode,
|
|
826
|
+
statusText: sStatusText,
|
|
827
|
+
headers: oHeaders,
|
|
828
|
+
pdfContent: oPDFContent
|
|
829
|
+
};
|
|
830
|
+
};
|
|
831
|
+
|
|
832
|
+
/**
|
|
833
|
+
* Creates a pseudo random GUID. This algorithm is not suitable for
|
|
834
|
+
* cryptographic purposes and should not be used for such.
|
|
835
|
+
*
|
|
836
|
+
* *** IMPORTANT ***
|
|
837
|
+
* This is a fallback solution due to missing crypto features in
|
|
838
|
+
* headless chrome that is used for the UI5 voter.
|
|
839
|
+
*
|
|
840
|
+
* @returns {string} Generated GUID
|
|
841
|
+
*
|
|
842
|
+
* @static
|
|
843
|
+
* @private
|
|
844
|
+
*/
|
|
845
|
+
PortableDocument._createGuid = function() {
|
|
846
|
+
if (globalThis.crypto?.randomUUID) {
|
|
847
|
+
return globalThis.crypto.randomUUID();
|
|
848
|
+
}
|
|
849
|
+
|
|
850
|
+
return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, function(c) {
|
|
851
|
+
const r = Math.random() * 16 | 0, // Bitwise OR is equivalent to Math.floor() but faster
|
|
852
|
+
v = c === "x" ? r : ((r & 0x3) | 0x8); // In case of c != "x", the value is always between 0x8 and 0xB
|
|
853
|
+
|
|
854
|
+
return v.toString(16);
|
|
855
|
+
});
|
|
856
|
+
};
|
|
857
|
+
|
|
609
858
|
/**
|
|
610
859
|
* Returns the specific MIME type
|
|
611
860
|
*
|
|
@@ -615,7 +864,7 @@ sap.ui.define([
|
|
|
615
864
|
* @public
|
|
616
865
|
*/
|
|
617
866
|
PortableDocument.prototype.getMimeType = function() {
|
|
618
|
-
return
|
|
867
|
+
return MIME_TYPE;
|
|
619
868
|
};
|
|
620
869
|
|
|
621
870
|
/**
|
|
@@ -90,7 +90,7 @@ sap.ui.define([
|
|
|
90
90
|
* <li><code>workbook.context</code> - Context object that will be applied to the generated file. It may contain the following fields:</li>
|
|
91
91
|
* <ul>
|
|
92
92
|
* <li><code>application</code> (string) - The application that creates the XLSX document (default: "SAP UI5")</li>
|
|
93
|
-
* <li><code>version</code> (string) - Application version that creates the XLSX document (default: "1.
|
|
93
|
+
* <li><code>version</code> (string) - Application version that creates the XLSX document (default: "1.133.0")</li>
|
|
94
94
|
* <li><code>title</code> (string) - Title of the XLSX document (NOT the filename)</li>
|
|
95
95
|
* <li><code>modifiedBy</code> (string) - User context for the XLSX document</li>
|
|
96
96
|
* <li><code>sheetName</code> (string) - The label of the data sheet</li>
|
|
@@ -174,7 +174,7 @@ sap.ui.define([
|
|
|
174
174
|
* columns: aColumns,
|
|
175
175
|
* context: {
|
|
176
176
|
* application: 'Debug Test Application',
|
|
177
|
-
* version: '1.
|
|
177
|
+
* version: '1.133.0',
|
|
178
178
|
* title: 'Some random title',
|
|
179
179
|
* modifiedBy: 'John Doe',
|
|
180
180
|
* metaSheetName: 'Custom metadata',
|
|
@@ -286,7 +286,7 @@ sap.ui.define([
|
|
|
286
286
|
* @class The <code>sap.ui.export.Spreadsheet</code> class allows you to export table data from a UI5 application to a spreadsheet file.
|
|
287
287
|
*
|
|
288
288
|
* @author SAP SE
|
|
289
|
-
* @version 1.
|
|
289
|
+
* @version 1.133.0
|
|
290
290
|
*
|
|
291
291
|
* @since 1.50
|
|
292
292
|
* @alias sap.ui.export.Spreadsheet
|
|
@@ -21,7 +21,7 @@ sap.ui.define(['sap/base/Log', 'sap/ui/export/ExportUtils'], function(Log, Expor
|
|
|
21
21
|
* Utility class to perform spreadsheet export.
|
|
22
22
|
*
|
|
23
23
|
* @author SAP SE
|
|
24
|
-
* @version 1.
|
|
24
|
+
* @version 1.133.0
|
|
25
25
|
*
|
|
26
26
|
* @alias sap.ui.export.SpreadsheetExport
|
|
27
27
|
* @private
|
|
@@ -15,12 +15,13 @@ sap.ui.define(["sap/ui/core/Lib"], function(Library) {
|
|
|
15
15
|
* @namespace
|
|
16
16
|
* @alias sap.ui.export
|
|
17
17
|
* @author SAP SE
|
|
18
|
-
* @version 1.
|
|
18
|
+
* @version 1.133.0
|
|
19
19
|
* @public
|
|
20
20
|
*/
|
|
21
21
|
|
|
22
22
|
var thisLib = Library.init({
|
|
23
23
|
name: "sap.ui.export",
|
|
24
|
+
apiVersion: 2,
|
|
24
25
|
dependencies: [
|
|
25
26
|
"sap.ui.core"
|
|
26
27
|
],
|
|
@@ -33,7 +34,7 @@ sap.ui.define(["sap/ui/core/Lib"], function(Library) {
|
|
|
33
34
|
interfaces: [],
|
|
34
35
|
controls: [],
|
|
35
36
|
elements: [],
|
|
36
|
-
version: "1.
|
|
37
|
+
version: "1.133.0"
|
|
37
38
|
});
|
|
38
39
|
|
|
39
40
|
/**
|
|
@@ -2,210 +2,210 @@
|
|
|
2
2
|
#
|
|
3
3
|
|
|
4
4
|
#XBUT: Cancel button in the dialog
|
|
5
|
-
CANCEL_BUTTON=
|
|
5
|
+
CANCEL_BUTTON=YwUYV0m5UYXVf4mAPhuFUg_Cancel
|
|
6
6
|
|
|
7
7
|
#XBUT: Close button in the dialog
|
|
8
|
-
CLOSE_BUTTON=
|
|
8
|
+
CLOSE_BUTTON=DtDbM0qfCPy0b0HLRo/MFw_Close
|
|
9
9
|
|
|
10
10
|
#XBUT: Export button in the dialog. The meaning is: "Continue" but the first character should not be the same as by "Cancel"
|
|
11
|
-
EXPORT_BUTTON=
|
|
11
|
+
EXPORT_BUTTON=1GFovRDurTo8mdImgEZ7AA_Export
|
|
12
12
|
|
|
13
13
|
#XHED: Default title text for the export progress dialog
|
|
14
|
-
PROGRESS_TITLE
|
|
14
|
+
PROGRESS_TITLE=z6s+6RHsfjJYRXsAs7o8kA_Export Document
|
|
15
15
|
|
|
16
16
|
#XHED: Default title text for the export warning dialog
|
|
17
|
-
WARNING_TITLE=
|
|
17
|
+
WARNING_TITLE=tln/IceAO2wlEr+7JjxsHg_Warning
|
|
18
18
|
|
|
19
19
|
#XMSG: Message text informing that exported data is fetched from the server
|
|
20
|
-
PROGRESS_FETCHING_MSG=
|
|
20
|
+
PROGRESS_FETCHING_MSG=JuOTGvCTTYHetiNrsvGQlg_Fetching data from server...
|
|
21
21
|
|
|
22
22
|
#XHED: Default title text for the export progress error message box
|
|
23
|
-
PROGRESS_ERROR_TITLE
|
|
23
|
+
PROGRESS_ERROR_TITLE=/icUiVj9VkY0+7f8nCrihg_Error
|
|
24
24
|
|
|
25
25
|
#XMSG: Message text informing that the exported file is too big
|
|
26
|
-
MSG_WARNING_CELL_COUNT=
|
|
26
|
+
MSG_WARNING_CELL_COUNT=kzTfUqOedSjSJA5zwxAl8Q_The document contains {0} rows and {1} column(s) ({2} cells).
|
|
27
27
|
|
|
28
28
|
#XMSG: Part of a message text that informs about the file specific cell limit for exporting
|
|
29
|
-
MSG_WARNING_CELL_LIMIT=
|
|
29
|
+
MSG_WARNING_CELL_LIMIT=q7f8PK9Sb/HkNkZAUPufHw_Documents with more than {0} cells might be too large to process.
|
|
30
30
|
|
|
31
31
|
#XMSG: Part of a message text that informs about the number of rows which will be exported
|
|
32
|
-
MSG_WARNING_ROW_COUNT
|
|
32
|
+
MSG_WARNING_ROW_COUNT=+052siKWYWaEqhr4IKFavg_The document contains {0} rows.
|
|
33
33
|
|
|
34
34
|
#XMSG: Part of a message text that contains information about the file specific export limit - Placeholder 1 references the limit and placeholder 2 references the file type
|
|
35
|
-
MSG_WARNING_ROW_LIMIT=
|
|
35
|
+
MSG_WARNING_ROW_LIMIT=R1G/nLGpCzqFySgFRfRuLw_Only {0} rows can be exported in a single {1} file.
|
|
36
36
|
|
|
37
37
|
#XMSG: Part of a message text that will be used when the number of rows is unknown
|
|
38
|
-
MSG_WARNING_COUNT_UNKNOWN=
|
|
38
|
+
MSG_WARNING_COUNT_UNKNOWN=XkZxNQlyIeEEX8Nsje3ToA_The document contains an unknown number of rows.
|
|
39
39
|
|
|
40
40
|
#XMSG: Part of a message text that gives advice on how to proceed
|
|
41
|
-
MSG_WARNING_ADVICE=
|
|
41
|
+
MSG_WARNING_ADVICE=ZKs4zzv0hHvKlWMrUexZsg_Please do not proceed unless you are sure that the current filter settings will not result in a large amount of data, as the file might be too large to process.
|
|
42
42
|
|
|
43
43
|
#XMSG: Last sentence of a warning message to ask the user if he/she still wants to export
|
|
44
|
-
MSG_WARNING_EXPORT_ANYWAY=
|
|
44
|
+
MSG_WARNING_EXPORT_ANYWAY=vm4mpaxCoV+oQkKmInbPUw_Export anyway?
|
|
45
45
|
|
|
46
46
|
#XMSG: Textual representation of the technical error message which indicates that the export ran out of memory.
|
|
47
|
-
MSG_ERROR_OUT_OF_MEMORY=
|
|
47
|
+
MSG_ERROR_OUT_OF_MEMORY=XPxkNRxIaADaOyB9f2cM3Q_The export process ran out of memory and was terminated.\nPlease adjust your column or filter settings to select a smaller number of cells.
|
|
48
48
|
|
|
49
49
|
#XMSG: Screenreader announcement that the export process has been finished.
|
|
50
|
-
MSG_INFO_EXPORT_FINISHED=
|
|
50
|
+
MSG_INFO_EXPORT_FINISHED=4IMF3rBoasbIsxcopgi3Iw_The export is finished, and the file has been downloaded.
|
|
51
51
|
|
|
52
52
|
#XMSG: Screenreader announcement that the export is being updated.
|
|
53
|
-
MSG_INFO_EXPORT_UPDATE=
|
|
53
|
+
MSG_INFO_EXPORT_UPDATE=ZnuOpDLJu/rQy6l5Zcp+/A_Downloaded {0} of {1}.
|
|
54
54
|
#XMSG: Message text informing that the original error message is empty or no specific error provided
|
|
55
|
-
PROGRESS_ERROR_DEFAULT=
|
|
55
|
+
PROGRESS_ERROR_DEFAULT=RVY4ydN0UBpiTpP0IkhVrQ_Unknown error
|
|
56
56
|
|
|
57
57
|
#XHED: Default title text for the export settings dialog
|
|
58
|
-
EXPORT_SETTINGS_TITLE=
|
|
58
|
+
EXPORT_SETTINGS_TITLE=Rko47Bs6fM1X09a2z0mhFA_Export As
|
|
59
59
|
|
|
60
60
|
#XFLD: Label for File Name input field
|
|
61
|
-
FILE_NAME
|
|
61
|
+
FILE_NAME=/b+fU99+wpHfbQMhUblXBw_File Name
|
|
62
62
|
|
|
63
63
|
#XFLD: Label for the file format Select control
|
|
64
|
-
SELECT_FORMAT=
|
|
64
|
+
SELECT_FORMAT=yTEfOF3ZL0jWIjV4Vmkekw_Format
|
|
65
65
|
|
|
66
66
|
#XFLD: Split cells with multiple values
|
|
67
|
-
SPLIT_CELLS=
|
|
67
|
+
SPLIT_CELLS=5PhTOIDueJCDz9CZ1Nr0zg_Split cells with multiple values
|
|
68
68
|
|
|
69
69
|
#XFLD: Include filter settings
|
|
70
|
-
INCLUDE_FILTER_SETTINGS=
|
|
70
|
+
INCLUDE_FILTER_SETTINGS=YfoPcl78jlFMnkeuNPU9xg_Include filter settings
|
|
71
71
|
|
|
72
72
|
#XFLD: Techincal Information
|
|
73
|
-
TECHNICAL_INFORMATION=
|
|
73
|
+
TECHNICAL_INFORMATION=NRX0CJHvR3QX1GB6mXDneA_Technical Information
|
|
74
74
|
|
|
75
75
|
#XFLD: User Information
|
|
76
|
-
USER_NAME=
|
|
76
|
+
USER_NAME=1zhn09C9vEbVXz7GZSvRyw_User
|
|
77
77
|
|
|
78
78
|
#XFLD: Creation time
|
|
79
|
-
CREATED_TIME=
|
|
79
|
+
CREATED_TIME=jPCx70EBk7l5hu0aAAzOVg_Creation Time
|
|
80
80
|
|
|
81
81
|
#XFLD: Archive format
|
|
82
|
-
ARCHIVE_FORMAT
|
|
82
|
+
ARCHIVE_FORMAT=17fqAsilf/9gXQtuonCqXg_Archive Format
|
|
83
83
|
|
|
84
84
|
#XHED: Header of the filter sheet
|
|
85
|
-
FILTER_HEADER=
|
|
85
|
+
FILTER_HEADER=S2U3iLl/nDZulOlk+t0vsQ_Filter
|
|
86
86
|
|
|
87
87
|
#XFLD: Add current date and time to the file name
|
|
88
|
-
ADD_DATE_TIME=
|
|
88
|
+
ADD_DATE_TIME=Rc4ePkEpji1ojkaQ2CPABw_Add current date and time to the file name
|
|
89
89
|
|
|
90
90
|
#XLST: Spreadsheet file type config for Microsoft Excel specific format
|
|
91
|
-
XLSX_FILETYPE=
|
|
91
|
+
XLSX_FILETYPE=FSobfhAm5msNkQS5p8sufw_Microsoft Excel (*.xlsx)
|
|
92
92
|
|
|
93
93
|
#XLST: Spreadsheet file type for exporting to Google Sheets
|
|
94
|
-
GSHEET_FILETYPE=
|
|
94
|
+
GSHEET_FILETYPE=P2FmGcmoMSu+Wr6TMolT/Q_Google Sheets
|
|
95
95
|
|
|
96
96
|
#XMSG: File name warning text
|
|
97
|
-
FILENAME_WARNING=
|
|
97
|
+
FILENAME_WARNING=guig/qLO9r4eVSkNWPXD2A_The file name you entered exceeds 100 characters. This may prevent the spreadsheet from opening correctly.
|
|
98
98
|
|
|
99
99
|
#XFLD: Paper Size
|
|
100
|
-
PAPER_SIZE=
|
|
100
|
+
PAPER_SIZE=0EthKeJ/+U4R+LHuUmh99g_Paper Size
|
|
101
101
|
|
|
102
102
|
#XFLD: Orientation
|
|
103
|
-
ORIENTATION=
|
|
103
|
+
ORIENTATION=85aJscAYAAsasxf4041nbw_Orientation
|
|
104
104
|
|
|
105
105
|
#XFLD: Font Size
|
|
106
|
-
FONT_SIZE=
|
|
106
|
+
FONT_SIZE=CUKM8wkoD6DA/clt3z1NTQ_Font Size
|
|
107
107
|
|
|
108
108
|
#XLST: Paper size config for PDF export
|
|
109
|
-
PAPER_SIZE_A4=
|
|
109
|
+
PAPER_SIZE_A4=lMvWvwLl8e88UIbMm/JMNw_A4
|
|
110
110
|
|
|
111
111
|
#XLST: Paper size config for PDF export
|
|
112
|
-
PAPER_SIZE_US_LETTER=
|
|
112
|
+
PAPER_SIZE_US_LETTER=aNSE3L+gpZzHwd5BnAJs8w_US Letter
|
|
113
113
|
|
|
114
114
|
#XLST: Orientation config for PDF export
|
|
115
|
-
ORIENTATION_LAND=
|
|
115
|
+
ORIENTATION_LAND=bvNJw+tr2N6/y7H1vx4o3w_Landscape
|
|
116
116
|
|
|
117
117
|
#XLST: Orientation config for PDF export
|
|
118
|
-
ORIENTATION_PORT=
|
|
118
|
+
ORIENTATION_PORT=V/rmRXGzNRrXDwN4gRAtjA_Portrait
|
|
119
119
|
|
|
120
120
|
#XMSG: Font size error text
|
|
121
|
-
NUMBER_ERROR=
|
|
121
|
+
NUMBER_ERROR=8gzJ4q0AbfufcNXW3IAG2w_The value should be a number.
|
|
122
122
|
|
|
123
123
|
#XFLD: Fit to Page
|
|
124
|
-
ENABLE_ACCESSIBILITY=
|
|
124
|
+
ENABLE_ACCESSIBILITY=gUB1dQTRiatTayXY7vYBhw_Enable Accessibility
|
|
125
125
|
|
|
126
126
|
#XFLD: Enable Accessibility
|
|
127
|
-
FITTOPAGE=
|
|
127
|
+
FITTOPAGE=0yHDxk/pH0k7J0FgKXWGdA_Fit to Page
|
|
128
128
|
|
|
129
129
|
#XFLD: Enable Signature
|
|
130
|
-
ENABLE_SIGNATURE=
|
|
130
|
+
ENABLE_SIGNATURE=54+xhHt/iRHUq0jvRUocLA_Enable Signature
|
|
131
131
|
|
|
132
132
|
#XFLD: Show Pagenumber
|
|
133
|
-
SHOW_PAGENUM=
|
|
133
|
+
SHOW_PAGENUM=rdjVHI+LleYdQXmKXkXdYw_Show Page Number
|
|
134
134
|
|
|
135
135
|
#XFLD: Reason for the Signature
|
|
136
|
-
SIGNATURE_REASON=
|
|
136
|
+
SIGNATURE_REASON=RtHZR0qn2PtHkzQ614Ltfg_Reason
|
|
137
137
|
|
|
138
138
|
#XMSG: Message text informing that PDF is generated
|
|
139
|
-
PDF_GENERATION_IN_PROGRESS=
|
|
139
|
+
PDF_GENERATION_IN_PROGRESS=FGv0J0c7Zr1Aoj5S4iAT1g_PDF is being generated
|
|
140
140
|
|
|
141
141
|
#XMSG: Message text informing that there was an error in PDF generation.
|
|
142
|
-
PDF_GENERATION_ERROR=
|
|
142
|
+
PDF_GENERATION_ERROR=kRlK81Eo6M+GVC7YiVyJkw_There was an error during the PDF export.
|
|
143
143
|
|
|
144
144
|
#XMSG: Error text informing when PDF generation is failed
|
|
145
|
-
PDF_GENERIC_ERROR
|
|
145
|
+
PDF_GENERIC_ERROR=/beGGcPZAtpjK0IWwP5pWg_Error during PDF export
|
|
146
146
|
|
|
147
147
|
#XMSG: File name error text
|
|
148
|
-
FILENAME_ERROR=
|
|
148
|
+
FILENAME_ERROR=NXpftBEJrBEnp4Kc6L1mfw_You cannot use any of the following characters in a file name\: \\ / \: * ? " < > |
|
|
149
149
|
|
|
150
150
|
#XMSG: Message text informing that exported file is being created
|
|
151
|
-
PROGRESS_BUNDLE_MSG=
|
|
151
|
+
PROGRESS_BUNDLE_MSG=VB30UbuuSsYkCpxq1DXrWA_Generating file...
|
|
152
152
|
|
|
153
153
|
#XTIT: Title of the XLSX document if no title is defined in SpreadSheet settings
|
|
154
|
-
XLSX_DEFAULT_TITLE=
|
|
154
|
+
XLSX_DEFAULT_TITLE=XhRF1TeFvqbyPwk4SsDelA_SAPUI5 Export
|
|
155
155
|
|
|
156
156
|
#XTIT,30: Default label of the data sheet - use less than 31 characters!
|
|
157
|
-
XLSX_DEFAULT_SHEETNAME=
|
|
157
|
+
XLSX_DEFAULT_SHEETNAME=4yJ4RlybNddEWUu5bJqdMw_SAPUI5 Export
|
|
158
158
|
|
|
159
159
|
#XLST: Portable Document Format type config for PDF export
|
|
160
|
-
PDF_FILETYPE=
|
|
160
|
+
PDF_FILETYPE=C9b/EsHlVML4C4SaUc1DXw_Portable Document Format (*.pdf)
|
|
161
161
|
|
|
162
162
|
#XMSG: Tooltip that explains the Accessibility checkbox and why it might be disabled
|
|
163
|
-
TOOLTIP_PDF_ACCESSIBILITY=
|
|
163
|
+
TOOLTIP_PDF_ACCESSIBILITY=qZu0G+GVYKj4KTI+qOWIww_Defines whether the generated document is accessible.
|
|
164
164
|
|
|
165
165
|
#XMSG: Tooltip that explains the show pagenumber checkbox and why it might be disabled
|
|
166
|
-
TOOLTIP_PDF_PAGENUMBER=
|
|
166
|
+
TOOLTIP_PDF_PAGENUMBER=RpzpVD3gzgolZF8NAS8/aA_Defines whether the generated document contains page numbers in the footer of each page.
|
|
167
167
|
|
|
168
168
|
#XMSG: Tooltip that explains the Signature checkbox and why it might be disabled
|
|
169
|
-
TOOLTIP_PDF_SIGNATURE=
|
|
169
|
+
TOOLTIP_PDF_SIGNATURE=mFE1vnn1ipicJ0jLcanUiQ_Defines whether the generated document is signed with a digital signature.
|
|
170
170
|
|
|
171
171
|
#XMSG: Tooltip that explains the FitToPage checkbox and why it might be disabled
|
|
172
|
-
TOOLTIP_FITTOPAGE=
|
|
172
|
+
TOOLTIP_FITTOPAGE=MxNbZFge+lGQBz32GV3w3g_The generated document has content that fits the size of the page.
|
|
173
173
|
|
|
174
174
|
#XMSG: Tooltip that explains the Archive format checkbox and why it might be disabled
|
|
175
|
-
TOOLTIP_ARCHIVE_FORMAT=
|
|
175
|
+
TOOLTIP_ARCHIVE_FORMAT=RQV9UBjNgkirqtHjq/R6kg_The generated document conforms with PDF/A.
|
|
176
176
|
|
|
177
177
|
#XMSG: Tooltip that explains the filter settings checkbox and why it might be disabled
|
|
178
|
-
TOOLTIP_FILTER_SETTINGS=
|
|
178
|
+
TOOLTIP_FILTER_SETTINGS=fmEXGUkcrZB6hgpsnoWVwQ_The generated document has filter settings on the cover page.
|
|
179
179
|
|
|
180
180
|
#XMSG: Tooltip that explains the font size input and why it might be disabled
|
|
181
|
-
TOOLTIP_FONT_SIZE=
|
|
181
|
+
TOOLTIP_FONT_SIZE=J28qchQFj18GfFZp5zHaNw_Defines the font size of the generated document.
|
|
182
182
|
|
|
183
183
|
#XFLD: Label for the Destination Select control - Destination refers to the target location where the exported file should be stored and can be either Local or Remote/Cloud
|
|
184
|
-
SELECT_DESTINATION=
|
|
184
|
+
SELECT_DESTINATION=wYf/Da1cEZCzu+x0LgZA6g_Destination
|
|
185
185
|
|
|
186
186
|
#XLST: This option indicates that the exported file will be saved on the local device
|
|
187
|
-
DESTINATION_LOCAL=
|
|
187
|
+
DESTINATION_LOCAL=huOEpgC1yOKbDQOb79f14g_Local
|
|
188
188
|
|
|
189
189
|
#XLST: This option indicates that the exported file will be saved on a remote or cloud file share
|
|
190
|
-
DESTINATION_REMOTE=
|
|
190
|
+
DESTINATION_REMOTE=kEU59kompfmyB3iNVZWPAQ_Cloud
|
|
191
191
|
|
|
192
192
|
#XHED: Dialog header for the CloudFilePicker
|
|
193
|
-
DESTINATION_DIALOG_TITLE=
|
|
193
|
+
DESTINATION_DIALOG_TITLE=Negu5jW/JbSj+NoRv5yKSg_Export To
|
|
194
194
|
|
|
195
195
|
#XMSG: Status text on the progress dialog for transfering the file to the cloud destination
|
|
196
|
-
DESTINATION_DIALOG_STATUS=
|
|
196
|
+
DESTINATION_DIALOG_STATUS=zVuuBNM2Ug637WJSpQnmxg_File is being transferred - please be patient...
|
|
197
197
|
|
|
198
198
|
#XMSG: Error message when exported file could not be transferred
|
|
199
|
-
DESTINATION_TRANSFER_ERROR=
|
|
199
|
+
DESTINATION_TRANSFER_ERROR=b9DgbnLIyny/iu4WYtIdFw_File could not be transferred.
|
|
200
200
|
|
|
201
201
|
#XMSG: Succuess message when the file has been saved to the cloud destination
|
|
202
|
-
DESTINATION_TRANSFER_SUCCESS=
|
|
202
|
+
DESTINATION_TRANSFER_SUCCESS=8Quo+cOiScYDSyfuCBUQkA_Your file has been saved successfully.
|
|
203
203
|
|
|
204
204
|
#XMSG: Error message when the user did not select a proper FileShare for storing the file
|
|
205
|
-
DESTINATION_SELECTION_INCOMPLETE=
|
|
205
|
+
DESTINATION_SELECTION_INCOMPLETE=oqtFsKuTTxKUlZYAStBBCA_The selected file share is invalid.
|
|
206
206
|
|
|
207
207
|
#XBUT: Export button in the dialog when the user has selected to save the file on a cloud destination. This will open another file/folder selection. The text is followed by an ellipsis
|
|
208
|
-
DIALOG_BUTTON_CLOUD_DESTINATION=
|
|
208
|
+
DIALOG_BUTTON_CLOUD_DESTINATION=QY7oROd7giPdcSOonEX3CA_Export To...
|
|
209
209
|
|
|
210
210
|
#XMSG: Error message that is shown when the user has selected Google Sheets as format but the selected file location is on a FileShare that has a vendor different than Google
|
|
211
|
-
DESTINATION_ERROR_NOT_GOOGLE=
|
|
211
|
+
DESTINATION_ERROR_NOT_GOOGLE=fYcGa0+UJU95VKxz7VFimg_Exporting a file to Google Sheets requires a Google Workspace as a file share.\nPlease select a different file format or a different file share.
|
|
@@ -20,7 +20,7 @@ sap.ui.define(['sap/ui/base/Object'], function(BaseObject) {
|
|
|
20
20
|
* convenience functions like <code>sap.ui.export.util.Filter#setType</code> to improve the result.
|
|
21
21
|
*
|
|
22
22
|
* @author SAP SE
|
|
23
|
-
* @version 1.
|
|
23
|
+
* @version 1.133.0
|
|
24
24
|
*
|
|
25
25
|
* @since 1.110
|
|
26
26
|
* @alias sap.ui.export.util.Filter
|