Как добавить HTML таблицы в процессе 4gl? - PullRequest
0 голосов
/ 28 июня 2019

Я создал временную таблицу в Progress4gl, и мне нужно отправить данные из временной таблицы по электронной почте с использованием синтаксиса html.Это означает, что мне нужно связать все поля временной таблицы с html-таблицей и электронной почтой.

Поля временной таблицы:

Part_ID, CustomerPartID, customer

Пожалуйста, помогите мне с этим.

Ответы [ 3 ]

1 голос
/ 28 июня 2019

Ну, вы можете просто вывести HTML.Как то так:

define temp-table tt_test
  field f1 as integer
  field f2 as character
  field f3 as date
.

create tt_test.
assign
  f1 = 1
  f2 = "abc"
  f3 = today
.
create tt_test.
assign
  f1 = 2
  f2 = "xyz"
  f3 = today + 30
.

output to value( "mytable.html" ).

put unformatted "<table>" skip.

for each tt_test:

  put unformatted substitute( "  <tr><td>&1</td><td>&2</td><td>&3</td></tr>", f1, f2, f3 ) skip.

end.

put unformatted "</table>" skip.

output close.
1 голос
/ 28 июня 2019

Для создания HTML-таблицы вы можете (ab) использовать мощь наборов данных в сочетании с serialize-name:

/* Write some awesome ABL code here, or load an existing snippet! */ 

define temp-table ttparts serialize-name "tr"
   field part_id        as char serialize-name "td"
   field customerPartID as char serialize-name "td"
   field customer       as char serialize-name "td"
   .

define dataset ds serialize-name "table" for ttparts .

define buffer bupart for ttparts.

create bupart.
assign
   bupart.part_id = "one"
   bupart.customer = "A"
   .

create bupart.
assign
   bupart.part_id = "two"
   bupart.customer = "B"
   .

def var lcc as longchar no-undo.
dataset ds:write-xml( "longchar", lcc, true ).

message string( lcc ).

https://abldojo.services.progress.com:443/#/?shareId=5d1618c14b1a0f40c34b8bc8

Обновленная версия, которая принимает любые временныедескриптор таблицы и вернет длинный символ, содержащий таблицу HTML:

function createHtmlTable returns longchar (
  i_ht as handle
):

   def var lcc as longchar.
   def var hds as handle.
   def var hb  as handle.
   def var ic  as int.

   create dataset hds.
   hds:serialize-name = "table". // not needed if stripped below

   create buffer hb for table i_ht.
   hb:serialize-name = "tr".
   hds:add-buffer( hb ).

   do ic = 1 to hb:num-fields:
      hb:buffer-field( ic ):serialize-name = "td".
   end.

   hds:write-xml( "longchar", lcc, true ).

   // remove xml declaration
   lcc = substring( lcc, index( lcc, "<", 2 ) ).   
   entry( 1, lcc, ">" ) = "<table". // see comment above

   return lcc.

   finally:
      delete object hds.
   end finally.

end function.

define temp-table ttparts
   field part_id as char
   field customerPartID as char
   field customer as char
   .

define buffer bupart for ttparts.

create bupart.
assign
   bupart.part_id = "one"
   bupart.customer = "A"
   .

create bupart.
assign
   bupart.part_id = "two"
   bupart.customer = "B"
   .

message string( createHtmlTable( temp-table ttparts:handle ) ).

https://abldojo.services.progress.com/#/?shareId=5d1760d84b1a0f40c34b8bcd

0 голосов
/ 28 июня 2019

Нет встроенного метода для этого.Один из способов, который я мог придумать, - это преобразование временной таблицы в json, а затем json в HTML.Я считаю, что есть несколько утилит для преобразования JSON в HTML-таблицу.Вы можете преобразовать временную таблицу в json в ABL, используя метод WRITE-JSON.

Пример из документации Progress:

DEFINE VARIABLE cTargetType AS CHARACTER NO-UNDO.
DEFINE VARIABLE cFile       AS CHARACTER NO-UNDO.
DEFINE VARIABLE lFormatted  AS LOGICAL   NO-UNDO.
DEFINE VARIABLE lRetOK      AS LOGICAL   NO-UNDO.

DEFINE TEMP-TABLE ttCust NO-UNDO LIKE Customer.

/* Code to populate the temp-table */  
ASSIGN  
  cTargetType = "file" 
  cFile       = "ttCust.json" 
  lFormatted  = TRUE. 
lRetOK = TEMP-TABLE ttCust:WRITE-JSON(cTargetType, cFile, lFormatted).
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...