@sapui5/sap.fe.core 1.121.2 → 1.123.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.
Files changed (241) hide show
  1. package/package.json +1 -1
  2. package/src/sap/fe/core/.library +1 -1
  3. package/src/sap/fe/core/ActionRuntime.js +2 -2
  4. package/src/sap/fe/core/ActionRuntime.ts +1 -2
  5. package/src/sap/fe/core/CommonUtils.js +14 -171
  6. package/src/sap/fe/core/CommonUtils.ts +15 -221
  7. package/src/sap/fe/core/PageController.js +13 -1
  8. package/src/sap/fe/core/PageController.ts +16 -0
  9. package/src/sap/fe/core/TemplateComponent.js +6 -1
  10. package/src/sap/fe/core/TemplateComponent.ts +8 -0
  11. package/src/sap/fe/core/UIProvider.js +23 -0
  12. package/src/sap/fe/core/UIProvider.ts +38 -0
  13. package/src/sap/fe/core/buildingBlocks/BuildingBlockBase.js +97 -43
  14. package/src/sap/fe/core/buildingBlocks/BuildingBlockBase.ts +120 -50
  15. package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockSupport.js +6 -3
  16. package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockSupport.ts +12 -18
  17. package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplateProcessor.js +2 -2
  18. package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplateProcessor.ts +1 -1
  19. package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplatingBase.js +1 -1
  20. package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplatingBase.ts +4 -3
  21. package/src/sap/fe/core/buildingBlocks/templating/RuntimeBuildingBlockFragment.js +1 -1
  22. package/src/sap/fe/core/buildingBlocks/templating/RuntimeBuildingBlockFragment.ts +1 -0
  23. package/src/sap/fe/core/controllerextensions/BaseControllerExtension.js +42 -1
  24. package/src/sap/fe/core/controllerextensions/BaseControllerExtension.ts +40 -0
  25. package/src/sap/fe/core/controllerextensions/CollaborativeDraft.js +5 -2
  26. package/src/sap/fe/core/controllerextensions/CollaborativeDraft.ts +5 -3
  27. package/src/sap/fe/core/controllerextensions/EditFlow.js +151 -60
  28. package/src/sap/fe/core/controllerextensions/EditFlow.ts +165 -68
  29. package/src/sap/fe/core/controllerextensions/HookSupport.js +32 -14
  30. package/src/sap/fe/core/controllerextensions/HookSupport.ts +35 -14
  31. package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.js +5 -17
  32. package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.ts +0 -12
  33. package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.js +6 -6
  34. package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.ts +15 -10
  35. package/src/sap/fe/core/controllerextensions/InternalRouting.js +108 -287
  36. package/src/sap/fe/core/controllerextensions/InternalRouting.ts +117 -309
  37. package/src/sap/fe/core/controllerextensions/KPIManagement.js +2 -2
  38. package/src/sap/fe/core/controllerextensions/KPIManagement.ts +6 -2
  39. package/src/sap/fe/core/controllerextensions/MessageHandler.js +2 -2
  40. package/src/sap/fe/core/controllerextensions/MessageHandler.ts +1 -1
  41. package/src/sap/fe/core/controllerextensions/PageReady.js +6 -6
  42. package/src/sap/fe/core/controllerextensions/PageReady.ts +5 -4
  43. package/src/sap/fe/core/controllerextensions/Paginator.js +17 -110
  44. package/src/sap/fe/core/controllerextensions/Paginator.ts +13 -130
  45. package/src/sap/fe/core/controllerextensions/Placeholder.js +3 -3
  46. package/src/sap/fe/core/controllerextensions/Placeholder.ts +1 -2
  47. package/src/sap/fe/core/controllerextensions/Recommendations.js +36 -31
  48. package/src/sap/fe/core/controllerextensions/Recommendations.ts +32 -37
  49. package/src/sap/fe/core/controllerextensions/Share.js +7 -7
  50. package/src/sap/fe/core/controllerextensions/Share.ts +6 -6
  51. package/src/sap/fe/core/controllerextensions/SideEffects.js +52 -6
  52. package/src/sap/fe/core/controllerextensions/SideEffects.ts +56 -4
  53. package/src/sap/fe/core/controllerextensions/ViewState.js +32 -46
  54. package/src/sap/fe/core/controllerextensions/ViewState.ts +24 -31
  55. package/src/sap/fe/core/controllerextensions/dialog/OperationsDialog.block.js +42 -31
  56. package/src/sap/fe/core/controllerextensions/dialog/OperationsDialog.block.tsx +6 -0
  57. package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.js +168 -276
  58. package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.ts +182 -310
  59. package/src/sap/fe/core/controllerextensions/editFlow/draft.js +3 -3
  60. package/src/sap/fe/core/controllerextensions/editFlow/draft.ts +2 -2
  61. package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.js +4 -3
  62. package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.ts +3 -2
  63. package/src/sap/fe/core/controllerextensions/editFlow/operations/facade.js +74 -52
  64. package/src/sap/fe/core/controllerextensions/editFlow/operations/facade.ts +95 -55
  65. package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.js +3 -17
  66. package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.ts +10 -23
  67. package/src/sap/fe/core/controllerextensions/recommendations/Telemetry.js +3 -3
  68. package/src/sap/fe/core/controllerextensions/recommendations/Telemetry.ts +2 -2
  69. package/src/sap/fe/core/controllerextensions/routing/ContextPathHelper.js +225 -0
  70. package/src/sap/fe/core/controllerextensions/routing/ContextPathHelper.ts +241 -0
  71. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DraftDataLossDialog.block.js +69 -48
  72. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DraftDataLossDialog.block.tsx +56 -33
  73. package/src/sap/fe/core/controls/FormElementWrapper.js +8 -11
  74. package/src/sap/fe/core/controls/FormElementWrapper.ts +9 -0
  75. package/src/sap/fe/core/controls/Recommendations/ConfirmRecommendationDialog.block.js +6 -14
  76. package/src/sap/fe/core/controls/Recommendations/ConfirmRecommendationDialog.block.tsx +12 -23
  77. package/src/sap/fe/core/converters/ConverterContext.js +17 -9
  78. package/src/sap/fe/core/converters/ConverterContext.ts +55 -41
  79. package/src/sap/fe/core/converters/ManifestSettings.js +1 -1
  80. package/src/sap/fe/core/converters/ManifestSettings.ts +19 -5
  81. package/src/sap/fe/core/converters/ManifestWrapper.js +14 -4
  82. package/src/sap/fe/core/converters/ManifestWrapper.ts +21 -10
  83. package/src/sap/fe/core/converters/MetaModelConverter.js +402 -383
  84. package/src/sap/fe/core/converters/MetaModelConverter.ts +538 -338
  85. package/src/sap/fe/core/converters/TemplateConverter.js +4 -2
  86. package/src/sap/fe/core/converters/TemplateConverter.ts +18 -13
  87. package/src/sap/fe/core/converters/annotations/DataField.js +30 -28
  88. package/src/sap/fe/core/converters/annotations/DataField.ts +58 -35
  89. package/src/sap/fe/core/converters/common/AnnotationConverter.js +24 -23
  90. package/src/sap/fe/core/converters/controls/Common/Action.js +5 -4
  91. package/src/sap/fe/core/converters/controls/Common/Action.ts +34 -28
  92. package/src/sap/fe/core/converters/controls/Common/Chart.js +37 -33
  93. package/src/sap/fe/core/converters/controls/Common/Chart.ts +64 -46
  94. package/src/sap/fe/core/converters/controls/Common/DataVisualization.js +15 -4
  95. package/src/sap/fe/core/converters/controls/Common/DataVisualization.ts +31 -15
  96. package/src/sap/fe/core/converters/controls/Common/Form.js +6 -4
  97. package/src/sap/fe/core/converters/controls/Common/Form.ts +23 -11
  98. package/src/sap/fe/core/converters/controls/Common/KPI.js +5 -3
  99. package/src/sap/fe/core/converters/controls/Common/KPI.ts +17 -11
  100. package/src/sap/fe/core/converters/controls/Common/Table.js +197 -101
  101. package/src/sap/fe/core/converters/controls/Common/Table.ts +393 -182
  102. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js +4 -5
  103. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.ts +38 -27
  104. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js +41 -11
  105. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.ts +112 -45
  106. package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.js +7 -7
  107. package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.ts +18 -12
  108. package/src/sap/fe/core/converters/controls/ObjectPage/Avatar.js +1 -1
  109. package/src/sap/fe/core/converters/controls/ObjectPage/Avatar.ts +5 -4
  110. package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.js +1 -1
  111. package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.ts +19 -9
  112. package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.js +64 -63
  113. package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.ts +109 -100
  114. package/src/sap/fe/core/converters/helpers/Aggregation.js +12 -11
  115. package/src/sap/fe/core/converters/helpers/Aggregation.ts +35 -30
  116. package/src/sap/fe/core/converters/helpers/ConfigurableObject.js +4 -1
  117. package/src/sap/fe/core/converters/helpers/ConfigurableObject.ts +12 -9
  118. package/src/sap/fe/core/converters/helpers/DataFieldHelper.js +1 -1
  119. package/src/sap/fe/core/converters/helpers/DataFieldHelper.ts +1 -1
  120. package/src/sap/fe/core/converters/helpers/ID.js +1 -1
  121. package/src/sap/fe/core/converters/helpers/ID.ts +6 -6
  122. package/src/sap/fe/core/converters/helpers/InsightsHelpers.js +3 -3
  123. package/src/sap/fe/core/converters/helpers/InsightsHelpers.ts +11 -6
  124. package/src/sap/fe/core/converters/helpers/Key.js +2 -2
  125. package/src/sap/fe/core/converters/helpers/Key.ts +4 -4
  126. package/src/sap/fe/core/converters/helpers/SelectionVariantHelper.js +1 -1
  127. package/src/sap/fe/core/converters/helpers/SelectionVariantHelper.ts +2 -2
  128. package/src/sap/fe/core/converters/objectPage/FormMenuActions.js +21 -19
  129. package/src/sap/fe/core/converters/objectPage/FormMenuActions.ts +43 -31
  130. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.js +1 -1
  131. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.ts +16 -12
  132. package/src/sap/fe/core/converters/templates/ListReportConverter.js +8 -3
  133. package/src/sap/fe/core/converters/templates/ListReportConverter.ts +41 -21
  134. package/src/sap/fe/core/converters/templates/ObjectPageConverter.js +5 -3
  135. package/src/sap/fe/core/converters/templates/ObjectPageConverter.ts +24 -19
  136. package/src/sap/fe/core/designtime/AppComponent.designtime.js +3 -2
  137. package/src/sap/fe/core/designtime/AppComponent.designtime.ts +2 -1
  138. package/src/sap/fe/core/filter/DraftEditState.fragment.xml +1 -1
  139. package/src/sap/fe/core/formatters/CollaborationFormatter.js +4 -6
  140. package/src/sap/fe/core/formatters/CollaborationFormatter.ts +5 -4
  141. package/src/sap/fe/core/formatters/FPMFormatter.js +5 -13
  142. package/src/sap/fe/core/formatters/FPMFormatter.ts +11 -10
  143. package/src/sap/fe/core/formatters/FiscalFormat.js +1 -1
  144. package/src/sap/fe/core/formatters/FiscalFormat.ts +1 -1
  145. package/src/sap/fe/core/formatters/KPIFormatter.js +4 -7
  146. package/src/sap/fe/core/formatters/KPIFormatter.ts +3 -3
  147. package/src/sap/fe/core/formatters/StandardFormatter.js +4 -7
  148. package/src/sap/fe/core/formatters/StandardFormatter.ts +3 -3
  149. package/src/sap/fe/core/formatters/ValueFormatter.js +35 -6
  150. package/src/sap/fe/core/formatters/ValueFormatter.ts +31 -3
  151. package/src/sap/fe/core/fpm/manifest.json +1 -1
  152. package/src/sap/fe/core/helpers/AppStartupHelper.js +54 -33
  153. package/src/sap/fe/core/helpers/AppStartupHelper.ts +62 -41
  154. package/src/sap/fe/core/helpers/BindingToolkit.js +17 -3
  155. package/src/sap/fe/core/helpers/BindingToolkit.ts +28 -6
  156. package/src/sap/fe/core/helpers/ClassSupport.js +32 -13
  157. package/src/sap/fe/core/helpers/ClassSupport.ts +35 -15
  158. package/src/sap/fe/core/helpers/DeleteHelper.js +71 -61
  159. package/src/sap/fe/core/helpers/DeleteHelper.ts +125 -103
  160. package/src/sap/fe/core/helpers/DraftEditState.js +5 -3
  161. package/src/sap/fe/core/helpers/DraftEditState.ts +3 -1
  162. package/src/sap/fe/core/helpers/FPMHelper.js +43 -46
  163. package/src/sap/fe/core/helpers/FPMHelper.ts +50 -56
  164. package/src/sap/fe/core/helpers/MetaModelFunction.js +77 -53
  165. package/src/sap/fe/core/helpers/MetaModelFunction.ts +78 -57
  166. package/src/sap/fe/core/helpers/ModelHelper.js +10 -4
  167. package/src/sap/fe/core/helpers/ModelHelper.ts +12 -6
  168. package/src/sap/fe/core/helpers/PasteHelper.js +194 -7
  169. package/src/sap/fe/core/helpers/PasteHelper.ts +265 -13
  170. package/src/sap/fe/core/helpers/PromiseKeeper.js +66 -0
  171. package/src/sap/fe/core/helpers/PromiseKeeper.ts +56 -0
  172. package/src/sap/fe/core/helpers/SemanticKeyHelper.js +30 -19
  173. package/src/sap/fe/core/helpers/SemanticKeyHelper.ts +34 -22
  174. package/src/sap/fe/core/helpers/StableIdHelper.js +1 -1
  175. package/src/sap/fe/core/helpers/StableIdHelper.ts +7 -2
  176. package/src/sap/fe/core/helpers/StandardRecommendationHelper.js +26 -52
  177. package/src/sap/fe/core/helpers/StandardRecommendationHelper.ts +37 -63
  178. package/src/sap/fe/core/helpers/TitleHelper.js +1 -1
  179. package/src/sap/fe/core/helpers/TitleHelper.ts +17 -14
  180. package/src/sap/fe/core/helpers/TypeGuards.js +27 -3
  181. package/src/sap/fe/core/helpers/TypeGuards.ts +37 -7
  182. package/src/sap/fe/core/jsx-runtime/jsx-xml.js +48 -8
  183. package/src/sap/fe/core/jsx-runtime/jsx-xml.ts +40 -9
  184. package/src/sap/fe/core/library.js +1 -1
  185. package/src/sap/fe/core/messagebundle.properties +5 -2
  186. package/src/sap/fe/core/messagebundle_da.properties +1 -1
  187. package/src/sap/fe/core/messagebundle_en.properties +267 -2
  188. package/src/sap/fe/core/messagebundle_sl.properties +1 -1
  189. package/src/sap/fe/core/operationsHelper.js +2 -1
  190. package/src/sap/fe/core/operationsHelper.ts +1 -0
  191. package/src/sap/fe/core/services/EnvironmentServiceFactory.js +3 -3
  192. package/src/sap/fe/core/services/EnvironmentServiceFactory.ts +2 -2
  193. package/src/sap/fe/core/services/NavigationServiceFactory.js +2 -2
  194. package/src/sap/fe/core/services/NavigationServiceFactory.ts +3 -2
  195. package/src/sap/fe/core/services/RoutingServiceFactory.js +27 -14
  196. package/src/sap/fe/core/services/RoutingServiceFactory.ts +27 -14
  197. package/src/sap/fe/core/services/ShellServicesFactory.js +49 -12
  198. package/src/sap/fe/core/services/ShellServicesFactory.ts +62 -13
  199. package/src/sap/fe/core/services/SideEffectsServiceFactory.js +156 -82
  200. package/src/sap/fe/core/services/SideEffectsServiceFactory.ts +218 -100
  201. package/src/sap/fe/core/services/TelemetryServiceFactory.js +3 -3
  202. package/src/sap/fe/core/services/TelemetryServiceFactory.ts +6 -6
  203. package/src/sap/fe/core/services/ValueHelpHistoryServiceFactory.js +3 -2
  204. package/src/sap/fe/core/services/ValueHelpHistoryServiceFactory.ts +1 -1
  205. package/src/sap/fe/core/services/collaborativeDraftServiceFactory.js +1 -1
  206. package/src/sap/fe/core/services/collaborativeDraftServiceFactory.ts +2 -2
  207. package/src/sap/fe/core/services/view/TemplatingErrorPage.view.xml +1 -1
  208. package/src/sap/fe/core/templating/CommonFormatters.js +6 -3
  209. package/src/sap/fe/core/templating/CommonFormatters.ts +13 -12
  210. package/src/sap/fe/core/templating/CriticalityFormatters.js +2 -2
  211. package/src/sap/fe/core/templating/CriticalityFormatters.ts +37 -14
  212. package/src/sap/fe/core/templating/DataFieldFormatters.js +12 -11
  213. package/src/sap/fe/core/templating/DataFieldFormatters.ts +35 -24
  214. package/src/sap/fe/core/templating/DataModelPathHelper.js +22 -18
  215. package/src/sap/fe/core/templating/DataModelPathHelper.ts +61 -51
  216. package/src/sap/fe/core/templating/DisplayModeFormatter.js +1 -1
  217. package/src/sap/fe/core/templating/DisplayModeFormatter.ts +8 -3
  218. package/src/sap/fe/core/templating/EntityTypeHelper.js +1 -1
  219. package/src/sap/fe/core/templating/EntityTypeHelper.ts +1 -1
  220. package/src/sap/fe/core/templating/FieldControlHelper.js +3 -3
  221. package/src/sap/fe/core/templating/FieldControlHelper.ts +27 -8
  222. package/src/sap/fe/core/templating/FilterHelper.js +13 -10
  223. package/src/sap/fe/core/templating/FilterHelper.ts +80 -46
  224. package/src/sap/fe/core/templating/FilterTemplating.js +1 -1
  225. package/src/sap/fe/core/templating/FilterTemplating.ts +2 -2
  226. package/src/sap/fe/core/templating/PropertyFormatters.js +6 -8
  227. package/src/sap/fe/core/templating/PropertyFormatters.ts +11 -11
  228. package/src/sap/fe/core/templating/PropertyHelper.js +3 -3
  229. package/src/sap/fe/core/templating/PropertyHelper.ts +4 -4
  230. package/src/sap/fe/core/templating/SemanticObjectHelper.js +157 -13
  231. package/src/sap/fe/core/templating/SemanticObjectHelper.ts +182 -16
  232. package/src/sap/fe/core/templating/UIFormatters.js +23 -22
  233. package/src/sap/fe/core/templating/UIFormatters.ts +94 -66
  234. package/src/sap/fe/core/type/DateTimeWithTimezone.js +1 -1
  235. package/src/sap/fe/core/type/DateTimeWithTimezone.ts +2 -2
  236. package/src/sap/fe/core/type/EDM.js +1 -1
  237. package/src/sap/fe/core/type/EDM.ts +2 -2
  238. package/src/sap/fe/core/type/Email.js +1 -1
  239. package/src/sap/fe/core/type/Email.ts +1 -1
  240. package/src/sap/fe/core/type/FiscalDate.js +2 -2
  241. package/src/sap/fe/core/type/FiscalDate.ts +2 -2
@@ -6,46 +6,53 @@ sap.ui.define(["sap/base/Log", "sap/base/util/ObjectPath", "sap/fe/core/CommonUt
6
6
  "use strict";
7
7
 
8
8
  const FPMHelper = {
9
- actionWrapper: async function (oEvent, sModule, sMethod, oParameters) {
9
+ loadModuleAndCallMethod: async function (module, method, view) {
10
+ for (var _len = arguments.length, args = new Array(_len > 3 ? _len - 3 : 0), _key = 3; _key < _len; _key++) {
11
+ args[_key - 3] = arguments[_key];
12
+ }
10
13
  return new Promise(function (resolve) {
11
- var _oSource$getParent, _oSource$getParent2;
12
- //The source would be command execution, in case a command is defined for the action in the manifest.
13
- const oSource = oEvent.getSource ? oEvent.getSource() : oEvent.oSource,
14
- oView = CommonUtils.getTargetView(oSource),
15
- oBindingContext = oSource.getBindingContext();
16
- let oExtensionAPI;
17
- let listBinding;
18
- let aSelectedContexts;
19
- if (oParameters !== undefined) {
20
- aSelectedContexts = oParameters.contexts || [];
21
- } else if (oBindingContext !== undefined) {
22
- aSelectedContexts = [oBindingContext];
23
- } else {
24
- aSelectedContexts = [];
25
- }
26
- if ((_oSource$getParent = oSource.getParent()) !== null && _oSource$getParent !== void 0 && _oSource$getParent.isA("sap.ui.mdc.actiontoolbar.ActionToolbarAction") || (_oSource$getParent2 = oSource.getParent()) !== null && _oSource$getParent2 !== void 0 && _oSource$getParent2.isA("sap.m.Menu")) {
27
- var _FPMHelper$getMdcTabl;
28
- listBinding = (_FPMHelper$getMdcTabl = FPMHelper.getMdcTable(oSource)) === null || _FPMHelper$getMdcTabl === void 0 ? void 0 : _FPMHelper$getMdcTabl.getRowBinding();
14
+ let extensionAPI;
15
+ if (view.getControllerName() === "sap.fe.templates.ObjectPage.ObjectPageController" || view.getControllerName() === "sap.fe.templates.ListReport.ListReportController") {
16
+ extensionAPI = view.getController().getExtensionAPI();
29
17
  }
30
- if (oView.getControllerName() === "sap.fe.templates.ObjectPage.ObjectPageController" || oView.getControllerName() === "sap.fe.templates.ListReport.ListReportController") {
31
- oExtensionAPI = oView.getController().getExtensionAPI();
32
- }
33
- if (sModule && sMethod) {
34
- if (sModule.startsWith("/extension/")) {
35
- const fnTarget = ObjectPath.get(sModule.replace(/\//g, ".").substring(1), oExtensionAPI);
36
- resolve(fnTarget[sMethod](oBindingContext, aSelectedContexts, listBinding));
37
- } else {
38
- sap.ui.require([sModule], function (module) {
39
- // - we bind the action to the extensionAPI of the controller so it has the same scope as a custom section
40
- // - we provide the context as API, maybe if needed further properties
41
- resolve(module[sMethod].bind(oExtensionAPI)(oBindingContext, aSelectedContexts, listBinding));
42
- });
43
- }
18
+ if (module.startsWith("/extension/")) {
19
+ const fnTarget = ObjectPath.get(module.replace(/\//g, ".").substring(1), extensionAPI);
20
+ resolve(fnTarget[method](...args));
44
21
  } else {
45
- Log.debug("Both the module and the method must be defined to execute a custom action");
22
+ sap.ui.require([module], function (loadedModule) {
23
+ // - we bind the action to the extensionAPI of the controller so it has the same scope as a custom section
24
+ // - we provide the context as API, maybe if needed further properties
25
+ resolve(loadedModule[method].bind(extensionAPI)(...args));
26
+ });
46
27
  }
47
28
  });
48
29
  },
30
+ actionWrapper: async function (oEvent, sModule, sMethod, oParameters) {
31
+ var _oSource$getParent, _oSource$getParent2;
32
+ if (!sModule || !sMethod) {
33
+ Log.debug("Both the module and the method must be defined to execute a custom action");
34
+ return;
35
+ }
36
+
37
+ //The source would be command execution, in case a command is defined for the action in the manifest.
38
+ const oSource = oEvent.getSource ? oEvent.getSource() : oEvent.oSource,
39
+ oView = CommonUtils.getTargetView(oSource),
40
+ oBindingContext = oSource.getBindingContext();
41
+ let listBinding;
42
+ let aSelectedContexts;
43
+ if (oParameters !== undefined) {
44
+ aSelectedContexts = oParameters.contexts || [];
45
+ } else if (oBindingContext !== undefined) {
46
+ aSelectedContexts = [oBindingContext];
47
+ } else {
48
+ aSelectedContexts = [];
49
+ }
50
+ if ((_oSource$getParent = oSource.getParent()) !== null && _oSource$getParent !== void 0 && _oSource$getParent.isA("sap.ui.mdc.actiontoolbar.ActionToolbarAction") || (_oSource$getParent2 = oSource.getParent()) !== null && _oSource$getParent2 !== void 0 && _oSource$getParent2.isA("sap.m.Menu")) {
51
+ var _FPMHelper$getMdcTabl;
52
+ listBinding = (_FPMHelper$getMdcTabl = FPMHelper.getMdcTable(oSource)) === null || _FPMHelper$getMdcTabl === void 0 ? void 0 : _FPMHelper$getMdcTabl.getRowBinding();
53
+ }
54
+ return FPMHelper.loadModuleAndCallMethod(sModule, sMethod, oView, oBindingContext, aSelectedContexts, listBinding);
55
+ },
49
56
  getMdcTable: function (control) {
50
57
  const parent = control.getParent();
51
58
  if (!parent || parent.isA("sap.ui.mdc.Table")) {
@@ -54,17 +61,7 @@ sap.ui.define(["sap/base/Log", "sap/base/util/ObjectPath", "sap/fe/core/CommonUt
54
61
  return FPMHelper.getMdcTable(parent);
55
62
  },
56
63
  validationWrapper: async function (sModule, sMethod, oValidationContexts, oView, oBindingContext) {
57
- return new Promise(function (resolve) {
58
- let oExtensionAPI;
59
- if (oView.getControllerName() === "sap.fe.templates.ObjectPage.ObjectPageController" || oView.getControllerName() === "sap.fe.templates.ListReport.ListReportController") {
60
- oExtensionAPI = oView.getController().getExtensionAPI();
61
- }
62
- sap.ui.require([sModule], function (module) {
63
- // - we bind the action to the extensionAPI of the controller so it has the same scope as a custom section
64
- // - we provide the context as API, maybe if needed further properties
65
- resolve(module[sMethod].bind(oExtensionAPI)(oBindingContext, oValidationContexts));
66
- });
67
- });
64
+ return FPMHelper.loadModuleAndCallMethod(sModule, sMethod, oView, oBindingContext, oValidationContexts);
68
65
  },
69
66
  /**
70
67
  * Returns an external custom function defined either in a custom controller extension or in an external module.
@@ -100,4 +97,4 @@ sap.ui.define(["sap/base/Log", "sap/base/util/ObjectPath", "sap/fe/core/CommonUt
100
97
  };
101
98
  return FPMHelper;
102
99
  }, false);
103
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJGUE1IZWxwZXIiLCJhY3Rpb25XcmFwcGVyIiwib0V2ZW50Iiwic01vZHVsZSIsInNNZXRob2QiLCJvUGFyYW1ldGVycyIsIlByb21pc2UiLCJyZXNvbHZlIiwib1NvdXJjZSIsImdldFNvdXJjZSIsIm9WaWV3IiwiQ29tbW9uVXRpbHMiLCJnZXRUYXJnZXRWaWV3Iiwib0JpbmRpbmdDb250ZXh0IiwiZ2V0QmluZGluZ0NvbnRleHQiLCJvRXh0ZW5zaW9uQVBJIiwibGlzdEJpbmRpbmciLCJhU2VsZWN0ZWRDb250ZXh0cyIsInVuZGVmaW5lZCIsImNvbnRleHRzIiwiZ2V0UGFyZW50IiwiaXNBIiwiZ2V0TWRjVGFibGUiLCJnZXRSb3dCaW5kaW5nIiwiZ2V0Q29udHJvbGxlck5hbWUiLCJnZXRDb250cm9sbGVyIiwiZ2V0RXh0ZW5zaW9uQVBJIiwic3RhcnRzV2l0aCIsImZuVGFyZ2V0IiwiT2JqZWN0UGF0aCIsImdldCIsInJlcGxhY2UiLCJzdWJzdHJpbmciLCJzYXAiLCJ1aSIsInJlcXVpcmUiLCJtb2R1bGUiLCJiaW5kIiwiTG9nIiwiZGVidWciLCJjb250cm9sIiwicGFyZW50IiwidmFsaWRhdGlvbldyYXBwZXIiLCJvVmFsaWRhdGlvbkNvbnRleHRzIiwiZ2V0Q3VzdG9tRnVuY3Rpb24iLCJtb2R1bGVOYW1lIiwiZnVuY3Rpb25OYW1lIiwic291cmNlIiwidmlldyIsImV4dGVuc2lvbkFQSSIsImN1c3RvbUZ1bmN0aW9uIiwiY29udHJvbGxlckV4dCIsImVycm9yIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJGUE1IZWxwZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IExvZyBmcm9tIFwic2FwL2Jhc2UvTG9nXCI7XG5pbXBvcnQgT2JqZWN0UGF0aCBmcm9tIFwic2FwL2Jhc2UvdXRpbC9PYmplY3RQYXRoXCI7XG5pbXBvcnQgQ29tbW9uVXRpbHMgZnJvbSBcInNhcC9mZS9jb3JlL0NvbW1vblV0aWxzXCI7XG5pbXBvcnQgdHlwZSBFeHRlbnNpb25BUEkgZnJvbSBcInNhcC9mZS9jb3JlL0V4dGVuc2lvbkFQSVwiO1xuaW1wb3J0IHR5cGUgUGFnZUNvbnRyb2xsZXIgZnJvbSBcInNhcC9mZS9jb3JlL1BhZ2VDb250cm9sbGVyXCI7XG5pbXBvcnQgdHlwZSBVSTVFdmVudCBmcm9tIFwic2FwL3VpL2Jhc2UvRXZlbnRcIjtcbmltcG9ydCB0eXBlIEV2ZW50UHJvdmlkZXIgZnJvbSBcInNhcC91aS9iYXNlL0V2ZW50UHJvdmlkZXJcIjtcbmltcG9ydCB0eXBlIENvbnRyb2wgZnJvbSBcInNhcC91aS9jb3JlL0NvbnRyb2xcIjtcbmltcG9ydCB0eXBlIFVJNUVsZW1lbnQgZnJvbSBcInNhcC91aS9jb3JlL0VsZW1lbnRcIjtcbmltcG9ydCB0eXBlIFZpZXcgZnJvbSBcInNhcC91aS9jb3JlL212Yy9WaWV3XCI7XG5pbXBvcnQgdHlwZSBNZGNUYWJsZSBmcm9tIFwic2FwL3VpL21kYy9UYWJsZVwiO1xuaW1wb3J0IHR5cGUgQ29udGV4dCBmcm9tIFwic2FwL3VpL21vZGVsL0NvbnRleHRcIjtcbmltcG9ydCB0eXBlIE9EYXRhTGlzdEJpbmRpbmcgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YUxpc3RCaW5kaW5nXCI7XG5cbmNvbnN0IEZQTUhlbHBlciA9IHtcblx0YWN0aW9uV3JhcHBlcjogYXN5bmMgZnVuY3Rpb24gKFxuXHRcdG9FdmVudDogVUk1RXZlbnQsXG5cdFx0c01vZHVsZT86IHN0cmluZyxcblx0XHRzTWV0aG9kPzogc3RyaW5nLFxuXHRcdG9QYXJhbWV0ZXJzPzogeyBjb250ZXh0cz86IENvbnRleHRbXSB9XG5cdCk6IFByb21pc2U8dW5rbm93bj4ge1xuXHRcdHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZTogKHZhbHVlOiBhbnkpID0+IHZvaWQpIHtcblx0XHRcdC8vVGhlIHNvdXJjZSB3b3VsZCBiZSBjb21tYW5kIGV4ZWN1dGlvbiwgaW4gY2FzZSBhIGNvbW1hbmQgaXMgZGVmaW5lZCBmb3IgdGhlIGFjdGlvbiBpbiB0aGUgbWFuaWZlc3QuXG5cdFx0XHRjb25zdCBvU291cmNlID0gKG9FdmVudC5nZXRTb3VyY2UgPyBvRXZlbnQuZ2V0U291cmNlKCkgOiAob0V2ZW50IGFzIHsgb1NvdXJjZT86IEV2ZW50UHJvdmlkZXIgfSkub1NvdXJjZSkgYXMgQ29udHJvbCxcblx0XHRcdFx0b1ZpZXcgPSBDb21tb25VdGlscy5nZXRUYXJnZXRWaWV3KG9Tb3VyY2UpLFxuXHRcdFx0XHRvQmluZGluZ0NvbnRleHQgPSBvU291cmNlLmdldEJpbmRpbmdDb250ZXh0KCkhO1xuXHRcdFx0bGV0IG9FeHRlbnNpb25BUEk6IEV4dGVuc2lvbkFQSSB8IHVuZGVmaW5lZDtcblx0XHRcdGxldCBsaXN0QmluZGluZzogT0RhdGFMaXN0QmluZGluZyB8IHVuZGVmaW5lZDtcblx0XHRcdGxldCBhU2VsZWN0ZWRDb250ZXh0czogQ29udGV4dFtdO1xuXG5cdFx0XHRpZiAob1BhcmFtZXRlcnMgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRhU2VsZWN0ZWRDb250ZXh0cyA9IG9QYXJhbWV0ZXJzLmNvbnRleHRzIHx8IFtdO1xuXHRcdFx0fSBlbHNlIGlmIChvQmluZGluZ0NvbnRleHQgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRhU2VsZWN0ZWRDb250ZXh0cyA9IFtvQmluZGluZ0NvbnRleHRdO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0YVNlbGVjdGVkQ29udGV4dHMgPSBbXTtcblx0XHRcdH1cblx0XHRcdGlmIChvU291cmNlLmdldFBhcmVudCgpPy5pc0EoXCJzYXAudWkubWRjLmFjdGlvbnRvb2xiYXIuQWN0aW9uVG9vbGJhckFjdGlvblwiKSB8fCBvU291cmNlLmdldFBhcmVudCgpPy5pc0EoXCJzYXAubS5NZW51XCIpKSB7XG5cdFx0XHRcdGxpc3RCaW5kaW5nID0gRlBNSGVscGVyLmdldE1kY1RhYmxlKG9Tb3VyY2UpPy5nZXRSb3dCaW5kaW5nKCk7XG5cdFx0XHR9XG5cdFx0XHRpZiAoXG5cdFx0XHRcdG9WaWV3LmdldENvbnRyb2xsZXJOYW1lKCkgPT09IFwic2FwLmZlLnRlbXBsYXRlcy5PYmplY3RQYWdlLk9iamVjdFBhZ2VDb250cm9sbGVyXCIgfHxcblx0XHRcdFx0b1ZpZXcuZ2V0Q29udHJvbGxlck5hbWUoKSA9PT0gXCJzYXAuZmUudGVtcGxhdGVzLkxpc3RSZXBvcnQuTGlzdFJlcG9ydENvbnRyb2xsZXJcIlxuXHRcdFx0KSB7XG5cdFx0XHRcdG9FeHRlbnNpb25BUEkgPSBvVmlldy5nZXRDb250cm9sbGVyKCkuZ2V0RXh0ZW5zaW9uQVBJKCk7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChzTW9kdWxlICYmIHNNZXRob2QpIHtcblx0XHRcdFx0aWYgKHNNb2R1bGUuc3RhcnRzV2l0aChcIi9leHRlbnNpb24vXCIpKSB7XG5cdFx0XHRcdFx0Y29uc3QgZm5UYXJnZXQgPSBPYmplY3RQYXRoLmdldChzTW9kdWxlLnJlcGxhY2UoL1xcLy9nLCBcIi5cIikuc3Vic3RyaW5nKDEpLCBvRXh0ZW5zaW9uQVBJKTtcblx0XHRcdFx0XHRyZXNvbHZlKGZuVGFyZ2V0W3NNZXRob2RdKG9CaW5kaW5nQ29udGV4dCwgYVNlbGVjdGVkQ29udGV4dHMsIGxpc3RCaW5kaW5nKSk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0c2FwLnVpLnJlcXVpcmUoW3NNb2R1bGVdLCBmdW5jdGlvbiAobW9kdWxlOiBSZWNvcmQ8c3RyaW5nLCBGdW5jdGlvbj4pIHtcblx0XHRcdFx0XHRcdC8vIC0gd2UgYmluZCB0aGUgYWN0aW9uIHRvIHRoZSBleHRlbnNpb25BUEkgb2YgdGhlIGNvbnRyb2xsZXIgc28gaXQgaGFzIHRoZSBzYW1lIHNjb3BlIGFzIGEgY3VzdG9tIHNlY3Rpb25cblx0XHRcdFx0XHRcdC8vIC0gd2UgcHJvdmlkZSB0aGUgY29udGV4dCBhcyBBUEksIG1heWJlIGlmIG5lZWRlZCBmdXJ0aGVyIHByb3BlcnRpZXNcblx0XHRcdFx0XHRcdHJlc29sdmUobW9kdWxlW3NNZXRob2RdLmJpbmQob0V4dGVuc2lvbkFQSSkob0JpbmRpbmdDb250ZXh0LCBhU2VsZWN0ZWRDb250ZXh0cywgbGlzdEJpbmRpbmcpKTtcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0TG9nLmRlYnVnKFwiQm90aCB0aGUgbW9kdWxlIGFuZCB0aGUgbWV0aG9kIG11c3QgYmUgZGVmaW5lZCB0byBleGVjdXRlIGEgY3VzdG9tIGFjdGlvblwiKTtcblx0XHRcdH1cblx0XHR9KTtcblx0fSxcblx0Z2V0TWRjVGFibGU6IGZ1bmN0aW9uIChjb250cm9sOiBVSTVFbGVtZW50KTogTWRjVGFibGUgfCBudWxsIHwgdW5kZWZpbmVkIHtcblx0XHRjb25zdCBwYXJlbnQgPSBjb250cm9sLmdldFBhcmVudCgpO1xuXHRcdGlmICghcGFyZW50IHx8IHBhcmVudC5pc0E8TWRjVGFibGU+KFwic2FwLnVpLm1kYy5UYWJsZVwiKSkge1xuXHRcdFx0cmV0dXJuIHBhcmVudDtcblx0XHR9XG5cdFx0cmV0dXJuIEZQTUhlbHBlci5nZXRNZGNUYWJsZShwYXJlbnQgYXMgQ29udHJvbCk7XG5cdH0sXG5cdHZhbGlkYXRpb25XcmFwcGVyOiBhc3luYyBmdW5jdGlvbiAoXG5cdFx0c01vZHVsZTogc3RyaW5nLFxuXHRcdHNNZXRob2Q6IHN0cmluZyxcblx0XHRvVmFsaWRhdGlvbkNvbnRleHRzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcblx0XHRvVmlldzogVmlldyxcblx0XHRvQmluZGluZ0NvbnRleHQ6IENvbnRleHRcblx0KTogUHJvbWlzZTx7IG1lc3NhZ2VUYXJnZXQ/OiBzdHJpbmc7IG1lc3NhZ2VUZXh0OiBzdHJpbmcgfVtdPiB7XG5cdFx0cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlOiAodmFsdWU6IGFueSkgPT4gdm9pZCkge1xuXHRcdFx0bGV0IG9FeHRlbnNpb25BUEk6IEV4dGVuc2lvbkFQSTtcblxuXHRcdFx0aWYgKFxuXHRcdFx0XHRvVmlldy5nZXRDb250cm9sbGVyTmFtZSgpID09PSBcInNhcC5mZS50ZW1wbGF0ZXMuT2JqZWN0UGFnZS5PYmplY3RQYWdlQ29udHJvbGxlclwiIHx8XG5cdFx0XHRcdG9WaWV3LmdldENvbnRyb2xsZXJOYW1lKCkgPT09IFwic2FwLmZlLnRlbXBsYXRlcy5MaXN0UmVwb3J0Lkxpc3RSZXBvcnRDb250cm9sbGVyXCJcblx0XHRcdCkge1xuXHRcdFx0XHRvRXh0ZW5zaW9uQVBJID0gKG9WaWV3LmdldENvbnRyb2xsZXIoKSBhcyBQYWdlQ29udHJvbGxlcikuZ2V0RXh0ZW5zaW9uQVBJKCk7XG5cdFx0XHR9XG5cblx0XHRcdHNhcC51aS5yZXF1aXJlKFtzTW9kdWxlXSwgZnVuY3Rpb24gKG1vZHVsZTogYW55KSB7XG5cdFx0XHRcdC8vIC0gd2UgYmluZCB0aGUgYWN0aW9uIHRvIHRoZSBleHRlbnNpb25BUEkgb2YgdGhlIGNvbnRyb2xsZXIgc28gaXQgaGFzIHRoZSBzYW1lIHNjb3BlIGFzIGEgY3VzdG9tIHNlY3Rpb25cblx0XHRcdFx0Ly8gLSB3ZSBwcm92aWRlIHRoZSBjb250ZXh0IGFzIEFQSSwgbWF5YmUgaWYgbmVlZGVkIGZ1cnRoZXIgcHJvcGVydGllc1xuXHRcdFx0XHRyZXNvbHZlKG1vZHVsZVtzTWV0aG9kXS5iaW5kKG9FeHRlbnNpb25BUEkpKG9CaW5kaW5nQ29udGV4dCwgb1ZhbGlkYXRpb25Db250ZXh0cykpO1xuXHRcdFx0fSk7XG5cdFx0fSk7XG5cdH0sXG5cdC8qKlxuXHQgKiBSZXR1cm5zIGFuIGV4dGVybmFsIGN1c3RvbSBmdW5jdGlvbiBkZWZpbmVkIGVpdGhlciBpbiBhIGN1c3RvbSBjb250cm9sbGVyIGV4dGVuc2lvbiBvciBpbiBhbiBleHRlcm5hbCBtb2R1bGUuXG5cdCAqXG5cdCAqIEBwYXJhbSBtb2R1bGVOYW1lIFRoZSBleHRlcm5hbCBtb2R1bGUgbmFtZSwgb3IgL2V4dGVuc2lvbi88cGF0aCB0byB0aGUgY3VzdG9tIGNvbnRyb2xsZXIgZXh0ZW5zaW9uIG1vZHVsZT5cblx0ICogQHBhcmFtIGZ1bmN0aW9uTmFtZSBUaGUgbmFtZSBvZiB0aGUgZnVuY3Rpb25cblx0ICogQHBhcmFtIHNvdXJjZSBBIGNvbnRyb2wgaW4gdGhlIHZpZXcgb3IgYW4gZXZlbnQgdHJpZ2dlcmVkIGJ5IGEgY29udHJvbCBpbiB0aGUgdmlld1xuXHQgKiBAcmV0dXJucyBUaGUgZnVuY3Rpb24gKG9yIHVuZGVmaW5lZCBpZiBpdCBjb3VsZG4ndCBiZSBmb3VuZClcblx0ICovXG5cdGdldEN1c3RvbUZ1bmN0aW9uPEZ1bmN0aW9uVHlwZT4oXG5cdFx0bW9kdWxlTmFtZTogc3RyaW5nLFxuXHRcdGZ1bmN0aW9uTmFtZTogc3RyaW5nLFxuXHRcdHNvdXJjZTogQ29udHJvbCB8IFVJNUV2ZW50PHt9LCBDb250cm9sPlxuXHQpOiBGdW5jdGlvblR5cGUgfCB1bmRlZmluZWQge1xuXHRcdGxldCBjb250cm9sOiBDb250cm9sO1xuXHRcdGlmIChzb3VyY2UuaXNBPFVJNUV2ZW50PihcInNhcC51aS5iYXNlLkV2ZW50XCIpKSB7XG5cdFx0XHRjb250cm9sID0gc291cmNlLmdldFNvdXJjZSgpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRjb250cm9sID0gc291cmNlO1xuXHRcdH1cblx0XHRjb25zdCB2aWV3ID0gQ29tbW9uVXRpbHMuZ2V0VGFyZ2V0Vmlldyhjb250cm9sKTtcblx0XHRjb25zdCBleHRlbnNpb25BUEkgPSB2aWV3LmdldENvbnRyb2xsZXIoKS5nZXRFeHRlbnNpb25BUEkoKTtcblxuXHRcdGxldCBjdXN0b21GdW5jdGlvbjogRnVuY3Rpb25UeXBlIHwgdW5kZWZpbmVkO1xuXG5cdFx0aWYgKG1vZHVsZU5hbWUuc3RhcnRzV2l0aChcIi9leHRlbnNpb24vXCIpKSB7XG5cdFx0XHRjb25zdCBjb250cm9sbGVyRXh0ID0gT2JqZWN0UGF0aC5nZXQobW9kdWxlTmFtZS5yZXBsYWNlKC9cXC8vZywgXCIuXCIpLnN1YnN0cmluZygxKSwgZXh0ZW5zaW9uQVBJKTtcblx0XHRcdGN1c3RvbUZ1bmN0aW9uID0gY29udHJvbGxlckV4dCA/IGNvbnRyb2xsZXJFeHRbZnVuY3Rpb25OYW1lXSA6IHVuZGVmaW5lZDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Y29uc3QgbW9kdWxlID0gc2FwLnVpLnJlcXVpcmUobW9kdWxlTmFtZSk7XG5cdFx0XHRjdXN0b21GdW5jdGlvbiA9IG1vZHVsZSA/IG1vZHVsZVtmdW5jdGlvbk5hbWVdPy5iaW5kKGV4dGVuc2lvbkFQSSkgOiB1bmRlZmluZWQ7XG5cdFx0fVxuXG5cdFx0aWYgKCFjdXN0b21GdW5jdGlvbikge1xuXHRcdFx0TG9nLmVycm9yKGBDb3VsZG4ndCBmaW5kIG1ldGhvZCAke2Z1bmN0aW9uTmFtZX0gaW4gJHttb2R1bGVOYW1lfWApO1xuXHRcdH1cblx0XHRyZXR1cm4gY3VzdG9tRnVuY3Rpb247XG5cdH1cbn07XG5cbmV4cG9ydCBkZWZhdWx0IEZQTUhlbHBlcjtcbiJdLCJtYXBwaW5ncyI6IjtBQUFBO0FBQUE7QUFBQTs7OztFQWNBLE1BQU1BLFNBQVMsR0FBRztJQUNqQkMsYUFBYSxFQUFFLGdCQUNkQyxNQUFnQixFQUNoQkMsT0FBZ0IsRUFDaEJDLE9BQWdCLEVBQ2hCQyxXQUFzQyxFQUNuQjtNQUNuQixPQUFPLElBQUlDLE9BQU8sQ0FBQyxVQUFVQyxPQUE2QixFQUFFO1FBQUE7UUFDM0Q7UUFDQSxNQUFNQyxPQUFPLEdBQUlOLE1BQU0sQ0FBQ08sU0FBUyxHQUFHUCxNQUFNLENBQUNPLFNBQVMsRUFBRSxHQUFJUCxNQUFNLENBQWlDTSxPQUFtQjtVQUNuSEUsS0FBSyxHQUFHQyxXQUFXLENBQUNDLGFBQWEsQ0FBQ0osT0FBTyxDQUFDO1VBQzFDSyxlQUFlLEdBQUdMLE9BQU8sQ0FBQ00saUJBQWlCLEVBQUc7UUFDL0MsSUFBSUMsYUFBdUM7UUFDM0MsSUFBSUMsV0FBeUM7UUFDN0MsSUFBSUMsaUJBQTRCO1FBRWhDLElBQUlaLFdBQVcsS0FBS2EsU0FBUyxFQUFFO1VBQzlCRCxpQkFBaUIsR0FBR1osV0FBVyxDQUFDYyxRQUFRLElBQUksRUFBRTtRQUMvQyxDQUFDLE1BQU0sSUFBSU4s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
100
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJGUE1IZWxwZXIiLCJsb2FkTW9kdWxlQW5kQ2FsbE1ldGhvZCIsIm1vZHVsZSIsIm1ldGhvZCIsInZpZXciLCJhcmdzIiwiUHJvbWlzZSIsInJlc29sdmUiLCJleHRlbnNpb25BUEkiLCJnZXRDb250cm9sbGVyTmFtZSIsImdldENvbnRyb2xsZXIiLCJnZXRFeHRlbnNpb25BUEkiLCJzdGFydHNXaXRoIiwiZm5UYXJnZXQiLCJPYmplY3RQYXRoIiwiZ2V0IiwicmVwbGFjZSIsInN1YnN0cmluZyIsInNhcCIsInVpIiwicmVxdWlyZSIsImxvYWRlZE1vZHVsZSIsImJpbmQiLCJhY3Rpb25XcmFwcGVyIiwib0V2ZW50Iiwic01vZHVsZSIsInNNZXRob2QiLCJvUGFyYW1ldGVycyIsIkxvZyIsImRlYnVnIiwib1NvdXJjZSIsImdldFNvdXJjZSIsIm9WaWV3IiwiQ29tbW9uVXRpbHMiLCJnZXRUYXJnZXRWaWV3Iiwib0JpbmRpbmdDb250ZXh0IiwiZ2V0QmluZGluZ0NvbnRleHQiLCJsaXN0QmluZGluZyIsImFTZWxlY3RlZENvbnRleHRzIiwidW5kZWZpbmVkIiwiY29udGV4dHMiLCJnZXRQYXJlbnQiLCJpc0EiLCJnZXRNZGNUYWJsZSIsImdldFJvd0JpbmRpbmciLCJjb250cm9sIiwicGFyZW50IiwidmFsaWRhdGlvbldyYXBwZXIiLCJvVmFsaWRhdGlvbkNvbnRleHRzIiwiZ2V0Q3VzdG9tRnVuY3Rpb24iLCJtb2R1bGVOYW1lIiwiZnVuY3Rpb25OYW1lIiwic291cmNlIiwiY3VzdG9tRnVuY3Rpb24iLCJjb250cm9sbGVyRXh0IiwiZXJyb3IiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIkZQTUhlbHBlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgTG9nIGZyb20gXCJzYXAvYmFzZS9Mb2dcIjtcbmltcG9ydCBPYmplY3RQYXRoIGZyb20gXCJzYXAvYmFzZS91dGlsL09iamVjdFBhdGhcIjtcbmltcG9ydCB0eXBlIHsgRkVWaWV3IH0gZnJvbSBcInNhcC9mZS9jb3JlL0Jhc2VDb250cm9sbGVyXCI7XG5pbXBvcnQgQ29tbW9uVXRpbHMgZnJvbSBcInNhcC9mZS9jb3JlL0NvbW1vblV0aWxzXCI7XG5pbXBvcnQgdHlwZSBFeHRlbnNpb25BUEkgZnJvbSBcInNhcC9mZS9jb3JlL0V4dGVuc2lvbkFQSVwiO1xuaW1wb3J0IHR5cGUgVUk1RXZlbnQgZnJvbSBcInNhcC91aS9iYXNlL0V2ZW50XCI7XG5pbXBvcnQgdHlwZSBFdmVudFByb3ZpZGVyIGZyb20gXCJzYXAvdWkvYmFzZS9FdmVudFByb3ZpZGVyXCI7XG5pbXBvcnQgdHlwZSBDb250cm9sIGZyb20gXCJzYXAvdWkvY29yZS9Db250cm9sXCI7XG5pbXBvcnQgdHlwZSBVSTVFbGVtZW50IGZyb20gXCJzYXAvdWkvY29yZS9FbGVtZW50XCI7XG5pbXBvcnQgdHlwZSBWaWV3IGZyb20gXCJzYXAvdWkvY29yZS9tdmMvVmlld1wiO1xuaW1wb3J0IHR5cGUgTWRjVGFibGUgZnJvbSBcInNhcC91aS9tZGMvVGFibGVcIjtcbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9Db250ZXh0XCI7XG5pbXBvcnQgdHlwZSBPRGF0YUxpc3RCaW5kaW5nIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFMaXN0QmluZGluZ1wiO1xuXG5jb25zdCBGUE1IZWxwZXIgPSB7XG5cdGxvYWRNb2R1bGVBbmRDYWxsTWV0aG9kOiBhc3luYyBmdW5jdGlvbiAobW9kdWxlOiBzdHJpbmcsIG1ldGhvZDogc3RyaW5nLCB2aWV3OiBWaWV3LCAuLi5hcmdzOiB1bmtub3duW10pOiBQcm9taXNlPHVua25vd24+IHtcblx0XHRyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmU6ICh2YWx1ZTogdW5rbm93bikgPT4gdm9pZCkge1xuXHRcdFx0bGV0IGV4dGVuc2lvbkFQSTogRXh0ZW5zaW9uQVBJIHwgdW5kZWZpbmVkO1xuXHRcdFx0aWYgKFxuXHRcdFx0XHR2aWV3LmdldENvbnRyb2xsZXJOYW1lKCkgPT09IFwic2FwLmZlLnRlbXBsYXRlcy5PYmplY3RQYWdlLk9iamVjdFBhZ2VDb250cm9sbGVyXCIgfHxcblx0XHRcdFx0dmlldy5nZXRDb250cm9sbGVyTmFtZSgpID09PSBcInNhcC5mZS50ZW1wbGF0ZXMuTGlzdFJlcG9ydC5MaXN0UmVwb3J0Q29udHJvbGxlclwiXG5cdFx0XHQpIHtcblx0XHRcdFx0ZXh0ZW5zaW9uQVBJID0gKHZpZXcgYXMgRkVWaWV3KS5nZXRDb250cm9sbGVyKCkuZ2V0RXh0ZW5zaW9uQVBJKCk7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChtb2R1bGUuc3RhcnRzV2l0aChcIi9leHRlbnNpb24vXCIpKSB7XG5cdFx0XHRcdGNvbnN0IGZuVGFyZ2V0ID0gT2JqZWN0UGF0aC5nZXQobW9kdWxlLnJlcGxhY2UoL1xcLy9nLCBcIi5cIikuc3Vic3RyaW5nKDEpLCBleHRlbnNpb25BUEkpO1xuXHRcdFx0XHRyZXNvbHZlKGZuVGFyZ2V0W21ldGhvZF0oLi4uYXJncykpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0c2FwLnVpLnJlcXVpcmUoW21vZHVsZV0sIGZ1bmN0aW9uIChsb2FkZWRNb2R1bGU6IFJlY29yZDxzdHJpbmcsIEZ1bmN0aW9uPikge1xuXHRcdFx0XHRcdC8vIC0gd2UgYmluZCB0aGUgYWN0aW9uIHRvIHRoZSBleHRlbnNpb25BUEkgb2YgdGhlIGNvbnRyb2xsZXIgc28gaXQgaGFzIHRoZSBzYW1lIHNjb3BlIGFzIGEgY3VzdG9tIHNlY3Rpb25cblx0XHRcdFx0XHQvLyAtIHdlIHByb3ZpZGUgdGhlIGNvbnRleHQgYXMgQVBJLCBtYXliZSBpZiBuZWVkZWQgZnVydGhlciBwcm9wZXJ0aWVzXG5cdFx0XHRcdFx0cmVzb2x2ZShsb2FkZWRNb2R1bGVbbWV0aG9kXS5iaW5kKGV4dGVuc2lvbkFQSSkoLi4uYXJncykpO1xuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHR9KTtcblx0fSxcblxuXHRhY3Rpb25XcmFwcGVyOiBhc3luYyBmdW5jdGlvbiAoXG5cdFx0b0V2ZW50OiBVSTVFdmVudCxcblx0XHRzTW9kdWxlPzogc3RyaW5nLFxuXHRcdHNNZXRob2Q/OiBzdHJpbmcsXG5cdFx0b1BhcmFtZXRlcnM/OiB7IGNvbnRleHRzPzogQ29udGV4dFtdIH1cblx0KTogUHJvbWlzZTx1bmtub3duPiB7XG5cdFx0aWYgKCFzTW9kdWxlIHx8ICFzTWV0aG9kKSB7XG5cdFx0XHRMb2cuZGVidWcoXCJCb3RoIHRoZSBtb2R1bGUgYW5kIHRoZSBtZXRob2QgbXVzdCBiZSBkZWZpbmVkIHRvIGV4ZWN1dGUgYSBjdXN0b20gYWN0aW9uXCIpO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdC8vVGhlIHNvdXJjZSB3b3VsZCBiZSBjb21tYW5kIGV4ZWN1dGlvbiwgaW4gY2FzZSBhIGNvbW1hbmQgaXMgZGVmaW5lZCBmb3IgdGhlIGFjdGlvbiBpbiB0aGUgbWFuaWZlc3QuXG5cdFx0Y29uc3Qgb1NvdXJjZSA9IChvRXZlbnQuZ2V0U291cmNlID8gb0V2ZW50LmdldFNvdXJjZSgpIDogKG9FdmVudCBhcyB7IG9Tb3VyY2U/OiBFdmVudFByb3ZpZGVyIH0pLm9Tb3VyY2UpIGFzIENvbnRyb2wsXG5cdFx0XHRvVmlldyA9IENvbW1vblV0aWxzLmdldFRhcmdldFZpZXcob1NvdXJjZSksXG5cdFx0XHRvQmluZGluZ0NvbnRleHQgPSBvU291cmNlLmdldEJpbmRpbmdDb250ZXh0KCkhO1xuXG5cdFx0bGV0IGxpc3RCaW5kaW5nOiBPRGF0YUxpc3RCaW5kaW5nIHwgdW5kZWZpbmVkO1xuXHRcdGxldCBhU2VsZWN0ZWRDb250ZXh0czogQ29udGV4dFtdO1xuXG5cdFx0aWYgKG9QYXJhbWV0ZXJzICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdGFTZWxlY3RlZENvbnRleHRzID0gb1BhcmFtZXRlcnMuY29udGV4dHMgfHwgW107XG5cdFx0fSBlbHNlIGlmIChvQmluZGluZ0NvbnRleHQgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0YVNlbGVjdGVkQ29udGV4dHMgPSBbb0JpbmRpbmdDb250ZXh0XTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0YVNlbGVjdGVkQ29udGV4dHMgPSBbXTtcblx0XHR9XG5cdFx0aWYgKG9Tb3VyY2UuZ2V0UGFyZW50KCk/LmlzQShcInNhcC51aS5tZGMuYWN0aW9udG9vbGJhci5BY3Rpb25Ub29sYmFyQWN0aW9uXCIpIHx8IG9Tb3VyY2UuZ2V0UGFyZW50KCk/LmlzQShcInNhcC5tLk1lbnVcIikpIHtcblx0XHRcdGxpc3RCaW5kaW5nID0gRlBNSGVscGVyLmdldE1kY1RhYmxlKG9Tb3VyY2UpPy5nZXRSb3dCaW5kaW5nKCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIEZQTUhlbHBlci5sb2FkTW9kdWxlQW5kQ2FsbE1ldGhvZChzTW9kdWxlLCBzTWV0aG9kLCBvVmlldywgb0JpbmRpbmdDb250ZXh0LCBhU2VsZWN0ZWRDb250ZXh0cywgbGlzdEJpbmRpbmcpO1xuXHR9LFxuXHRnZXRNZGNUYWJsZTogZnVuY3Rpb24gKGNvbnRyb2w6IFVJNUVsZW1lbnQpOiBNZGNUYWJsZSB8IG51bGwgfCB1bmRlZmluZWQge1xuXHRcdGNvbnN0IHBhcmVudCA9IGNvbnRyb2wuZ2V0UGFyZW50KCk7XG5cdFx0aWYgKCFwYXJlbnQgfHwgcGFyZW50LmlzQTxNZGNUYWJsZT4oXCJzYXAudWkubWRjLlRhYmxlXCIpKSB7XG5cdFx0XHRyZXR1cm4gcGFyZW50O1xuXHRcdH1cblx0XHRyZXR1cm4gRlBNSGVscGVyLmdldE1kY1RhYmxlKHBhcmVudCBhcyBDb250cm9sKTtcblx0fSxcblx0dmFsaWRhdGlvbldyYXBwZXI6IGFzeW5jIGZ1bmN0aW9uIChcblx0XHRzTW9kdWxlOiBzdHJpbmcsXG5cdFx0c01ldGhvZDogc3RyaW5nLFxuXHRcdG9WYWxpZGF0aW9uQ29udGV4dHM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuXHRcdG9WaWV3OiBWaWV3LFxuXHRcdG9CaW5kaW5nQ29udGV4dDogQ29udGV4dFxuXHQpOiBQcm9taXNlPHsgbWVzc2FnZVRhcmdldD86IHN0cmluZzsgbWVzc2FnZVRleHQ6IHN0cmluZyB9W10+IHtcblx0XHRyZXR1cm4gRlBNSGVscGVyLmxvYWRNb2R1bGVBbmRDYWxsTWV0aG9kKHNNb2R1bGUsIHNNZXRob2QsIG9WaWV3LCBvQmluZGluZ0NvbnRleHQsIG9WYWxpZGF0aW9uQ29udGV4dHMpIGFzIFByb21pc2U8XG5cdFx0XHR7IG1lc3NhZ2VUYXJnZXQ/OiBzdHJpbmc7IG1lc3NhZ2VUZXh0OiBzdHJpbmcgfVtdXG5cdFx0Pjtcblx0fSxcblx0LyoqXG5cdCAqIFJldHVybnMgYW4gZXh0ZXJuYWwgY3VzdG9tIGZ1bmN0aW9uIGRlZmluZWQgZWl0aGVyIGluIGEgY3VzdG9tIGNvbnRyb2xsZXIgZXh0ZW5zaW9uIG9yIGluIGFuIGV4dGVybmFsIG1vZHVsZS5cblx0ICpcblx0ICogQHBhcmFtIG1vZHVsZU5hbWUgVGhlIGV4dGVybmFsIG1vZHVsZSBuYW1lLCBvciAvZXh0ZW5zaW9uLzxwYXRoIHRvIHRoZSBjdXN0b20gY29udHJvbGxlciBleHRlbnNpb24gbW9kdWxlPlxuXHQgKiBAcGFyYW0gZnVuY3Rpb25OYW1lIFRoZSBuYW1lIG9mIHRoZSBmdW5jdGlvblxuXHQgKiBAcGFyYW0gc291cmNlIEEgY29udHJvbCBpbiB0aGUgdmlldyBvciBhbiBldmVudCB0cmlnZ2VyZWQgYnkgYSBjb250cm9sIGluIHRoZSB2aWV3XG5cdCAqIEByZXR1cm5zIFRoZSBmdW5jdGlvbiAob3IgdW5kZWZpbmVkIGlmIGl0IGNvdWxkbid0IGJlIGZvdW5kKVxuXHQgKi9cblx0Z2V0Q3VzdG9tRnVuY3Rpb248RnVuY3Rpb25UeXBlPihcblx0XHRtb2R1bGVOYW1lOiBzdHJpbmcsXG5cdFx0ZnVuY3Rpb25OYW1lOiBzdHJpbmcsXG5cdFx0c291cmNlOiBDb250cm9sIHwgVUk1RXZlbnQ8e30sIENvbnRyb2w+XG5cdCk6IEZ1bmN0aW9uVHlwZSB8IHVuZGVmaW5lZCB7XG5cdFx0bGV0IGNvbnRyb2w6IENvbnRyb2w7XG5cdFx0aWYgKHNvdXJjZS5pc0E8VUk1RXZlbnQ+KFwic2FwLnVpLmJhc2UuRXZlbnRcIikpIHtcblx0XHRcdGNvbnRyb2wgPSBzb3VyY2UuZ2V0U291cmNlKCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGNvbnRyb2wgPSBzb3VyY2U7XG5cdFx0fVxuXHRcdGNvbnN0IHZpZXcgPSBDb21tb25VdGlscy5nZXRUYXJnZXRWaWV3KGNvbnRyb2wpO1xuXHRcdGNvbnN0IGV4dGVuc2lvbkFQSSA9IHZpZXcuZ2V0Q29udHJvbGxlcigpLmdldEV4dGVuc2lvbkFQSSgpO1xuXG5cdFx0bGV0IGN1c3RvbUZ1bmN0aW9uOiBGdW5jdGlvblR5cGUgfCB1bmRlZmluZWQ7XG5cblx0XHRpZiAobW9kdWxlTmFtZS5zdGFydHNXaXRoKFwiL2V4dGVuc2lvbi9cIikpIHtcblx0XHRcdGNvbnN0IGNvbnRyb2xsZXJFeHQgPSBPYmplY3RQYXRoLmdldChtb2R1bGVOYW1lLnJlcGxhY2UoL1xcLy9nLCBcIi5cIikuc3Vic3RyaW5nKDEpLCBleHRlbnNpb25BUEkpO1xuXHRcdFx0Y3VzdG9tRnVuY3Rpb24gPSBjb250cm9sbGVyRXh0ID8gY29udHJvbGxlckV4dFtmdW5jdGlvbk5hbWVdIDogdW5kZWZpbmVkO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRjb25zdCBtb2R1bGUgPSBzYXAudWkucmVxdWlyZShtb2R1bGVOYW1lKTtcblx0XHRcdGN1c3RvbUZ1bmN0aW9uID0gbW9kdWxlID8gbW9kdWxlW2Z1bmN0aW9uTmFtZV0/LmJpbmQoZXh0ZW5zaW9uQVBJKSA6IHVuZGVmaW5lZDtcblx0XHR9XG5cblx0XHRpZiAoIWN1c3RvbUZ1bmN0aW9uKSB7XG5cdFx0XHRMb2cuZXJyb3IoYENvdWxkbid0IGZpbmQgbWV0aG9kICR7ZnVuY3Rpb25OYW1lfSBpbiAke21vZHVsZU5hbWV9YCk7XG5cdFx0fVxuXHRcdHJldHVybiBjdXN0b21GdW5jdGlvbjtcblx0fVxufTtcblxuZXhwb3J0IGRlZmF1bHQgRlBNSGVscGVyO1xuIl0sIm1hcHBpbmdzIjoiO0FBQUE7QUFBQTtBQUFBOzs7O0VBY0Es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
@@ -1,8 +1,8 @@
1
1
  import Log from "sap/base/Log";
2
2
  import ObjectPath from "sap/base/util/ObjectPath";
3
+ import type { FEView } from "sap/fe/core/BaseController";
3
4
  import CommonUtils from "sap/fe/core/CommonUtils";
4
5
  import type ExtensionAPI from "sap/fe/core/ExtensionAPI";
5
- import type PageController from "sap/fe/core/PageController";
6
6
  import type UI5Event from "sap/ui/base/Event";
7
7
  import type EventProvider from "sap/ui/base/EventProvider";
8
8
  import type Control from "sap/ui/core/Control";
@@ -13,53 +13,60 @@ import type Context from "sap/ui/model/Context";
13
13
  import type ODataListBinding from "sap/ui/model/odata/v4/ODataListBinding";
14
14
 
15
15
  const FPMHelper = {
16
+ loadModuleAndCallMethod: async function (module: string, method: string, view: View, ...args: unknown[]): Promise<unknown> {
17
+ return new Promise(function (resolve: (value: unknown) => void) {
18
+ let extensionAPI: ExtensionAPI | undefined;
19
+ if (
20
+ view.getControllerName() === "sap.fe.templates.ObjectPage.ObjectPageController" ||
21
+ view.getControllerName() === "sap.fe.templates.ListReport.ListReportController"
22
+ ) {
23
+ extensionAPI = (view as FEView).getController().getExtensionAPI();
24
+ }
25
+
26
+ if (module.startsWith("/extension/")) {
27
+ const fnTarget = ObjectPath.get(module.replace(/\//g, ".").substring(1), extensionAPI);
28
+ resolve(fnTarget[method](...args));
29
+ } else {
30
+ sap.ui.require([module], function (loadedModule: Record<string, Function>) {
31
+ // - we bind the action to the extensionAPI of the controller so it has the same scope as a custom section
32
+ // - we provide the context as API, maybe if needed further properties
33
+ resolve(loadedModule[method].bind(extensionAPI)(...args));
34
+ });
35
+ }
36
+ });
37
+ },
38
+
16
39
  actionWrapper: async function (
17
40
  oEvent: UI5Event,
18
41
  sModule?: string,
19
42
  sMethod?: string,
20
43
  oParameters?: { contexts?: Context[] }
21
44
  ): Promise<unknown> {
22
- return new Promise(function (resolve: (value: any) => void) {
23
- //The source would be command execution, in case a command is defined for the action in the manifest.
24
- const oSource = (oEvent.getSource ? oEvent.getSource() : (oEvent as { oSource?: EventProvider }).oSource) as Control,
25
- oView = CommonUtils.getTargetView(oSource),
26
- oBindingContext = oSource.getBindingContext()!;
27
- let oExtensionAPI: ExtensionAPI | undefined;
28
- let listBinding: ODataListBinding | undefined;
29
- let aSelectedContexts: Context[];
45
+ if (!sModule || !sMethod) {
46
+ Log.debug("Both the module and the method must be defined to execute a custom action");
47
+ return;
48
+ }
30
49
 
31
- if (oParameters !== undefined) {
32
- aSelectedContexts = oParameters.contexts || [];
33
- } else if (oBindingContext !== undefined) {
34
- aSelectedContexts = [oBindingContext];
35
- } else {
36
- aSelectedContexts = [];
37
- }
38
- if (oSource.getParent()?.isA("sap.ui.mdc.actiontoolbar.ActionToolbarAction") || oSource.getParent()?.isA("sap.m.Menu")) {
39
- listBinding = FPMHelper.getMdcTable(oSource)?.getRowBinding();
40
- }
41
- if (
42
- oView.getControllerName() === "sap.fe.templates.ObjectPage.ObjectPageController" ||
43
- oView.getControllerName() === "sap.fe.templates.ListReport.ListReportController"
44
- ) {
45
- oExtensionAPI = oView.getController().getExtensionAPI();
46
- }
50
+ //The source would be command execution, in case a command is defined for the action in the manifest.
51
+ const oSource = (oEvent.getSource ? oEvent.getSource() : (oEvent as { oSource?: EventProvider }).oSource) as Control,
52
+ oView = CommonUtils.getTargetView(oSource),
53
+ oBindingContext = oSource.getBindingContext()!;
47
54
 
48
- if (sModule && sMethod) {
49
- if (sModule.startsWith("/extension/")) {
50
- const fnTarget = ObjectPath.get(sModule.replace(/\//g, ".").substring(1), oExtensionAPI);
51
- resolve(fnTarget[sMethod](oBindingContext, aSelectedContexts, listBinding));
52
- } else {
53
- sap.ui.require([sModule], function (module: Record<string, Function>) {
54
- // - we bind the action to the extensionAPI of the controller so it has the same scope as a custom section
55
- // - we provide the context as API, maybe if needed further properties
56
- resolve(module[sMethod].bind(oExtensionAPI)(oBindingContext, aSelectedContexts, listBinding));
57
- });
58
- }
59
- } else {
60
- Log.debug("Both the module and the method must be defined to execute a custom action");
61
- }
62
- });
55
+ let listBinding: ODataListBinding | undefined;
56
+ let aSelectedContexts: Context[];
57
+
58
+ if (oParameters !== undefined) {
59
+ aSelectedContexts = oParameters.contexts || [];
60
+ } else if (oBindingContext !== undefined) {
61
+ aSelectedContexts = [oBindingContext];
62
+ } else {
63
+ aSelectedContexts = [];
64
+ }
65
+ if (oSource.getParent()?.isA("sap.ui.mdc.actiontoolbar.ActionToolbarAction") || oSource.getParent()?.isA("sap.m.Menu")) {
66
+ listBinding = FPMHelper.getMdcTable(oSource)?.getRowBinding();
67
+ }
68
+
69
+ return FPMHelper.loadModuleAndCallMethod(sModule, sMethod, oView, oBindingContext, aSelectedContexts, listBinding);
63
70
  },
64
71
  getMdcTable: function (control: UI5Element): MdcTable | null | undefined {
65
72
  const parent = control.getParent();
@@ -75,22 +82,9 @@ const FPMHelper = {
75
82
  oView: View,
76
83
  oBindingContext: Context
77
84
  ): Promise<{ messageTarget?: string; messageText: string }[]> {
78
- return new Promise(function (resolve: (value: any) => void) {
79
- let oExtensionAPI: ExtensionAPI;
80
-
81
- if (
82
- oView.getControllerName() === "sap.fe.templates.ObjectPage.ObjectPageController" ||
83
- oView.getControllerName() === "sap.fe.templates.ListReport.ListReportController"
84
- ) {
85
- oExtensionAPI = (oView.getController() as PageController).getExtensionAPI();
86
- }
87
-
88
- sap.ui.require([sModule], function (module: any) {
89
- // - we bind the action to the extensionAPI of the controller so it has the same scope as a custom section
90
- // - we provide the context as API, maybe if needed further properties
91
- resolve(module[sMethod].bind(oExtensionAPI)(oBindingContext, oValidationContexts));
92
- });
93
- });
85
+ return FPMHelper.loadModuleAndCallMethod(sModule, sMethod, oView, oBindingContext, oValidationContexts) as Promise<
86
+ { messageTarget?: string; messageText: string }[]
87
+ >;
94
88
  },
95
89
  /**
96
90
  * Returns an external custom function defined either in a custom controller extension or in an external module.