如何在4gl中添加html表?

时间:2019-06-28 10:19:05

标签: openedge progress-4gl

我在Progress4gl中创建了一个临时表,我需要使用html语法通过电子邮件从临时表中发送数据。这意味着我需要将临时表中的所有字段链接到html表和电子邮件。

临时表中的字段为:

  

Part_ID,CustomerPartID,客户

请帮助我。

3 个答案:

答案 0 :(得分:1)

好吧,您只需输出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 :(得分:1)

要创建html表,您可以(ab)结合结合序列化名称使用数据集的功能:

/* 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表的longchar的更新版本:

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

答案 2 :(得分:0)

没有内置方法可以执行此操作。我能想到的一种方法是将临时表转换为json,然后将json转换为HTML。我相信有几种实用程序可以将json转换为html表。您可以使用WRITE-JSON方法将临时表转换为ABL中的json。

进度文档中的示例:

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).