@sapui5/sap.fe.core 1.93.3 → 1.97.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 +6 -6
- package/src/sap/fe/core/.library +1 -1
- package/src/sap/fe/core/AppComponent.js +8 -40
- package/src/sap/fe/core/BusyLocker.js +12 -0
- package/src/sap/fe/core/CommonUtils.js +224 -48
- package/src/sap/fe/core/ExtensionAPI.js +1 -1
- package/src/sap/fe/core/PageController.js +13 -2
- package/src/sap/fe/core/RouterProxy.js +52 -64
- package/src/sap/fe/core/TemplateComponent.js +8 -2
- package/src/sap/fe/core/TransactionHelper.js +210 -180
- package/src/sap/fe/core/actions/draft.js +13 -1
- package/src/sap/fe/core/actions/messageHandling.js +80 -4
- package/src/sap/fe/core/actions/operations.js +207 -68
- package/src/sap/fe/core/controllerextensions/EditFlow.js +82 -55
- package/src/sap/fe/core/controllerextensions/InternalEditFlow.js +13 -6
- package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.js +132 -23
- package/src/sap/fe/core/controllerextensions/InternalRouting.js +203 -214
- package/src/sap/fe/core/controllerextensions/KPIManagement.js +834 -170
- package/src/sap/fe/core/controllerextensions/KPIManagement.ts +890 -189
- package/src/sap/fe/core/controllerextensions/MessageHandler.js +222 -102
- package/src/sap/fe/core/controllerextensions/PageReady.js +48 -33
- package/src/sap/fe/core/controllerextensions/PageReady.ts +49 -14
- package/src/sap/fe/core/controllerextensions/Paginator.js +150 -0
- package/src/sap/fe/core/controllerextensions/Placeholder.js +133 -270
- package/src/sap/fe/core/controllerextensions/Share.js +12 -9
- package/src/sap/fe/core/controllerextensions/SideEffects.js +5 -6
- package/src/sap/fe/core/controllerextensions/SideEffects.ts +13 -12
- package/src/sap/fe/core/controllerextensions/ViewState.js +202 -8
- package/src/sap/fe/core/controls/ActionParameterDialog.fragment.xml +39 -34
- package/src/sap/fe/core/controls/ActionParameterDialogValueHelp.fragment.xml +35 -0
- package/src/sap/fe/core/controls/ActionPartial.fragment.xml +1 -1
- package/src/sap/fe/core/controls/CustomQuickViewPage.js +109 -108
- package/src/sap/fe/core/controls/MultiValueParameterDelegate.js +45 -0
- package/src/sap/fe/core/controls/filterbar/FilterContainer.js +15 -4
- package/src/sap/fe/core/controls/filterbar/VisualFilter.js +250 -94
- package/src/sap/fe/core/controls/filterbar/VisualFilterContainer.js +129 -135
- package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.js +325 -0
- package/src/sap/fe/core/controls/filterbar.d.js +8 -0
- package/src/sap/fe/core/controls/filterbar.d.ts +0 -0
- package/src/sap/fe/core/converters/ConverterContext.js +19 -5
- package/src/sap/fe/core/converters/ConverterContext.ts +13 -3
- package/src/sap/fe/core/converters/ManifestSettings.js +2 -1
- package/src/sap/fe/core/converters/ManifestSettings.ts +13 -3
- package/src/sap/fe/core/converters/ManifestWrapper.js +9 -9
- package/src/sap/fe/core/converters/MetaModelConverter.js +867 -871
- package/src/sap/fe/core/converters/MetaModelConverter.ts +772 -827
- package/src/sap/fe/core/converters/TemplateConverter.js +4 -4
- package/src/sap/fe/core/converters/annotations/DataField.js +57 -7
- package/src/sap/fe/core/converters/annotations/DataField.ts +52 -2
- package/src/sap/fe/core/converters/common/AnnotationConverter.js +146 -85
- package/src/sap/fe/core/converters/controls/Common/Action.js +61 -56
- package/src/sap/fe/core/converters/controls/Common/Action.ts +54 -39
- package/src/sap/fe/core/converters/controls/Common/Chart.js +101 -9
- package/src/sap/fe/core/converters/controls/Common/Chart.ts +100 -5
- package/src/sap/fe/core/converters/controls/Common/Criticality.js +1 -1
- package/src/sap/fe/core/converters/controls/Common/DataVisualization.js +15 -16
- package/src/sap/fe/core/converters/controls/Common/DataVisualization.ts +16 -30
- package/src/sap/fe/core/converters/controls/Common/Form.js +77 -29
- package/src/sap/fe/core/converters/controls/Common/Form.ts +79 -21
- package/src/sap/fe/core/converters/controls/Common/KPI.js +287 -109
- package/src/sap/fe/core/converters/controls/Common/KPI.ts +314 -139
- package/src/sap/fe/core/converters/controls/Common/Table.js +521 -166
- package/src/sap/fe/core/converters/controls/Common/Table.ts +519 -115
- package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js +487 -0
- package/src/sap/fe/core/converters/controls/ListReport/FilterBar.ts +541 -0
- package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.js +364 -0
- package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.ts +338 -0
- package/src/sap/fe/core/converters/controls/ObjectPage/Avatar.js +74 -0
- package/src/sap/fe/core/converters/controls/ObjectPage/Avatar.ts +50 -0
- package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.js +11 -11
- package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.js +47 -35
- package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.ts +45 -29
- package/src/sap/fe/core/converters/helpers/Aggregation.js +31 -32
- package/src/sap/fe/core/converters/helpers/Aggregation.ts +26 -27
- package/src/sap/fe/core/converters/helpers/BindingHelper.js +27 -2
- package/src/sap/fe/core/converters/helpers/BindingHelper.ts +22 -2
- package/src/sap/fe/core/converters/helpers/ConfigurableObject.js +1 -1
- package/src/sap/fe/core/converters/helpers/ID.js +9 -3
- package/src/sap/fe/core/converters/helpers/ID.ts +6 -3
- package/src/sap/fe/core/converters/helpers/IssueManager.js +5 -4
- package/src/sap/fe/core/converters/helpers/IssueManager.ts +4 -3
- package/src/sap/fe/core/converters/helpers/Key.js +3 -3
- package/src/sap/fe/core/converters/helpers/SelectionVariantHelper.js +11 -6
- package/src/sap/fe/core/converters/helpers/SelectionVariantHelper.ts +9 -5
- package/src/sap/fe/core/converters/objectPage/FormMenuActions.js +18 -5
- package/src/sap/fe/core/converters/objectPage/FormMenuActions.ts +14 -14
- package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.js +91 -20
- package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.ts +77 -5
- package/src/sap/fe/core/converters/templates/ListReportConverter.js +87 -714
- package/src/sap/fe/core/converters/templates/ListReportConverter.ts +85 -812
- package/src/sap/fe/core/converters/templates/ObjectPageConverter.js +106 -17
- package/src/sap/fe/core/converters/templates/ObjectPageConverter.ts +121 -16
- package/src/sap/fe/core/designtime/AppComponent.designtime.js +2 -1
- package/src/sap/fe/core/formatters/CriticalityFormatter.js +1 -1
- package/src/sap/fe/core/formatters/FPMFormatter.js +1 -1
- package/src/sap/fe/core/formatters/FPMFormatter.ts +8 -3
- package/src/sap/fe/core/formatters/KPIFormatter.js +1 -1
- package/src/sap/fe/core/formatters/TableFormatter.js +27 -4
- package/src/sap/fe/core/formatters/TableFormatter.ts +20 -3
- package/src/sap/fe/core/formatters/TableFormatterTypes.js +1 -1
- package/src/sap/fe/core/formatters/ValueFormatter.js +1 -1
- package/src/sap/fe/core/fpm/Component.js +1 -1
- package/src/sap/fe/core/helpers/AnnotationEnum.js +3 -3
- package/src/sap/fe/core/helpers/BindingExpression.js +6 -6
- package/src/sap/fe/core/helpers/ClassSupport.js +4 -4
- package/src/sap/fe/core/helpers/ExcelFormatHelper.js +0 -2
- package/src/sap/fe/core/helpers/KeepAliveHelper.js +211 -0
- package/src/sap/fe/core/helpers/KeepAliveHelper.ts +202 -0
- package/src/sap/fe/core/helpers/KeepAliveRefreshTypes.js +32 -0
- package/src/sap/fe/core/helpers/KeepAliveRefreshTypes.ts +36 -0
- package/src/sap/fe/core/helpers/ModelHelper.js +78 -0
- package/src/sap/fe/core/helpers/PasteHelper.js +6 -0
- package/src/sap/fe/core/helpers/SemanticKeyHelper.js +2 -2
- package/src/sap/fe/core/helpers/StableIdHelper.js +1 -1
- package/src/sap/fe/core/helpers/StableIdHelper.ts +1 -1
- package/src/sap/fe/core/jsx-runtime/jsx.js +2 -2
- package/src/sap/fe/core/jsx-runtime/jsxs.js +1 -1
- package/src/sap/fe/core/library.js +1 -1
- package/src/sap/fe/core/messagebundle.properties +45 -2
- package/src/sap/fe/core/messagebundle_ar.properties +53 -1
- package/src/sap/fe/core/messagebundle_bg.properties +52 -0
- package/src/sap/fe/core/messagebundle_ca.properties +54 -2
- package/src/sap/fe/core/messagebundle_cs.properties +52 -0
- package/src/sap/fe/core/messagebundle_cy.properties +52 -0
- package/src/sap/fe/core/messagebundle_da.properties +53 -1
- package/src/sap/fe/core/messagebundle_de.properties +55 -3
- package/src/sap/fe/core/messagebundle_el.properties +53 -1
- package/src/sap/fe/core/messagebundle_en.properties +52 -0
- package/src/sap/fe/core/messagebundle_en_GB.properties +53 -1
- package/src/sap/fe/core/messagebundle_en_US_sappsd.properties +49 -1
- package/src/sap/fe/core/messagebundle_en_US_saprigi.properties +53 -1
- package/src/sap/fe/core/messagebundle_en_US_saptrc.properties +53 -1
- package/src/sap/fe/core/messagebundle_es.properties +60 -8
- package/src/sap/fe/core/messagebundle_es_MX.properties +55 -3
- package/src/sap/fe/core/messagebundle_et.properties +52 -0
- package/src/sap/fe/core/messagebundle_fi.properties +52 -0
- package/src/sap/fe/core/messagebundle_fr.properties +61 -9
- package/src/sap/fe/core/messagebundle_fr_CA.properties +52 -0
- package/src/sap/fe/core/messagebundle_hi.properties +53 -1
- package/src/sap/fe/core/messagebundle_hr.properties +53 -1
- package/src/sap/fe/core/messagebundle_hu.properties +52 -0
- package/src/sap/fe/core/messagebundle_id.properties +54 -2
- package/src/sap/fe/core/messagebundle_it.properties +53 -1
- package/src/sap/fe/core/messagebundle_iw.properties +54 -2
- package/src/sap/fe/core/messagebundle_ja.properties +62 -10
- package/src/sap/fe/core/messagebundle_kk.properties +53 -1
- package/src/sap/fe/core/messagebundle_ko.properties +53 -1
- package/src/sap/fe/core/messagebundle_lt.properties +53 -1
- package/src/sap/fe/core/messagebundle_lv.properties +53 -1
- package/src/sap/fe/core/messagebundle_ms.properties +53 -1
- package/src/sap/fe/core/messagebundle_nl.properties +57 -5
- package/src/sap/fe/core/messagebundle_no.properties +54 -2
- package/src/sap/fe/core/messagebundle_pl.properties +53 -1
- package/src/sap/fe/core/messagebundle_pt.properties +54 -2
- package/src/sap/fe/core/messagebundle_pt_PT.properties +53 -1
- package/src/sap/fe/core/messagebundle_ro.properties +53 -1
- package/src/sap/fe/core/messagebundle_ru.properties +53 -1
- package/src/sap/fe/core/messagebundle_sh.properties +53 -1
- package/src/sap/fe/core/messagebundle_sk.properties +52 -0
- package/src/sap/fe/core/messagebundle_sl.properties +53 -1
- package/src/sap/fe/core/messagebundle_sv.properties +53 -1
- package/src/sap/fe/core/messagebundle_th.properties +52 -0
- package/src/sap/fe/core/messagebundle_tr.properties +52 -0
- package/src/sap/fe/core/messagebundle_uk.properties +52 -0
- package/src/sap/fe/core/messagebundle_vi.properties +53 -1
- package/src/sap/fe/core/messagebundle_zh_CN.properties +53 -1
- package/src/sap/fe/core/messagebundle_zh_TW.properties +53 -1
- package/src/sap/fe/core/services/AsyncComponentServiceFactory.js +5 -5
- package/src/sap/fe/core/services/EnvironmentServiceFactory.js +5 -5
- package/src/sap/fe/core/services/RoutingServiceFactory.js +154 -78
- package/src/sap/fe/core/services/ShellServicesFactory.js +9 -9
- package/src/sap/fe/core/services/SideEffectsServiceFactory.js +11 -12
- package/src/sap/fe/core/services/TemplatedViewServiceFactory.js +12 -2
- package/src/sap/fe/core/support/AnnotationIssue.support.js +2 -4
- package/src/sap/fe/core/support/CollectionFacetMissingID.support.js +2 -4
- package/src/sap/fe/core/support/CollectionFacetUnsupportedLevel.support.js +2 -4
- package/src/sap/fe/core/support/CommonHelper.js +2 -4
- package/src/sap/fe/core/support/Diagnostics.js +1 -1
- package/src/sap/fe/core/templating/CriticalityFormatters.js +4 -4
- package/src/sap/fe/core/templating/DataFieldFormatters.js +1 -1
- package/src/sap/fe/core/templating/DataModelPathHelper.js +54 -6
- package/src/sap/fe/core/templating/DataModelPathHelper.ts +54 -4
- package/src/sap/fe/core/templating/EntitySetHelper.js +86 -3
- package/src/sap/fe/core/templating/EntitySetHelper.ts +44 -0
- package/src/sap/fe/core/templating/FieldControlHelper.js +1 -1
- package/src/sap/fe/core/templating/FilterHelper.js +23 -5
- package/src/sap/fe/core/templating/FilterHelper.ts +15 -1
- package/src/sap/fe/core/templating/FilterTemplating.js +1 -1
- package/src/sap/fe/core/templating/PropertyFormatters.js +1 -1
- package/src/sap/fe/core/templating/PropertyHelper.js +8 -8
- package/src/sap/fe/core/templating/UIFormatters.js +72 -4
- package/src/sap/fe/core/templating/UIFormatters.ts +98 -3
- package/src/sap/fe/core/type/Email.js +1 -1
|
@@ -545,7 +545,19 @@ sap.ui.define(
|
|
|
545
545
|
|
|
546
546
|
if (bIsActiveEntity || (!bIsActiveEntity && !sDiscardAction)) {
|
|
547
547
|
//Use Delete in case of active entity and no discard action available for draft
|
|
548
|
-
|
|
548
|
+
if (oContext.hasPendingChanges()) {
|
|
549
|
+
oContext
|
|
550
|
+
.getBinding()
|
|
551
|
+
.resetChanges()
|
|
552
|
+
.then(function() {
|
|
553
|
+
return oContext.delete();
|
|
554
|
+
})
|
|
555
|
+
.catch(function(error) {
|
|
556
|
+
return Promise.reject(error);
|
|
557
|
+
});
|
|
558
|
+
} else {
|
|
559
|
+
return oContext.delete();
|
|
560
|
+
}
|
|
549
561
|
} else {
|
|
550
562
|
//Use Discard Post Action if it is a draft entity and discard action exists
|
|
551
563
|
return executeDraftDiscardAction(oContext);
|
|
@@ -16,9 +16,23 @@ sap.ui.define(
|
|
|
16
16
|
"sap/ui/model/FilterOperator",
|
|
17
17
|
"sap/ui/core/message/Message",
|
|
18
18
|
"sap/ui/core/IconPool",
|
|
19
|
-
"sap/ui/model/json/JSONModel"
|
|
19
|
+
"sap/ui/model/json/JSONModel",
|
|
20
|
+
"sap/ui/core/format/DateFormat"
|
|
20
21
|
],
|
|
21
|
-
function(
|
|
22
|
+
function(
|
|
23
|
+
MessageToast,
|
|
24
|
+
MessageItem,
|
|
25
|
+
MessageView,
|
|
26
|
+
Button,
|
|
27
|
+
Dialog,
|
|
28
|
+
CoreLib,
|
|
29
|
+
Filter,
|
|
30
|
+
FilterOperator,
|
|
31
|
+
Message,
|
|
32
|
+
IconPool,
|
|
33
|
+
JSONModel,
|
|
34
|
+
DateFormat
|
|
35
|
+
) {
|
|
22
36
|
"use strict";
|
|
23
37
|
var MessageType = CoreLib.MessageType;
|
|
24
38
|
var that = this;
|
|
@@ -129,12 +143,63 @@ sap.ui.define(
|
|
|
129
143
|
});
|
|
130
144
|
return bMessagesModified;
|
|
131
145
|
}
|
|
146
|
+
|
|
132
147
|
// Dialog close Handling
|
|
133
148
|
function dialogCloseHandler() {
|
|
134
149
|
that.oDialog.close();
|
|
135
150
|
that.oBackButton.setVisible(false);
|
|
136
151
|
removeUnboundTransitionMessages();
|
|
137
152
|
}
|
|
153
|
+
|
|
154
|
+
function getRetryAfterMessage(oMessage, bMessageDialog) {
|
|
155
|
+
var dNow = new Date();
|
|
156
|
+
var oTechnicalDetails = oMessage.getTechnicalDetails(),
|
|
157
|
+
oResourceBundle = sap.ui.getCore().getLibraryResourceBundle("sap.fe.core"),
|
|
158
|
+
sRetryAfterMessage;
|
|
159
|
+
if (oTechnicalDetails && oTechnicalDetails.httpStatus === 503 && oTechnicalDetails.retryAfter) {
|
|
160
|
+
var dRetryAfter = oTechnicalDetails.retryAfter;
|
|
161
|
+
var sRetryAfterMessage;
|
|
162
|
+
var oDateFormat;
|
|
163
|
+
if (dNow.getFullYear() !== dRetryAfter.getFullYear()) {
|
|
164
|
+
//different years
|
|
165
|
+
oDateFormat = DateFormat.getDateTimeInstance({
|
|
166
|
+
pattern: "MMMM dd, yyyy 'at' hh:mm a"
|
|
167
|
+
});
|
|
168
|
+
sRetryAfterMessage = oResourceBundle.getText(
|
|
169
|
+
"C_MESSAGE_HANDLING_SAPFE_503_ERROR_YEAR",
|
|
170
|
+
oDateFormat.format(dRetryAfter)
|
|
171
|
+
);
|
|
172
|
+
} else if (dNow.getFullYear() == dRetryAfter.getFullYear()) {
|
|
173
|
+
//same year
|
|
174
|
+
if (bMessageDialog) {
|
|
175
|
+
//less than 2 min
|
|
176
|
+
sRetryAfterMessage =
|
|
177
|
+
oResourceBundle.getText("C_MESSAGE_HANDLING_SAPFE_503_TITLE") +
|
|
178
|
+
" " +
|
|
179
|
+
oResourceBundle.getText("C_MESSAGE_HANDLING_SAPFE_503_DESC");
|
|
180
|
+
} else if (dNow.getMonth() !== dRetryAfter.getMonth() || dNow.getDate() !== dRetryAfter.getDate()) {
|
|
181
|
+
oDateFormat = sap.ui.core.format.DateFormat.getDateTimeInstance({
|
|
182
|
+
pattern: "MMMM dd 'at' hh:mm a"
|
|
183
|
+
}); //different months or different days of same month
|
|
184
|
+
sRetryAfterMessage = oResourceBundle.getText("C_MESSAGE_HANDLING_SAPFE_503_ERROR", oDateFormat.format(dRetryAfter));
|
|
185
|
+
} else {
|
|
186
|
+
//same day
|
|
187
|
+
oDateFormat = sap.ui.core.format.DateFormat.getDateTimeInstance({
|
|
188
|
+
pattern: "hh:mm a"
|
|
189
|
+
});
|
|
190
|
+
sRetryAfterMessage = oResourceBundle.getText(
|
|
191
|
+
"C_MESSAGE_HANDLING_SAPFE_503_ERROR_DAY",
|
|
192
|
+
oDateFormat.format(dRetryAfter)
|
|
193
|
+
);
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
if (oTechnicalDetails && oTechnicalDetails.httpStatus === 503 && !oTechnicalDetails.retryAfter) {
|
|
199
|
+
sRetryAfterMessage = oResourceBundle.getText("C_MESSAGE_HANDLING_SAPFE_503_ERROR_NO_RETRY_AFTER");
|
|
200
|
+
}
|
|
201
|
+
return sRetryAfterMessage;
|
|
202
|
+
}
|
|
138
203
|
/**
|
|
139
204
|
* Shows all unbound (including technical) messages and removes the ones which are transient.
|
|
140
205
|
*
|
|
@@ -227,7 +292,12 @@ sap.ui.define(
|
|
|
227
292
|
// So we create new json model to use for the message dialog view.
|
|
228
293
|
var aMessages = [];
|
|
229
294
|
aCurrentContexts.forEach(function(oContext) {
|
|
230
|
-
|
|
295
|
+
var oMessage = oContext.getObject(),
|
|
296
|
+
sRetryAfterMessage = getRetryAfterMessage(oMessage, true);
|
|
297
|
+
if (sRetryAfterMessage) {
|
|
298
|
+
oMessage.setMessage(sRetryAfterMessage + " " + oMessage.getMessage());
|
|
299
|
+
}
|
|
300
|
+
aMessages.push(oMessage);
|
|
231
301
|
});
|
|
232
302
|
oMessageDialogModel.setData(aMessages);
|
|
233
303
|
}
|
|
@@ -403,6 +473,11 @@ sap.ui.define(
|
|
|
403
473
|
}
|
|
404
474
|
}
|
|
405
475
|
|
|
476
|
+
for (var i = 0; i < aTransitionMessages.length; i++) {
|
|
477
|
+
if (aTransitionMessages[i].code === "503") {
|
|
478
|
+
aTransitionMessages[i].message = "\n" + aTransitionMessages[i].message;
|
|
479
|
+
}
|
|
480
|
+
}
|
|
406
481
|
return aTransitionMessages;
|
|
407
482
|
}
|
|
408
483
|
|
|
@@ -431,7 +506,8 @@ sap.ui.define(
|
|
|
431
506
|
showUnboundMessages: showUnboundMessages,
|
|
432
507
|
removeUnboundTransitionMessages: removeUnboundTransitionMessages,
|
|
433
508
|
removeBoundTransitionMessages: removeBoundTransitionMessages,
|
|
434
|
-
modifyETagMessagesOnly: fnModifyETagMessagesOnly
|
|
509
|
+
modifyETagMessagesOnly: fnModifyETagMessagesOnly,
|
|
510
|
+
getRetryAfterMessage: getRetryAfterMessage
|
|
435
511
|
};
|
|
436
512
|
return messageHandling;
|
|
437
513
|
}
|
|
@@ -152,6 +152,9 @@ sap.ui.define(
|
|
|
152
152
|
* @private
|
|
153
153
|
*/
|
|
154
154
|
function callFunctionImport(sFunctionName, oModel) {
|
|
155
|
+
if (!sFunctionName) {
|
|
156
|
+
return Promise.resolve();
|
|
157
|
+
}
|
|
155
158
|
var oMetaModel = oModel.getMetaModel(),
|
|
156
159
|
sFunctionPath = oModel.bindContext("/" + sFunctionName).getPath(),
|
|
157
160
|
oFunctionImport = oMetaModel.createBindingContext(
|
|
@@ -258,6 +261,7 @@ sap.ui.define(
|
|
|
258
261
|
mActionExecutionParameters.bReturnAsArray = mParameters.bReturnAsArray;
|
|
259
262
|
mActionExecutionParameters.internalModelContext = mParameters.internalModelContext;
|
|
260
263
|
mActionExecutionParameters.operationAvailableMap = mParameters.operationAvailableMap;
|
|
264
|
+
mActionExecutionParameters.bObjectPage = mParameters.bObjectPage;
|
|
261
265
|
}
|
|
262
266
|
if (bIsCreateAction) {
|
|
263
267
|
mActionExecutionParameters.bIsCreateAction = bIsCreateAction;
|
|
@@ -371,7 +375,9 @@ sap.ui.define(
|
|
|
371
375
|
return oField.getRequired() && oField.getValueState() !== "Error";
|
|
372
376
|
})
|
|
373
377
|
.map(function(oFormElement) {
|
|
374
|
-
var value = oFormElement.getFields()[0].
|
|
378
|
+
var value = oFormElement.getFields()[0].isA("sap.ui.mdc.MultiValueField")
|
|
379
|
+
? oFormElement.getFields()[0].getItems()
|
|
380
|
+
: oFormElement.getFields()[0].getValue();
|
|
375
381
|
if (value === undefined || value === null || value === "") {
|
|
376
382
|
return oFormElement.getLabel().getText();
|
|
377
383
|
}
|
|
@@ -383,6 +389,38 @@ sap.ui.define(
|
|
|
383
389
|
return aResults;
|
|
384
390
|
});
|
|
385
391
|
},
|
|
392
|
+
_validateMessages = function(aActionParameters, aFieldInvalid, bClearTarget) {
|
|
393
|
+
var oMessageManager = sap.ui.getCore().getMessageManager();
|
|
394
|
+
var aMessages = oMessageManager.getMessageModel().getData();
|
|
395
|
+
|
|
396
|
+
aFieldInvalid = [];
|
|
397
|
+
|
|
398
|
+
aActionParameters.forEach(function(oActionParameters) {
|
|
399
|
+
var sParameter = oActionParameters.$Name;
|
|
400
|
+
aMessages.forEach(function(oMessage) {
|
|
401
|
+
var sParam = sParameter.replace("-inner", "");
|
|
402
|
+
if (
|
|
403
|
+
oMessage.controlIds.length > 0 &&
|
|
404
|
+
(oMessage.getControlId().includes("APD_::" + sParameter) ||
|
|
405
|
+
(oMessage.getControlId().includes("APD_::" + sParameter + "inner") &&
|
|
406
|
+
aFieldInvalid.indexOf("APD_::" + sParam) < 0))
|
|
407
|
+
) {
|
|
408
|
+
if (bClearTarget) {
|
|
409
|
+
oMessageManager.removeMessages(oMessage);
|
|
410
|
+
} else {
|
|
411
|
+
aFieldInvalid.push("APD_::" + sParam);
|
|
412
|
+
}
|
|
413
|
+
}
|
|
414
|
+
// Handle messages related to input with invalid token
|
|
415
|
+
if (oMessage.target.includes("APD_::" + sParameter)) {
|
|
416
|
+
aFieldInvalid.push("APD_::" + sParam);
|
|
417
|
+
oMessage.target = bClearTarget ? "" : oMessage.target;
|
|
418
|
+
oMessageManager.removeMessages(oMessage);
|
|
419
|
+
}
|
|
420
|
+
});
|
|
421
|
+
});
|
|
422
|
+
return aFieldInvalid;
|
|
423
|
+
},
|
|
386
424
|
oController = {
|
|
387
425
|
handleChange: function(oEvent) {
|
|
388
426
|
messageHandler.removeTransitionMessages();
|
|
@@ -394,6 +432,7 @@ sap.ui.define(
|
|
|
394
432
|
return oField.getValue();
|
|
395
433
|
});
|
|
396
434
|
}
|
|
435
|
+
_validateMessages(aActionParameters, aFieldInvalid);
|
|
397
436
|
}
|
|
398
437
|
};
|
|
399
438
|
|
|
@@ -457,29 +496,11 @@ sap.ui.define(
|
|
|
457
496
|
});
|
|
458
497
|
return;
|
|
459
498
|
}
|
|
460
|
-
var aMessages = sap.ui
|
|
461
|
-
.getCore()
|
|
462
|
-
.getMessageManager()
|
|
463
|
-
.getMessageModel()
|
|
464
|
-
.getData();
|
|
465
499
|
|
|
466
|
-
aFieldInvalid =
|
|
467
|
-
|
|
468
|
-
var sParameter = oActionParameters.$Name;
|
|
469
|
-
aMessages.forEach(function(oMessage) {
|
|
470
|
-
var sParam = sParameter.replace("-inner", "");
|
|
471
|
-
if (
|
|
472
|
-
oMessage.controlIds.length > 0 &&
|
|
473
|
-
(oMessage.getControlId().includes("APD_::" + sParameter) ||
|
|
474
|
-
(oMessage.getControlId().includes("APD_::" + sParameter + "inner") &&
|
|
475
|
-
aFieldInvalid.indexOf("APD_::" + sParam) < 0))
|
|
476
|
-
) {
|
|
477
|
-
aFieldInvalid.push("APD_::" + sParam);
|
|
478
|
-
}
|
|
479
|
-
});
|
|
480
|
-
});
|
|
500
|
+
aFieldInvalid = _validateMessages(aActionParameters, aFieldInvalid);
|
|
501
|
+
|
|
481
502
|
if (aFieldInvalid.length > 0) {
|
|
482
|
-
return;
|
|
503
|
+
return messageHandling.showUnboundMessages();
|
|
483
504
|
}
|
|
484
505
|
BusyLocker.lock(oDialog);
|
|
485
506
|
return Promise.all(
|
|
@@ -496,7 +517,20 @@ sap.ui.define(
|
|
|
496
517
|
oParameterContext =
|
|
497
518
|
oOperationBinding && oOperationBinding.getParameterContext();
|
|
498
519
|
for (var i in aActionParameters) {
|
|
499
|
-
|
|
520
|
+
if (aActionParameters[i].$isCollection) {
|
|
521
|
+
var aMVFContent = oDialog
|
|
522
|
+
.getModel("mvfview")
|
|
523
|
+
.getProperty("/" + aActionParameters[i].$Name),
|
|
524
|
+
aKeyValues = [];
|
|
525
|
+
for (var j in aMVFContent) {
|
|
526
|
+
aKeyValues.push(aMVFContent[j].Key);
|
|
527
|
+
}
|
|
528
|
+
vParameterValue = aKeyValues;
|
|
529
|
+
} else {
|
|
530
|
+
vParameterValue = oParameterContext.getProperty(
|
|
531
|
+
aActionParameters[i].$Name
|
|
532
|
+
);
|
|
533
|
+
}
|
|
500
534
|
aActionParameters[i].value = vParameterValue;
|
|
501
535
|
vParameterValue = undefined;
|
|
502
536
|
}
|
|
@@ -516,10 +550,13 @@ sap.ui.define(
|
|
|
516
550
|
oResourceBundle
|
|
517
551
|
);
|
|
518
552
|
|
|
519
|
-
messageHandler.
|
|
553
|
+
messageHandler.showMessages({
|
|
520
554
|
bHasEtagMessage: bHasEtagMessage,
|
|
521
555
|
context: mParameters.aContexts[0],
|
|
522
|
-
isActionParameterDialogOpen: true
|
|
556
|
+
isActionParameterDialogOpen: true,
|
|
557
|
+
messagePageNavigationCallback: function() {
|
|
558
|
+
oDialog.close();
|
|
559
|
+
}
|
|
523
560
|
});
|
|
524
561
|
if (oDialog && bHasEtagMessage) {
|
|
525
562
|
oDialog.close(); //close the action parameter dialog after refresh of the context after etag mismatch
|
|
@@ -537,6 +574,7 @@ sap.ui.define(
|
|
|
537
574
|
endButton: {
|
|
538
575
|
text: CommonUtils.getTranslatedText("C_COMMON_ACTION_PARAMETER_DIALOG_CANCEL", oResourceBundle),
|
|
539
576
|
press: function() {
|
|
577
|
+
_validateMessages(aActionParameters, aFieldInvalid, true);
|
|
540
578
|
oDialog.close();
|
|
541
579
|
messageHandler.removeTransitionMessages();
|
|
542
580
|
reject(Constants.CancelActionDialog);
|
|
@@ -800,6 +838,10 @@ sap.ui.define(
|
|
|
800
838
|
path: "/",
|
|
801
839
|
model: "paramsModel"
|
|
802
840
|
});
|
|
841
|
+
// empty model to add elements dynamically depending on number of MVF fields defined on the dialog
|
|
842
|
+
var oMVFModel = new JSONModel({});
|
|
843
|
+
oDialog.setModel(oMVFModel, "mvfview");
|
|
844
|
+
|
|
803
845
|
var sActionPath = sActionName + "(...)";
|
|
804
846
|
var aContexts = mParameters.aContexts || [];
|
|
805
847
|
if (!aContexts.length) {
|
|
@@ -981,59 +1023,156 @@ sap.ui.define(
|
|
|
981
1023
|
Log.error("Error while requesting side effects", oError);
|
|
982
1024
|
});
|
|
983
1025
|
}
|
|
1026
|
+
},
|
|
1027
|
+
fnExecuteSingleAction = function(oAction, index, oSideEffect) {
|
|
1028
|
+
var oPromise = new Promise(function(resolve, reject) {
|
|
1029
|
+
var oLocalPromise,
|
|
1030
|
+
aLocalPromise = [];
|
|
1031
|
+
setActionParameterDefaultValue();
|
|
1032
|
+
// For invocation grouping "isolated" need batch group per action call
|
|
1033
|
+
sGroupId = "apiMode" + index;
|
|
1034
|
+
oActionPromise = bGetBoundContext
|
|
1035
|
+
? oAction.execute(sGroupId).then(function() {
|
|
1036
|
+
return oAction.getBoundContext();
|
|
1037
|
+
})
|
|
1038
|
+
: oAction.execute(sGroupId);
|
|
1039
|
+
|
|
1040
|
+
aActionPromises.push(oActionPromise);
|
|
1041
|
+
aLocalPromise.push(oActionPromise);
|
|
1042
|
+
var oSideEffectsService = oAppComponent.getSideEffectsService();
|
|
1043
|
+
// trigger actions from side effects
|
|
1044
|
+
if (oSideEffect && oSideEffect.triggerActions && oSideEffect.triggerActions.length) {
|
|
1045
|
+
oSideEffect.triggerActions.forEach(function(sTriggerAction) {
|
|
1046
|
+
if (sTriggerAction) {
|
|
1047
|
+
oLocalPromise = oSideEffectsService.executeAction(
|
|
1048
|
+
sTriggerAction,
|
|
1049
|
+
oSideEffect.context,
|
|
1050
|
+
sGroupId
|
|
1051
|
+
);
|
|
1052
|
+
aLocalPromise.push(oLocalPromise);
|
|
1053
|
+
}
|
|
1054
|
+
});
|
|
1055
|
+
}
|
|
1056
|
+
// request side effects for this action
|
|
1057
|
+
// as we move the messages request to POST $select we need to be prepared for an empty array
|
|
1058
|
+
if (oSideEffect && oSideEffect.pathExpressions && oSideEffect.pathExpressions.length > 0) {
|
|
1059
|
+
oLocalPromise = oSideEffectsService.requestSideEffects(
|
|
1060
|
+
oSideEffect.pathExpressions,
|
|
1061
|
+
oSideEffect.context,
|
|
1062
|
+
sGroupId
|
|
1063
|
+
);
|
|
1064
|
+
aLocalPromise.push(oLocalPromise);
|
|
1065
|
+
oLocalPromise
|
|
1066
|
+
.then(function() {
|
|
1067
|
+
if (mParameters.operationAvailableMap && mParameters.internalModelContext) {
|
|
1068
|
+
CommonUtils.setActionEnablement(
|
|
1069
|
+
mParameters.internalModelContext,
|
|
1070
|
+
JSON.parse(mParameters.operationAvailableMap),
|
|
1071
|
+
mParameters.aContexts
|
|
1072
|
+
);
|
|
1073
|
+
}
|
|
1074
|
+
})
|
|
1075
|
+
.catch(function(oError) {
|
|
1076
|
+
Log.error("Error while requesting side effects", oError);
|
|
1077
|
+
});
|
|
1078
|
+
}
|
|
1079
|
+
oModel.submitBatch(sGroupId);
|
|
1080
|
+
Promise.all(aLocalPromise)
|
|
1081
|
+
.then(function() {
|
|
1082
|
+
return resolve();
|
|
1083
|
+
})
|
|
1084
|
+
.catch(function() {
|
|
1085
|
+
return resolve();
|
|
1086
|
+
});
|
|
1087
|
+
});
|
|
1088
|
+
return oPromise;
|
|
984
1089
|
};
|
|
985
1090
|
|
|
986
|
-
|
|
987
|
-
|
|
988
|
-
|
|
989
|
-
|
|
990
|
-
|
|
991
|
-
|
|
1091
|
+
function fnExecuteSequentially(aContexts) {
|
|
1092
|
+
// One action and its side effects are completed before the next action is executed
|
|
1093
|
+
(fnOnSubmitted || function noop() {})(aActionPromises);
|
|
1094
|
+
function processOneAction(context, i) {
|
|
1095
|
+
oAction = oModel.bindContext(sActionName + "(...)", context, mBindingParameters);
|
|
1096
|
+
return fnExecuteSingleAction(oAction, i, {
|
|
1097
|
+
context: context,
|
|
1098
|
+
pathExpressions: mParameters.additionalSideEffect && mParameters.additionalSideEffect.pathExpressions,
|
|
1099
|
+
triggerActions: mParameters.additionalSideEffect && mParameters.additionalSideEffect.triggerActions
|
|
1100
|
+
});
|
|
1101
|
+
}
|
|
1102
|
+
|
|
1103
|
+
var oActionAndSideEffectPromise = Promise.resolve(undefined);
|
|
1104
|
+
var j = 0;
|
|
1105
|
+
aContexts.forEach(function(context) {
|
|
1106
|
+
var id = ++j;
|
|
1107
|
+
oActionAndSideEffectPromise = oActionAndSideEffectPromise.then(function() {
|
|
1108
|
+
return processOneAction(context, id);
|
|
1109
|
+
});
|
|
992
1110
|
});
|
|
1111
|
+
oActionAndSideEffectPromise
|
|
1112
|
+
.then(function() {
|
|
1113
|
+
fnHandleResults();
|
|
1114
|
+
})
|
|
1115
|
+
.catch();
|
|
993
1116
|
}
|
|
994
1117
|
|
|
995
|
-
|
|
996
|
-
|
|
1118
|
+
if (mParameters.bObjectPage && !bGrouped) {
|
|
1119
|
+
// For invocation grouping "isolated" called from ObjectPage, ensure that each action and matching side effects
|
|
1120
|
+
// are processed before the next set is submitted. Workaround until JSON batch is available.
|
|
1121
|
+
fnExecuteSequentially(aContexts);
|
|
1122
|
+
} else {
|
|
1123
|
+
for (i = 0; i < aContexts.length; i++) {
|
|
1124
|
+
oAction = oModel.bindContext(sActionName + "(...)", aContexts[i], mBindingParameters);
|
|
1125
|
+
fnExecuteAction(oAction, aContexts.length <= 1 ? null : i, {
|
|
1126
|
+
context: aContexts[i],
|
|
1127
|
+
pathExpressions: mParameters.additionalSideEffect && mParameters.additionalSideEffect.pathExpressions,
|
|
1128
|
+
triggerActions: mParameters.additionalSideEffect && mParameters.additionalSideEffect.triggerActions
|
|
1129
|
+
});
|
|
1130
|
+
}
|
|
1131
|
+
(fnOnSubmitted || function noop() {})(aActionPromises);
|
|
1132
|
+
fnHandleResults();
|
|
1133
|
+
}
|
|
997
1134
|
|
|
998
|
-
|
|
999
|
-
.
|
|
1000
|
-
|
|
1001
|
-
|
|
1002
|
-
|
|
1003
|
-
|
|
1004
|
-
|
|
1005
|
-
|
|
1135
|
+
function fnHandleResults() {
|
|
1136
|
+
Promise.all(aActionPromises.map(fnDifferentiate))
|
|
1137
|
+
.then(function(results) {
|
|
1138
|
+
var aRejectedItems = [],
|
|
1139
|
+
aResolvedItems = [],
|
|
1140
|
+
iResultCount;
|
|
1141
|
+
for (iResultCount = 0; iResultCount < results.length; iResultCount++) {
|
|
1142
|
+
if (results[iResultCount].status === "rejected") {
|
|
1143
|
+
aRejectedItems.push(results[iResultCount].response);
|
|
1144
|
+
}
|
|
1145
|
+
if (results[iResultCount].status === "resolved") {
|
|
1146
|
+
if (bIsCreateAction && bActionParametersExist) {
|
|
1147
|
+
//only used for NewAction
|
|
1148
|
+
results[iResultCount].bConsiderDocumentModified = true;
|
|
1149
|
+
aResolvedItems.push(results[iResultCount]);
|
|
1150
|
+
} else {
|
|
1151
|
+
aResolvedItems.push(results[iResultCount].response);
|
|
1152
|
+
}
|
|
1153
|
+
}
|
|
1154
|
+
}
|
|
1155
|
+
if (!results || (results && results.length === 0)) {
|
|
1156
|
+
reject(true);
|
|
1006
1157
|
}
|
|
1007
|
-
if (
|
|
1008
|
-
if (
|
|
1009
|
-
|
|
1010
|
-
results[iResultCount].bConsiderDocumentModified = true;
|
|
1011
|
-
aResolvedItems.push(results[iResultCount]);
|
|
1158
|
+
if (aRejectedItems.length === 0) {
|
|
1159
|
+
if (bReturnAsArray) {
|
|
1160
|
+
resolve(aResolvedItems);
|
|
1012
1161
|
} else {
|
|
1013
|
-
|
|
1162
|
+
// context is given directly without an array so also no array is expected
|
|
1163
|
+
resolve(aResolvedItems[0]);
|
|
1014
1164
|
}
|
|
1015
|
-
}
|
|
1016
|
-
}
|
|
1017
|
-
if (!results || (results && results.length === 0)) {
|
|
1018
|
-
reject(true);
|
|
1019
|
-
}
|
|
1020
|
-
if (aRejectedItems.length === 0) {
|
|
1021
|
-
if (bReturnAsArray) {
|
|
1022
|
-
resolve(aResolvedItems);
|
|
1023
1165
|
} else {
|
|
1024
|
-
|
|
1025
|
-
|
|
1166
|
+
reject({
|
|
1167
|
+
resolvedItems: aResolvedItems,
|
|
1168
|
+
rejectedItems: aRejectedItems
|
|
1169
|
+
});
|
|
1026
1170
|
}
|
|
1027
|
-
}
|
|
1028
|
-
|
|
1029
|
-
|
|
1030
|
-
rejectedItems: aRejectedItems
|
|
1031
|
-
});
|
|
1032
|
-
}
|
|
1033
|
-
})
|
|
1034
|
-
.catch(reject);
|
|
1171
|
+
})
|
|
1172
|
+
.catch(reject);
|
|
1173
|
+
}
|
|
1035
1174
|
}).finally(function() {
|
|
1036
|
-
(fnOnResponse ||
|
|
1175
|
+
(fnOnResponse || function noop() {})();
|
|
1037
1176
|
});
|
|
1038
1177
|
} else {
|
|
1039
1178
|
var oActionPromise;
|
|
@@ -1042,9 +1181,9 @@ sap.ui.define(
|
|
|
1042
1181
|
oActionPromise = oAction.execute("actionImport");
|
|
1043
1182
|
oModel.submitBatch("actionImport");
|
|
1044
1183
|
// trigger onSubmitted "event"
|
|
1045
|
-
(fnOnSubmitted ||
|
|
1184
|
+
(fnOnSubmitted || function noop() {})(oActionPromise);
|
|
1046
1185
|
return oActionPromise.finally(function() {
|
|
1047
|
-
(fnOnResponse ||
|
|
1186
|
+
(fnOnResponse || function noop() {})();
|
|
1048
1187
|
});
|
|
1049
1188
|
}
|
|
1050
1189
|
}
|