@sapui5/sap.fe.core 1.93.3 → 1.96.2
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 +2 -2
- package/src/sap/fe/core/.library +1 -1
- package/src/sap/fe/core/AppComponent.js +9 -40
- package/src/sap/fe/core/BusyLocker.js +12 -0
- package/src/sap/fe/core/CommonUtils.js +430 -27
- package/src/sap/fe/core/ExtensionAPI.js +1 -1
- package/src/sap/fe/core/PageController.js +13 -2
- package/src/sap/fe/core/TemplateComponent.js +6 -0
- package/src/sap/fe/core/TransactionHelper.js +248 -170
- package/src/sap/fe/core/actions/draft.js +13 -1
- package/src/sap/fe/core/actions/operations.js +165 -45
- package/src/sap/fe/core/controllerextensions/EditFlow.js +56 -37
- package/src/sap/fe/core/controllerextensions/InternalEditFlow.js +13 -6
- package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.js +127 -24
- package/src/sap/fe/core/controllerextensions/InternalRouting.js +183 -164
- 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/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 +31 -13
- 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 +173 -6
- 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 +3 -0
- 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/converters/ConverterContext.js +19 -5
- package/src/sap/fe/core/converters/ConverterContext.ts +13 -3
- package/src/sap/fe/core/converters/ManifestSettings.js +1 -1
- package/src/sap/fe/core/converters/ManifestSettings.ts +9 -2
- package/src/sap/fe/core/converters/ManifestWrapper.js +9 -9
- package/src/sap/fe/core/converters/MetaModelConverter.js +858 -871
- package/src/sap/fe/core/converters/MetaModelConverter.ts +763 -826
- 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 +80 -46
- package/src/sap/fe/core/converters/controls/Common/Action.js +56 -54
- package/src/sap/fe/core/converters/controls/Common/Action.ts +48 -36
- 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 +21 -12
- package/src/sap/fe/core/converters/controls/Common/Form.ts +28 -8
- 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 +414 -171
- package/src/sap/fe/core/converters/controls/Common/Table.ts +412 -130
- 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 +1 -3
- package/src/sap/fe/core/converters/helpers/ID.ts +2 -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 +76 -714
- package/src/sap/fe/core/converters/templates/ListReportConverter.ts +75 -807
- 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/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 +1 -1
- 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/ModelHelper.js +27 -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 +30 -1
- package/src/sap/fe/core/messagebundle_ar.properties +43 -1
- package/src/sap/fe/core/messagebundle_bg.properties +42 -0
- package/src/sap/fe/core/messagebundle_ca.properties +44 -2
- package/src/sap/fe/core/messagebundle_cs.properties +42 -0
- package/src/sap/fe/core/messagebundle_cy.properties +42 -0
- package/src/sap/fe/core/messagebundle_da.properties +43 -1
- package/src/sap/fe/core/messagebundle_de.properties +45 -3
- package/src/sap/fe/core/messagebundle_el.properties +43 -1
- package/src/sap/fe/core/messagebundle_en.properties +42 -0
- package/src/sap/fe/core/messagebundle_en_GB.properties +43 -1
- package/src/sap/fe/core/messagebundle_en_US_sappsd.properties +43 -1
- package/src/sap/fe/core/messagebundle_en_US_saprigi.properties +48 -0
- package/src/sap/fe/core/messagebundle_en_US_saptrc.properties +42 -0
- package/src/sap/fe/core/messagebundle_es.properties +50 -8
- package/src/sap/fe/core/messagebundle_es_MX.properties +45 -3
- package/src/sap/fe/core/messagebundle_et.properties +42 -0
- package/src/sap/fe/core/messagebundle_fi.properties +42 -0
- package/src/sap/fe/core/messagebundle_fr.properties +51 -9
- package/src/sap/fe/core/messagebundle_fr_CA.properties +42 -0
- package/src/sap/fe/core/messagebundle_hi.properties +43 -1
- package/src/sap/fe/core/messagebundle_hr.properties +43 -1
- package/src/sap/fe/core/messagebundle_hu.properties +42 -0
- package/src/sap/fe/core/messagebundle_id.properties +43 -1
- package/src/sap/fe/core/messagebundle_it.properties +43 -1
- package/src/sap/fe/core/messagebundle_iw.properties +44 -2
- package/src/sap/fe/core/messagebundle_ja.properties +43 -1
- package/src/sap/fe/core/messagebundle_kk.properties +43 -1
- package/src/sap/fe/core/messagebundle_ko.properties +43 -1
- package/src/sap/fe/core/messagebundle_lt.properties +43 -1
- package/src/sap/fe/core/messagebundle_lv.properties +43 -1
- package/src/sap/fe/core/messagebundle_ms.properties +43 -1
- package/src/sap/fe/core/messagebundle_nl.properties +47 -5
- package/src/sap/fe/core/messagebundle_no.properties +44 -2
- package/src/sap/fe/core/messagebundle_pl.properties +43 -1
- package/src/sap/fe/core/messagebundle_pt.properties +43 -1
- package/src/sap/fe/core/messagebundle_pt_PT.properties +43 -1
- package/src/sap/fe/core/messagebundle_ro.properties +43 -1
- package/src/sap/fe/core/messagebundle_ru.properties +43 -1
- package/src/sap/fe/core/messagebundle_sh.properties +43 -1
- package/src/sap/fe/core/messagebundle_sk.properties +42 -0
- package/src/sap/fe/core/messagebundle_sl.properties +43 -1
- package/src/sap/fe/core/messagebundle_sv.properties +43 -1
- package/src/sap/fe/core/messagebundle_th.properties +42 -0
- package/src/sap/fe/core/messagebundle_tr.properties +42 -0
- package/src/sap/fe/core/messagebundle_uk.properties +42 -0
- package/src/sap/fe/core/messagebundle_vi.properties +43 -1
- package/src/sap/fe/core/messagebundle_zh_CN.properties +43 -1
- package/src/sap/fe/core/messagebundle_zh_TW.properties +43 -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 +155 -76
- 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 +11 -1
- 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 +13 -3
- package/src/sap/fe/core/templating/EntitySetHelper.ts +4 -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);
|
|
@@ -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
|
}
|
|
@@ -496,7 +502,20 @@ sap.ui.define(
|
|
|
496
502
|
oParameterContext =
|
|
497
503
|
oOperationBinding && oOperationBinding.getParameterContext();
|
|
498
504
|
for (var i in aActionParameters) {
|
|
499
|
-
|
|
505
|
+
if (aActionParameters[i].$isCollection) {
|
|
506
|
+
var aMVFContent = oDialog
|
|
507
|
+
.getModel("mvfview")
|
|
508
|
+
.getProperty("/" + aActionParameters[i].$Name),
|
|
509
|
+
aKeyValues = [];
|
|
510
|
+
for (var j in aMVFContent) {
|
|
511
|
+
aKeyValues.push(aMVFContent[j].Key);
|
|
512
|
+
}
|
|
513
|
+
vParameterValue = aKeyValues;
|
|
514
|
+
} else {
|
|
515
|
+
vParameterValue = oParameterContext.getProperty(
|
|
516
|
+
aActionParameters[i].$Name
|
|
517
|
+
);
|
|
518
|
+
}
|
|
500
519
|
aActionParameters[i].value = vParameterValue;
|
|
501
520
|
vParameterValue = undefined;
|
|
502
521
|
}
|
|
@@ -800,6 +819,10 @@ sap.ui.define(
|
|
|
800
819
|
path: "/",
|
|
801
820
|
model: "paramsModel"
|
|
802
821
|
});
|
|
822
|
+
// empty model to add elements dynamically depending on number of MVF fields defined on the dialog
|
|
823
|
+
var oMVFModel = new JSONModel({});
|
|
824
|
+
oDialog.setModel(oMVFModel, "mvfview");
|
|
825
|
+
|
|
803
826
|
var sActionPath = sActionName + "(...)";
|
|
804
827
|
var aContexts = mParameters.aContexts || [];
|
|
805
828
|
if (!aContexts.length) {
|
|
@@ -981,59 +1004,156 @@ sap.ui.define(
|
|
|
981
1004
|
Log.error("Error while requesting side effects", oError);
|
|
982
1005
|
});
|
|
983
1006
|
}
|
|
1007
|
+
},
|
|
1008
|
+
fnExecuteSingleAction = function(oAction, index, oSideEffect) {
|
|
1009
|
+
var oPromise = new Promise(function(resolve, reject) {
|
|
1010
|
+
var oLocalPromise,
|
|
1011
|
+
aLocalPromise = [];
|
|
1012
|
+
setActionParameterDefaultValue();
|
|
1013
|
+
// For invocation grouping "isolated" need batch group per action call
|
|
1014
|
+
sGroupId = "apiMode" + index;
|
|
1015
|
+
oActionPromise = bGetBoundContext
|
|
1016
|
+
? oAction.execute(sGroupId).then(function() {
|
|
1017
|
+
return oAction.getBoundContext();
|
|
1018
|
+
})
|
|
1019
|
+
: oAction.execute(sGroupId);
|
|
1020
|
+
|
|
1021
|
+
aActionPromises.push(oActionPromise);
|
|
1022
|
+
aLocalPromise.push(oActionPromise);
|
|
1023
|
+
var oSideEffectsService = oAppComponent.getSideEffectsService();
|
|
1024
|
+
// trigger actions from side effects
|
|
1025
|
+
if (oSideEffect && oSideEffect.triggerActions && oSideEffect.triggerActions.length) {
|
|
1026
|
+
oSideEffect.triggerActions.forEach(function(sTriggerAction) {
|
|
1027
|
+
if (sTriggerAction) {
|
|
1028
|
+
oLocalPromise = oSideEffectsService.executeAction(
|
|
1029
|
+
sTriggerAction,
|
|
1030
|
+
oSideEffect.context,
|
|
1031
|
+
sGroupId
|
|
1032
|
+
);
|
|
1033
|
+
aLocalPromise.push(oLocalPromise);
|
|
1034
|
+
}
|
|
1035
|
+
});
|
|
1036
|
+
}
|
|
1037
|
+
// request side effects for this action
|
|
1038
|
+
// as we move the messages request to POST $select we need to be prepared for an empty array
|
|
1039
|
+
if (oSideEffect && oSideEffect.pathExpressions && oSideEffect.pathExpressions.length > 0) {
|
|
1040
|
+
oLocalPromise = oSideEffectsService.requestSideEffects(
|
|
1041
|
+
oSideEffect.pathExpressions,
|
|
1042
|
+
oSideEffect.context,
|
|
1043
|
+
sGroupId
|
|
1044
|
+
);
|
|
1045
|
+
aLocalPromise.push(oLocalPromise);
|
|
1046
|
+
oLocalPromise
|
|
1047
|
+
.then(function() {
|
|
1048
|
+
if (mParameters.operationAvailableMap && mParameters.internalModelContext) {
|
|
1049
|
+
CommonUtils.setActionEnablement(
|
|
1050
|
+
mParameters.internalModelContext,
|
|
1051
|
+
JSON.parse(mParameters.operationAvailableMap),
|
|
1052
|
+
mParameters.aContexts
|
|
1053
|
+
);
|
|
1054
|
+
}
|
|
1055
|
+
})
|
|
1056
|
+
.catch(function(oError) {
|
|
1057
|
+
Log.error("Error while requesting side effects", oError);
|
|
1058
|
+
});
|
|
1059
|
+
}
|
|
1060
|
+
oModel.submitBatch(sGroupId);
|
|
1061
|
+
Promise.all(aLocalPromise)
|
|
1062
|
+
.then(function() {
|
|
1063
|
+
return resolve();
|
|
1064
|
+
})
|
|
1065
|
+
.catch(function() {
|
|
1066
|
+
return resolve();
|
|
1067
|
+
});
|
|
1068
|
+
});
|
|
1069
|
+
return oPromise;
|
|
984
1070
|
};
|
|
985
1071
|
|
|
986
|
-
|
|
987
|
-
|
|
988
|
-
|
|
989
|
-
|
|
990
|
-
|
|
991
|
-
|
|
1072
|
+
function fnExecuteSequentially(aContexts) {
|
|
1073
|
+
// One action and its side effects are completed before the next action is executed
|
|
1074
|
+
(fnOnSubmitted || function noop() {})(aActionPromises);
|
|
1075
|
+
function processOneAction(context, i) {
|
|
1076
|
+
oAction = oModel.bindContext(sActionName + "(...)", context, mBindingParameters);
|
|
1077
|
+
return fnExecuteSingleAction(oAction, i, {
|
|
1078
|
+
context: context,
|
|
1079
|
+
pathExpressions: mParameters.additionalSideEffect && mParameters.additionalSideEffect.pathExpressions,
|
|
1080
|
+
triggerActions: mParameters.additionalSideEffect && mParameters.additionalSideEffect.triggerActions
|
|
1081
|
+
});
|
|
1082
|
+
}
|
|
1083
|
+
|
|
1084
|
+
var oActionAndSideEffectPromise = Promise.resolve(undefined);
|
|
1085
|
+
var j = 0;
|
|
1086
|
+
aContexts.forEach(function(context) {
|
|
1087
|
+
var id = ++j;
|
|
1088
|
+
oActionAndSideEffectPromise = oActionAndSideEffectPromise.then(function() {
|
|
1089
|
+
return processOneAction(context, id);
|
|
1090
|
+
});
|
|
992
1091
|
});
|
|
1092
|
+
oActionAndSideEffectPromise
|
|
1093
|
+
.then(function() {
|
|
1094
|
+
fnHandleResults();
|
|
1095
|
+
})
|
|
1096
|
+
.catch();
|
|
993
1097
|
}
|
|
994
1098
|
|
|
995
|
-
|
|
996
|
-
|
|
1099
|
+
if (mParameters.bObjectPage && !bGrouped) {
|
|
1100
|
+
// For invocation grouping "isolated" called from ObjectPage, ensure that each action and matching side effects
|
|
1101
|
+
// are processed before the next set is submitted. Workaround until JSON batch is available.
|
|
1102
|
+
fnExecuteSequentially(aContexts);
|
|
1103
|
+
} else {
|
|
1104
|
+
for (i = 0; i < aContexts.length; i++) {
|
|
1105
|
+
oAction = oModel.bindContext(sActionName + "(...)", aContexts[i], mBindingParameters);
|
|
1106
|
+
fnExecuteAction(oAction, aContexts.length <= 1 ? null : i, {
|
|
1107
|
+
context: aContexts[i],
|
|
1108
|
+
pathExpressions: mParameters.additionalSideEffect && mParameters.additionalSideEffect.pathExpressions,
|
|
1109
|
+
triggerActions: mParameters.additionalSideEffect && mParameters.additionalSideEffect.triggerActions
|
|
1110
|
+
});
|
|
1111
|
+
}
|
|
1112
|
+
(fnOnSubmitted || function noop() {})(aActionPromises);
|
|
1113
|
+
fnHandleResults();
|
|
1114
|
+
}
|
|
997
1115
|
|
|
998
|
-
|
|
999
|
-
.
|
|
1000
|
-
|
|
1001
|
-
|
|
1002
|
-
|
|
1003
|
-
|
|
1004
|
-
|
|
1005
|
-
|
|
1116
|
+
function fnHandleResults() {
|
|
1117
|
+
Promise.all(aActionPromises.map(fnDifferentiate))
|
|
1118
|
+
.then(function(results) {
|
|
1119
|
+
var aRejectedItems = [],
|
|
1120
|
+
aResolvedItems = [],
|
|
1121
|
+
iResultCount;
|
|
1122
|
+
for (iResultCount = 0; iResultCount < results.length; iResultCount++) {
|
|
1123
|
+
if (results[iResultCount].status === "rejected") {
|
|
1124
|
+
aRejectedItems.push(results[iResultCount].response);
|
|
1125
|
+
}
|
|
1126
|
+
if (results[iResultCount].status === "resolved") {
|
|
1127
|
+
if (bIsCreateAction && bActionParametersExist) {
|
|
1128
|
+
//only used for NewAction
|
|
1129
|
+
results[iResultCount].bConsiderDocumentModified = true;
|
|
1130
|
+
aResolvedItems.push(results[iResultCount]);
|
|
1131
|
+
} else {
|
|
1132
|
+
aResolvedItems.push(results[iResultCount].response);
|
|
1133
|
+
}
|
|
1134
|
+
}
|
|
1135
|
+
}
|
|
1136
|
+
if (!results || (results && results.length === 0)) {
|
|
1137
|
+
reject(true);
|
|
1006
1138
|
}
|
|
1007
|
-
if (
|
|
1008
|
-
if (
|
|
1009
|
-
|
|
1010
|
-
results[iResultCount].bConsiderDocumentModified = true;
|
|
1011
|
-
aResolvedItems.push(results[iResultCount]);
|
|
1139
|
+
if (aRejectedItems.length === 0) {
|
|
1140
|
+
if (bReturnAsArray) {
|
|
1141
|
+
resolve(aResolvedItems);
|
|
1012
1142
|
} else {
|
|
1013
|
-
|
|
1143
|
+
// context is given directly without an array so also no array is expected
|
|
1144
|
+
resolve(aResolvedItems[0]);
|
|
1014
1145
|
}
|
|
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
1146
|
} else {
|
|
1024
|
-
|
|
1025
|
-
|
|
1147
|
+
reject({
|
|
1148
|
+
resolvedItems: aResolvedItems,
|
|
1149
|
+
rejectedItems: aRejectedItems
|
|
1150
|
+
});
|
|
1026
1151
|
}
|
|
1027
|
-
}
|
|
1028
|
-
|
|
1029
|
-
|
|
1030
|
-
rejectedItems: aRejectedItems
|
|
1031
|
-
});
|
|
1032
|
-
}
|
|
1033
|
-
})
|
|
1034
|
-
.catch(reject);
|
|
1152
|
+
})
|
|
1153
|
+
.catch(reject);
|
|
1154
|
+
}
|
|
1035
1155
|
}).finally(function() {
|
|
1036
|
-
(fnOnResponse ||
|
|
1156
|
+
(fnOnResponse || function noop() {})();
|
|
1037
1157
|
});
|
|
1038
1158
|
} else {
|
|
1039
1159
|
var oActionPromise;
|
|
@@ -1042,9 +1162,9 @@ sap.ui.define(
|
|
|
1042
1162
|
oActionPromise = oAction.execute("actionImport");
|
|
1043
1163
|
oModel.submitBatch("actionImport");
|
|
1044
1164
|
// trigger onSubmitted "event"
|
|
1045
|
-
(fnOnSubmitted ||
|
|
1165
|
+
(fnOnSubmitted || function noop() {})(oActionPromise);
|
|
1046
1166
|
return oActionPromise.finally(function() {
|
|
1047
|
-
(fnOnResponse ||
|
|
1167
|
+
(fnOnResponse || function noop() {})();
|
|
1048
1168
|
});
|
|
1049
1169
|
}
|
|
1050
1170
|
}
|
|
@@ -66,6 +66,7 @@ sap.ui.define(
|
|
|
66
66
|
saveDocument: { "public": true, "final": true },
|
|
67
67
|
cancelDocument: { "public": true, "final": true },
|
|
68
68
|
deleteDocument: { "public": true, "final": true },
|
|
69
|
+
deleteMultipleDocuments: { "public": true, "final": true },
|
|
69
70
|
applyDocument: { "public": true, "final": true },
|
|
70
71
|
invokeAction: { "public": true, "final": true },
|
|
71
72
|
securedExecution: { "public": true, "final": true },
|
|
@@ -125,6 +126,13 @@ sap.ui.define(
|
|
|
125
126
|
});
|
|
126
127
|
},
|
|
127
128
|
|
|
129
|
+
deleteMultipleDocuments: function(aContexts, mParameters) {
|
|
130
|
+
return this.base
|
|
131
|
+
.getView()
|
|
132
|
+
.getController()
|
|
133
|
+
._editFlow.deleteMultipleDocuments(aContexts, mParameters);
|
|
134
|
+
},
|
|
135
|
+
|
|
128
136
|
/**
|
|
129
137
|
* Updates the draft status and displays the error messages if there are errors during an update.
|
|
130
138
|
*
|
|
@@ -161,13 +169,14 @@ sap.ui.define(
|
|
|
161
169
|
sEntitySetName = oMetaModel.getMetaContext(oBindingContext.getPath()).getObject("@sapui.name"),
|
|
162
170
|
aSemanticKeys = SemanticKeyHelper.getSemanticKeys(oMetaModel, sEntitySetName);
|
|
163
171
|
if (aSemanticKeys && aSemanticKeys.length) {
|
|
164
|
-
var
|
|
172
|
+
var oCurrentSemanticMapping = that.base
|
|
165
173
|
.getAppComponent()
|
|
166
174
|
.getRoutingService()
|
|
167
175
|
.getLastSemanticMapping(),
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
176
|
+
sCurrentSemanticPath = oCurrentSemanticMapping && oCurrentSemanticMapping.semanticPath,
|
|
177
|
+
sChangedPath = SemanticKeyHelper.getSemanticPath(oBindingContext, true);
|
|
178
|
+
|
|
179
|
+
if (sCurrentSemanticPath !== sChangedPath) {
|
|
171
180
|
return that._handleNewContext(oBindingContext, true, undefined, true).then(function() {
|
|
172
181
|
that._setDraftStatus(DraftStatus.Saved);
|
|
173
182
|
});
|
|
@@ -236,8 +245,10 @@ sap.ui.define(
|
|
|
236
245
|
// Create by navigating to an external target
|
|
237
246
|
// TODO: Call appropriate function (currently using the same as for outbound chevron nav, and without any context - 3rd param)
|
|
238
247
|
return this._syncTask().then(function() {
|
|
239
|
-
var oController = that.getView().getController()
|
|
240
|
-
|
|
248
|
+
var oController = that.getView().getController(),
|
|
249
|
+
sCreatePath = CommonUtils.getAbsoluteMetaPathForListBinding(that.getView(), vListBinding);
|
|
250
|
+
|
|
251
|
+
oController.handlers.onChevronPressNavigateOutBound(oController, mParameters.outbound, undefined, sCreatePath);
|
|
241
252
|
});
|
|
242
253
|
}
|
|
243
254
|
|
|
@@ -714,7 +725,7 @@ sap.ui.define(
|
|
|
714
725
|
toggleDraftActive: function(oContext) {
|
|
715
726
|
var oContextData = oContext.getObject();
|
|
716
727
|
var that = this;
|
|
717
|
-
var bEditable
|
|
728
|
+
var bEditable;
|
|
718
729
|
var bIsDraft = oContext && this._getProgrammingModel(oContext) === ProgrammingModel.Draft;
|
|
719
730
|
var oToggleContext = oContext
|
|
720
731
|
.getModel()
|
|
@@ -735,28 +746,22 @@ sap.ui.define(
|
|
|
735
746
|
if (!oContextData.IsActiveEntity && oContextData.HasActiveEntity) {
|
|
736
747
|
//start Point: edit draft
|
|
737
748
|
bEditable = false;
|
|
738
|
-
sEditMode = EditMode.Display;
|
|
739
|
-
bUseSemanticKey = false;
|
|
740
749
|
} else if (oContextData.IsActiveEntity && oContextData.HasDraftEntity) {
|
|
741
750
|
// start point active document
|
|
742
751
|
bEditable = true;
|
|
743
|
-
sEditMode = EditMode.Editable;
|
|
744
|
-
bUseSemanticKey = true;
|
|
745
752
|
}
|
|
746
753
|
oToggleContext
|
|
747
754
|
.requestCanonicalPath()
|
|
748
755
|
.then(function(sCanonicalPath) {
|
|
749
|
-
|
|
750
|
-
|
|
751
|
-
|
|
752
|
-
|
|
753
|
-
|
|
754
|
-
|
|
755
|
-
}
|
|
756
|
-
return oToggleContext;
|
|
756
|
+
// We use the canonical path for the navigation instead of the semantic path, as the
|
|
757
|
+
// semantic key values may have changed between the draft and the active version (BCP 2170216142)
|
|
758
|
+
return oToggleContext
|
|
759
|
+
.getModel()
|
|
760
|
+
.bindContext(sCanonicalPath)
|
|
761
|
+
.getBoundContext();
|
|
757
762
|
})
|
|
758
763
|
.then(function(oToggleContext) {
|
|
759
|
-
that._setEditMode(
|
|
764
|
+
that._setEditMode(bEditable ? EditMode.Editable : EditMode.Display, false); //switch to edit mode only if a draft is available
|
|
760
765
|
that._handleNewContext(oToggleContext, bEditable, true, true);
|
|
761
766
|
})
|
|
762
767
|
.catch(function(err) {
|
|
@@ -887,9 +892,7 @@ sap.ui.define(
|
|
|
887
892
|
applyDocument: function(oContext) {
|
|
888
893
|
var that = this,
|
|
889
894
|
oLockObject = this._getGlobalUIModel();
|
|
890
|
-
|
|
891
895
|
BusyLocker.lock(oLockObject);
|
|
892
|
-
|
|
893
896
|
return (
|
|
894
897
|
this._submitOpenChanges(oContext)
|
|
895
898
|
// check if there are any validation/parse errors
|
|
@@ -900,7 +903,9 @@ sap.ui.define(
|
|
|
900
903
|
return true;
|
|
901
904
|
})
|
|
902
905
|
.finally(function() {
|
|
903
|
-
BusyLocker.
|
|
906
|
+
if (BusyLocker.isLocked(oLockObject)) {
|
|
907
|
+
BusyLocker.unlock(oLockObject);
|
|
908
|
+
}
|
|
904
909
|
})
|
|
905
910
|
);
|
|
906
911
|
},
|
|
@@ -1034,6 +1039,8 @@ sap.ui.define(
|
|
|
1034
1039
|
} else {
|
|
1035
1040
|
mParameters.bGetBoundContext = true;
|
|
1036
1041
|
}
|
|
1042
|
+
// Need to know that the action is called from ObjectPage for changeSet Isolated workaround
|
|
1043
|
+
mParameters.bObjectPage = oView.getViewData().converterType === "ObjectPage";
|
|
1037
1044
|
return this._syncTask()
|
|
1038
1045
|
.then(
|
|
1039
1046
|
transactionHelper.callAction.bind(
|
|
@@ -1178,11 +1185,14 @@ sap.ui.define(
|
|
|
1178
1185
|
*/
|
|
1179
1186
|
handlePatchSent: function(oEvent) {
|
|
1180
1187
|
var that = this;
|
|
1188
|
+
this.mPatchPromises = this.mPatchPromises ? this.mPatchPromises : {};
|
|
1189
|
+
// do this for every unique object (eg: every table) so that each associated promise is fulfilled at the end
|
|
1181
1190
|
var oPatchPromise = new Promise(function(resolve, reject) {
|
|
1182
|
-
that.
|
|
1183
|
-
|
|
1191
|
+
that.mPatchPromises[oEvent.getSource()] = {
|
|
1192
|
+
resolvePatchPromise: resolve,
|
|
1193
|
+
rejectPatchPromise: reject
|
|
1194
|
+
};
|
|
1184
1195
|
});
|
|
1185
|
-
|
|
1186
1196
|
this.updateDocument(oEvent.getSource(), oPatchPromise);
|
|
1187
1197
|
},
|
|
1188
1198
|
|
|
@@ -1194,10 +1204,11 @@ sap.ui.define(
|
|
|
1194
1204
|
handlePatchCompleted: function(oEvent) {
|
|
1195
1205
|
var bSuccess = oEvent.getParameter("success");
|
|
1196
1206
|
if (bSuccess) {
|
|
1197
|
-
this.resolvePatchPromise();
|
|
1207
|
+
this.mPatchPromises[oEvent.getSource()].resolvePatchPromise();
|
|
1198
1208
|
} else {
|
|
1199
|
-
this.rejectPatchPromise();
|
|
1209
|
+
this.mPatchPromises[oEvent.getSource()].rejectPatchPromise();
|
|
1200
1210
|
}
|
|
1211
|
+
delete this.mPatchPromises[oEvent.getSource()];
|
|
1201
1212
|
},
|
|
1202
1213
|
|
|
1203
1214
|
//////////////////////////////////////
|
|
@@ -1335,15 +1346,22 @@ sap.ui.define(
|
|
|
1335
1346
|
},
|
|
1336
1347
|
|
|
1337
1348
|
_submitOpenChanges: function(oContext) {
|
|
1338
|
-
var oModel = oContext.getModel()
|
|
1339
|
-
|
|
1349
|
+
var oModel = oContext.getModel(),
|
|
1350
|
+
oLockObject = this._getGlobalUIModel();
|
|
1340
1351
|
//Currently we are using only 1 updateGroupId, hence submitting the batch directly here
|
|
1341
|
-
return oModel
|
|
1342
|
-
|
|
1343
|
-
|
|
1344
|
-
|
|
1345
|
-
|
|
1346
|
-
|
|
1352
|
+
return oModel
|
|
1353
|
+
.submitBatch("$auto")
|
|
1354
|
+
.then(function() {
|
|
1355
|
+
if (oModel.hasPendingChanges("$auto")) {
|
|
1356
|
+
// the submit was not successful
|
|
1357
|
+
return Promise.reject("submit of open changes failed");
|
|
1358
|
+
}
|
|
1359
|
+
})
|
|
1360
|
+
.finally(function() {
|
|
1361
|
+
if (BusyLocker.isLocked(oLockObject)) {
|
|
1362
|
+
BusyLocker.unlock(oLockObject);
|
|
1363
|
+
}
|
|
1364
|
+
});
|
|
1347
1365
|
},
|
|
1348
1366
|
|
|
1349
1367
|
_handleStickyOn: function(oContext) {
|
|
@@ -1491,7 +1509,8 @@ sap.ui.define(
|
|
|
1491
1509
|
editable: bEditable,
|
|
1492
1510
|
bPersistOPScroll: true,
|
|
1493
1511
|
bRecreateContext: bRecreateContext,
|
|
1494
|
-
bDraftNavigation: bDraftNavigation
|
|
1512
|
+
bDraftNavigation: bDraftNavigation,
|
|
1513
|
+
showPlaceholder: false
|
|
1495
1514
|
});
|
|
1496
1515
|
},
|
|
1497
1516
|
|
|
@@ -67,7 +67,7 @@ sap.ui.define(
|
|
|
67
67
|
// to be overridden
|
|
68
68
|
},
|
|
69
69
|
|
|
70
|
-
createMultipleDocuments: function(oListBinding, aData, bCreateAtEnd) {
|
|
70
|
+
createMultipleDocuments: function(oListBinding, aData, bCreateAtEnd, bFromCopyPaste) {
|
|
71
71
|
var that = this,
|
|
72
72
|
transactionHelper = this.getTransactionHelper(),
|
|
73
73
|
oLockObject = this.getGlobalUIModel(),
|
|
@@ -101,12 +101,18 @@ sap.ui.define(
|
|
|
101
101
|
// Remove navigation properties as we don't support deep create
|
|
102
102
|
for (var sPropertyPath in mPropertyValues) {
|
|
103
103
|
var oProperty = oMetaModel.getObject(sMetaPath + "/" + sPropertyPath);
|
|
104
|
-
if (oProperty && oProperty.$kind !== "NavigationProperty") {
|
|
104
|
+
if (oProperty && oProperty.$kind !== "NavigationProperty" && mPropertyValues[sPropertyPath]) {
|
|
105
105
|
mParameters.data[sPropertyPath] = mPropertyValues[sPropertyPath];
|
|
106
106
|
}
|
|
107
107
|
}
|
|
108
108
|
|
|
109
|
-
return transactionHelper.createDocument(
|
|
109
|
+
return transactionHelper.createDocument(
|
|
110
|
+
oListBinding,
|
|
111
|
+
mParameters,
|
|
112
|
+
oResourceBundle,
|
|
113
|
+
that.getMessageHandler(),
|
|
114
|
+
bFromCopyPaste
|
|
115
|
+
);
|
|
110
116
|
});
|
|
111
117
|
|
|
112
118
|
return Promise.all(aCreationPromises);
|
|
@@ -338,9 +344,10 @@ sap.ui.define(
|
|
|
338
344
|
|
|
339
345
|
// TODO: this setting and removing of contexts shouldn't be in the transaction helper at all
|
|
340
346
|
// for the time being I kept it and provide the internal model context to not break something
|
|
341
|
-
mParameters.internalModelContext = mParameters.
|
|
342
|
-
?
|
|
343
|
-
.
|
|
347
|
+
mParameters.internalModelContext = mParameters.controlId
|
|
348
|
+
? sap.ui
|
|
349
|
+
.getCore()
|
|
350
|
+
.byId(mParameters.controlId)
|
|
344
351
|
.getBindingContext("internal")
|
|
345
352
|
: null;
|
|
346
353
|
|