hoyong

导航

PROGRESS编程其实很简单(二)

PROGRESS编程其实很简单(二)

PROGRESS程序架构。

PROGRESS 启动应用程序,通常都是先启动一个主程序,比如mf.p,这个mf.p做一些全局变量设置,并初始化应用程序菜单。当用户执行菜单功能时,实际上是运行菜 单所指定的程序!在这种模式下,PROGRESS的程序一般都不大,结构明了可读性很强,每个程序目的非常明确,但是也要遵循一定的准则,方便以后的阅读 和修改。

一、程序扩展名的设定。

.p 主程序(可直接运行,或者编译以后挂主菜单被调用)
.i 子程序(经常使用的执行某一特定功能,或者为了使主程序易于阅读脱离出来)
.v 验证程序
.w Windows的程序(Windows版的Progress支持可视化的组件编程,组件拉一拉放一放,就自动生成.w的文件了)
.r 编译后的程序(菜单调用时,实际上是执行.r的程序)

二、程序的命名规则。
主程序格式: aa + bb + cc + dd.p
其中:
aa --- 系统模块ID
bb --- 系统功能
cc --- 程序类型(mt -维护、iq -查询或者rp -报表等)
dd --- 序列号
子程序格式:通常是 主程序a.i     主程序b.i   这样子
//关于程序的命名,个人觉得也没必要一定要遵循特定格式,一家公司有自己固定的命名方式,容易区分即可;如果是咨询公司或者系统集成公司,则要先了解客户的命名习惯和规则;同理,下面的“程序头”。

三、程序头。
以 注释的形式,标明尽可能多的程序相关的信息,比如:程序名(路径,不过路径一般都是企业自己规定好了)、作者、菜单号、功能(菜单标题)、创建日期、修改 日志等。至于格式,也就是POSE,爱怎么摆怎么摆,清楚明了即可。但是,在同一家公司,风格应该统一。另外,关于修改日志,个人觉得最好在程序头和程序 体,都明显说明一下修改的日期和原因,要点。(注释不记入程序长度,所以不要担心程序太长,:p )

四、维护类程序模板。

注意:为方便说明,注释暂时用“//”,但是在PORGRESS程序里是错误的哈!
define variables.
{mfdtitle.i} //程序头,全局变量定义等,是标准QAD的菜单程序就请加上这个,不要问为什么
form with frame a. //定义格局(包含输入输出)
Mainloop:
repeat:
           prompt-for …   editing: //通常这里输入主要字段(如果比如订单号,料件名称等)
       {mfnp.i} //前后记录显示功能,常用
         end.
         /* ADD/MODI/Delete */
         assign global…
         find …
         if not available … //新记录
             {mfmsg.i 1 1} //类似mfmsg的子程序,都是信息提示类
             create …
             assign …
         end.
         Status = stline{2}.
         update go-on (F5 or Ctrl-D)   //继续维护剩余字段
         if F5 or CTRL-D then do: //判断是否按了删除键,一般定义是F5或者Ctrl + D
             del-yn = yes.
             {mfmsg01.i 11 1 del-yn}
         end.
End.
Status input.

五、报表类程序的模板。

{mfdtitle.i}
form definition [selection criteria]
part colon 15 part1 colon 40 label {t001.i}
effdate colon 15 effdate1 colon 40 label {t001.i}
with frame a side-labels width 80.
//以上4行定义用户输入“限制报表输出”的条件,比如生效日期啊什么的
repeat:
     if part1 = hi_char then part1 = “”. //如果用户不输任何东西,则默认最大字符或者最小字符,以下类似
     if effdate = low_date then effdate = ?.
     if effdate1 = hi_date then effdate1 = ?.
     data statements [selection criteria]
     bcdparm = "".
     {mfquoter.i   part } //BATCH专用,至今没用过,体会不到好处,哪位帮忙解释一下?
     {mfquoter.i   part1 }
     {mfquoter.i   effdate}
     {mfquoter.i   effdate1 }
     {mfselbpr.i   “printer” 132} //选择打印机的子程序
     if part1 = “” then part1 = hi_char.
     if effdate = ? Then effdate = low_date.
     if effdate1 = ? Then effdate1 = hi_date.
     {mfphead.i or mfphead2.i} //报表头
     for each…
         display 
         {mfrpchk.i} or {mfrpexit..i} //报表结束
     end.
   {mfrtrail.i} or {mftr0801.i} or {mfreset.i} //报表结束、打印结束等
end.

六、查询类程序模板。

这个比报表来得要简单些了:
{mfdtitle.i}
form definition [selection criteria]
with frame a side-labels width 80.
repeat:
       data statement [selection criteria]   with frame a.
       {mfselprt.i “terminal” 80 }
       for each [selection criteria]
             display …
             {mfrpchk.i} (max page)
       end.
       {mfreset.i} (scroll output)
       {mfmsg.i 8 1}
end.

通过这章的学习,你对QAD的PROGRESS程序已经有大致的了解。但是你可能还是感觉到,如果叫你做一些切实的东西,还摸不着门(什么?你摸得着了,那么恭喜你,你可以请我吃饭了),没关系,才2小时呢,25サ目纬潭 眩 患辈患保?
 

posted on 2015-04-09 22:20  hoyong  阅读(1202)  评论(0编辑  收藏  举报