You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过CLI自动化生成Progress OpenEdge数据字典详细表报告?

自动化生成OpenEdge Data Dictionary详细表报告方案

需求背景

我开发了一个查询工具网站,可将Data Dictionary生成的详细表报告通过PHP解析为可用的JSON数据,再用JS/HTML/CSS以美观表格形式展示。原本希望通过cron调度自动化生成详细表定义文件,复制到网站目录后处理为便于查询的数据文件,但找不到Data Dictionary的CLI调用方式,又不想从头编写代码生成报告,最终实现了基于bash脚本和OpenEdge过程的多数据库自动化生成方案。

实现方案

1. Cron调用的Bash脚本

该脚本负责遍历目标数据库列表,调用OpenEdge的mbpro执行对应的过程文件,批量生成每个数据库的详细表报告:

#!/bin/bash
progress_mbpro=/usr/128dlc/bin/mbpro
projectDir=/a/b/c
procFilePath=$projectDir/getDetailedTableReportForDb.p
outputLog=$projectDir/stdout.log
errorLog=$projectDir/errout.log

envPath=/x/y/z

databases=(
    'db1'
    'db2'
    ...
)

for db_name in "${databases[@]}"; do
    paramFile=$envPath/$db_name.pf
    dbPath=$envPath/db/$db_name
    
    $progress_mbpro $dbPath -pf $paramFile -p $procFilePath -param $db_name >> $outputLog 2>> $errorLog
    
    # 等待10秒避免输出缓冲区重叠
    sleep 10
done

2. OpenEdge过程文件 getDetailedTableReportForDb.p

该过程通过调用OpenEdge内置的adecomm/_dtbldat.p(Data Dictionary的内置过程),生成指定数据库的全量详细表报告并写入文件:

var input-db-name as char.
input-db-name = SESSION:PARAMETER.

def var v-reportFilePath as char.
v-reportFilePath = '/x/y/z/' + input-db-name + '.detailed.all-tables.def'.

define new shared stream rpt.

find first _Db no-lock.
if available _Db then
do:
    output stream rpt to value(v-reportFilePath) page-size 0.
    
    // 生成详细表数据报告
    run adecomm/_dtbldat.p(
        input recid(_Db),
        input 'ALL',    // 生成所有表的报告
        input 'o'       // 将输出导向指定流
    ).
    
    output stream rpt close.
end.

后续处理

由于Data Dictionary生成的报告格式一致、标注清晰且具有规律性,编写PHP代码对报告进行解析并转换为JSON数据的工作并不复杂。

内容的提问来源于stack exchange,提问作者Troy Niemeier

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 22:06:08