lookupHandler.cls 8.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212
  1. /*------------------------------------------------------------------------
  2. File : lookupHandler
  3. Purpose :
  4. Syntax :
  5. Description :
  6. Author(s) : walter.riechsteiner
  7. Created : Mon Dec 29 20:24:32 CET 2025
  8. Notes :
  9. ----------------------------------------------------------------------*/
  10. BLOCK-LEVEL ON ERROR UNDO, THROW.
  11. USING Progress.Json.ObjectModel.JsonObject FROM PROPATH.
  12. CLASS utilities.lookupHandler:
  13. DEFINE VARIABLE httLookup AS HANDLE NO-UNDO.
  14. DEFINE VARIABLE hbttLookup AS HANDLE NO-UNDO.
  15. /*------------------------------------------------------------------------------
  16. Purpose:
  17. Notes:
  18. ------------------------------------------------------------------------------*/
  19. METHOD PUBLIC LOGICAL city(
  20. INPUT oJsonIdent AS JsonObject,
  21. OUTPUT oJsonResult AS JsonObject
  22. ):
  23. DEFINE VARIABLE lRetVal AS LOGICAL NO-UNDO INIT FALSE.
  24. DEFINE VARIABLE cSearchField AS CHARACTER NO-UNDO.
  25. DEFINE VARIABLE ccountry_code AS CHARACTER NO-UNDO.
  26. DEFINE VARIABLE cField AS CHARACTER NO-UNDO.
  27. DEFINE VARIABLE hcities AS HANDLE NO-UNDO.
  28. DEFINE VARIABLE iLanguage_id AS INTEGER NO-UNDO.
  29. DEFINE VARIABLE cDisplayFields AS CHARACTER NO-UNDO.
  30. DEFINE VARIABLE ii AS INTEGER NO-UNDO.
  31. DEFINE VARIABLE oJsonDisplayLabels AS JsonObject.
  32. cSearchField = oJsonIdent:GetCharacter('search').
  33. cDisplayFields = oJsonIdent:GetCharacter('displayFields').
  34. cDisplayFields = REPLACE(cDisplayFields, ' ', '').
  35. CREATE TEMP-TABLE httLookup.
  36. DO ii = 1 TO NUM-ENTRIES(cDisplayFields, ','):
  37. cField = ENTRY(ii, cDisplayFields, ',').
  38. httLookup:ADD-NEW-FIELD (cField, 'character').
  39. END.
  40. httLookup:TEMP-TABLE-PREPARE ('results').
  41. hbttLookup = httLookup:DEFAULT-BUFFER-HANDLE.
  42. cField = oJsonIdent:GetCharacter('file_name') + '_country_code'.
  43. cCountry_code = oJsonIdent:GetCharacter(cField).
  44. cField = oJsonIdent:GetCharacter('file_name') + '_language_id'.
  45. iLanguage_Id = INTEGER(oJsonIdent:GetCharacter(cField)).
  46. oJsonIdent:SET('language_id', iLanguage_id).
  47. hcities = BUFFER cities:HANDLE.
  48. FOR EACH cities NO-LOCK
  49. WHERE INDEX(cities.wordindex, cSearchField) > 0
  50. AND cities.country_code = cCountry_Code:
  51. /* IF NOT cities.postal_code BEGINS cSearchField THEN NEXT.*/
  52. hbttLookup:BUFFER-CREATE ().
  53. hbttLookup:BUFFER-COPY(hcities).
  54. END.
  55. oJsonResult = NEW JsonObject().
  56. httLookup:WRITE-JSON('JsonObject', oJsonResult) NO-ERROR.
  57. getDisplayLabels(
  58. INPUT oJsonIdent ,
  59. INPUT cDisplayFields ,
  60. OUTPUT oJsonDisplayLabels
  61. ).
  62. oJsonResult:ADD('displayLabels', oJsonDisplayLabels).
  63. lRetVal = TRUE.
  64. RETURN lRetVal.
  65. END METHOD.
  66. /*------------------------------------------------------------------------------
  67. Purpose:
  68. Notes:
  69. ------------------------------------------------------------------------------*/
  70. METHOD PUBLIC VOID getDisplayLabels(
  71. INPUT oJsonIdent AS JsonObject,
  72. INPUT cFieldNames AS CHARACTER ,
  73. OUTPUT oJsonDisplayLabels AS JsonObject
  74. ):
  75. DEFINE VARIABLE cUsers AS CHARACTER NO-UNDO INIT 'admin'.
  76. DEFINE VARIABLE cFileNames AS CHARACTER NO-UNDO INIT 'table'.
  77. DEFINE VARIABLE cProgram AS CHARACTER NO-UNDO INIT 'program'.
  78. DEFINE VARIABLE cFileName AS CHARACTER NO-UNDO.
  79. DEFINE VARIABLE cUserName AS CHARACTER NO-UNDO.
  80. DEFINE VARIABLE cCompany AS CHARACTER NO-UNDO.
  81. DEFINE VARIABLE iLanguage_id AS INTEGER NO-UNDO.
  82. DEFINE VARIABLE cField AS CHARACTER NO-UNDO.
  83. DEFINE VARIABLE i1 AS INTEGER NO-UNDO.
  84. DEFINE VARIABLE i2 AS INTEGER NO-UNDO.
  85. DEFINE VARIABLE i3 AS INTEGER NO-UNDO.
  86. cFileName = oJsonIdent:GetCharacter('file_name').
  87. iLanguage_id = oJsonIdent:GetInteger ('language_id').
  88. cUserName = oJsonIdent:GetCharacter('user_name').
  89. cCompany = oJsonIdent:GetCharacter('company').
  90. cFileNames = cFileNames + ',' + cFileName.
  91. IF cUserName <> cUsers THEN cUsers = cUsers + ',' + cUserName.
  92. oJsonDisplayLabels = NEW JsonObject().
  93. DO i1 = 1 TO NUM-ENTRIES(cFieldNames, ','):
  94. oJsonDisplayLabels:ADD(ENTRY(i1, cFieldNames, ','), ENTRY(i1, cFieldNames, ',')).
  95. END.
  96. DO i1 = 1 TO NUM-ENTRIES(cFileNames):
  97. cFileName = ENTRY(i1, cFileNames, ',').
  98. DO i2 = 1 TO NUM-ENTRIES(cUsers):
  99. cUserName = ENTRY(i2, cUsers, ',').
  100. DO i3 = 1 TO NUM-ENTRIES(cFieldNames, ','):
  101. cField = ENTRY(i3, cFieldNames, ',').
  102. FIND FIRST labeltexte
  103. WHERE labeltexte.company = ccompany
  104. AND labeltexte.user_name = cUserName
  105. AND labeltexte.program = cProgram
  106. AND labeltexte.table_name = cFileName
  107. AND labeltexte.field_name = cField
  108. AND labeltexte.language_id = ilanguage_id NO-ERROR.
  109. IF AVAILABLE labeltexte THEN oJsonDisplayLabels:SET(cField, labeltexte.headlabel).
  110. END.
  111. END.
  112. END.
  113. RETURN.
  114. END METHOD.
  115. /*------------------------------------------------------------------------------
  116. Purpose:
  117. Notes:
  118. ------------------------------------------------------------------------------*/
  119. METHOD PUBLIC LOGICAL postal_code(
  120. INPUT oJsonIdent AS JsonObject,
  121. OUTPUT oJsonResult AS JsonObject
  122. ):
  123. DEFINE VARIABLE lRetVal AS LOGICAL NO-UNDO INIT FALSE.
  124. DEFINE VARIABLE cSearchField AS CHARACTER NO-UNDO.
  125. DEFINE VARIABLE ccountry_code AS CHARACTER NO-UNDO.
  126. DEFINE VARIABLE cField AS CHARACTER NO-UNDO.
  127. DEFINE VARIABLE hcities AS HANDLE NO-UNDO.
  128. DEFINE VARIABLE iLanguage_id AS INTEGER NO-UNDO.
  129. DEFINE VARIABLE cDisplayFields AS CHARACTER NO-UNDO.
  130. DEFINE VARIABLE ii AS INTEGER NO-UNDO.
  131. DEFINE VARIABLE oJsonDisplayLabels AS JsonObject.
  132. cSearchField = oJsonIdent:GetCharacter('search').
  133. cDisplayFields = oJsonIdent:GetCharacter('displayFields').
  134. cDisplayFields = REPLACE(cDisplayFields, ' ', '').
  135. CREATE TEMP-TABLE httLookup.
  136. DO ii = 1 TO NUM-ENTRIES(cDisplayFields, ','):
  137. cField = ENTRY(ii, cDisplayFields, ',').
  138. httLookup:ADD-NEW-FIELD (cField, 'character').
  139. END.
  140. httLookup:TEMP-TABLE-PREPARE ('results').
  141. hbttLookup = httLookup:DEFAULT-BUFFER-HANDLE.
  142. cField = oJsonIdent:GetCharacter('file_name') + '_country_code'.
  143. cCountry_code = oJsonIdent:GetCharacter(cField).
  144. cField = oJsonIdent:GetCharacter('file_name') + '_language_id'.
  145. iLanguage_Id = INTEGER(oJsonIdent:GetCharacter(cField)).
  146. oJsonIdent:SET('language_id', iLanguage_id).
  147. hcities = BUFFER cities:HANDLE.
  148. FOR EACH cities NO-LOCK
  149. WHERE INDEX(cities.wordindex, cSearchField) > 0
  150. AND cities.country_code = cCountry_Code:
  151. IF NOT cities.postal_code BEGINS cSearchField THEN NEXT.
  152. hbttLookup:BUFFER-CREATE ().
  153. hbttLookup:BUFFER-COPY(hcities).
  154. END.
  155. oJsonResult = NEW JsonObject().
  156. httLookup:WRITE-JSON('JsonObject', oJsonResult) NO-ERROR.
  157. getDisplayLabels(
  158. INPUT oJsonIdent ,
  159. INPUT cDisplayFields ,
  160. OUTPUT oJsonDisplayLabels
  161. ).
  162. oJsonResult:ADD('displayLabels', oJsonDisplayLabels).
  163. lRetVal = TRUE.
  164. RETURN lRetVal.
  165. END METHOD.
  166. END CLASS.