webfunction.p 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417
  1. &ANALYZE-SUSPEND _VERSION-NUMBER AB_v10r12
  2. /* Procedure Description
  3. "Structured Procedure File Template.
  4. Use this template to create a new Structured Procedure file to compile and run PROGRESS 4GL code. You edit structured procedure files using the AB's Section Editor."
  5. */
  6. &ANALYZE-RESUME
  7. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _CUSTOM _DEFINITIONS Procedure
  8. /*------------------------------------------------------------------------
  9. File : webfunction.p
  10. Purpose :
  11. Syntax :
  12. Description :
  13. Author(s) : walter.riechsteiner
  14. Created : Wed Aug 07 18:14:03 CEST 2024
  15. Notes :
  16. ----------------------------------------------------------------------*/
  17. /*----------------------------------------------------------------------*/
  18. /* *************************** Definitions ************************** */
  19. DEFINE VARIABLE cView-as-Feld AS CHARACTER NO-UNDO.
  20. DEFINE VARIABLE cView-inhalt AS CHARACTER NO-UNDO.
  21. DEFINE VARIABLE cComboArt AS CHARACTER NO-UNDO.
  22. DEFINE VARIABLE cComboWert AS CHARACTER NO-UNDO EXTENT.
  23. DEFINE VARIABLE cComboText AS CHARACTER NO-UNDO EXTENT.
  24. { properties_formular_html.i }
  25. DEFINE TEMP-TABLE tviewer_ze LIKE viewer_ze.
  26. /* _UIB-CODE-BLOCK-END */
  27. &ANALYZE-RESUME
  28. &ANALYZE-SUSPEND _UIB-PREPROCESSOR-BLOCK
  29. /* ******************** Preprocessor Definitions ******************** */
  30. /* _UIB-PREPROCESSOR-BLOCK-END */
  31. &ANALYZE-RESUME
  32. /* ************************ Function Prototypes ********************** */
  33. &IF DEFINED(EXCLUDE-createSelectionList) = 0 &THEN
  34. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD createSelectionList Procedure
  35. FUNCTION createSelectionList RETURNS LOGICAL
  36. (ipcView-as AS CHARACTER) FORWARD.
  37. /* _UIB-CODE-BLOCK-END */
  38. &ANALYZE-RESUME
  39. &ENDIF
  40. &IF DEFINED(EXCLUDE-getMaxLength) = 0 &THEN
  41. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD getMaxLength Procedure
  42. FUNCTION getMaxLength RETURNS INTEGER
  43. (ipcFormat AS CHARACTER) FORWARD.
  44. /* _UIB-CODE-BLOCK-END */
  45. &ANALYZE-RESUME
  46. &ENDIF
  47. /* *********************** Procedure Settings ************************ */
  48. &ANALYZE-SUSPEND _PROCEDURE-SETTINGS
  49. /* Settings for THIS-PROCEDURE
  50. Type: Procedure Template
  51. Allow:
  52. Frames: 0
  53. Add Fields to: Neither
  54. Other Settings: CODE-ONLY COMPILE
  55. */
  56. &ANALYZE-RESUME _END-PROCEDURE-SETTINGS
  57. /* ************************* Create Window ************************** */
  58. &ANALYZE-SUSPEND _CREATE-WINDOW
  59. /* DESIGN Window definition (used by the UIB)
  60. CREATE WINDOW Procedure ASSIGN
  61. HEIGHT = 15
  62. WIDTH = 60.
  63. /* END WINDOW DEFINITION */
  64. */
  65. &ANALYZE-RESUME
  66. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _CUSTOM _MAIN-BLOCK Procedure
  67. /* *************************** Main Block *************************** */
  68. /* _UIB-CODE-BLOCK-END */
  69. &ANALYZE-RESUME
  70. /* ********************** Internal Procedures *********************** */
  71. &IF DEFINED(EXCLUDE-ADD_VIEWER_FIELD) = 0 &THEN
  72. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _PROCEDURE ADD_VIEWER_FIELD Procedure
  73. PROCEDURE ADD_VIEWER_FIELD:
  74. /*------------------------------------------------------------------------------*/
  75. /* Purpose: Super Override */
  76. /* Parameters: */
  77. /* Notes: */
  78. /*------------------------------------------------------------------------------*/
  79. DEFINE INPUT-OUTPUT PARAMETER iphviewer_ze AS HANDLE NO-UNDO.
  80. DEFINE VARIABLE htviewer_ze AS HANDLE NO-UNDO.
  81. DEFINE VARIABLE iPrior AS INTEGER NO-UNDO.
  82. DEFINE VARIABLE cView-As AS CHARACTER NO-UNDO.
  83. DEFINE VARIABLE i1 AS INTEGER NO-UNDO.
  84. DEFINE VARIABLE cType AS CHARACTER NO-UNDO.
  85. DEFINE VARIABLE cFeldType AS CHARACTER NO-UNDO.
  86. htviewer_ze = TEMP-TABLE tviewer_ze:DEFAULT-BUFFER-HANDLE.
  87. EMPTY TEMP-TABLE tviewer_ze.
  88. htviewer_ze:BUFFER-COPY(iphviewer_ze).
  89. FIND FIRST tviewer_ze.
  90. FOR EACH viewer_ze NO-LOCK
  91. WHERE viewer_ze.mandant = tviewer_ze.mandant
  92. AND viewer_ze.benutzer = tviewer_ze.Benutzer
  93. AND viewer_ze.program = tviewer_ze.Program
  94. AND viewer_ze.tabelle = tviewer_ze.tabelle
  95. BY viewer_ze.prior DESCENDING:
  96. iPrior = viewer_ze.prior + 10.
  97. LEAVE.
  98. END.
  99. FIND AnaDat._File NO-LOCK
  100. WHERE AnaDat._File._File-Name = tviewer_ze.tabelle.
  101. FIND AnaDat._Field OF AnaDat._File
  102. WHERE AnaDat._Field._Field-name = tviewer_ze.Feld.
  103. FIND AnaDat._Index WHERE RECID(AnaDat._Index) = AnaDat._File._Prime-Index.
  104. FIND FIRST AnaDat._Index-Field OF anaDat._Index
  105. WHERE AnaDat._Index-Field._Field-Recid = RECID(AnaDat._Field) NO-ERROR.
  106. ASSIGN
  107. tviewer_ze.feldtype = AnaDat._Field._Data-type
  108. tviewer_ze.feldformat = AnaDat._Field._Format
  109. tviewer_ze.prior = iPrior
  110. tviewer_ze.lReadonly = (IF AVAILABLE _Index-Field THEN TRUE ELSE FALSE).
  111. cView-As = AnaDat._Field._View-As.
  112. IF cView-as = ? THEN 'FILL_IN'.
  113. cFeldType = tviewer_ze.feldtype.
  114. IF INDEX(cView-as, 'COMBO-BOX') > 0 THEN
  115. DO:
  116. DYNAMIC-FUNCTION ('createSelectionList':U, cView-as).
  117. cView-as = 'COMBO-BOX'.
  118. DO i1 = 1 TO EXTENT(cComboText):
  119. tviewer_ze.selecttexte = tviewer_ze.selecttexte
  120. + (IF tviewer_ze.selecttexte = '' THEN '' ELSE ';')
  121. + TRIM(cComboText[i1]).
  122. tviewer_ze.selectwerte = tviewer_ze.selectwerte
  123. + (IF tviewer_ze.selectwerte = '' THEN '' ELSE ';')
  124. + TRIM(cComboWert[i1]).
  125. END.
  126. ASSIGN
  127. tviewer_ze.textalign = 'left'
  128. cFeldType = 'SELECTION'.
  129. END.
  130. IF INDEX(cView-as, 'TOGGLE-BOX') > 0 THEN
  131. DO:
  132. DYNAMIC-FUNCTION ('createCheckBox':U, cView-as).
  133. cView-as = 'checkbox'.
  134. cFeldType = 'checkbox'.
  135. END.
  136. CASE cFeldType:
  137. WHEN 'INTEGER' THEN
  138. tviewer_ze.textalign = 'right'.
  139. WHEN 'INT64' THEN
  140. tviewer_ze.textalign = 'right'.
  141. WHEN 'DECIMAL' THEN
  142. ASSIGN
  143. tviewer_ze.textalign = 'right'
  144. tviewer_ze.numdecimals = _Field._Decimals.
  145. WHEN 'DATE' THEN
  146. tviewer_ze.textalign = 'center'.
  147. OTHERWISE
  148. tviewer_ze.textalign = 'left'.
  149. END CASE.
  150. tviewer_ze.attributes = tviewer_ze.attributes
  151. + (IF tviewer_ze.attributes = '' THEN '' ELSE ' ')
  152. + SUBSTITUTE('id=&1 name=&1', QUOTER(tviewer_ze.feld)).
  153. CASE cFeldType:
  154. WHEN 'INTEGER' THEN
  155. DO:
  156. cType = (IF tviewer_ze.lHidden THEN 'hidden' ELSE 'text').
  157. tviewer_ze.attributes = tviewer_ze.attributes
  158. + (IF tviewer_ze.attributes = '' THEN '' ELSE ' ')
  159. + SUBSTITUTE('type="&1" step="0"', cType).
  160. tviewer_ze.styles = tviewer_ze.styles
  161. + (IF tviewer_ze.styles = '' THEN '' ELSE '; ')
  162. + 'width: 50%'.
  163. END.
  164. WHEN 'INT64' THEN
  165. DO:
  166. cType = (IF tviewer_ze.lHidden THEN 'hidden' ELSE 'text').
  167. tviewer_ze.attributes = tviewer_ze.attributes
  168. + (IF tviewer_ze.attributes = '' THEN '' ELSE ' ')
  169. + SUBSTITUTE('type="&1" step="0"', cType).
  170. tviewer_ze.styles = tviewer_ze.styles
  171. + (IF tviewer_ze.styles = '' THEN '' ELSE '; ')
  172. + 'width: 50%'.
  173. END.
  174. WHEN 'DECIMAL' THEN
  175. DO:
  176. cType = (IF tviewer_ze.lHidden THEN 'hidden' ELSE 'text').
  177. ASSIGN
  178. tviewer_ze.attributes = tviewer_ze.attributes
  179. + (IF tviewer_ze.attributes = '' THEN '' ELSE ' ')
  180. + SUBSTITUTE('type="&1" step="&2"', cType, '0.' + FILL('0', tviewer_ze.numdecimals)).
  181. tviewer_ze.styles = tviewer_ze.styles
  182. + (IF tviewer_ze.styles = '' THEN '' ELSE '; ')
  183. + 'width: 50%'.
  184. END.
  185. WHEN 'CHARACTER' THEN
  186. DO:
  187. cType = (IF tviewer_ze.lHidden THEN 'hidden' ELSE 'text').
  188. i1 = DYNAMIC-FUNCTION ('getMaxLength':U, tviewer_ze.feldformat).
  189. ASSIGN
  190. tviewer_ze.attributes = tviewer_ze.attributes
  191. + (IF tviewer_ze.attributes = '' THEN '' ELSE ' ')
  192. + SUBSTITUTE('type="&1" maxlength="&2"', cType, i1)
  193. tviewer_ze.styles = tviewer_ze.styles
  194. + (IF tviewer_ze.styles = '' THEN '' ELSE '; ')
  195. + 'width: 90%'.
  196. END.
  197. WHEN 'DATE' THEN
  198. tviewer_ze.textalign = 'center'.
  199. WHEN 'SELECTION' THEN
  200. DO:
  201. cType = (IF tviewer_ze.lHidden THEN 'hidden' ELSE 'text').
  202. ASSIGN
  203. tviewer_ze.attributes = tviewer_ze.attributes
  204. + (IF tviewer_ze.attributes = '' THEN '' ELSE ' ')
  205. + SUBSTITUTE('type="&1"', cType)
  206. tviewer_ze.styles = tviewer_ze.styles
  207. + (IF tviewer_ze.styles = '' THEN '' ELSE '; ')
  208. + 'width: 90%'
  209. + '; height: 25px'.
  210. END.
  211. OTHERWISE
  212. DO:
  213. ASSIGN
  214. cType = (IF tviewer_ze.lHidden THEN 'hidden' ELSE 'text')
  215. tviewer_ze.attributes = tviewer_ze.attributes
  216. + (IF tviewer_ze.attributes = '' THEN '' ELSE ' ')
  217. + SUBSTITUTE('type="&1"', cType)
  218. tviewer_ze.styles = tviewer_ze.styles
  219. + (IF tviewer_ze.styles = '' THEN '' ELSE '; ')
  220. + 'width: 90%'.
  221. END.
  222. END CASE.
  223. IF tviewer_ze.lReadonly THEN
  224. tviewer_ze.attributes = tviewer_ze.attributes
  225. + (IF tviewer_ze.attributes = '' THEN '' ELSE ' ')
  226. + 'readonly="true"'.
  227. iphviewer_ze:BUFFER-COPY(htviewer_ze).
  228. LEAVE.
  229. END.
  230. /* _UIB-CODE-BLOCK-END */
  231. &ANALYZE-RESUME
  232. &ENDIF
  233. /* ************************ Function Implementations ***************** */
  234. &IF DEFINED(EXCLUDE-createSelectionList) = 0 &THEN
  235. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION createSelectionList Procedure
  236. FUNCTION createSelectionList RETURNS LOGICAL
  237. ( ipcView-as AS CHARACTER ):
  238. /*------------------------------------------------------------------------------
  239. Purpose:
  240. Notes:
  241. ------------------------------------------------------------------------------*/
  242. DEFINE VARIABLE cViewas AS CHARACTER NO-UNDO.
  243. DEFINE VARIABLE cItemList AS CHARACTER NO-UNDO.
  244. DEFINE VARIABLE lPairs AS LOGICAL NO-UNDO INIT FALSE.
  245. DEFINE VARIABLE ii AS INTEGER NO-UNDO.
  246. DEFINE VARIABLE i1 AS INTEGER NO-UNDO.
  247. DEFINE VARIABLE i2 AS INTEGER NO-UNDO.
  248. cViewas = TRIM(REPLACE(ipcView-as, 'VIEW-AS' , '')).
  249. cViewas = TRIM(REPLACE(cViewas , 'COMBO-BOX', '')).
  250. ii = INDEX(cViewas, 'SIZE').
  251. IF ii > 0 THEN cViewas = TRIM(SUBSTRING(cViewas,01,ii - 1)).
  252. IF INDEX(cViewas, 'LIST-ITEM-PAIRS') > 0 THEN
  253. DO:
  254. lPairs = TRUE.
  255. cItemList = TRIM(REPLACE(cviewas, 'LIST-ITEM-PAIRS', '')).
  256. END.
  257. ELSE
  258. DO:
  259. lPairs = FALSE.
  260. cItemList = TRIM(REPLACE(cviewas, 'LIST-ITEMS' , '')).
  261. END.
  262. DO WHILE SUBSTRING(cItemList, 01, 01) < CHR(32):
  263. cItemList = SUBSTRING(cItemList,02).
  264. END.
  265. DO WHILE TRUE:
  266. ii = LENGTH(cItemList).
  267. IF SUBSTRING(cItemList,ii) > CHR(32) THEN LEAVE.
  268. cItemList = SUBSTRING(cItemList,ii - 1).
  269. END.
  270. cItemList = REPLACE(cItemList, ',' , ';').
  271. cItemList = REPLACE(cItemList, CHR(10), ';').
  272. i1 = NUM-ENTRIES(cItemList, ';').
  273. EXTENT(cComboText) = ?.
  274. EXTENT(cComboWert) = ?.
  275. i2 = 0.
  276. IF lPairs THEN
  277. DO:
  278. ii = i1 / 2.
  279. EXTENT(cComboWert) = ii.
  280. EXTENT(cComboText) = ii.
  281. DO ii = 1 TO i1 BY 2:
  282. i2 = i2 + 1.
  283. cComboText[i2] = REPLACE(REPLACE(ENTRY(ii , cItemList, ';'), '"', ''), "'", '').
  284. cComboWert[i2] = REPLACE(REPLACE(ENTRY(ii + 1, cItemList, ';'), '"', ''), "'", '').
  285. END.
  286. END.
  287. ELSE
  288. DO:
  289. EXTENT(cComboWert) = i1.
  290. EXTENT(cComboText) = i1.
  291. DO ii = 1 TO i1 BY 1:
  292. i2 = i2 + 1.
  293. cComboText[i2] = REPLACE(REPLACE(ENTRY(ii, cItemList, ';'), '"', ''), "'", '').
  294. cComboWert[i2] = REPLACE(REPLACE(ENTRY(ii, cItemList, ';'), '"', ''), "'", '').
  295. END.
  296. END.
  297. RETURN TRUE.
  298. END FUNCTION.
  299. /* _UIB-CODE-BLOCK-END */
  300. &ANALYZE-RESUME
  301. &ENDIF
  302. &IF DEFINED(EXCLUDE-getMaxLength) = 0 &THEN
  303. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION getMaxLength Procedure
  304. FUNCTION getMaxLength RETURNS INTEGER
  305. ( ipcFormat AS CHARACTER ):
  306. /*------------------------------------------------------------------------------
  307. Purpose:
  308. Notes:
  309. ------------------------------------------------------------------------------*/
  310. DEFINE VARIABLE x1 AS INTEGER NO-UNDO.
  311. DEFINE VARIABLE cFormat AS CHARACTER NO-UNDO.
  312. x1 = INDEX(ipcFormat, '(').
  313. IF x1 = 0 THEN RETURN LENGTH(ipcFormat).
  314. cFormat = REPLACE(ipcFormat, '(', ';').
  315. cFormat = REPLACE(cFormat , ')', ';').
  316. x1 = INTEGER(ENTRY(2, cFormat, ';')).
  317. RETURN x1.
  318. END FUNCTION.
  319. /* _UIB-CODE-BLOCK-END */
  320. &ANALYZE-RESUME
  321. &ENDIF