欢迎光临
我们一直在努力

04.03.08.tiptop:基础知识篇(4gl xml.DomNode 类方法创建xml文件)

本页目录:

  • 1、写代码
  • 2、测试

基础知识:04.03.06.tiptop:基础知识篇(4gl base.TypeInfo.create()类方法 将数组ARRAY创建xml文件)


  • api

写代码

p_test.4gl

IMPORT xml

DATABASE ds
GLOBALS "../../config/top.global"

GLOBALS
DEFINE g_curs_index LIKE type_file.num10,
g_row_count LIKE type_file.num10,
g_table DYNAMIC ARRAY OF RECORD
ima01 LIKE ima_file.ima01,
ima02 LIKE ima_file.ima02,
ima021 LIKE ima_file.ima021
END RECORD,
g_table_count INTEGER,
g_fields STRING,
g_sql STRING,
n om.DomNode,
getNowID STRING,
temp_table_name LIKE type_file.chr1000,
temp_table_date_name LIKE type_file.chr1000
END GLOBALS

MAIN
DEFINE p_row,p_col LIKE type_file.num5

LET p_row = ARG_VAL(1)
LET p_col = ARG_VAL(2)

OPTIONS
FORM LINE FIRST + 2,
MESSAGE LINE LAST,
PROMPT LINE LAST,
INPUT NO WRAP
DEFER INTERRUPT

IF (NOT cl_user()) THEN
EXIT PROGRAM
END IF

WHENEVER ERROR CALL cl_err_msg_log
IF (NOT cl_setup("CZZ")) THEN
EXIT PROGRAM
END IF

CALL cl_used(g_prog,g_time,1) RETURNING g_time — 計算使用時間 (進入時間)

# 打開窗口
LET p_row = 5 LET p_col = 10 — 給變量賦值
OPEN WINDOW test_w AT p_row,p_col WITH FORM "czz/42f/p_test"
ATTRIBUTE (STYLE = g_win_style CLIPPED)
CALL cl_ui_init() — 初始化程序設定
CALL test_menu() — 調用test_menu函數
CLOSE WINDOW test_w

CALL cl_used(g_prog,g_time,2) RETURNING g_time — 計算使用時間 (退出時間)

END MAIN

# Pattern name…: test_menu()
# Descriptions…:画面的ToolBar的设置函数
FUNCTION test_menu()
# ToolBar的設置
MENU ""
BEFORE MENU
CALL cl_navigator_setting(g_curs_index, g_row_count) — 重新設定TOOLBAR上的『上筆、跳筆、下筆』等五個按鍵是否可用 / 不可用。
ON ACTION query — 查询按钮
CALL createTable()
ON IDLE g_idle_seconds
CALL cl_on_idle()
CONTINUE MENU
ON ACTION locale –语言按钮
CALL cl_dynamic_locale() #切换
CALL cl_show_fld_cont() #显示
ON ACTION qbe_select –条件查询
CALL cl_qbe_select()
ON ACTION help –帮助/说明按钮
CALL cl_show_help()
ON ACTION about –程式咨询按钮
CALL cl_about()
ON ACTION controlg –程式切换
CALL cl_cmdask()
ON ACTION exit — 離開按鈕
LET INT_FLAG = FALSE
EXIT MENU
ON ACTION close — 窗口右上角x按钮
LET INT_FLAG=FALSE
EXIT MENU
END MENU
END FUNCTION

# @mathodName:createTable
# @author:李德凯 2665252078@qq.com
# @date:Created in 2026-01-21
# @description: 创建表
FUNCTION createTable()
DEFINE l_sql STRING

LET g_fields="pmn01,pmn02,pmn09,pmn37,pmnud10,pmnud11,pmnud12"
LET g_sql="SELECT "||g_fields||" FROM pmn_file WHERE pmn01 ='VFU22-22100017' and pmn02='1' "

LET l_sql="SELECT COUNT(1) FROM ( ",g_sql," )"
PREPARE q_prepare FROM l_sql
EXECUTE q_prepare INTO g_table_count

DISPLAY g_table_count TO FORMONLY.cn

LET getNowID="s"||FGL_GETPID()
CALL createTempTable(getNowID,g_fields,g_sql) RETURNING temp_table_name,temp_table_date_name
CALL createXML()
END FUNCTION

# @mathodName:createXML
# @author:李德凯 2665252078@qq.com
# @date:Created in 2026-01-21
# @description: 创建xml
FUNCTION createXML()
DEFINE cellAs DYNAMIC ARRAY OF STRING,
l_sql STRING,
l_xlsx RECORD
xlsx01 VARCHAR(20),
xlsx04 VARCHAR(50),
xlsx05 INTEGER,
xlsx06 INTEGER,
xlsx07 INTEGER
END RECORD,
doc xml.DomDocument,
pi xml.DomNode,
node xml.DomNode,
elt xml.DomNode,
l_type STRING,
l_name STRING

INITIALIZE l_xlsx TO NULL
LET l_sql =" SELECT xlsx01,xlsx04,xlsx05,xlsx06,xlsx07 ",
" FROM ",temp_table_name,
" ORDER BY xlsx08"
PREPARE tmpXML_prepare FROM l_sql
DECLARE tmpXML_cs SCROLL CURSOR WITH HOLD FOR tmpXML_prepare
let l_sql=" "
FOREACH tmpXML_cs INTO l_xlsx.*
IF SQLCA.sqlcode THEN
CALL cl_err('Foreach:',SQLCA.sqlcode,1)
EXIT FOREACH
END IF
CASE l_xlsx.xlsx04
WHEN 'VARCHAR2'
LET l_type="type=\\"VARCHAR("||l_xlsx.xlsx05||")\\""
WHEN 'CLOB'
LET l_type="type=\\"CLOB\\""
WHEN 'NUMBER'
IF l_xlsx.xlsx07=0 THEN
LET l_type="type=\\"INTEGER\\""
ELSE
LET l_type="type=\\"DECIMAL("||l_xlsx.xlsx06||","|| l_xlsx.xlsx07 ||")\\""
END IF
WHEN 'DATE'
LET l_type="type=\\"DATE\\""
WHEN 'BLOB'
LET l_type="type=\\"BLOB\\""
END CASE
LET l_name="name=\\""||l_xlsx.xlsx01||"\\""
LET l_sql=l_sql||"<Field "|| l_type ||" value= \\"\\" "|| l_name ||"/>"

END FOREACH
LET doc = xml.DomDocument.Create()
IF g_table_count >1 THEN
LET pi = doc.createElement("Array")
CALL pi.setAttribute("length", g_table_count)
CALL doc.appendDocumentNode(pi)
LET elt = doc.getDocumentElement()
LET node = doc.createNode("<Record>"||l_sql||"</Record>")
CALL elt.appendChild(node)
ELSE
LET pi = doc.createElement("Record")
CALL doc.appendDocumentNode(pi)
LET elt = doc.getDocumentElement()
LET node = doc.createNode(l_sql)
CALL elt.appendChild(node)
END IF
CALL doc.normalize()
CALL doc.save("/u1/out/r.xml")
CALL dropTempUploadTable(temp_table_name,temp_table_date_name)

END FUNCTION

p_test.4fd

<?xml version="1.0" encoding="UTF-8" ?>
<ManagedForm gstVersion="22800" name="ManagedForm" uid="{af5ad751-b013-4f36-bc81-4773731c8bc1}">
<AGSettings/>
<Record additionalTables="" joinLeft="" joinOperator="" joinRight="" name="Undefined" order="" uid="{c233f40c-640c-40e0-833e-ca7f543fbfd8}" where="">
<RecordField colName="" fieldIdRef="1" name="cn" sqlTabName="" table_alias_name="" uid="{5174eab5-7665-4527-a3fd-4a6e66b6d17a}"/>
</Record>
<Form gridHeight="8" gridWidth="49" name="Form" text="Form">
<VBox gridHeight="8" gridWidth="48" name="VBox1" posX="0" posY="0">
<Grid gridHeight="6" gridWidth="48" name="Grid1" posX="0" posY="1">
<Edit aggregateColName="" aggregateName="" aggregateTableAliasName="" aggregateTableName="" colName="" columnCount="" fieldId="1" gridHeight="1" gridWidth="10" name="cn" posX="9" posY="2" rowCount="" sqlTabName="" stepX="" stepY="" tabIndex="1" table_alias_name="" title="Edit1" widget="Edit"/>
</Grid>
</VBox>
</Form>
<DiagramLayout>
<![CDATA[AAAAAgAAAEwAewBjADIAMwAzAGYANAAwAGMALQA2ADQAMABjAC0ANAAwAGUAMAAtADgAMwAzAGUALQBjAGEANwBmADUANAAzAGYAYgBmAGQAOAB9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAEwAewA1ADEANwA0AGUAYQBiADUALQA3ADYANgA1AC0ANAA1ADIANwAtAGEAMwBmAGQALQA0AGEANgBlADYANgBiADYAZAAxADcAYQB9QCQAAAAAAABAQoAAAAAAAAAAAAAAAAAAAQ==]]>
</DiagramLayout>
</ManagedForm>

测试

# 上传代码
cd /u1/topprod/topcust/czz/4fd
put p_test.4fd
cd /u1/topprod/topcust/czz/4gl
put p_test.4gl

# 编译和运行
cd /u1/topprod/topcust/czz/4fd
r.f2 p_test 2 c
cd /u1/topprod/topcust/czz/4gl
r.c2 p_test
r.l2 p_test
rm -rf /u1/out/r.xml
exe2 p_test

# 下载生成的文件
get /u1/out/r.xml

  • 生成的xml

<?xml version="1.0" encoding="UTF-8" standalone="no"?><Record> <Field type="VARCHAR(20)" value="" name="pmn01"/><Field type="INTEGER" value="" name="pmn02"/><Field type="DECIMAL(20,6)" value="" name="pmn09"/><Field type="INTEGER" value="" name="pmnud12"/><Field type="INTEGER" value="" name="pmnud10"/><Field type="INTEGER" value="" name="pmnud11"/><Field type="DATE" value="" name="pmn37"/></Record>

赞(0)
未经允许不得转载:171主机测评 » 04.03.08.tiptop:基础知识篇(4gl xml.DomNode 类方法创建xml文件)
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址