@sapui5/sap.suite.ui.generic.template 1.149.0 → 1.150.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 (136) hide show
  1. package/package.json +1 -1
  2. package/src/sap/suite/ui/generic/template/.library +1 -1
  3. package/src/sap/suite/ui/generic/template/AnalyticalListPage/controller/VisualFilterDialogController.js +4 -4
  4. package/src/sap/suite/ui/generic/template/AnalyticalListPage/manifest.json +1 -1
  5. package/src/sap/suite/ui/generic/template/Canvas/manifest.json +1 -1
  6. package/src/sap/suite/ui/generic/template/ListReport/controller/ControllerImplementation.js +6 -3
  7. package/src/sap/suite/ui/generic/template/ListReport/manifest.json +1 -1
  8. package/src/sap/suite/ui/generic/template/ListReport/view/fragments/DefaultVariant.fragment.xml +12 -13
  9. package/src/sap/suite/ui/generic/template/ObjectPage/Component.js +7 -0
  10. package/src/sap/suite/ui/generic/template/ObjectPage/controller/ControllerImplementation.js +39 -5
  11. package/src/sap/suite/ui/generic/template/ObjectPage/controller/PasteHandler.js +100 -18
  12. package/src/sap/suite/ui/generic/template/ObjectPage/controller/ValueHelpDataFetcher.js +178 -0
  13. package/src/sap/suite/ui/generic/template/ObjectPage/i18n/i18n.properties +6 -0
  14. package/src/sap/suite/ui/generic/template/ObjectPage/i18n/i18n_ar.properties +4 -0
  15. package/src/sap/suite/ui/generic/template/ObjectPage/i18n/i18n_bg.properties +4 -0
  16. package/src/sap/suite/ui/generic/template/ObjectPage/i18n/i18n_ca.properties +4 -0
  17. package/src/sap/suite/ui/generic/template/ObjectPage/i18n/i18n_cnr.properties +4 -0
  18. package/src/sap/suite/ui/generic/template/ObjectPage/i18n/i18n_cs.properties +4 -0
  19. package/src/sap/suite/ui/generic/template/ObjectPage/i18n/i18n_cy.properties +4 -0
  20. package/src/sap/suite/ui/generic/template/ObjectPage/i18n/i18n_da.properties +4 -0
  21. package/src/sap/suite/ui/generic/template/ObjectPage/i18n/i18n_de.properties +4 -0
  22. package/src/sap/suite/ui/generic/template/ObjectPage/i18n/i18n_el.properties +5 -1
  23. package/src/sap/suite/ui/generic/template/ObjectPage/i18n/i18n_en.properties +4 -0
  24. package/src/sap/suite/ui/generic/template/ObjectPage/i18n/i18n_en_GB.properties +4 -0
  25. package/src/sap/suite/ui/generic/template/ObjectPage/i18n/i18n_en_US_sappsd.properties +4 -0
  26. package/src/sap/suite/ui/generic/template/ObjectPage/i18n/i18n_en_US_saprigi.properties +4 -0
  27. package/src/sap/suite/ui/generic/template/ObjectPage/i18n/i18n_es.properties +4 -0
  28. package/src/sap/suite/ui/generic/template/ObjectPage/i18n/i18n_es_MX.properties +4 -0
  29. package/src/sap/suite/ui/generic/template/ObjectPage/i18n/i18n_et.properties +4 -0
  30. package/src/sap/suite/ui/generic/template/ObjectPage/i18n/i18n_fi.properties +4 -0
  31. package/src/sap/suite/ui/generic/template/ObjectPage/i18n/i18n_fr.properties +4 -0
  32. package/src/sap/suite/ui/generic/template/ObjectPage/i18n/i18n_fr_CA.properties +4 -0
  33. package/src/sap/suite/ui/generic/template/ObjectPage/i18n/i18n_hi.properties +4 -0
  34. package/src/sap/suite/ui/generic/template/ObjectPage/i18n/i18n_hr.properties +4 -0
  35. package/src/sap/suite/ui/generic/template/ObjectPage/i18n/i18n_hu.properties +4 -0
  36. package/src/sap/suite/ui/generic/template/ObjectPage/i18n/i18n_id.properties +4 -0
  37. package/src/sap/suite/ui/generic/template/ObjectPage/i18n/i18n_it.properties +4 -0
  38. package/src/sap/suite/ui/generic/template/ObjectPage/i18n/i18n_iw.properties +4 -0
  39. package/src/sap/suite/ui/generic/template/ObjectPage/i18n/i18n_ja.properties +4 -0
  40. package/src/sap/suite/ui/generic/template/ObjectPage/i18n/i18n_kk.properties +4 -0
  41. package/src/sap/suite/ui/generic/template/ObjectPage/i18n/i18n_ko.properties +4 -0
  42. package/src/sap/suite/ui/generic/template/ObjectPage/i18n/i18n_lt.properties +4 -0
  43. package/src/sap/suite/ui/generic/template/ObjectPage/i18n/i18n_lv.properties +4 -0
  44. package/src/sap/suite/ui/generic/template/ObjectPage/i18n/i18n_mk.properties +4 -0
  45. package/src/sap/suite/ui/generic/template/ObjectPage/i18n/i18n_ms.properties +4 -0
  46. package/src/sap/suite/ui/generic/template/ObjectPage/i18n/i18n_nl.properties +4 -0
  47. package/src/sap/suite/ui/generic/template/ObjectPage/i18n/i18n_no.properties +6 -2
  48. package/src/sap/suite/ui/generic/template/ObjectPage/i18n/i18n_pl.properties +4 -0
  49. package/src/sap/suite/ui/generic/template/ObjectPage/i18n/i18n_pt.properties +4 -0
  50. package/src/sap/suite/ui/generic/template/ObjectPage/i18n/i18n_pt_PT.properties +4 -0
  51. package/src/sap/suite/ui/generic/template/ObjectPage/i18n/i18n_ro.properties +4 -0
  52. package/src/sap/suite/ui/generic/template/ObjectPage/i18n/i18n_ru.properties +4 -0
  53. package/src/sap/suite/ui/generic/template/ObjectPage/i18n/i18n_sh.properties +4 -0
  54. package/src/sap/suite/ui/generic/template/ObjectPage/i18n/i18n_sk.properties +4 -0
  55. package/src/sap/suite/ui/generic/template/ObjectPage/i18n/i18n_sl.properties +4 -0
  56. package/src/sap/suite/ui/generic/template/ObjectPage/i18n/i18n_sr.properties +4 -0
  57. package/src/sap/suite/ui/generic/template/ObjectPage/i18n/i18n_sv.properties +4 -0
  58. package/src/sap/suite/ui/generic/template/ObjectPage/i18n/i18n_th.properties +4 -0
  59. package/src/sap/suite/ui/generic/template/ObjectPage/i18n/i18n_tr.properties +4 -0
  60. package/src/sap/suite/ui/generic/template/ObjectPage/i18n/i18n_uk.properties +4 -0
  61. package/src/sap/suite/ui/generic/template/ObjectPage/i18n/i18n_vi.properties +4 -0
  62. package/src/sap/suite/ui/generic/template/ObjectPage/i18n/i18n_zh_CN.properties +4 -0
  63. package/src/sap/suite/ui/generic/template/ObjectPage/i18n/i18n_zh_TW.properties +4 -0
  64. package/src/sap/suite/ui/generic/template/ObjectPage/manifest.json +1 -1
  65. package/src/sap/suite/ui/generic/template/ObjectPage/view/fragments/Actions.fragment.xml +9 -11
  66. package/src/sap/suite/ui/generic/template/QuickCreate/manifest.json +1 -1
  67. package/src/sap/suite/ui/generic/template/QuickView/manifest.json +1 -1
  68. package/src/sap/suite/ui/generic/template/designtime/utils/designtimeUtils.js +2 -2
  69. package/src/sap/suite/ui/generic/template/genericUtilities/controlStateWrapperFactory/SmartFilterBarWrapper.js +48 -8
  70. package/src/sap/suite/ui/generic/template/js/AnnotationHelper.js +0 -1
  71. package/src/sap/suite/ui/generic/template/lib/AppComponent.js +1 -1
  72. package/src/sap/suite/ui/generic/template/lib/CRUDManager.js +24 -14
  73. package/src/sap/suite/ui/generic/template/lib/CommonEventHandlers.js +22 -3
  74. package/src/sap/suite/ui/generic/template/lib/MessageUtils.js +4 -3
  75. package/src/sap/suite/ui/generic/template/lib/ai/EasyFill/EasyFillAIOrchestrator.js +43 -9
  76. package/src/sap/suite/ui/generic/template/lib/ai/EasyFill/EasyFillApplyHandler.js +67 -218
  77. package/src/sap/suite/ui/generic/template/lib/ai/EasyFill/EasyFillDialogController.js +55 -8
  78. package/src/sap/suite/ui/generic/template/lib/ai/EasyFill/EasyFillFieldCollector.js +214 -35
  79. package/src/sap/suite/ui/generic/template/lib/ai/EasyFill/EasyFillFormRenderer.js +93 -18
  80. package/src/sap/suite/ui/generic/template/lib/ai/EasyFill/EasyFillHandler.js +421 -46
  81. package/src/sap/suite/ui/generic/template/lib/ai/EasyFill/EasyFillTableRenderer.js +512 -63
  82. package/src/sap/suite/ui/generic/template/lib/ai/EasyFill/fragments/EasyFillDialog.fragment.xml +33 -22
  83. package/src/sap/suite/ui/generic/template/lib/ai/EasyFilterBarHandler.js +90 -73
  84. package/src/sap/suite/ui/generic/template/lib/i18n/i18n.properties +27 -3
  85. package/src/sap/suite/ui/generic/template/lib/i18n/i18n_ar.properties +18 -2
  86. package/src/sap/suite/ui/generic/template/lib/i18n/i18n_bg.properties +18 -2
  87. package/src/sap/suite/ui/generic/template/lib/i18n/i18n_ca.properties +18 -2
  88. package/src/sap/suite/ui/generic/template/lib/i18n/i18n_cnr.properties +18 -2
  89. package/src/sap/suite/ui/generic/template/lib/i18n/i18n_cs.properties +18 -2
  90. package/src/sap/suite/ui/generic/template/lib/i18n/i18n_cy.properties +18 -2
  91. package/src/sap/suite/ui/generic/template/lib/i18n/i18n_da.properties +18 -2
  92. package/src/sap/suite/ui/generic/template/lib/i18n/i18n_de.properties +18 -2
  93. package/src/sap/suite/ui/generic/template/lib/i18n/i18n_el.properties +18 -2
  94. package/src/sap/suite/ui/generic/template/lib/i18n/i18n_en.properties +18 -2
  95. package/src/sap/suite/ui/generic/template/lib/i18n/i18n_en_GB.properties +18 -2
  96. package/src/sap/suite/ui/generic/template/lib/i18n/i18n_en_US_saprigi.properties +18 -2
  97. package/src/sap/suite/ui/generic/template/lib/i18n/i18n_es.properties +18 -2
  98. package/src/sap/suite/ui/generic/template/lib/i18n/i18n_es_MX.properties +18 -2
  99. package/src/sap/suite/ui/generic/template/lib/i18n/i18n_et.properties +18 -2
  100. package/src/sap/suite/ui/generic/template/lib/i18n/i18n_fi.properties +18 -2
  101. package/src/sap/suite/ui/generic/template/lib/i18n/i18n_fr.properties +20 -4
  102. package/src/sap/suite/ui/generic/template/lib/i18n/i18n_fr_CA.properties +18 -2
  103. package/src/sap/suite/ui/generic/template/lib/i18n/i18n_hi.properties +18 -2
  104. package/src/sap/suite/ui/generic/template/lib/i18n/i18n_hr.properties +19 -3
  105. package/src/sap/suite/ui/generic/template/lib/i18n/i18n_hu.properties +18 -2
  106. package/src/sap/suite/ui/generic/template/lib/i18n/i18n_id.properties +18 -2
  107. package/src/sap/suite/ui/generic/template/lib/i18n/i18n_it.properties +18 -2
  108. package/src/sap/suite/ui/generic/template/lib/i18n/i18n_iw.properties +18 -2
  109. package/src/sap/suite/ui/generic/template/lib/i18n/i18n_ja.properties +18 -2
  110. package/src/sap/suite/ui/generic/template/lib/i18n/i18n_kk.properties +18 -2
  111. package/src/sap/suite/ui/generic/template/lib/i18n/i18n_ko.properties +18 -2
  112. package/src/sap/suite/ui/generic/template/lib/i18n/i18n_lt.properties +18 -2
  113. package/src/sap/suite/ui/generic/template/lib/i18n/i18n_lv.properties +18 -2
  114. package/src/sap/suite/ui/generic/template/lib/i18n/i18n_mk.properties +18 -2
  115. package/src/sap/suite/ui/generic/template/lib/i18n/i18n_ms.properties +18 -2
  116. package/src/sap/suite/ui/generic/template/lib/i18n/i18n_nl.properties +18 -2
  117. package/src/sap/suite/ui/generic/template/lib/i18n/i18n_no.properties +18 -2
  118. package/src/sap/suite/ui/generic/template/lib/i18n/i18n_pl.properties +18 -2
  119. package/src/sap/suite/ui/generic/template/lib/i18n/i18n_pt.properties +18 -2
  120. package/src/sap/suite/ui/generic/template/lib/i18n/i18n_pt_PT.properties +18 -2
  121. package/src/sap/suite/ui/generic/template/lib/i18n/i18n_ro.properties +18 -2
  122. package/src/sap/suite/ui/generic/template/lib/i18n/i18n_ru.properties +18 -2
  123. package/src/sap/suite/ui/generic/template/lib/i18n/i18n_sh.properties +18 -2
  124. package/src/sap/suite/ui/generic/template/lib/i18n/i18n_sk.properties +18 -2
  125. package/src/sap/suite/ui/generic/template/lib/i18n/i18n_sl.properties +36 -20
  126. package/src/sap/suite/ui/generic/template/lib/i18n/i18n_sr.properties +18 -2
  127. package/src/sap/suite/ui/generic/template/lib/i18n/i18n_sv.properties +29 -13
  128. package/src/sap/suite/ui/generic/template/lib/i18n/i18n_th.properties +18 -2
  129. package/src/sap/suite/ui/generic/template/lib/i18n/i18n_tr.properties +18 -2
  130. package/src/sap/suite/ui/generic/template/lib/i18n/i18n_uk.properties +18 -2
  131. package/src/sap/suite/ui/generic/template/lib/i18n/i18n_vi.properties +18 -2
  132. package/src/sap/suite/ui/generic/template/lib/i18n/i18n_zh_CN.properties +18 -2
  133. package/src/sap/suite/ui/generic/template/lib/i18n/i18n_zh_TW.properties +18 -2
  134. package/src/sap/suite/ui/generic/template/lib/navigation/NavigationController.js +1 -1
  135. package/src/sap/suite/ui/generic/template/library.js +1 -1
  136. package/src/sap/suite/ui/generic/template/themes/base/ObjectPage.less +22 -1
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sapui5/sap.suite.ui.generic.template",
3
- "version": "1.149.0",
3
+ "version": "1.150.0",
4
4
  "description": "SAPUI5 Library sap.suite.ui.generic.template",
5
5
  "keywords": [
6
6
  "sapui5",
@@ -7,7 +7,7 @@
7
7
 
8
8
  (c) Copyright 2009-2015 SAP SE. All rights reserved
9
9
  </copyright>
10
- <version>1.149.0</version>
10
+ <version>1.150.0</version>
11
11
 
12
12
  <documentation>Library with generic Suite UI templates.</documentation>
13
13
 
@@ -1,6 +1,6 @@
1
1
  sap.ui.define([
2
2
  "sap/m/Button", "sap/m/Label", "sap/m/Dialog", "sap/m/Bar", "sap/m/SearchField", "sap/m/Text",
3
- "sap/m/Toolbar", "sap/m/ToolbarSpacer", "sap/m/Title", "sap/m/VBox", "sap/m/HBox", "sap/m/CheckBox",
3
+ "sap/m/Toolbar", "sap/m/ToolbarSpacer", "sap/m/Title", "sap/m/VBox", "sap/m/HBox", "sap/m/CheckBox", "sap/m/FlexItemData",
4
4
  "sap/m/Link", "sap/m/List", "sap/m/CustomListItem", "sap/m/StandardListItem", "sap/m/Popover",
5
5
  "sap/ui/layout/GridData",
6
6
  "sap/ui/core/mvc/Controller", "sap/suite/ui/generic/template/AnalyticalListPage/util/FilterUtil",
@@ -21,7 +21,7 @@ sap.ui.define([
21
21
  "sap/m/DynamicDateRange",
22
22
  "sap/suite/ui/generic/template/genericUtilities/metadataAnalyser"
23
23
  ], function(Button, Label, Dialog, Bar, SearchField, Text, Toolbar, ToolbarSpacer, Title,
24
- VBox, HBox, CheckBox, Link, List, CustomListItem, StandardListItem, Popover,
24
+ VBox, HBox, CheckBox, FlexItemData, Link, List, CustomListItem, StandardListItem, Popover,
25
25
  GridData, Controller, FilterUtil, V4Terms, Filter, DropDownController, DynamicDateRangeController, OverflowToolbarButton, JSONModel,
26
26
  OverflowToolbar, OverflowToolbarLayoutData, CustomData, Device, SapMLibrary, SapCoreLibrary, FilterOperator, DatePicker, FeLogger, InvisibleText, deepEqual, StableIdHelper, extend, deepExtend, DynamicDateRange, metadataAnalyser) {
27
27
  "use strict";
@@ -346,8 +346,8 @@ sap.ui.define([
346
346
  }).data("idx", i).attachSelect(null, that._onCheckBoxSelect, that)
347
347
  ]
348
348
  }).setAlignItems("Center"));
349
- item[0].setWidth("20%");
350
- item[1].setWidth("80%");
349
+ item[0].setLayoutData(new FlexItemData({ growFactor: 0, shrinkFactor: 0, baseSize: "8rem" }));
350
+ item[1].setLayoutData(new FlexItemData({ growFactor: 1, shrinkFactor: 1, minWidth: "0px" }));
351
351
  }
352
352
  var oChartBox = new HBox({
353
353
  items : item
@@ -8,7 +8,7 @@
8
8
  "i18n": "i18n/i18n.properties",
9
9
  "applicationVersion": {
10
10
  "__comment": "applicationVersion oder componentversion??",
11
- "version": "1.149.0"
11
+ "version": "1.150.0"
12
12
  },
13
13
  "title": "{{TITLE}}",
14
14
  "description": "{{DESCRIPTION}}",
@@ -8,7 +8,7 @@
8
8
  "i18n": "i18n/i18n.properties",
9
9
  "applicationVersion": {
10
10
  "__comment": "applicationVersion oder componentversion??",
11
- "version": "1.149.0"
11
+ "version": "1.150.0"
12
12
  },
13
13
  "title": "Canvas",
14
14
  "description": "Canvas Page",
@@ -939,9 +939,12 @@ sap.ui.define([
939
939
  var oTempModel = oTemplateUtils.oComponentUtils.getTemplatePrivateModel();
940
940
  if (oTempModel.getProperty("/listReport/filterMode") === "easyFilter") {
941
941
  oSmartFilterbar.setVisible(false);
942
- var oTemplatePrivateModel = oTemplateUtils.oComponentUtils.getTemplatePrivateModel();
943
- oTemplatePrivateModel.setProperty("/listReport/firstSelection", true);
944
- oTemplatePrivateModel.setProperty("/generic/bDataAreShownInTable", false);
942
+ // Only show gray overlay when data in table is present.
943
+ // filters scenario where gray overlay shows up when No data Illustrated msg is rendered
944
+ if (oTempModel.getProperty("/generic/bDataAreShownInTable")) {
945
+ oTempModel.setProperty("/listReport/firstSelection", true);
946
+ oTempModel.setProperty("/generic/bDataAreShownInTable", false);
947
+ }
945
948
  } else {
946
949
  PXFeedback.triggerPXIntegration("toggleSwitchV2");
947
950
  oSmartFilterbar.setVisible(true);
@@ -8,7 +8,7 @@
8
8
  "i18n": "i18n/i18n.properties",
9
9
  "applicationVersion": {
10
10
  "__comment": "applicationVersion oder componentversion??",
11
- "version": "1.149.0"
11
+ "version": "1.150.0"
12
12
  },
13
13
  "title": "{{TITLE}}",
14
14
  "description": "{{DESCRIPTION}}",
@@ -15,19 +15,18 @@
15
15
  <core:Fragment fragmentName="sap.suite.ui.generic.template.fragments.GlobalActions" type="XML"/>
16
16
  </template:repeat>
17
17
  <!--Enable the filter switch only if the easy filter is enabled-->
18
- <FlexBox renderType="Bare" visible="{= ${_templPriv>/listReport/isHeaderExpanded} &amp;&amp; ${_templPrivGlobal>/generic/fioriAI/isEasyFilterEnabled} }">
19
- <SegmentedButton id = "template::FilterSwitchButton"
20
- selectedKey="{_templPriv>/listReport/filterMode}"
21
- selectionChange="._templateEventHandlers.onFilterSwitch">
22
- <layoutData>
23
- <OverflowToolbarLayoutData priority="NeverOverflow"/>
24
- </layoutData>
25
- <items>
26
- <SegmentedButtonItem icon="sap-icon://filter-fields" tooltip="{i18n>ST_MANUAL_FILTER}" key="classic"/>
27
- <SegmentedButtonItem icon="sap-icon://ai" tooltip="{i18n>ST_EASY_FILTER}" key="easyFilter"/>
28
- </items>
29
- </SegmentedButton>
30
- </FlexBox>
18
+ <SegmentedButton id = "template::FilterSwitchButton"
19
+ visible="{= ${_templPriv>/listReport/isHeaderExpanded} &amp;&amp; ${_templPrivGlobal>/generic/fioriAI/isEasyFilterEnabled} }"
20
+ selectedKey="{_templPriv>/listReport/filterMode}"
21
+ selectionChange="._templateEventHandlers.onFilterSwitch">
22
+ <layoutData>
23
+ <OverflowToolbarLayoutData priority="NeverOverflow"/>
24
+ </layoutData>
25
+ <items>
26
+ <SegmentedButtonItem icon="sap-icon://filter-fields" tooltip="{i18n>ST_MANUAL_FILTER}" key="classic"/>
27
+ <SegmentedButtonItem icon="sap-icon://ai" tooltip="{i18n>ST_EASY_FILTER}" key="easyFilter"/>
28
+ </items>
29
+ </SegmentedButton>
31
30
  <MenuButton id="{= ${parameter>/stableId}.getStableId({type: 'ListReportAction', subType: 'Share'}) }"
32
31
  icon="sap-icon://action"
33
32
  type="Transparent"
@@ -60,6 +60,13 @@ sap.ui.define(["sap/suite/ui/generic/template/lib/TemplateAssembler",
60
60
  }
61
61
  var oTemplateModel = oComponentUtils.getTemplatePrivateModel();
62
62
  oTemplateModel.setProperty("/objectPage/displayMode", iDisplayMode);
63
+ // Expose showRelatedApps into _templPriv so the Related Apps button's visibility
64
+ // can be bound at runtime rather than resolved at XML template preprocessing time.
65
+ // This ensures the app descriptor change (appdescr_ui_generic_app_changePageConfiguration)
66
+ // is reflected after a key user enables the feature via RTA and the app reloads.
67
+ if (oTemplateModel.getProperty("/objectPage/showRelatedApps") === undefined) {
68
+ oTemplateModel.setProperty("/objectPage/showRelatedApps", oComponent.getShowRelatedApps());
69
+ }
63
70
  },
64
71
  showConfirmationOnDraftActivate: function () {
65
72
  return oComponent.getShowConfirmationOnDraftActivate();
@@ -607,9 +607,17 @@ sap.ui.define([
607
607
  var oURLParserPromise = UShellContainer.getServiceAsync("URLParsing");
608
608
  var oAllPromises = Promise.allSettled([oSiblingContextPromise, oURLParserPromise]);
609
609
  oBusyHelper.setBusy(oAllPromises.then(function (aResults) {
610
- var oSiblingContext = aResults[0].value,
610
+ var oSiblingContext = aResults[0].status === "fulfilled" ? aResults[0].value : null,
611
611
  oURLParser = aResults[1].value;
612
- var sPath = oURLParser ? sCurrentUrl.split(oURLParser.getHash(sCurrentUrl))[0] + oURLParser.getShellHash(sCurrentUrl) + "&" + oSiblingContext.sDeepPath : sCurrentUrl;
612
+ var sPath;
613
+ if (oSiblingContext && oSiblingContext.sDeepPath && oURLParser) {
614
+ sPath = sCurrentUrl.split(oURLParser.getHash(sCurrentUrl))[0] + oURLParser.getShellHash(sCurrentUrl) + "&" + oSiblingContext.sDeepPath;
615
+ } else if (oURLParser) {
616
+ sPath = sCurrentUrl.split(oURLParser.getHash(sCurrentUrl))[0] + oURLParser.getShellHash(sCurrentUrl);
617
+ } else {
618
+ sPath = sCurrentUrl;
619
+ }
620
+
613
621
  switch (target) {
614
622
  case "Email":
615
623
  sap.m.URLHelper.triggerEmail(null, sSubject, sPath);
@@ -646,11 +654,37 @@ sap.ui.define([
646
654
  oURLParserPromise = UShellContainer.getServiceAsync("URLParsing"),
647
655
  oAllPromises = Promise.allSettled([oSiblingContextPromise, oCurrentUrlPromise, oURLParserPromise]);
648
656
  return oAllPromises.then(function (aResults) {
649
- var oSiblingContext = aResults[0].value,
657
+
658
+ var oSiblingContext = aResults[0].status === "fulfilled" ? aResults[0].value : null,
650
659
  sCurrentUrl = aResults[1].value,
651
660
  oURLParser = aResults[2].value,
652
- sPath = oURLParser ? sCurrentUrl.split(oURLParser.getHash(sCurrentUrl))[0] + oURLParser.getShellHash(sCurrentUrl) + "&" + oSiblingContext.sDeepPath : sCurrentUrl,
653
- sUrl = oURLParser ? "#" + oURLParser.getShellHash(document.URL) + "&" + oSiblingContext.sDeepPath : oSiblingContext.sDeepPath;
661
+ sPath,
662
+ sUrl;
663
+
664
+
665
+ // Calculate sPath
666
+ if (oSiblingContext && oSiblingContext.sDeepPath && oURLParser) {
667
+ // When we have both sibling context AND URL parser
668
+ sPath = sCurrentUrl.split(oURLParser.getHash(sCurrentUrl))[0] + oURLParser.getShellHash(sCurrentUrl) + "&" + oSiblingContext.sDeepPath;
669
+ } else if (oURLParser) {
670
+ // When we only have URL parser (no sibling context)
671
+ sPath = sCurrentUrl.split(oURLParser.getHash(sCurrentUrl))[0] + oURLParser.getShellHash(sCurrentUrl);
672
+ } else {
673
+ // Fallback when no URL parser
674
+ sPath = sCurrentUrl;
675
+ }
676
+
677
+ // Calculate sUrl
678
+ if (oSiblingContext && oSiblingContext.sDeepPath) {
679
+ if (oURLParser) {
680
+ sUrl = "#" + oURLParser.getShellHash(document.URL) + "&" + oSiblingContext.sDeepPath;
681
+ } else {
682
+ sUrl = oSiblingContext.sDeepPath;
683
+ }
684
+ } else {
685
+ sUrl = "";
686
+ }
687
+
654
688
  return {
655
689
  serviceUrl: "",
656
690
  appTitle: oAppManifest ? oAppManifest.title : "",
@@ -2,8 +2,19 @@ sap.ui.define([
2
2
  "sap/ui/base/Object",
3
3
  "sap/base/util/extend",
4
4
  "sap/m/MessageBox",
5
+ "sap/ui/core/Element",
6
+ "sap/ui/model/ValidateException",
7
+ "./ValueHelpDataFetcher",
5
8
  "sap/suite/ui/generic/template/genericUtilities/testableHelper" // Add this import
6
- ], function (BaseObject, extend, MessageBox,testableHelper) {
9
+ ], function (
10
+ BaseObject,
11
+ extend,
12
+ MessageBox,
13
+ Element,
14
+ ValidateException,
15
+ ValueHelpDataFetcher,
16
+ testableHelper
17
+ ) {
7
18
  "use strict";
8
19
 
9
20
  function getMethods(oController, oTemplateUtils) {
@@ -15,14 +26,14 @@ sap.ui.define([
15
26
  };
16
27
  var selectionType, aColumnData, aReadOnlyFields, aFieldControl;
17
28
 
18
- /**
29
+ /**
19
30
  This class handles paste on OP table
20
31
 
21
32
  Here we have two methods "fnHandleBeforePaste" and "fnHandlePaste" which are attached with SmartTable events "beforePaste" and "paste".
22
-
23
- - Opertion based on Cell Selection mentioned below
33
+
34
+ - Operation based on Cell Selection mentioned below
24
35
  1) No Cell Selection paste - Here we add new columns if inline creation are active.
25
- 2) Single Cell Selection paste - Here if clipboard have X*Y grid it will paste to X columns and Y rows to the target selected cells and
36
+ 2) Single Cell Selection paste - Here if clipboard have X*Y grid it will paste to X columns and Y rows to the target selected cells and
26
37
  add extra rows if enough rows not present at bottom of selected cell.
27
38
  3) Multi Cell Selection paste - Here we paste to the selected X*Y grid.
28
39
  - If clipboard data row are more then selected row then we add new rows only if selection contains empty rows as well.
@@ -30,11 +41,11 @@ sap.ui.define([
30
41
 
31
42
  fnHandleBeforePaste Handles below situation :-
32
43
  - Trims out required column based on Ignored fields which means only visible columns would be shown.
33
-
44
+
34
45
  fnHandlePaste - Handles Pre-condition check like (type missing or potential readonly columns with field control, NonInsertableProperties) and then do paste operations.
35
46
  */
36
47
 
37
- /**
48
+ /**
38
49
  * Returns the Create button for the given SmartTable if it exists (otherwise a faulty value is returned)
39
50
  * @param {Object} oSmartTable The smart table object.
40
51
  */
@@ -118,7 +129,7 @@ sap.ui.define([
118
129
  /**
119
130
  * It trims out ignore field and selected area based on selection type
120
131
  * Set the Selection type to global variable.
121
- *
132
+ *
122
133
  * @param {string} sSmartTableId Smart table Id
123
134
  * @param {sap.ui.base.Event} oEvent beforePaste event
124
135
  */
@@ -128,11 +139,81 @@ sap.ui.define([
128
139
  oEvent.preventDefault();
129
140
  return;
130
141
  }
142
+ // Store column data in global variable. Used in fnShowToastAfterPaste method after paste.
131
143
  aColumnData = oEvent.getParameter("columnInfos");
132
144
  var oSelection = getSelectedRowsAndColumns(sSmartTableId);
133
145
  fnSetSelectionType(oSelection);
134
146
  fnRemoveIgnored(aColumnData);
135
147
  filterColumnsForPaste(oSelection, aColumnData);
148
+ handleDescriptionOnlyValueHelp(sSmartTableId, aColumnData);
149
+ }
150
+
151
+ /**
152
+ * Handles columns that have SmartFiled with Value Help and UI.TextArrangement = UI.TextArrangementType/TextOnly.
153
+ * It causes paste have description instead of id. Purpose of this function provide means
154
+ * to convert description back to id.
155
+ * @param {string} sSmartTableId SmartTable ID
156
+ * @param {array} aColumnData array with paste column data
157
+ */
158
+ function handleDescriptionOnlyValueHelp(sSmartTableId, aColumnData) {
159
+ if (!aColumnData || !aColumnData.length) {
160
+ return;
161
+ }
162
+ var oModel = oController.getOwnerComponent().getModel(),
163
+ oResourceBundle = oController.getOwnerComponent().getModel("i18n").getResourceBundle(),
164
+ oMetaModel = oModel.getMetaModel(),
165
+ oEntitySet = oMetaModel.getODataEntitySet(oController.byId(sSmartTableId).getEntitySet()),
166
+ oEntityType = oMetaModel.getODataEntityType(oEntitySet.entityType);
167
+ aColumnData.forEach(function(oColumnInfo) {
168
+ if (!oColumnInfo.columnId){
169
+ return;
170
+ }
171
+ var oColumn = Element.getElementById(oColumnInfo.columnId),
172
+ oColumnP13nData = oColumn.data("p13nData");
173
+ if (!(oColumnP13nData.displayBehaviour === "descriptionOnly" && oColumnP13nData.description)) {
174
+ return;
175
+ }
176
+ // Column have SmartField with Value Help and UI.TextArrangement = UI.TextArrangementType/TextOnly
177
+ delete oColumnInfo.type; // remove type and typeInstance, so customParseFunction will be used
178
+ delete oColumnInfo.typeInstance;
179
+ oColumnInfo.customParseFunction = async function(vValue) {
180
+ var sPropertyPath = oMetaModel.getODataProperty(oEntityType, oColumnP13nData.leadingProperty, true),
181
+ oPropertyContext = oMetaModel.createBindingContext(sPropertyPath),
182
+ oValueList = await oMetaModel.getODataValueLists(oPropertyContext);
183
+ if (!oValueList
184
+ || !oValueList[""]
185
+ || !oValueList[""].CollectionPath
186
+ || !oValueList[""].CollectionPath.String) {
187
+ return vValue;
188
+ }
189
+ var oValueListEntitySet = oMetaModel.getODataEntitySet(oValueList[""].CollectionPath.String),
190
+ oValueListEntityType = oMetaModel.getODataEntityType(oValueListEntitySet?.entityType);
191
+ if ((oValueList[""].SearchSupported?.Bool === "false")
192
+ || (oValueListEntitySet && oValueListEntitySet["Org.OData.Capabilities.V1.SearchRestrictions"]?.Searchable?.Bool === "false")) {
193
+ // Value help is not searchable or Value help entity set is not searchable
194
+ return vValue;
195
+ }
196
+ var aResults = await ValueHelpDataFetcher.resolveTokensValues({
197
+ sAppId: oController.getOwnerComponent().getAppComponent().getId(),
198
+ oModel: oModel,
199
+ oValueList: oValueList[""],
200
+ oValueListEntityType: oValueListEntityType,
201
+ sKey: oColumnP13nData.leadingProperty,
202
+ sSearchValue: vValue
203
+ });
204
+ if (aResults.length === 0) {
205
+ throw new ValidateException(oResourceBundle.getText("PASTE_HELPER_PASTE_ERROR_INVALID_VALUES", [vValue]));
206
+ }
207
+ if (aResults.length > 1) {
208
+ const sPotentialValues = aResults.map((oEntry) => `${oEntry.value}(${oEntry.description})`).join(", ");
209
+ throw new ValidateException(oResourceBundle.getText("PASTE_HELPER_PASTE_ERROR_AMBIGUOUS_VALUES", [sPotentialValues]));
210
+ }
211
+ // Value was successfully mapped to ID
212
+ // Replace description property to ID property
213
+ oColumnInfo.property = oColumnP13nData.leadingProperty;
214
+ return aResults[0].value;
215
+ };
216
+ });
136
217
  }
137
218
 
138
219
  // Show message dialog when data parsing error would be there.
@@ -157,7 +238,7 @@ sap.ui.define([
157
238
 
158
239
  /**
159
240
  * function will remove NonInsertableProperties propeties from record need to be added.
160
- *
241
+ *
161
242
  * @param {*} oSmartTable smart table object instance
162
243
  * @param {*} aNewRecords List of new records to be added.
163
244
  */
@@ -245,7 +326,7 @@ sap.ui.define([
245
326
 
246
327
  /**
247
328
  * Analyse selected record and segregate record to be added and update
248
- *
329
+ *
249
330
  * @param {Object} oSelection Object having selected rows and columns.
250
331
  * @param {Object} oResult Contains parse and error list.
251
332
  * @param {string} sSmartTableId smarttable stable id
@@ -382,14 +463,14 @@ sap.ui.define([
382
463
  var sMessage = sNonPastedColumns ? oTemplateUtils.oCommonUtils.getText(bMultipleColumns ? "PARTIAL_PASTE_PLURAL" : "PARTIAL_PASTE", [sNonPastedColumns]) : oTemplateUtils.oCommonUtils.getText("PASTE_COMPLETE");
383
464
  oTemplateUtils.oServices.oApplication.showMessageToast(sMessage, {duration: 5000});
384
465
  }
385
-
466
+
386
467
 
387
468
  /**
388
469
  * fnHandlePaste method will get called after fnHandleBeforePaste do all kind of column triming
389
- *
470
+ *
390
471
  * It will do pre-validation check whether pasting is feasible or not.
391
472
  * fnHandlePaste method analyse the parsed data and execute paste if table data parsing is successful.
392
- *
473
+ *
393
474
  * @param {string} sSmartTableId Smart table Id
394
475
  * @param {sap.ui.base.Event} oEvent paste event
395
476
  */
@@ -405,11 +486,12 @@ sap.ui.define([
405
486
  fnShowToastAfterPaste();
406
487
  }
407
488
  }
408
- testableHelper.testableStatic(fnExecutePaste, "pasteHandler_fnExecutePaste");
409
- testableHelper.testableStatic(fnShowToastAfterPaste, "pasteHandler_fnShowToastAfterPaste");
410
- testableHelper.testableStatic(fnSetSelectionType, "pasteHandler_fnSetSelectionType");
411
- testableHelper.testableStatic(fnRemoveIgnored, "pasteHandler_fnRemoveIgnored");
412
- testableHelper.testableStatic(filterColumnsForPaste, "pasteHandler_filterColumnsForPaste");
489
+ testableHelper.testable(fnExecutePaste, "pasteHandler_fnExecutePaste");
490
+ testableHelper.testable(fnShowToastAfterPaste, "pasteHandler_fnShowToastAfterPaste");
491
+ testableHelper.testable(fnSetSelectionType, "pasteHandler_fnSetSelectionType");
492
+ testableHelper.testable(fnRemoveIgnored, "pasteHandler_fnRemoveIgnored");
493
+ testableHelper.testable(filterColumnsForPaste, "pasteHandler_filterColumnsForPaste");
494
+ testableHelper.testable(handleDescriptionOnlyValueHelp, "pasteHandler_handleDescriptionOnlyValueHelp");
413
495
  return {
414
496
  handlePaste: fnHandlePaste,
415
497
  handleBeforePaste: fnHandleBeforePaste
@@ -0,0 +1,178 @@
1
+ sap.ui.define(
2
+ [
3
+ "sap/ui/model/FilterOperator",
4
+ "sap/ui/model/Filter",
5
+ "sap/suite/ui/generic/template/js/AnnotationHelper"
6
+ ],
7
+ function (
8
+ FilterOperator,
9
+ Filter,
10
+ AnnotationHelper
11
+ ) {
12
+ "use strict";
13
+
14
+ const tokenCache = new Map();
15
+
16
+ /**
17
+ * Resolves search string to ValueHelp values
18
+ * @param {object} oParams object containing search parameters
19
+ * @param {string} [oParams.sAppId] application id
20
+ * @param {sap.ui.model.odata.v2.ODataModel} [oParams.oModel] model
21
+ * @param {string} [oParams.oValueList] ValueHelp main property annotation
22
+ * @param {string} [oParams.oValueListEntityType] ValueHelp entity type
23
+ * @param {string} [oParams.sKey] main type ID property
24
+ * @param {string} [oParams.sSearchValue] search string
25
+ * @returns promise with array of {value, description} objects for passed search string
26
+ */
27
+ async function resolveTokensValues(oParams) {
28
+ const cacheKey = `${oParams?.sAppId}::${oParams?.sSearchValue}::${oParams?.oValueList?.CollectionPath?.String}`;
29
+ if (!tokenCache.has(cacheKey)) {
30
+ const oPromise = searchForTokensValues(oParams);
31
+ tokenCache.set(cacheKey, oPromise);
32
+ }
33
+ return tokenCache.get(cacheKey);
34
+ }
35
+
36
+ function cleanCache() {
37
+ tokenCache.clear();
38
+ }
39
+
40
+ /**
41
+ * Resolves search string to ValueHelp values
42
+ * @param {object} oParams object containing search parameters
43
+ * @param {string} [oParams.sAppId] application id
44
+ * @param {sap.ui.model.odata.v2.ODataModel} [oParams.oModel] model
45
+ * @param {string} [oParams.oValueList] ValueHelp main property annotation
46
+ * @param {string} [oParams.oValueListEntityType] ValueHelp entity type
47
+ * @param {string} [oParams.sKey] main type ID property
48
+ * @param {string} [oParams.sSearchValue] search string
49
+ * @returns array of {value, description} objects for passed search string
50
+ */
51
+ async function searchForTokensValues (oParams) {
52
+ if (!oParams?.oValueList?.CollectionPath?.String) {
53
+ // ValueHelp EntitySet is missing
54
+ return [];
55
+ }
56
+ const oKeyValueListParam = oParams.oValueList?.Parameters?.find((oEntry) => oEntry.RecordType === "com.sap.vocabularies.Common.v1.ValueListParameterInOut" && oEntry?.LocalDataProperty?.PropertyPath === oParams.sKey && oEntry?.ValueListProperty?.String),
57
+ sKey = oKeyValueListParam?.ValueListProperty?.String;
58
+ if (!sKey) {
59
+ // No key property is found in ValueHelp in main property. As we don't know which property to use in ValueHelp entity type we return empty array
60
+ return [];
61
+ }
62
+ const oModel = oParams.oModel,
63
+ oMetaModel = oModel.getMetaModel(),
64
+ oKeyProperty = oMetaModel.getODataProperty(oParams.oValueListEntityType, sKey),
65
+ // ValueHelp key description
66
+ sDescription = oKeyProperty && oKeyProperty["com.sap.vocabularies.Common.v1.Text"]?.Path;
67
+
68
+ const sPath = `/${oParams.oValueList.CollectionPath.String}`,
69
+ select = getSelectParameter(sKey, sDescription),
70
+ search = getSearchParameter(oParams.sSearchValue),
71
+ oFilter = getFilter(oKeyProperty, sKey, oParams.sSearchValue);
72
+
73
+ // Flag. Indicates if search have any value or not exceed key property max length
74
+ const bSearchByKeyPossible = !search || (search.length > (oKeyProperty?.maxLength ? parseInt(oKeyProperty.maxLength, 10) : search.length));
75
+
76
+ const [aValueHelpKeyQuery, aValueHelpSearchQuery] = await Promise.allSettled([
77
+ bSearchByKeyPossible ? [] : getValueHelpQuerySearch(oModel, sPath, oFilter, { select }), // search by key property
78
+ getValueHelpQuerySearch(oModel, sPath, undefined, { custom: { search }, select }) // fuzzy search using search string
79
+ ]);
80
+
81
+ // Map function for ValueHelp found contexts
82
+ const mapFunction = (oContext) => {
83
+ const oData = oContext.getObject();
84
+ return { value: oData[sKey], description: sDescription ? oData[sDescription] : undefined };
85
+ };
86
+
87
+ if (aValueHelpKeyQuery.status === "fulfilled" && aValueHelpKeyQuery.value.length > 0) {
88
+ // Found values using key property
89
+ return aValueHelpKeyQuery.value.map(mapFunction);
90
+ }
91
+
92
+ if (aValueHelpSearchQuery.status === "fulfilled" && aValueHelpSearchQuery.value.length > 0) {
93
+ // Found values using generic search
94
+ // Perform additional filtering using description field
95
+ return aValueHelpSearchQuery.value
96
+ .map(mapFunction)
97
+ .filter((oEntry) => oEntry.description && oEntry.description.toLowerCase() === oParams.sSearchValue?.toLowerCase());
98
+ }
99
+ return [];
100
+ }
101
+
102
+ /**
103
+ * Perform search on entity set
104
+ * @param {sap.ui.model.odata.v2.ODataModel} oModel model
105
+ * @param {string} sPath entity set path
106
+ * @param {sap.ui.model.Filter} oFilter filter object
107
+ * @param {object} oParams additional parameters for model.bindList
108
+ * @returns received contexts
109
+ */
110
+ function getValueHelpQuerySearch(oModel, sPath, oFilter, oParams) {
111
+ return new Promise((resolve) => {
112
+ const oListBinding = oModel.bindList(sPath, undefined, undefined, oFilter, oParams);
113
+ oListBinding.initialize();
114
+ const aFirstResult = oListBinding.getContexts();
115
+ if (aFirstResult.bExpectMore) {
116
+ oListBinding.attachChange((oEvent) => {
117
+ resolve(oEvent.getSource().getContexts());
118
+ oListBinding.destroy();
119
+ });
120
+ } else {
121
+ resolve(aFirstResult);
122
+ oListBinding.destroy();
123
+ }
124
+ });
125
+ }
126
+
127
+ /**
128
+ * Generate search parameter
129
+ * @param {string} sKey key property
130
+ * @param {string} sDescription key property description
131
+ * @returns select string
132
+ */
133
+ function getSelectParameter(sKey, sDescription) {
134
+ return [sKey, sDescription]
135
+ .filter((sPath) => sPath && !sPath.includes("/"))
136
+ .join(",");
137
+ }
138
+
139
+ /**
140
+ * Clean and normalize search string
141
+ * @param {string} sSearchValue search string
142
+ * @returns normalized search string
143
+ */
144
+ function getSearchParameter(sSearchValue) {
145
+ if (!sSearchValue) {
146
+ return undefined;
147
+ }
148
+ if (sSearchValue === "OR") {
149
+ return `"${sSearchValue}"`;
150
+ }
151
+ const sConvertedSearchValue = sSearchValue.replace(/["();]/g, " "); // these are the specific characters that fail on both, CAP and RAP: "();
152
+ if (sConvertedSearchValue === "" || sConvertedSearchValue === " ") {
153
+ return undefined;
154
+ }
155
+ return sConvertedSearchValue.trim();
156
+ }
157
+
158
+ /**
159
+ * Crate search filter for key property
160
+ * @param {object} oKeyProperty ValueHelp key property object
161
+ * @param {string} sKey key property
162
+ * @param {string} sSearchValue search string
163
+ * @returns {sap.ui.model.Filter} filter object
164
+ */
165
+ function getFilter(oKeyProperty, sKey, sSearchValue) {
166
+ let filterValue = sSearchValue;
167
+ if (oKeyProperty && oKeyProperty["com.sap.vocabularies.Common.v1.IsUpperCase"]?.Bool === "true") {
168
+ filterValue = filterValue.toUpperCase();
169
+ }
170
+ return new Filter({path: sKey, operator: FilterOperator.EQ, value1: filterValue});
171
+ }
172
+
173
+ return {
174
+ resolveTokensValues,
175
+ cleanCache
176
+ };
177
+ }
178
+ );
@@ -55,6 +55,12 @@ OK=OK
55
55
  # XBUT,30
56
56
  ADD=Add
57
57
 
58
+ # YMSG: Text in message box content when the value cannot be mapped to the expected code list entry
59
+ PASTE_HELPER_PASTE_ERROR_INVALID_VALUES=The pasted value doesn''t match any existing values.
60
+
61
+ # YMSG: Text in message box content when the value resolves to multiple code list entries
62
+ PASTE_HELPER_PASTE_ERROR_AMBIGUOUS_VALUES=The pasted value matches multiple values. Please choose one of the following values: {0}.
63
+
58
64
  # XBUT,50: text for segmented buttons: <variant text> (<item count>)
59
65
  SEG_BUTTON_TEXT={0} ({1})
60
66
 
@@ -35,6 +35,10 @@ OK=\u0645\u0648\u0627\u0641\u0642
35
35
 
36
36
  ADD=\u0625\u0636\u0627\u0641\u0629
37
37
 
38
+ PASTE_HELPER_PASTE_ERROR_INVALID_VALUES=\u0644\u0627 \u062A\u0637\u0627\u0628\u0642 \u0627\u0644\u0642\u064A\u0645\u0629 \u0627\u0644\u0645\u0644\u0635\u0642\u0629 \u0623\u064A \u0642\u064A\u0645 \u0645\u0648\u062C\u0648\u062F\u0629.
39
+
40
+ PASTE_HELPER_PASTE_ERROR_AMBIGUOUS_VALUES=\u062A\u062A\u0637\u0627\u0628\u0642 \u0627\u0644\u0642\u064A\u0645\u0629 \u0627\u0644\u0645\u0644\u0635\u0642\u0629 \u0645\u0639 \u0642\u064A\u0645 \u0645\u062A\u0639\u062F\u062F\u0629. \u064A\u0631\u062C\u0649 \u0627\u062E\u062A\u064A\u0627\u0631 \u0625\u062D\u062F\u0649 \u0627\u0644\u0642\u064A\u0645 \u0627\u0644\u062A\u0627\u0644\u064A\u0629\: {0}.
41
+
38
42
  SEG_BUTTON_TEXT={0} ({1})
39
43
 
40
44
  CREATE_DRAFT_MESSAGE_TEXT=\u0642\u0645 \u0628\u0625\u0646\u0634\u0627\u0621 \u0627\u0644\u0643\u0627\u0626\u0646.
@@ -35,6 +35,10 @@ OK=OK
35
35
 
36
36
  ADD=\u0414\u043E\u0431\u0430\u0432\u044F\u043D\u0435
37
37
 
38
+ PASTE_HELPER_PASTE_ERROR_INVALID_VALUES=\u041F\u043E\u0441\u0442\u0430\u0432\u0435\u043D\u0430\u0442\u0430 \u0441\u0442\u043E\u0439\u043D\u043E\u0441\u0442 \u043D\u0435 \u0441\u044A\u043E\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0430 \u043D\u0430 \u043D\u0438\u0442\u043E \u0435\u0434\u043D\u0430 \u043E\u0442 \u0441\u044A\u0449\u0435\u0441\u0442\u0432\u0443\u0432\u0430\u0449\u0438\u0442\u0435 \u0441\u0442\u043E\u0439\u043D\u043E\u0441\u0442\u0438.
39
+
40
+ PASTE_HELPER_PASTE_ERROR_AMBIGUOUS_VALUES=\u041F\u043E\u0441\u0442\u0430\u0432\u0435\u043D\u0430\u0442\u0430 \u0441\u0442\u043E\u0439\u043D\u043E\u0441\u0442 \u0441\u044A\u043E\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0430 \u043D\u0430 \u043D\u044F\u043A\u043E\u043B\u043A\u043E \u0441\u0442\u043E\u0439\u043D\u043E\u0441\u0442\u0438. \u041C\u043E\u043B\u044F, \u0438\u0437\u0431\u0435\u0440\u0435\u0442\u0435 \u0435\u0434\u043D\u0430 \u043E\u0442 \u0441\u043B\u0435\u0434\u043D\u0438\u0442\u0435 \u0441\u0442\u043E\u0439\u043D\u043E\u0441\u0442\u0438\: {0}.
41
+
38
42
  SEG_BUTTON_TEXT={0} ({1})
39
43
 
40
44
  CREATE_DRAFT_MESSAGE_TEXT=\u0421\u044A\u0437\u0434\u0430\u0432\u0430\u043D\u0435 \u043D\u0430 \u043E\u0431\u0435\u043A\u0442.
@@ -35,6 +35,10 @@ OK=D'acord
35
35
 
36
36
  ADD=Afegir
37
37
 
38
+ PASTE_HELPER_PASTE_ERROR_INVALID_VALUES=El valor enganxat no coincideix amb cap valor existent.
39
+
40
+ PASTE_HELPER_PASTE_ERROR_AMBIGUOUS_VALUES=El valor enganxat coincideix amb diversos valors. Seleccioneu-ne un d''aquests\: {0}.
41
+
38
42
  SEG_BUTTON_TEXT={0} ({1})
39
43
 
40
44
  CREATE_DRAFT_MESSAGE_TEXT=Crear l'objecte.
@@ -35,6 +35,10 @@ OK=OK
35
35
 
36
36
  ADD=Dodaj
37
37
 
38
+ PASTE_HELPER_PASTE_ERROR_INVALID_VALUES=Zalijepljena vrijednost se ne podudara s postoje\u0107im vrijednostima.
39
+
40
+ PASTE_HELPER_PASTE_ERROR_AMBIGUOUS_VALUES=Zalijepljena vrijednost se podudara s vi\u0161estrukim vrijednostima. Izaberite jednu od sljede\u0107ih vrijednosti\: {0}.
41
+
38
42
  SEG_BUTTON_TEXT={0} ({1})
39
43
 
40
44
  CREATE_DRAFT_MESSAGE_TEXT=Kreirajte objekat.