《69_4523406_易拓程序设计TIPTOP GP 5X 单档维护程序撰写.ppt》由会员分享,可在线阅读,更多相关《69_4523406_易拓程序设计TIPTOP GP 5X 单档维护程序撰写.ppt(70页珍藏版)》请在三一办公上搜索。
1、TIPTOP GP 5X 单档维护程序撰写,讲师:王召霞,神州数码管理有限公司 TIPTOP事业部,课程安排,单档程序介绍 单档程序基本介绍 单档程序写法介绍 单档作业布置查询程序与除错工具 p_qry动态查询程序 除错工具介绍(Debugger)单档练习 单档画面栏位控制 栏位的动态开启和关闭 单档练习单档程序练习单档程序验收,本次课程内容,单档程序基础介绍单档程序示例讲解,单档程序基础介绍,单档程序(作业)的概念 单档程序(作业)的分类 单档程序(作业)的功能 单档程序(作业)的结构 单档程序(作业)的设计,单档程序的概念,何谓单档程序(作业)我们把对单一数据库表进行操作的程序(作业)称为
2、单档程序(作业)。注意:1、数据操作(新建、更改、删除)是对一 张表进行的操作。2、数据的取值可能会涉及多张表。,单档程序的分类,1、标准单档,单档程序的分类,2、单档多栏,单档程序的分类,3、假双档,单档程序的功能,单档程序(作业)的用途 一般单档程序(作业)用于系统资料的设置或者是简单资料的记录。单档程序应具备哪些功能?1、基本编辑功能(新建、修改、删除、复制等)2、查询功能 3、数据浏览功能 4、其他功能(有效/无效、打印、导出等),单档程序的功能,基本编辑功能 在TIPTOP系统中标准的编辑功能有:1、录入-即新增一笔资料,对应的功能函数是,_a()2、更改-即修改当前资料,对应的功能
3、函数是,_u()3、删除-即删除当前资料,对应的功能函数是,_r()4、复制-即复制当前数据并新增一笔资料,对应的功能函数是,_c()5、有效/无效-即对当前资料切换其有效无效码,对应的功能函数是,_x(),单档程序的功能,数据浏览功能 在TIPTOP系统中标准的浏览功能有:1、第一笔-显示总笔数的第一笔数据内容 2、上一笔-显示当前笔的前一笔数据内容 3、指定笔-显示指定笔数的数据内容 4、下一笔-显示当前笔的后一笔数据内容 5、最后笔-显示总笔数的最后一笔数据内容 数据浏览的功能由函数,_fetch(),完成。,单档程序的功能,数据查询功能 在TIPTOP系统中标准的查询功能是:查询-用户
4、可在界面上输入查询条件,系统会将用户输入的查询条件 形成WHERE 条件的一个组成部分。查询功能由函数_q()和_curs()/_cs()完成。,单档程序的功能,数据输出功能 在TIPTOP系统中标准的输出功能有:1、打印-将当前资料按打印格式预览并打印出来。打印功能对应的函数是:_out()2、汇出Excel-将当前资料汇出成Excel格式。汇出Excel功能对应的函数是:cl_export_to_excel()注意:所要汇出的资料类型需为RECORD类型,即数组,单档程序的功能,其他功能 在TIPTOP系统中其他功能有:1、语言-动态转换系统的语言别。转换语言别的功能是由函数由cl_dyn
5、amic_locale()完成。2、单身-进入单身栏位。功能函数为_b(),此功能在双档中讲解。3、必要字段-显示当前作业的必要字段。该功能由函数cl_show_req_fields()完成。4、帮助-显示当前作业的帮助信息。该功能由函数cl_show_help()完成。5、离开-关闭作业。,单档程序的功能,自定义功能 上述功能均为TIPTOP系统标准功能,每个客户都会有自己的需求,每个企业的流程操作要求也不尽相同,所以,用户可根据实际需要在客制作业 或 用户自定义作业中增加新功能。,单档程序的结构,问题:对于一支程序,它的结构是怎样的?,标准单档程序的结构,cs(),q(),fetch(),
6、查询,数据浏览,新增,修改,删除,有效/无效,复制,打印,单档多栏程序的结构,查询,单身(新增,更改,删除,复制),打印,单档程序的结构,Program Memo 程序注记 在程序起始前,均会对此程序的版本、目标、及编修人员和日期注记,便于追踪。Global Setting 全局参数设计 包含3个部分:1、DATABASE ds 2、GLOBALS././config/top.global 3、DEFINE.,单档程序的设计,如何设计一支单档程序,明确需求,确定规格,规划数据表,确认功能,画面档设计,程序档设计,单档程序的设计,需求:1、记录金额核准的人员 2、金额的核准要分范围 3、必须设置
7、密码,单档程序的示例,示例程序:aooi010 签核人员资料维护作业涉及表:abz_file 签核人员资料档 gen_file 员工基本资料档 gem_file 部门信息资料档,单档程序的示例,表结构:create table azb_file(azb01 varchar2(8),/*签核人员代码*/azb02 varchar2(8),/*密码*/azb06 number(20,6),/*金额*/azbacti varchar2(1),/*资料有效码*/azbuser varchar2(10),/*资料所有者*/azbgrup varchar2(6),/*资料所有群*/azbmodu varc
8、har2(10),/*资料修改者*/azbdate date/*最近修改日*/);,单档程序的示例,表结构:create table gen_file(gen01 varchar2(8),/*员工编号*/gen02 varchar2(30),/*员工姓名*/gen03 varchar2(6),/*所属部门编号*/gen04 varchar2(40),/*职称*/gen05 varchar2(5),/*分机*/gen06 varchar2(60),/*E-mail*/genacti varchar2(1),/*资料有效码*/genuser varchar2(10),/*资料所有者*/gengru
9、p varchar2(6),/*资料所有部门*/genmodu varchar2(10),/*资料修改者*/gendate date/*最近修改日*/);create unique index gen_01 on gen_file(gen01);,单档程序的示例,表结构:create table gem_file(gem01 varchar2(6),/*部门编号*/gem02 varchar2(40),/*部门名称*/gem03 varchar2(40),/*部门全称*/gem04 varchar2(6),/*No Use*/gem05 varchar2(1),/*是否为会计部门*/gem06
10、 varchar2(1),/*No Use*/gem07 varchar2(1),/*费用类别*/gem08 varchar2(1),/*No Use*/gemacti varchar2(1),/*资料有效码*/gemuser varchar2(10),/*资料所有者*/gemgrup varchar2(6),/*资料所有部门*/gemmodu varchar2(10),/*资料修改者*/gemdate date,/*最近修改日*/gem09 varchar2(1),/*管理类别 1.成本中心 2.利润中心 3.其它*/gem10 varchar2(6)/*对应成本中心*/);create u
11、nique index gem_01 on gem_file(gem01);,单档程序的示例,请查看教材单档部分!,第一天课程结束,谢谢大家,本次课程内容,查询程序介绍 p_qry动态程序设计 除错工具Debugger介绍,p_qry动态查询程序介绍,在TIPTOP GP系统中,有两种查询程序:1、hard-code 此类查询程序是由人工完成。存在源代码档,目录是qry/4gl下 任何查询都可以用此类方式完成,程序编写比较繁琐,对于初学者不易掌握。2、p_qry动态查询程序 此类查询程序是由系统完成。没有源代码档,系统直接调用配置后完成。有一定的局限性 无需编程,容易掌握。,p_qry动态查询
12、程序介绍,p_qry动态查询程序介绍,1.动态查询程序名称代码(.form)2.查询视窗标题3.本函式为Hard-Code函式:用于占位,防止两种查询 程序名称冲突4.是否忽略单身营运中心设置:一旦勾选,查询仅限于用户所在db5.本查询程序单身资料不上锁,可更改:勾选后才能更改设置资料6.客制查询程序:若为客制程序,则须勾选。,p_qry动态查询程序介绍,1.Input时的Where条件:录入状态下,开窗查询的条件。2.Construct时的Where条件:查询状态下,开窗查询的条件。3.需JOIN的TABLE:查询时所涉及到的非查询字段的表。4.资料会重复,需要DISTINCT属性:增加di
13、stinct属性,去除重复资料。,p_qry动态查询程序介绍,1.资料数据库代码:设定查询资料所在数据库2.资料表代码:设定查询资料表3.字段代码:设定查询字段4.字段宽度:设定窗体中该栏位的宽度5.本栏回传:设定是否回传该字段的值6.字段类型:设定窗体中该栏位的画面栏位类型7.本栏需Outer:设定该字段是否需要outer8.串查程序代码:可在窗体中增加相关资料的查询功能,p_qry动态查询程序介绍,参数须透过g_qryparam全局变量传递。.form查询程序代码.state状态 input/construct(i/c).construct是否作Construct(Y/N).where其他
14、Where条件.pagecount每页最大浏览笔数.default15开窗栏位的预设值.arg19 查询资料的条件替换值.multiret_index 多选资料所要回传的栏位索引值.multiret 多选资料的回传值暂存器.ordercons ORDER BY的顺序,p_qry动态查询程序介绍,何时采用hard-code,何时采用p_qry1)sql比较简单则采用p_qry sql非常复杂则采用hard-code2)default值超过5个时,只能采用hard-code3)arg传入值超过9个时,只能采用hard-code,p_qry动态查询程序介绍,查询状态下的开窗CALL cl_init_
15、qry_var()LET g_qryparam.form=q_gen LET g_qryparam.state=“c”/此句不可省略LET g_qryparam.default1=g_azb.azb01CALL cl_create_qry()RETURNING g_qryparam.multiretDISPLAY g_qryparam.multiret TO azb01 NEXT FIELD azb01,p_qry动态查询程序介绍,录入状态下的开窗CALL cl_init_qry_var()LET g_qryparam.form=q_gen“LET g_qryparam.state=“i”/此
16、句可以省略 LET g_qryparam.default1=g_azb.azb01CALL cl_create_qry()RETURNING g_azb.azb01DISPLAY BY NAME g_azb.azb01NEXT FIELD azb01,p_qry动态查询程序介绍,两种状态下的比较:CALL cl_init_qry_var()#CALL cl_init_qry_var()#清空g_qryparam变数组LET g_qryparam.form=q_gen#LET g_qryparam.form=q_gen#指定组别 LET g_qryparam.state=c LET g_qryp
17、aram.default1=g_azb.azb01#LET g_qryparam.default1=g_azb.azb01#指定取消时回传值CALL cl_create_qry()RETURNING g_qryparam.multiret#CALL cl_create_qry()RETURNING g_azb.azb01#动态查询 DISPLAY g_qryparam.multiret TO azb01#DISPLAY BY NAME g_azb.azb01#重秀 NEXT FIELD azb01#NEXT FIELD azb01,p_qry动态查询程序介绍,传入值:,p_qry动态查询程序介
18、绍,p_qry动态查询程序介绍,p_qry动态查询程序介绍,p_qry动态查询程序介绍,WHEN INFIELD(cqa09)CALL cl_init_qry_var()LET g_qryparam.form=q_dpb LET g_qryparam.arg1=A LET g_qryparam.default1=g_cqal_ac.cqa09 CALL cl_create_qry()RETURNING g_cqal_ac.cqa09 DISPLAY g_cqal_ac.cqa09 TO cqa09 NEXT FIELD cqa09#,WHEN INFIELD(cqv04)CALL cl_ini
19、t_qry_var()LET g_qryparam.form=q_dpb LET g_qryparam.arg1=B LET g_qryparam.default1=g_cqvl_ac.cqv04 CALL cl_create_qry()RETURNING g_cqvl_ac.cqv04 DISPLAY g_cqvl_ac.cqv04 TO cqv04 NEXT FIELD cqv04,apyt010,apyt090,p_qry动态查询程序介绍,返回值多个(录入状态),p_qry动态查询程序介绍,返回值多个(录入状态),p_qry动态查询程序介绍,返回值多个(查询状态),p_qry动态查询程序
20、介绍,返回值多个(查询状态),p_qry动态查询程序介绍,p_qry动态查询程序介绍,WHEN INFIELD(cua34)CALL cl_init_qry_var()LET g_qryparam.state=c LET g_qryparam.form=q_tpa LET g_qryparam.default1=g_cua.cua34 LET g_qryparam.default2=g_cua.cua341 CALL cl_create_qry()RETURNING g_qryparam.multiret DISPLAY g_qryparam.multiret TO cua34 NEXT FI
21、ELD cua34WHEN INFIELD(cua341)CALL cl_init_qry_var()LET g_qryparam.state=c LET g_qryparam.form=q_tpa LET g_qryparam.default1=g_cua.cua34 LET g_qryparam.default2=g_cua.cua341 CALL cl_create_qry()RETURNING g_qryparam.multiret DISPLAY g_qryparam.multiret TO cua34 NEXT FIELD cua341,WHEN INFIELD(cua34)CAL
22、L cl_init_qry_var()LET g_qryparam.form=q_tpa LET g_qryparam.default1=g_cua.cua34 LET g_qryparam.default2=g_cua.cua341 CALL cl_create_qry()RETURNING g_cua.cua34,g_cua.cua341 DISPLAY BY NAME g_cua.cua34,g_cua.cua341 NEXT FIELD cua34WHEN INFIELD(cua341)CALL cl_init_qry_var()LET g_qryparam.form=q_tpa LE
23、T g_qryparam.default1=g_cua.cua34 LET g_qryparam.default2=g_cua.cua341 CALL cl_create_qry()RETURNING g_cua.cua34,g_cua.cua341 DISPLAY BY NAME g_cua.cua34,g_cua.cua341 NEXT FIELD cua341,construct:,input:,p_qry动态查询程序介绍,程序中加where条件,p_qry动态查询程序介绍,p_qry动态查询程序介绍,WHEN INFIELD(cua281)CALL cl_init_qry_var()L
24、ET g_qryparam.form=q_tpu LET g_qryparam.default1=g_cua.cua281 LET g_qryparam.where=tpu01=,g_cua.cua28,CALL cl_create_qry()RETURNING g_cua.cua281 DISPLAY BY NAME g_cua.cua281 NEXT FIELD cua281,Debugger工具介绍,指令:r.d2+程序名(不跟后缀)例如:r.d2+aooi010注意:执行该命令必须在该程序所在的4gl目录下运行,Debugger工具介绍,Debugger工具介绍,Debugger工具介
25、绍,查询:ctrl+F,Debugger工具介绍,Debugger命令框:,1、show all commands:显示所有命令语句2、refresh:刷新3、copy to clipboard:将Debugger Output中的内容复制到剪贴板4、可用ctrl-D来开启命令框,Debugger工具介绍,常用的Debugger命令:p:查询变量值 例如 p g_azi01 b:快速设置断点 例如 b i010_a(),Debugger工具介绍,Inspect(ctrl-I)变量跟踪,1、Add Watch 增加跟踪变量2、Delete Watch 删除跟踪变量3、Edit Watches 编
26、辑跟踪变量,第二天课程结束,谢谢大家,本次课程内容,栏位的开启与关闭示例讲解,栏位的开启和关闭,什么是栏位的开启和关闭 当画面上某个栏位在某种情况下可以录入,或者在某种情况下不可以录入,控制栏位可否输入的状态即为栏位的开启和关闭,锁与解锁的时机点(1),条件:当B 5 时,C不可输入,A,B,C,Before FieldAfter Field,Before FieldAfter Field,Before FieldAfter Field,D,Before FieldAfter Field,情况一:从A进B,且B=3,点C欲进,可进情况二:从A进B,且B=6,点C欲进,不可进情况三:B=3时,从
27、A欲进C,可进情况四:B=6时,从A欲进C,不可进情况五:一进来就到D,要进C,BEFORE INPUT,控端,被控端,锁与解锁的时机点(2),条件:当B+X 5 时,C不可输入,A,Before FieldAfter Field,BEFORE INPUT,控端,被控端,B,Before FieldAfter Field,C,Before FieldAfter Field,X,Before FieldAfter Field,D,Before FieldAfter Field,控端,情况很多,但可由单锁类推,锁与解锁的时机点(3),条件:当X 5 时,C不可输入,A,B,C,Before Fie
28、ldAfter Field,Before FieldAfter Field,Before FieldAfter Field,D,Before FieldAfter Field,只须写在 BEFORE INPUT,BEFORE INPUT,被控端,set_entry/set_no_entry,CALL xxx_set_entry(p_cmd)CALL xxx_set_no_entry(p_cmd)p_cmd表示状态:a为新增,u为修改cl_set_comp_entry此公用函数可以同时让多个栏位开启或关闭cl_set_comp_entry(ps_fields,pi_entry)ps_fields
29、 STRING设定元件的栏位名称,逗号分隔不同栏位pi_entry SMALLINT 是否可输入,TRUE:可输入;FALSE:不可输入,第三天课程结束,谢谢大家,附录1,单档作业设计流程1、建立数据库表,r.s22、p_tabname,p_feldname3、设计画面档,即编辑per档4、p_perlang画面多语言维护5、编辑源代码,即编辑4gl档6、p_zz程序设置资料维护7、p_link程序链接设置8、权限设置6、挂载程序,维护p_zm,附录2,单档4gl程序设计流程Global setting主函数MAIN菜单函数Menucursor函数curs/cs查询入口函数q(),资料抓取函数fetch()资料显示函数show()录入功能函数i()新增功能函数a(),修改功能函数u(),有效/无效x()删除功能函数r()复制功能函数copy(),附录3,复制功能函数的流程图,模版资料,临时表temp,用户user,数据库db,1,2,3,4,1:将模版资料放到临时表中2:要求user修改key值,并更新临时表中的资料,3:将修改后的临时表内的资料insert至db中4:询问用户是否修改资料,若修改则对db中的资料update。,注意:2和4是不相同的。1、第二步修改的关键字段而第四步则是对其他非关键字段的修改2、第二步是必须要做的,目的是保证key值不重复。而第四步可做可不做。,