@sapui5/sap.suite.ui.generic.template 1.120.33 → 1.120.35
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 +4 -3
- package/src/sap/suite/ui/generic/template/.library +1 -1
- package/src/sap/suite/ui/generic/template/AnalyticalListPage/controller/ControllerImplementation.js +2 -2
- package/src/sap/suite/ui/generic/template/AnalyticalListPage/manifest.json +1 -1
- package/src/sap/suite/ui/generic/template/Canvas/manifest.json +1 -1
- package/src/sap/suite/ui/generic/template/ListReport/controller/ControllerImplementation.js +2 -2
- package/src/sap/suite/ui/generic/template/ListReport/controller/IappStateHandler.js +34 -33
- package/src/sap/suite/ui/generic/template/ListReport/i18n/i18n_pt.properties +1 -1
- package/src/sap/suite/ui/generic/template/ListReport/manifest.json +1 -1
- package/src/sap/suite/ui/generic/template/ObjectPage/controller/RelatedAppsHandler.js +16 -8
- package/src/sap/suite/ui/generic/template/ObjectPage/controller/SectionTitleHandler.js +1 -1
- package/src/sap/suite/ui/generic/template/ObjectPage/i18n/i18n_pt.properties +1 -1
- package/src/sap/suite/ui/generic/template/ObjectPage/i18n/i18n_vi.properties +2 -2
- package/src/sap/suite/ui/generic/template/ObjectPage/manifest.json +1 -1
- package/src/sap/suite/ui/generic/template/ObjectPage/templateSpecificPreparationHelper.js +108 -1
- package/src/sap/suite/ui/generic/template/ObjectPage/view/fragments/Facet.fragment.xml +15 -11
- package/src/sap/suite/ui/generic/template/ObjectPage/view/fragments/SmartForm.fragment.xml +1 -1
- package/src/sap/suite/ui/generic/template/ObjectPage/view/fragments/SmartTable.fragment.xml +7 -11
- package/src/sap/suite/ui/generic/template/QuickCreate/manifest.json +1 -1
- package/src/sap/suite/ui/generic/template/QuickView/manifest.json +1 -1
- package/src/sap/suite/ui/generic/template/js/AnnotationHelper.js +79 -1
- package/src/sap/suite/ui/generic/template/lib/AppComponent.js +1 -1
- package/src/sap/suite/ui/generic/template/lib/i18n/i18n_da.properties +1 -1
- package/src/sap/suite/ui/generic/template/lib/i18n/i18n_pt.properties +1 -1
- package/src/sap/suite/ui/generic/template/lib/navigation/NavigationController.js +1 -1
- package/src/sap/suite/ui/generic/template/library.js +1 -1
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@sapui5/sap.suite.ui.generic.template",
|
|
3
|
-
"version": "1.120.
|
|
3
|
+
"version": "1.120.35",
|
|
4
4
|
"description": "SAPUI5 Library sap.suite.ui.generic.template",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"sapui5",
|
|
@@ -16,6 +16,7 @@
|
|
|
16
16
|
"testsuite-qunit" : "ui5 serve --config ./ui5-local.yaml --open \"/test-resources/sap/suite/ui/generic/template/qunit/testsuite.qunit.html\""
|
|
17
17
|
},
|
|
18
18
|
"devDependencies": {
|
|
19
|
-
"sonarqube-scanner": "3.5.0"
|
|
19
|
+
"sonarqube-scanner": "3.5.0",
|
|
20
|
+
"@sap/ux-ui5-tooling": "latest"
|
|
20
21
|
}
|
|
21
|
-
}
|
|
22
|
+
}
|
package/src/sap/suite/ui/generic/template/AnalyticalListPage/controller/ControllerImplementation.js
CHANGED
|
@@ -258,12 +258,12 @@ sap.ui.define(["sap/fe/navigation/SelectionVariant",
|
|
|
258
258
|
var sEntityTypeName = oMetaModel.getODataEntitySet(oPresentationControlHandler.getEntitySet()).entityType;
|
|
259
259
|
var oTable = oState.oSmartTable.getTable();
|
|
260
260
|
var oBinding = oTable.getBinding("rows") || oTable.getBinding("items");
|
|
261
|
-
var sServiceUrl = oBinding
|
|
261
|
+
var sServiceUrl = oBinding ? oBinding.getDownloadUrl() : "";
|
|
262
262
|
// - For Analytical Binding.
|
|
263
263
|
// we recv. aApplicationFilter and aApplicationFilters binding both but aApplicationFilter have actual filters operator value.
|
|
264
264
|
// - For List Binding.
|
|
265
265
|
// we recv. only aApplicationFilters contains filter operator.
|
|
266
|
-
var aFilters = oBinding.aApplicationFilter || oBinding.aApplicationFilters;
|
|
266
|
+
var aFilters = oBinding ? (oBinding.aApplicationFilter || oBinding.aApplicationFilters) : [];
|
|
267
267
|
// non-draft case when no filter is applied
|
|
268
268
|
if (!aFilters.length) {
|
|
269
269
|
return Promise.resolve({
|
|
@@ -306,12 +306,12 @@ sap.ui.define([
|
|
|
306
306
|
var oMetaModel = oPresentationControlHandler.getModel().getMetaModel();
|
|
307
307
|
var sEntityTypeName = oMetaModel.getODataEntitySet(oPresentationControlHandler.getEntitySet()).entityType;
|
|
308
308
|
var oBinding = oPresentationControlHandler.getBinding(oState);
|
|
309
|
-
var sServiceUrl = oBinding.getDownloadUrl();
|
|
309
|
+
var sServiceUrl = oBinding ? oBinding.getDownloadUrl() : "";
|
|
310
310
|
// - For Analytical Binding.
|
|
311
311
|
// we recv. aApplicationFilter and aApplicationFilters binding both but aApplicationFilter have actual filters operator value.
|
|
312
312
|
// - For List Binding.
|
|
313
313
|
// we recv. only aApplicationFilters contains filter operator.
|
|
314
|
-
var aFilters = oBinding.aApplicationFilter || oBinding.aApplicationFilters;
|
|
314
|
+
var aFilters = oBinding ? (oBinding.aApplicationFilter || oBinding.aApplicationFilters) : [];
|
|
315
315
|
// non-draft case when no filter is applied
|
|
316
316
|
if (!aFilters.length) {
|
|
317
317
|
return Promise.resolve({
|
|
@@ -79,12 +79,12 @@ sap.ui.define([
|
|
|
79
79
|
var aPageVariantControlStateWrappers = []; // controls handled from page variant management if used: smartTable, searchfield, partly multiple views
|
|
80
80
|
|
|
81
81
|
// SmartTable state: Table Settings and (in case of control level variant management) selected variant and whether it's dirty
|
|
82
|
-
// In case of multipleViews with multiple tables (mode "multi"), each tab has an own table or chart, which has an own state, so multipleViewsHandler has to take care of
|
|
82
|
+
// In case of multipleViews with multiple tables (mode "multi"), each tab has an own table or chart, which has an own state, so multipleViewsHandler has to take care of
|
|
83
83
|
// storing/restoring their states (in its part of the appState stored in genericData.tableTabData)
|
|
84
|
-
// In this case, mutliViewsHandler exchanges oState.oPresentationControlHandler (setting it always to the current visible one), so don't rely on that to get the wrapper.
|
|
84
|
+
// In this case, mutliViewsHandler exchanges oState.oPresentationControlHandler (setting it always to the current visible one), so don't rely on that to get the wrapper.
|
|
85
85
|
// Using the id (without providing optional parameter sQuickVariantKey) returns the smartTable only in single table case.
|
|
86
86
|
var oSmartTable = oController.byId(StableIdHelper.getStableId({type: "ListReportTable", subType: "SmartTable"}));
|
|
87
|
-
if (oSmartTable){ // in multipleViews case (with multiple tables) currently multipleViews handler handles complete state information
|
|
87
|
+
if (oSmartTable){ // in multipleViews case (with multiple tables) currently multipleViews handler handles complete state information
|
|
88
88
|
aControlStateWrappers.push(oTemplateUtils.oCommonUtils.getControlStateWrapper(oSmartTable));
|
|
89
89
|
}
|
|
90
90
|
|
|
@@ -123,7 +123,7 @@ sap.ui.define([
|
|
|
123
123
|
|
|
124
124
|
// List of handlers to react on (app or adaptation) extension state changes. Only one entry expected (handler in SFB wrapper). Currently, extensions are only possible in
|
|
125
125
|
// SFB - if extensions at other places are needed, the similar handler might differ depending on whether page variant management is used.
|
|
126
|
-
var aExtensionStateChangeHandlers = [];
|
|
126
|
+
var aExtensionStateChangeHandlers = [];
|
|
127
127
|
function customAppStateChange() {
|
|
128
128
|
aExtensionStateChangeHandlers.forEach(function(fnHandler) {
|
|
129
129
|
fnHandler();
|
|
@@ -234,7 +234,7 @@ sap.ui.define([
|
|
|
234
234
|
|
|
235
235
|
|
|
236
236
|
// Wrapper to control whether data is loaded
|
|
237
|
-
|
|
237
|
+
|
|
238
238
|
function fnGetDataLoadedWrapper(){
|
|
239
239
|
// Wrapper to control whether data is expected to be loaded - controls the state, but does not trigger loading data on restore!
|
|
240
240
|
var oTemplatePrivateModel = oTemplateUtils.oComponentUtils.getTemplatePrivateModel();
|
|
@@ -242,15 +242,15 @@ sap.ui.define([
|
|
|
242
242
|
// - startup with iAppState: anyway setState will be called
|
|
243
243
|
// - other startup cases: applyInitialLoadBehavior calls setState explicitly
|
|
244
244
|
// - navigation
|
|
245
|
-
|
|
245
|
+
|
|
246
246
|
function fnSetState(bState){
|
|
247
247
|
oTemplatePrivateModel.setProperty("/generic/bDataAreShownInTable", bState);
|
|
248
248
|
}
|
|
249
|
-
|
|
249
|
+
|
|
250
250
|
function fnGetState(){
|
|
251
251
|
return oTemplatePrivateModel.getProperty("/generic/bDataAreShownInTable");
|
|
252
252
|
}
|
|
253
|
-
|
|
253
|
+
|
|
254
254
|
function fnSetDataShown(bDataShown, fnHandler){
|
|
255
255
|
if (bDataShown === fnGetState()){
|
|
256
256
|
return;
|
|
@@ -258,7 +258,7 @@ sap.ui.define([
|
|
|
258
258
|
fnSetState(bDataShown);
|
|
259
259
|
fnHandler();
|
|
260
260
|
}
|
|
261
|
-
|
|
261
|
+
|
|
262
262
|
return {
|
|
263
263
|
getLocalId: function(){
|
|
264
264
|
return "$dataLoaded";
|
|
@@ -266,7 +266,7 @@ sap.ui.define([
|
|
|
266
266
|
setState: fnSetState,
|
|
267
267
|
getState: fnGetState,
|
|
268
268
|
attachStateChanged: function(fnHandler){
|
|
269
|
-
// changing from data not loaded to data loaded:
|
|
269
|
+
// changing from data not loaded to data loaded:
|
|
270
270
|
// - when SFB triggers search
|
|
271
271
|
oState.oSmartFilterbar.attachSearch(fnSetDataShown.bind(null, true, fnHandler));
|
|
272
272
|
|
|
@@ -281,7 +281,7 @@ sap.ui.define([
|
|
|
281
281
|
}
|
|
282
282
|
};
|
|
283
283
|
}
|
|
284
|
-
|
|
284
|
+
|
|
285
285
|
var oDataLoadedWrapper = fnGetDataLoadedWrapper();
|
|
286
286
|
aControlStateWrappers.push(oDataLoadedWrapper);
|
|
287
287
|
// oDataLoadedWrapper.attachStateChanged(changeIappState);
|
|
@@ -390,7 +390,7 @@ sap.ui.define([
|
|
|
390
390
|
if (Device.system.phone) {
|
|
391
391
|
collapseHeader();
|
|
392
392
|
}
|
|
393
|
-
// Ideally, oDataLoadedWrapper should ensure to keep its state correct. However, currently we have no means to attach to the command - i.e. oDataLoadedWrapper only
|
|
393
|
+
// Ideally, oDataLoadedWrapper should ensure to keep its state correct. However, currently we have no means to attach to the command - i.e. oDataLoadedWrapper only
|
|
394
394
|
// attaches to SFB's search event, which is only triggered when user presses the go button. When keyboard shortcut is used instead, this handler would be called (as it
|
|
395
395
|
// is attached to the command), but SFB's search event would not be triggered. As workaround, we additionally set data loaded state to true here and inform explicitly
|
|
396
396
|
// the the state has changed.
|
|
@@ -434,7 +434,7 @@ sap.ui.define([
|
|
|
434
434
|
}
|
|
435
435
|
}
|
|
436
436
|
}
|
|
437
|
-
|
|
437
|
+
|
|
438
438
|
/*
|
|
439
439
|
This method is called when an LR app is the target of an external navigation and the XAppState data contains a presentationVariant.
|
|
440
440
|
The sorting from this presentationVariant is then applied to the table.
|
|
@@ -454,13 +454,13 @@ sap.ui.define([
|
|
|
454
454
|
fnAdaptOtherControlsToAppState(oAppData.controlStates);
|
|
455
455
|
if (areDataShownInTable()){
|
|
456
456
|
// fnAdaptOtherControlsToAppState only (synchronously) sets the state including the information whether data should be loaded - if this is the case, the actual loading
|
|
457
|
-
// (which happens asynchronous of course) still needs to be triggered
|
|
457
|
+
// (which happens asynchronous of course) still needs to be triggered
|
|
458
458
|
loadData();
|
|
459
459
|
} else {
|
|
460
460
|
// hide placeholder already here, if no data is to be loaded - in case data is loaded, it will be hidden in data received event
|
|
461
461
|
oTemplateUtils.oComponentUtils.hidePlaceholder();
|
|
462
|
-
}
|
|
463
|
-
|
|
462
|
+
}
|
|
463
|
+
|
|
464
464
|
// special case: when restoring an old app state with data loaded, but in the meantime a filter not set in that state has been changed to mandatory, SFB.search would not
|
|
465
465
|
// trigger a request (but instead only mark that filter) - thus hiding placeholder now to avoid it to stay forever
|
|
466
466
|
// TODO: refactor: Still in that case our internal data shows data are loaded - ideally, that should not be the case
|
|
@@ -597,7 +597,7 @@ sap.ui.define([
|
|
|
597
597
|
|
|
598
598
|
function fnAdaptToAppStateStartUpWithParameters(oAppData, oURLParameters, sPreferredQuickVariantSelectionKey){
|
|
599
599
|
handleVariantIdPassedViaURLParams(oURLParameters);
|
|
600
|
-
|
|
600
|
+
|
|
601
601
|
var oSFBUiState = oState.oSmartFilterbar.getUiState();
|
|
602
602
|
var oSFBSemanticDates = oSFBUiState.getSemanticDates();
|
|
603
603
|
//oStartupObject to be passed to the extension where urlParameters and selectedQuickVariantSelectionKey are optional
|
|
@@ -760,23 +760,24 @@ sap.ui.define([
|
|
|
760
760
|
default:
|
|
761
761
|
throw new FeError(sClassName, "Invalid navigation type: " + sNavType);
|
|
762
762
|
}
|
|
763
|
-
|
|
763
|
+
|
|
764
764
|
// common to all startup cases (except iAppState)
|
|
765
765
|
if (areDataShownInTable()){
|
|
766
766
|
// trigger search if needed
|
|
767
767
|
oState.oSmartFilterbar.search();
|
|
768
|
-
// For desktop devices, expand the header for Standard and Custom variants and for tablet and mobile devices,
|
|
768
|
+
// For desktop devices, expand the header for Standard and Custom variants and for tablet and mobile devices,
|
|
769
769
|
// collapse the header only if search is triggered.
|
|
770
770
|
if (Device.system.desktop) {
|
|
771
771
|
oTemplateUtils.oCommonUtils.getControlStateWrapper(oController.byId(StableIdHelper.getStableId({type: "ListReportPage", subType: "DynamicPage"}))).setHeaderState(oController, true);
|
|
772
772
|
} else {
|
|
773
773
|
collapseHeader();
|
|
774
774
|
}
|
|
775
|
-
}
|
|
776
|
-
|
|
775
|
+
}
|
|
776
|
+
if (!areDataShownInTable() || Object.keys(oState.oSmartFilterbar.verifySearchAllowed()).length > 0) {
|
|
777
|
+
// if no data are loaded or search is not allowed, place holder has to be hidden now - otherwise it will be hidden when data is received
|
|
777
778
|
oTemplateUtils.oComponentUtils.hidePlaceholder();
|
|
778
779
|
}
|
|
779
|
-
|
|
780
|
+
|
|
780
781
|
// ensure first iAppState is created
|
|
781
782
|
changeIappState();
|
|
782
783
|
}
|
|
@@ -977,14 +978,14 @@ sap.ui.define([
|
|
|
977
978
|
}
|
|
978
979
|
|
|
979
980
|
// provide data load settings including defaulting
|
|
980
|
-
// ideally, this should be implemented in a generic way in template assembler, so that generated getters also return default values for objects if not explicitely set in
|
|
981
|
+
// ideally, this should be implemented in a generic way in template assembler, so that generated getters also return default values for objects if not explicitely set in
|
|
981
982
|
// manifest (i.e. it should be sufficient to define the default in component - no need to individually implement defaulting!)
|
|
982
983
|
function getDataLoadSettings(){
|
|
983
984
|
// general default
|
|
984
985
|
var oDefaultDataLoadSettings = {loadDataOnAppLaunch: "ifAnyFilterExist"};
|
|
985
986
|
|
|
986
987
|
// intension is boolean, but unfortunately faulty values are (historically) not treated consistently
|
|
987
|
-
var bEnableAutoBindingMultiViews = oState.oMultipleViewsHandler.getOriginalEnableAutoBinding();
|
|
988
|
+
var bEnableAutoBindingMultiViews = oState.oMultipleViewsHandler.getOriginalEnableAutoBinding();
|
|
988
989
|
|
|
989
990
|
// if multiple views settings is not defined (also the case in single views case), general default is taken. Unlike other faulty values, null is treated like undefined
|
|
990
991
|
if (bEnableAutoBindingMultiViews !== undefined && bEnableAutoBindingMultiViews !== null){
|
|
@@ -994,13 +995,13 @@ sap.ui.define([
|
|
|
994
995
|
|
|
995
996
|
var oManifestDataLoadSettings = oController.getOwnerComponent().getDataLoadSettings();
|
|
996
997
|
// (historically) explicit setting empty string (not an allowed value according to definition in component!) is treated like undefined (including adopting multiple views
|
|
997
|
-
// settings. Other not allowed values (any other sting) were ignored, i.e. returning undefined from getInitialLoadBehaviourSettings, thus setting undefined to
|
|
998
|
-
// oSmartVariantManagement.setExecuteOnStandard (which actually only sets the default) and finally using the value returned from
|
|
998
|
+
// settings. Other not allowed values (any other sting) were ignored, i.e. returning undefined from getInitialLoadBehaviourSettings, thus setting undefined to
|
|
999
|
+
// oSmartVariantManagement.setExecuteOnStandard (which actually only sets the default) and finally using the value returned from
|
|
999
1000
|
// oSmartVariantManagement.getExecuteOnStandard (only different from overall default (false), if user has explicitly set it)
|
|
1000
1001
|
if (oManifestDataLoadSettings && oManifestDataLoadSettings.loadDataOnAppLaunch === ""){
|
|
1001
1002
|
oManifestDataLoadSettings.loadDataOnAppLaunch = undefined;
|
|
1002
1003
|
}
|
|
1003
|
-
|
|
1004
|
+
|
|
1004
1005
|
// explicit setting has highest priority
|
|
1005
1006
|
return extend(oDefaultDataLoadSettings, oManifestDataLoadSettings);
|
|
1006
1007
|
}
|
|
@@ -1009,7 +1010,7 @@ sap.ui.define([
|
|
|
1009
1010
|
// - sets default value for flag whether standard variant should be execute on select
|
|
1010
1011
|
// - determines whether we actually should load data
|
|
1011
1012
|
function applyInitialLoadBehavior(bDataLoadCausedByNavigation){
|
|
1012
|
-
// cases definitely determining to load data initially
|
|
1013
|
+
// cases definitely determining to load data initially
|
|
1013
1014
|
// - worklist
|
|
1014
1015
|
// - livemode
|
|
1015
1016
|
// - master detail (i.e. bLoadListAndFirstEntryOnStartup is set)
|
|
@@ -1018,17 +1019,17 @@ sap.ui.define([
|
|
|
1018
1019
|
|
|
1019
1020
|
var sLoadBehaviour = getDataLoadSettings().loadDataOnAppLaunch;
|
|
1020
1021
|
if (!oSmartVariantManagement || oController.getOwnerComponent().getVariantManagementHidden()){
|
|
1021
|
-
// No VM ->
|
|
1022
|
+
// No VM ->
|
|
1022
1023
|
bShouldDataBeLoaded = bShouldDataBeLoaded || sLoadBehaviour === "always";
|
|
1023
1024
|
bShouldDataBeLoaded = bShouldDataBeLoaded || (sLoadBehaviour === "ifAnyFilterExist" && oSmartFilterbar.getFiltersWithValues().length > 0);
|
|
1024
1025
|
// behavior of last patch set would translate to the following - seems not to be correct (in case of setting ifAnyFilterExist but no filters provided)
|
|
1025
1026
|
// bShouldDataBeLoaded = bShouldDataBeLoaded || sLoadBehaviour !== "never";
|
|
1026
1027
|
} else {
|
|
1027
|
-
// in case of a (visible) SVM, we need to set the default value
|
|
1028
|
-
// default value for standard variant
|
|
1028
|
+
// in case of a (visible) SVM, we need to set the default value
|
|
1029
|
+
// default value for standard variant
|
|
1029
1030
|
// - true if one of the conditions above is fulfilled
|
|
1030
|
-
// - or for any manifest setting but "never"
|
|
1031
|
-
// (Remark: "ifAnyFilterExist" leads to mark the standard variant true, even if no filter is provided - this looks ok for startup, as the text shown to the user
|
|
1031
|
+
// - or for any manifest setting but "never"
|
|
1032
|
+
// (Remark: "ifAnyFilterExist" leads to mark the standard variant true, even if no filter is provided - this looks ok for startup, as the text shown to the user
|
|
1032
1033
|
// contains the condition, but if reselecting the standard variant, it will also select without filters!
|
|
1033
1034
|
// TODO: check, how to solve that inconsistency)
|
|
1034
1035
|
// - but in both cases not, if a mandatory filter is missing
|
|
@@ -41,7 +41,7 @@ MESSAGE_SINGLE_VALUE_L_FORM=O filtro "{0}" n\u00E3o \u00E9 relevante para a fich
|
|
|
41
41
|
|
|
42
42
|
MESSAGE_SINGLE_VALUE_S_FORM=N\u00E3o \u00E9 poss\u00EDvel filtrar por "{0}" na ficha "{1}".
|
|
43
43
|
|
|
44
|
-
MULTI_EDIT=
|
|
44
|
+
MULTI_EDIT=Editar
|
|
45
45
|
|
|
46
46
|
MULTI_EDIT_DIALOG_TITLE=Editar ({0})
|
|
47
47
|
|
|
@@ -89,18 +89,26 @@ sap.ui.define([
|
|
|
89
89
|
|
|
90
90
|
var oLinksDeferred;
|
|
91
91
|
var bHasRelatedAppSettings = oRelatedAppsSettings && Object.keys(oRelatedAppsSettings).length > 0;
|
|
92
|
+
|
|
92
93
|
if (bHasRelatedAppSettings) {
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
94
|
+
const oSemanticObjectSet = new Set();
|
|
95
|
+
// Add the current semantic object into the set
|
|
96
|
+
oSemanticObjectSet.add(sCurrentSemObj);
|
|
96
97
|
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
98
|
+
// Iterate through oRelatedAppSettings and add all related apps into the set
|
|
99
|
+
for (const sKey in oRelatedAppsSettings) {
|
|
100
|
+
if (sKey && oRelatedAppsSettings.hasOwnProperty(sKey)) {
|
|
101
|
+
const sSemanticObject = oRelatedAppsSettings[sKey].semanticObject;
|
|
102
|
+
oSemanticObjectSet.add(sSemanticObject); // Set will handle duplicates
|
|
102
103
|
}
|
|
103
104
|
}
|
|
105
|
+
// Create an array from the set
|
|
106
|
+
let aSemanticObjects = Array.from(oSemanticObjectSet);
|
|
107
|
+
|
|
108
|
+
// Use the map method to convert the array of strings into an array of objects
|
|
109
|
+
aSemanticObjects = aSemanticObjects.map(sSemObj => ([{ semanticObject: sSemObj }]));
|
|
110
|
+
|
|
111
|
+
// aSemanticObjects now contains the desired format
|
|
104
112
|
oLinksDeferred = oXApplNavigation.getLinks(aSemanticObjects);
|
|
105
113
|
} else {
|
|
106
114
|
var oAppComponent = oController.getOwnerComponent().getAppComponent();
|
|
@@ -25,7 +25,7 @@ sap.ui.define([
|
|
|
25
25
|
return accBlock;
|
|
26
26
|
}, [])
|
|
27
27
|
.forEach(function(entry) {
|
|
28
|
-
if (!oSubSectionInfoObject) {
|
|
28
|
+
if (!oSubSectionInfoObject || (entry.getGroups().length === 1 && entry.getGroups()[0].getTitle && !entry.getGroups()[0].getTitle())) {
|
|
29
29
|
// Case: header is editable. manifest.json, editableHeaderContent=true
|
|
30
30
|
var sInvisibleTextID = `${entry.getId()}-ariaLabelBy-InvisibleText`,
|
|
31
31
|
oInvisibleText = Element.getElementById(sInvisibleTextID);
|
|
@@ -182,8 +182,8 @@ ENTER_MANDATORY=Nh\u00E2\u0323p gia\u0301 tri\u0323 cho tr\u01B0\u01A1\u0300ng {
|
|
|
182
182
|
|
|
183
183
|
REQUIRED_PROP_ERROR=Nh\u1EADp gi\u00E1 tr\u1ECB.
|
|
184
184
|
|
|
185
|
-
REQUIRED_PROP_COLUMN_HIDDEN_ERROR=Ba\u0309ng ch\u01B0\u0301a l\u00F4\u0303i. {0} la\u0300 gi\u00E1 tr\u1ECB b\u0103\u0301t bu\u00F4\u0323c nh\u01B0ng kh\u00F4ng \u0111\u01B0\u01A1\u0323c hi\u00EA\u0309n thi\u0323 trong ba\u0309ng. Vui lo\u0300ng th\u00EAm gi\u00E1 tr\u1ECB trong thi\u00EA\u0301t l\u00E2\u0323p
|
|
186
|
-
REQUIRED_PROP_COLUMN_HIDDEN_ERROR_PLURAL=Ba\u0309ng ch\u01B0\u0301a l\u00F4\u0303i. {0} la\u0300 gi\u00E1 tr\u1ECB b\u0103\u0301t bu\u00F4\u0323c nh\u01B0ng kh\u00F4ng \u0111\u01B0\u01A1\u0323c hi\u00EA\u0309n thi\u0323 trong ba\u0309ng. Vui lo\u0300ng th\u00EAm gi\u00E1 tr\u1ECB trong thi\u00EA\u0301t l\u00E2\u0323p
|
|
185
|
+
REQUIRED_PROP_COLUMN_HIDDEN_ERROR=Ba\u0309ng ch\u01B0\u0301a l\u00F4\u0303i. {0} la\u0300 gi\u00E1 tr\u1ECB b\u0103\u0301t bu\u00F4\u0323c nh\u01B0ng kh\u00F4ng \u0111\u01B0\u01A1\u0323c hi\u00EA\u0309n thi\u0323 trong ba\u0309ng. Vui lo\u0300ng th\u00EAm gi\u00E1 tr\u1ECB trong thi\u00EA\u0301t l\u00E2\u0323p m\u00E0n h\u00ECnh.
|
|
186
|
+
REQUIRED_PROP_COLUMN_HIDDEN_ERROR_PLURAL=Ba\u0309ng ch\u01B0\u0301a l\u00F4\u0303i. {0} la\u0300 gi\u00E1 tr\u1ECB b\u0103\u0301t bu\u00F4\u0323c nh\u01B0ng kh\u00F4ng \u0111\u01B0\u01A1\u0323c hi\u00EA\u0309n thi\u0323 trong ba\u0309ng. Vui lo\u0300ng th\u00EAm gi\u00E1 tr\u1ECB trong thi\u00EA\u0301t l\u00E2\u0323p m\u00E0n h\u00ECnh.
|
|
187
187
|
|
|
188
188
|
T_PAGINATOR_CONTROL_PAGINATOR_TOOLTIP_UP=Mu\u0323c tr\u01B0\u01A1\u0301c
|
|
189
189
|
|
|
@@ -159,7 +159,7 @@ sap.ui.define([
|
|
|
159
159
|
// Currently, we keep it here, as we use fnNormalizeSections on all levels (-> should be split, targetAnnotation only needed on block level)
|
|
160
160
|
oBlock.targetAnnotation = fnGetTargetAnnotation(oMetaModel.getContext(sPath + "/" + i));
|
|
161
161
|
// if facet annotation is inconsistent, targetAnnotation would be undefined. Keep it here anyway, as extension might refer to it
|
|
162
|
-
|
|
162
|
+
fnProcessPresentationVariant(oBlock);
|
|
163
163
|
var oSubSection;
|
|
164
164
|
|
|
165
165
|
switch (iLevel) {
|
|
@@ -201,6 +201,35 @@ sap.ui.define([
|
|
|
201
201
|
});
|
|
202
202
|
return aResult;
|
|
203
203
|
}
|
|
204
|
+
|
|
205
|
+
function fnProcessPresentationVariant(oBlock) {
|
|
206
|
+
if (!oBlock.annotations.Facet.annotation.Target
|
|
207
|
+
|| !oBlock.annotations.Facet.annotation.Target.AnnotationPath
|
|
208
|
+
|| oBlock.annotations.Facet.annotation.Target.AnnotationPath.indexOf('com.sap.vocabularies.UI.v1.PresentationVariant') < 0) {
|
|
209
|
+
return;
|
|
210
|
+
}
|
|
211
|
+
// PresentationVariant detected. Try to find LineItem and get it's target annotations
|
|
212
|
+
var sTargetAnnotationTerm = oBlock.annotations.Facet.annotation.Target && oBlock.annotations.Facet.annotation.Target.AnnotationPath && oBlock.annotations.Facet.annotation.Target.AnnotationPath.split("@")[1],
|
|
213
|
+
sEntitySetName = oMetaModel.getObject(AHModel.gotoEntitySet(oMetaModel.getContext(oBlock.metaModelPath + "/Target"))).name,
|
|
214
|
+
oEntitySet = oMetaModel.getODataEntitySet(sEntitySetName),
|
|
215
|
+
oEntityType = oMetaModel.getODataEntityType(oEntitySet.entityType);
|
|
216
|
+
if (!oEntityType[sTargetAnnotationTerm]
|
|
217
|
+
|| !oEntityType[sTargetAnnotationTerm].Visualizations
|
|
218
|
+
|| !oEntityType[sTargetAnnotationTerm].Visualizations.length
|
|
219
|
+
|| !oEntityType[sTargetAnnotationTerm].Visualizations[0]
|
|
220
|
+
|| !oEntityType[sTargetAnnotationTerm].Visualizations[0].AnnotationPath
|
|
221
|
+
|| oEntityType[sTargetAnnotationTerm].Visualizations[0].AnnotationPath.indexOf('com.sap.vocabularies.UI.v1.LineItem') < 0) {
|
|
222
|
+
return;
|
|
223
|
+
}
|
|
224
|
+
// We have LineItem in Visualizations
|
|
225
|
+
// check if it's exist in Entity annotation and set it's content in oBlock.targetAnnotation for further processing
|
|
226
|
+
var sLineItemAnnotation = oEntityType[sTargetAnnotationTerm].Visualizations[0].AnnotationPath.split("@")[1];
|
|
227
|
+
if (!oEntityType[sLineItemAnnotation]) {
|
|
228
|
+
return;
|
|
229
|
+
}
|
|
230
|
+
oBlock.temporaryData.presentationVariantHasLineItem = true;
|
|
231
|
+
oBlock.targetAnnotation = oEntityType[sLineItemAnnotation];
|
|
232
|
+
}
|
|
204
233
|
|
|
205
234
|
var mTargetEntities = {};
|
|
206
235
|
function fnSetTargetEntity(oEntitySet, oSettings) {
|
|
@@ -233,6 +262,75 @@ sap.ui.define([
|
|
|
233
262
|
}
|
|
234
263
|
}
|
|
235
264
|
|
|
265
|
+
/**
|
|
266
|
+
* Retrieve LineItem qualifier for black table.
|
|
267
|
+
* For LineItem - get qualifier from LineItem annotation
|
|
268
|
+
* For PresentationVariant - get LineItem from Visualizations
|
|
269
|
+
* @param {*} oSettings block settings
|
|
270
|
+
* @param {*} sEntitySet current block entity set
|
|
271
|
+
* @returns {string} LineItem qualifier for the table
|
|
272
|
+
*/
|
|
273
|
+
function fnGetLineItemQualifier(oSettings, sEntitySet) {
|
|
274
|
+
if (!oSettings.annotations.Facet.annotation.Target
|
|
275
|
+
|| !oSettings.annotations.Facet.annotation.Target.AnnotationPath) {
|
|
276
|
+
return "";
|
|
277
|
+
}
|
|
278
|
+
var sLineItem = "";
|
|
279
|
+
if (oSettings.annotations.Facet.annotation.Target.AnnotationPath.indexOf('com.sap.vocabularies.UI.v1.LineItem') >= 0) {
|
|
280
|
+
sLineItem = oSettings.annotations.Facet.annotation.Target.AnnotationPath;
|
|
281
|
+
} else if (oSettings.annotations.Facet.annotation.Target.AnnotationPath.indexOf('com.sap.vocabularies.UI.v1.PresentationVariant') >= 0) {
|
|
282
|
+
var sTargetAnnotationTerm = oSettings.annotations.Facet.annotation.Target.AnnotationPath.split("@")[1],
|
|
283
|
+
oEntitySet = oMetaModel.getODataEntitySet(sEntitySet),
|
|
284
|
+
oEntityType = oMetaModel.getODataEntityType(oEntitySet.entityType);
|
|
285
|
+
if (!oEntityType[sTargetAnnotationTerm]
|
|
286
|
+
|| !oEntityType[sTargetAnnotationTerm].Visualizations
|
|
287
|
+
|| !oEntityType[sTargetAnnotationTerm].Visualizations.length
|
|
288
|
+
|| !oEntityType[sTargetAnnotationTerm].Visualizations[0]
|
|
289
|
+
|| !oEntityType[sTargetAnnotationTerm].Visualizations[0].AnnotationPath
|
|
290
|
+
|| oEntityType[sTargetAnnotationTerm].Visualizations[0].AnnotationPath.indexOf('com.sap.vocabularies.UI.v1.LineItem') < 0) {
|
|
291
|
+
return "";
|
|
292
|
+
}
|
|
293
|
+
sLineItem = oEntityType[sTargetAnnotationTerm].Visualizations[0].AnnotationPath;
|
|
294
|
+
}
|
|
295
|
+
if (!sLineItem) {
|
|
296
|
+
return "";
|
|
297
|
+
}
|
|
298
|
+
var aLineItemParts = sLineItem.split("#");
|
|
299
|
+
if (aLineItemParts.length !== 2) {
|
|
300
|
+
return "";
|
|
301
|
+
}
|
|
302
|
+
return aLineItemParts[1];
|
|
303
|
+
}
|
|
304
|
+
|
|
305
|
+
/**
|
|
306
|
+
* Retrieve sort order information for specific table
|
|
307
|
+
* @param {*} oSettings block settings
|
|
308
|
+
* @param {*} sEntitySet current block entity set
|
|
309
|
+
* @returns {string} sort order information from com.sap.vocabularies.UI.v1.PresentationVariant
|
|
310
|
+
*/
|
|
311
|
+
function fnGetLineItemSortOrder(oSettings, sEntitySet) {
|
|
312
|
+
if (!oSettings.annotations.Facet.annotation.Target
|
|
313
|
+
|| !oSettings.annotations.Facet.annotation.Target.AnnotationPath) {
|
|
314
|
+
return "";
|
|
315
|
+
}
|
|
316
|
+
// Default PresentationVariant to use to get sorting information
|
|
317
|
+
var sPresentationVariant = "com.sap.vocabularies.UI.v1.PresentationVariant";
|
|
318
|
+
if (oSettings.annotations.Facet.annotation.Target.AnnotationPath.indexOf('com.sap.vocabularies.UI.v1.PresentationVariant') >= 0) {
|
|
319
|
+
// Override default variant with value from facet
|
|
320
|
+
sPresentationVariant = oSettings.annotations.Facet.annotation.Target.AnnotationPath.split("@")[1];
|
|
321
|
+
}
|
|
322
|
+
var oEntitySet = oMetaModel.getODataEntitySet(sEntitySet),
|
|
323
|
+
oEntityType = oMetaModel.getODataEntityType(oEntitySet.entityType);
|
|
324
|
+
if (!oEntityType[sPresentationVariant]
|
|
325
|
+
|| !oEntityType[sPresentationVariant].SortOrder
|
|
326
|
+
|| !oEntityType[sPresentationVariant].SortOrder.length
|
|
327
|
+
) {
|
|
328
|
+
// PresentationVariant is missing in EntityType or there is no sorting order information
|
|
329
|
+
return "";
|
|
330
|
+
}
|
|
331
|
+
return AnnotationHelper.getSortOrder(oEntityType[sPresentationVariant].SortOrder);
|
|
332
|
+
}
|
|
333
|
+
|
|
236
334
|
function fnGetNormalizedTableSettings(oSettings) {
|
|
237
335
|
function fnGetTableLevelStandardActions() {
|
|
238
336
|
/* Collection of standard actions available on OP at table level. Maps the logical action name to an object containing the relevant properties i.e.
|
|
@@ -344,6 +442,8 @@ sap.ui.define([
|
|
|
344
442
|
|
|
345
443
|
oResult.commandExecution = fnGetTableLevelStandardActions();
|
|
346
444
|
oResult.persistencyKeyState = fnGetPersistencyKeyState(oSettings.tableSettings);
|
|
445
|
+
oResult.lineItemQualifier = fnGetLineItemQualifier(oSettings, sEntitySet);
|
|
446
|
+
oResult.lineItemSortOrder = fnGetLineItemSortOrder(oSettings, sEntitySet);
|
|
347
447
|
|
|
348
448
|
return oResult;
|
|
349
449
|
}
|
|
@@ -777,6 +877,13 @@ sap.ui.define([
|
|
|
777
877
|
case "com.sap.vocabularies.UI.v1.LineItem":
|
|
778
878
|
oBlockData.additionalData.type = "SmartTable";
|
|
779
879
|
break;
|
|
880
|
+
case "com.sap.vocabularies.UI.v1.PresentationVariant":
|
|
881
|
+
if (oBlockData.temporaryData.presentationVariantHasLineItem) {
|
|
882
|
+
// PresentationVariant have valid LineItem in it. Set block type to SmartTable
|
|
883
|
+
// It will trigger all necessary code for block configuration
|
|
884
|
+
oBlockData.additionalData.type = "SmartTable";
|
|
885
|
+
}
|
|
886
|
+
break;
|
|
780
887
|
case "com.sap.vocabularies.UI.v1.Chart":
|
|
781
888
|
oBlockData.additionalData.type = "SmartChart";
|
|
782
889
|
break;
|
|
@@ -16,17 +16,21 @@
|
|
|
16
16
|
-->
|
|
17
17
|
<template:if test="{path: 'facet>Target', formatter: 'AHModel.isMultiple'}">
|
|
18
18
|
<template:then>
|
|
19
|
-
<template:
|
|
20
|
-
<template:
|
|
21
|
-
<
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
19
|
+
<template:with path="facet>Target" helper="AHModel.gotoEntitySet" var="listEntitySet">
|
|
20
|
+
<template:with path="listEntitySet>entityType" helper="AHModel.gotoEntityType" var="listEntityType">
|
|
21
|
+
<template:if test="{parts:[{path: 'facet>Target/AnnotationPath'}, {path: 'listEntityType>'}], formatter: 'AH.checkFacetHasLineItemAnnotations'}">
|
|
22
|
+
<template:then>
|
|
23
|
+
<core:Fragment fragmentName="sap.suite.ui.generic.template.ObjectPage.view.fragments.SmartTable" type="XML"/>
|
|
24
|
+
</template:then>
|
|
25
|
+
<template:elseif test="{=${facet>Target/AnnotationPath}.indexOf('com.sap.vocabularies.Communication.v1.Contact') > -1}">
|
|
26
|
+
<core:Fragment fragmentName="sap.suite.ui.generic.template.fragments.Contacts" type="XML"/>
|
|
27
|
+
</template:elseif>
|
|
28
|
+
<template:elseif test="{=${facet>Target/AnnotationPath}.indexOf('com.sap.vocabularies.UI.v1.Chart') > -1}">
|
|
29
|
+
<core:Fragment fragmentName="sap.suite.ui.generic.template.ObjectPage.view.fragments.SmartChart" type="XML" />
|
|
30
|
+
</template:elseif>
|
|
31
|
+
</template:if>
|
|
32
|
+
</template:with>
|
|
33
|
+
</template:with>
|
|
30
34
|
</template:then>
|
|
31
35
|
<template:elseif test="{= ${facet>RecordType}.indexOf('com.sap.vocabularies.UI.v1.CollectionFacet') > -1 ||
|
|
32
36
|
(${facet>Target/AnnotationPath}.indexOf('com.sap.vocabularies.UI.v1.FieldGroup') > -1
|
|
@@ -21,7 +21,7 @@
|
|
|
21
21
|
<core:CustomData key="defaultDropDownDisplayBehaviour" value="descriptionOnly" />
|
|
22
22
|
<core:CustomData key="defaultTextInEditModeSource" value="ValueListNoValidation" />
|
|
23
23
|
<core:CustomData key="dateFormatSettings" value='\{"UTC":true,"style":"medium"\}' />
|
|
24
|
-
<core:CustomData key="smartFormAriaLabel" value="{parts: [{path: 'facet>'}, {path: 'entitySet>name'}], formatter: 'AH.getSmartFormTitle'}" />
|
|
24
|
+
<core:CustomData key="smartFormAriaLabel" value="{parts: [{path: 'facet>'}, {path: 'entitySet>name'}, {path: 'block>'}, {path: 'subSectionData>'}], formatter: 'AH.getSmartFormTitle'}" />
|
|
25
25
|
</sfo:customData>
|
|
26
26
|
<sfo:layout>
|
|
27
27
|
<template:if test="{= ${appSettings>/useColumnLayoutForSmartForm} !== false}">
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
<template:with path="facet>Target" var="target">
|
|
9
9
|
<template:with path="target>" helper="AHModel.gotoEntitySet" var="listEntitySet">
|
|
10
10
|
<template:with path="listEntitySet>entityType" helper="AHModel.gotoEntityType" var="listEntityType">
|
|
11
|
-
<template:with path="target>" helper="
|
|
11
|
+
<template:with path="target>" helper="AH.getListItemCollection" var="collection">
|
|
12
12
|
<template:with path="listEntityType>com.sap.vocabularies.UI.v1.HeaderInfo" var="header">
|
|
13
13
|
<template:with path="parameter>/" helper="sap.suite.ui.generic.template.js.StableIdHelper.preparePathForStableId" var="smartControlId">
|
|
14
14
|
<template:with path="parameter>/" helper="sap.suite.ui.generic.template.js.StableIdHelper.preparePathForStableId" var="facetId">
|
|
@@ -56,18 +56,14 @@
|
|
|
56
56
|
<core:CustomData key="useSmartField" value="true" />
|
|
57
57
|
<core:CustomData key="dateFormatSettings"
|
|
58
58
|
value='\{"UTC":true,"style":"medium"\}' />
|
|
59
|
-
<template:if test="{= ${
|
|
59
|
+
<template:if test="{= ${objectPageTableSettings>value/lineItemQualifier}}">
|
|
60
60
|
<core:CustomData key="lineItemQualifier"
|
|
61
|
-
value="{= ${
|
|
61
|
+
value="{= ${objectPageTableSettings>value/lineItemQualifier}}" />
|
|
62
|
+
</template:if>
|
|
63
|
+
<template:if test="{= ${objectPageTableSettings>value/lineItemSortOrder}}">
|
|
64
|
+
<core:CustomData key="TemplateSortOrder"
|
|
65
|
+
value="{= ${objectPageTableSettings>value/lineItemSortOrder}}" />
|
|
62
66
|
</template:if>
|
|
63
|
-
<template:with
|
|
64
|
-
path="listEntityType>com.sap.vocabularies.UI.v1.PresentationVariant"
|
|
65
|
-
var="variant">
|
|
66
|
-
<template:if test="{= ${variant>SortOrder}}">
|
|
67
|
-
<core:CustomData key="TemplateSortOrder"
|
|
68
|
-
value="{path: 'variant>SortOrder', formatter: 'AH.getSortOrder'}" />
|
|
69
|
-
</template:if>
|
|
70
|
-
</template:with>
|
|
71
67
|
</st:customData>
|
|
72
68
|
<st:semanticObjectController>
|
|
73
69
|
<!-- Fragment SemanticObjectControllerForDataField uses variable 'entitySet to address the entoty set. Currently entitySet points to the entity set of whole OP. Reset pointer to the entity set of the table.-->
|
|
@@ -193,6 +193,19 @@ sap.ui.define(["sap/ui/model/odata/AnnotationHelper",
|
|
|
193
193
|
}
|
|
194
194
|
}
|
|
195
195
|
|
|
196
|
+
var getLineItemAnnotationFromPresentationVariant = function(oPresentationVariant) {
|
|
197
|
+
if (!oPresentationVariant
|
|
198
|
+
|| !oPresentationVariant.Visualizations
|
|
199
|
+
|| !oPresentationVariant.Visualizations.length
|
|
200
|
+
|| !oPresentationVariant.Visualizations[0].AnnotationPath
|
|
201
|
+
// First entry in Visualizations should be 'com.sap.vocabularies.UI.v1.LineItem'
|
|
202
|
+
|| oPresentationVariant.Visualizations[0].AnnotationPath.indexOf('com.sap.vocabularies.UI.v1.LineItem') < 0
|
|
203
|
+
) {
|
|
204
|
+
return undefined;
|
|
205
|
+
}
|
|
206
|
+
return oPresentationVariant.Visualizations[0].AnnotationPath;
|
|
207
|
+
};
|
|
208
|
+
|
|
196
209
|
var oAnnotationHelper = {
|
|
197
210
|
formatMessage: formatMessage,
|
|
198
211
|
getNewVariable: function (oContext){
|
|
@@ -4105,6 +4118,50 @@ sap.ui.define(["sap/ui/model/odata/AnnotationHelper",
|
|
|
4105
4118
|
}
|
|
4106
4119
|
},
|
|
4107
4120
|
|
|
4121
|
+
checkFacetHasLineItemAnnotations: function(annotationPath, listEntityType) {
|
|
4122
|
+
if (!annotationPath) {
|
|
4123
|
+
return false;
|
|
4124
|
+
}
|
|
4125
|
+
if (annotationPath.indexOf('com.sap.vocabularies.UI.v1.LineItem') > -1) {
|
|
4126
|
+
return true;
|
|
4127
|
+
}
|
|
4128
|
+
if (annotationPath.indexOf('com.sap.vocabularies.UI.v1.PresentationVariant') > -1) {
|
|
4129
|
+
var aPresentationVariantAnnotations = annotationPath.split("/@");
|
|
4130
|
+
if (aPresentationVariantAnnotations.length < 2) {
|
|
4131
|
+
return false;
|
|
4132
|
+
}
|
|
4133
|
+
if (!listEntityType
|
|
4134
|
+
|| !getLineItemAnnotationFromPresentationVariant(listEntityType[aPresentationVariantAnnotations[1]])) {
|
|
4135
|
+
return false;
|
|
4136
|
+
}
|
|
4137
|
+
return true;
|
|
4138
|
+
}
|
|
4139
|
+
return false;
|
|
4140
|
+
},
|
|
4141
|
+
|
|
4142
|
+
getListItemCollection: function(target) {
|
|
4143
|
+
if (!target) {
|
|
4144
|
+
return target;
|
|
4145
|
+
}
|
|
4146
|
+
var oTarget = target.getObject();
|
|
4147
|
+
if (!oTarget || !oTarget.AnnotationPath) {
|
|
4148
|
+
return target;
|
|
4149
|
+
}
|
|
4150
|
+
if (oTarget.AnnotationPath.indexOf('com.sap.vocabularies.UI.v1.LineItem') >= 0) {
|
|
4151
|
+
return AnnotationHelperModel.resolvePath(target);
|
|
4152
|
+
}
|
|
4153
|
+
if (oTarget.AnnotationPath.indexOf('com.sap.vocabularies.UI.v1.PresentationVariant') >= 0) {
|
|
4154
|
+
var oPresentationVariant = target.getProperty(AnnotationHelperModel.resolvePath(target)),
|
|
4155
|
+
sLineItem = getLineItemAnnotationFromPresentationVariant(oPresentationVariant);
|
|
4156
|
+
if (!sLineItem || sLineItem.indexOf('@') !== 0) {
|
|
4157
|
+
return target;
|
|
4158
|
+
}
|
|
4159
|
+
var oEntityType = target.getModel().getODataEntityType(target.getProperty(AnnotationHelperModel.gotoEntitySet(target)).entityType);
|
|
4160
|
+
return oEntityType.$path + "/" + sLineItem.slice(1);
|
|
4161
|
+
}
|
|
4162
|
+
return target;
|
|
4163
|
+
},
|
|
4164
|
+
|
|
4108
4165
|
getSaveAndNextButtonVisibility: function(oManifest) {
|
|
4109
4166
|
var sEditFlow = oManifest["sap.ui.generic.app"].pages[0].component.settings && oManifest["sap.ui.generic.app"].pages[0].component.settings.editFlow;
|
|
4110
4167
|
if (sEditFlow === "direct") {
|
|
@@ -4286,10 +4343,31 @@ sap.ui.define(["sap/ui/model/odata/AnnotationHelper",
|
|
|
4286
4343
|
};
|
|
4287
4344
|
},
|
|
4288
4345
|
|
|
4289
|
-
getSmartFormTitle: function(oInterface, oFacet, sEntitySetName) {
|
|
4346
|
+
getSmartFormTitle: function(oInterface, oFacet, sEntitySetName, oBlock, oSubSectionData) {
|
|
4290
4347
|
if (!oFacet) {
|
|
4348
|
+
return oAnnotationHelper.getTitleForSectionsForms(oBlock, oSubSectionData);
|
|
4349
|
+
}
|
|
4350
|
+
return oAnnotationHelper.getTitleForHeaderForm(oInterface, oFacet, sEntitySetName);
|
|
4351
|
+
},
|
|
4352
|
+
|
|
4353
|
+
getTitleForSectionsForms: function(oBlock, oSubSectionData) {
|
|
4354
|
+
if (oSubSectionData?.annotations?.Facet?.annotation?.Facets?.length > 1
|
|
4355
|
+
|| oSubSectionData?.annotations?.Facet?.annotation?.Label?.String !== oBlock?.aggregations?.groups[0]?.annotations?.Facet?.annotation?.Label?.String
|
|
4356
|
+
) {
|
|
4357
|
+
// In case Section -> SubSection have more than one form, SmartForm will have it's titles visible
|
|
4358
|
+
// or
|
|
4359
|
+
// SubSectin title !== SmartForm title, SmartForm title will also be visible
|
|
4291
4360
|
return;
|
|
4292
4361
|
}
|
|
4362
|
+
if (oBlock?.aggregations?.groups[0]?.annotations?.Facet?.annotation?.Label?.String !== oBlock?.aggregations?.groups[0]?.targetAnnotation?.Label?.String) {
|
|
4363
|
+
// Compare SmartForm title !== FiledGroup title
|
|
4364
|
+
// if they differs -> use FiledGoup title
|
|
4365
|
+
return oBlock?.aggregations?.groups[0]?.targetAnnotation?.Label?.String;
|
|
4366
|
+
}
|
|
4367
|
+
return;
|
|
4368
|
+
},
|
|
4369
|
+
|
|
4370
|
+
getTitleForHeaderForm: function(oInterface, oFacet, sEntitySetName) {
|
|
4293
4371
|
if (oFacet.Target && oFacet.Target.AnnotationPath && oFacet.Target.AnnotationPath.indexOf("com.sap.vocabularies.UI.v1.DataPoint") > -1) {
|
|
4294
4372
|
// Process DataPoint case
|
|
4295
4373
|
var { sAnnotationPath, oEntityType } = oAnnotationHelper.getModelData(oInterface, oFacet.Target.AnnotationPath, sEntitySetName);
|
|
@@ -922,7 +922,7 @@ sap.ui.define([
|
|
|
922
922
|
* @extends sap.ui.core.UIComponent
|
|
923
923
|
* @abstract
|
|
924
924
|
* @author SAP SE
|
|
925
|
-
* @version 1.120.
|
|
925
|
+
* @version 1.120.35
|
|
926
926
|
* @name sap.suite.ui.generic.template.lib.AppComponent
|
|
927
927
|
*/
|
|
928
928
|
return UIComponent.extend("sap.suite.ui.generic.template.lib.AppComponent", {
|
|
@@ -237,7 +237,7 @@ ST_GENERIC_DELETE_SELECTED=Eliminar este objeto?
|
|
|
237
237
|
|
|
238
238
|
DELETE_WITH_OBJECTINFO=Eliminar este objeto ({1} {2})?
|
|
239
239
|
|
|
240
|
-
DELETE_WITH_OBJECTTITLE=
|
|
240
|
+
DELETE_WITH_OBJECTTITLE=Excluir objeto {0}?
|
|
241
241
|
|
|
242
242
|
ST_GENERIC_OBJECT_DELETED=O objeto foi exclu\u00EDdo.
|
|
243
243
|
|
|
@@ -3089,7 +3089,7 @@ sap.ui.define(["sap/ui/base/Object",
|
|
|
3089
3089
|
* @param {sap.suite.ui.generic.template.lib.AppComponent} oAppComponent The AppComponent instance
|
|
3090
3090
|
* @public
|
|
3091
3091
|
* @extends sap.ui.base.Object
|
|
3092
|
-
* @version 1.120.
|
|
3092
|
+
* @version 1.120.35
|
|
3093
3093
|
* @since 1.30.0
|
|
3094
3094
|
* @alias sap.suite.ui.generic.template.lib.NavigationController
|
|
3095
3095
|
*/
|