技转课程-TOP GP单档作业_第1页
技转课程-TOP GP单档作业_第2页
技转课程-TOP GP单档作业_第3页
技转课程-TOP GP单档作业_第4页
技转课程-TOP GP单档作业_第5页
已阅读5页,还剩67页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、本教材以TIPTOP GP 5.25版为说明标准鼎捷软件 TOP GP 华东事业部i、t、s类等一笔资料aoos010单档维护aooi010单档多栏aooi040双档apmi252假双档p_perlang多檔aapt330报表或批处理程序类( p、r类)查询类( q类)程序分类本章说明单文件维护标准程序。所谓单档:是指使用单一档案来记录某一主文件数据,或是参考值数据等之档案。学习完本章后,你将可以了解以下部分: 控制流程及各个函数间之关系。 如何使用共享lib函式及相关应用时机。 与程序内容相关的维护程序说明。menuMAINu()q()F/N/P/Lcopy()r()x()out()show

2、()cs()fetch()u()show()show()rep()i()fetch()a()i()show()delh()查询上下笔新增更改删除无效复制报表功能列传入F,N,P,L,/传入a传入uexp()维护签核人员档azb_file本段应了解重点本段应了解重点GLOBALS “././config/top.global”若非所有TIPTOPGP程序均会用到的全局变量,则应该于每支程序中自行指定。# Prog. Version.: 5.25.02-11.03.23(00000) # Pattern name.: aooi010.4gl# Descriptions:签核人员# Date &am

3、p; Author.: 91/04/11 By Lee# Modify: No: MOD-470400 04/07/22 By Nicola删除放弃的button# Note.:本程序为教育训练使用单文件标准程序DATABASE dsGLOBALS ././config/top.globalGLOBALS ./././tiptop/config/top.globalDEFINE g_azb RECORD LIKE azb_file.*, g_azb_t RECORD LIKE azb_file.*,#备份旧值 g_azb01_t LIKE azb_file.azb01#Key值备份DEFINE

4、 g_wc STRING#储存user的查询条件DEFINE g_sql STRING#组sql用DEFINE g_forupd_sql STRING #SELECT . FOR UPDATE NOWAIT SQLDEFINE g_before_input_done SMALLINT#判断是否已执行Before Input指令DEFINE g_chr VARCHAR(1)DEFINE g_cnt INTEGERDEFINE g_i SMALLINT#count/index for any purposeDEFINE g_msg VARCHAR(72)DEFINE g_curs_index IN

5、TEGERDEFINE g_row_count INTEGER#总笔数DEFINE g_jump INTEGER#查询指定的笔数DEFINE g_no_ask SMALLINT#是否开启指定笔窗口本段应了解重点本段应了解重点 程序开始前,需将外部自变量读入 以程序所属的画面style开启窗口 WHENEVER ERROR CALL cl_err_msg_log lockcursor写法 menu以key值转换其他语言MAIN OPTIONS INPUT NO WRAP#输入的方式:不打转 DEFER INTERRUPT#撷取中断键 IF (NOTcl_user() THEN EXIT PROG

6、RAM END IF WHENEVER ERROR CALLcl_err_msg_log IF (NOTcl_setup(AOO) THEN EXIT PROGRAM END IFcl_user( )主要在抓取系统中与个人设定相关的变量值数据,如g_user,g_clas,g_grup等等。当发生SQL错误时,系统會CALL cl_err_msg_log( )注意此处CALL的写法与他处不同,不可加括号cl_setup( )主要在抓取系统中与模块设定相关的变量值数据,如这个模块所必需的全局变量等等。需要传入模块代码。客制时需要一并修改模块代码,系统会自动与p_zz中本程序所属模块比对。一个作业

7、只需要在主程序处呼叫1次即可。 CALL cl_used(g_prog,l_time,1) RETURNING l_time INITIALIZE g_azb.* TO NULL LET g_forupd_sql = SELECT * FROM azb_file WHERE azb01 = ? FOR UPDATE NOWAIT DECLARE i010_cl CURSOR FROM g_forupd_sql# LOCK CURSOR OPEN WINDOW i010_w AT p_row,p_col WITH FORM aoo/42f/aooi010 ATTRIBUTE (STYLE = g

8、_win_style CLIPPED) CALL cl_ui_init() LET g_action_choice = CALL i010_menu() CLOSE WINDOW i010_w CALL cl_used(g_prog,l_time,2) RETURNING l_timeEND MAINcl_used主要在记录用户使用本作业的时间,是否记录决定于aoos010。记录数据可用p_used检视或用aoor010打印使用状况报表开启时用STYLE = g_win_style CLIPPED(固定用法)。由于g_win_style在cl_setup中会抓取p_zz的设定,故可达到动态改变

9、外观之功能。此作业应成对出现,应传入主作业代码、现在时间、开启或结束代码作业的主要画面(通常是第一个开启的画面),后面使用CALL cl_ui_init( )不传参数其他的次要画面,就只使用 CALL cl_ui_locale(“画面代码”)两者差别在读入ToolBar等环境设定一般我们会要求在作OPENWINDOW的函式中就必需要在离开前做CLOSE WINDOW的工作。MAIN函式也相同。本段应了解重点本段应了解重点利用MENU-ON ACTION结构执行用户按下的功能menu段的g_action_choice名称要与4ad对应;若有非标准的action name,也要与程序自有4ad内的

10、名称相同权限判断,利用call cl_chk_act_auth()各Action内容FUNCTION i010_menu() DEFINE l_cmd VARCHAR(100) MENU BEFORE MENU CALL cl_navigator_setting(g_curs_index, g_row_count) ON ACTION insert LET g_action_choice=insert IFcl_chk_act_auth() THEN CALL i010_a() END IF ON ACTION query LET g_action_choice=query IFcl_chk_

11、act_auth()THEN CALL i010_q() END IFcl_navigator_setting( g_curs_index, g_row_count)主要用在重新设定TOOLBAR上的上笔、跳笔、下笔等五个按键是否 可用/不可用。此写法为固定写法,系统藉由操作g_curs_index(现在在哪一筆)、g_row_count(总共有几筆)来定义是否可用哪一些按键系统使用cl_chk_act_auth()函式来判断执行使用者(g_user)所属的群组(g_grup)在本作业(g_prog)是否有可执行的权利或作业项目。也会一并判断特殊案例,如是否与资料有关等。利用g_action_

12、choice告知要判断的权限项目。系统会侦测是否有写LET g_action_choice =“act_id” 若没写则系统默认此项不作权限控管。如果不欲显示出无权限的错误讯息,则可以呼叫cl_chk_act_auth_nomsg( )抑制错误讯息的出现 ON ACTION first CALL i010_fetch(F) ON ACTION jump CALL i010_fetch(/) ON ACTION last CALL i010_fetch(L) ON ACTION related_document LET g_action_choice=related_document IF cl

13、_chk_act_auth() THEN IF g_azb.azb01 IS NOT NULL THEN LET g_doc.column1 = azb01 LET g_doc.value1 = g_azb.azb01 CALL cl_doc() END IF END IFTIPTOP系统中使用标准action-id,其中first、previous、jump、next、last分别代表第一笔、前一笔、指定笔、下一笔及最后一笔以上五个action不作权限控管相关文件请命名为 “related_document”相关文件请用CALL cl_doc( )开启相关文件至少需传入一组column及va

14、lues相关文件至多可以传入五组column及values ON ACTION controlg CALL cl_cmdask() ON ACTION help CALL cl_show_help() ON ACTION about CALL cl_about() ON IDLE g_idle_seconds CALL cl_on_idle() CONTINUE MENU ON ACTION locale CALL cl_dynamic_locale()功能controlg为提供在作业中可以另外再开一个执行作业的函式只要CALL cl_cmdask( )即可本功能不外显在ring menu上,

15、以热键Control G驱动Help为提供一个html格式的说明文件,按入后会以浏览器开启本函式不传参数,系统自动寻找文件位置(与p_zz相关)本Action出现于toolbar处提供一个系统说明窗口,说明版本别、制作商及部份重要环境变量等。直接CALL cl_about( )即可本Action出现于TopMenuON IDLE主要在控制使用者是否空闲时间过长,若到达后方设定秒数,系统则执行此区段。g_idle_seconds为设定于相关作业cl_on_idle( )会读取相关设定确认是否该关闭作业或仅显示讯息cl_dynamic_locale( )主要在出现语言选单以供用户选择需要变更到哪一

16、个语系下显示,同时会一并更正此用户常用语言别右侧这四个项目,为与用户进行交谈时所必需给予的标准功能及标准限制,后序于INPUT、MENU、CONSTRUCT、PROMPT或DISPLAYARRAY均需给予。 ON ACTION cancel LET g_action_choice = exit EXIT MENU ON ACTION exit LET g_action_choice = exit EXIT MENU COMMAND KEY(INTERRUPT) LET INT_FLAG=FALSE LET g_action_choice = exit EXIT MENU END MENU CL

17、OSE i010_csEND FUNCTION左侧三个项目都是离开,分别作用于不同种类的指令中,以下分类说明。ON ACTION cancel当指令为DISPLAY ARRAY时,此action预设为右上方x按键ON ACTION exit标准的离开功能COMMAND KEY (INTERRUPT)使用MENU指令时,右上方的X即为此COMMAND KEY。menuMAINa()i()u()show()i()q()cs()fetch()show()F/N/P/Lfetch()copy()u()x()show()out()rep()r()show()delh()本段应了解重点本段应了解重点做查询

18、开始前的准备变数初始化用CLEARFORM清除画面资料预设上下笔Button状态分配工作给后续其他函式 资料总笔数:g_row_count;指标:g_curs_indexq()cs()fetch()show()FUNCTION i010_q() LET g_row_count = 0 LET g_curs_index = 0 CALL cl_navigator_setting(g_curs_index,g_row_count) INITIALIZE g_azb.* TO NULL MESSAGE CALL cl_opmsg(q) DISPLAY TO FORMONLY.cnt CALL i01

19、0_curs() #宣告SCROLL CURSOR IF INT_FLAG THEN LET INT_FLAG = 0 CLEAR FORM RETURN END IF本段应了解重点本段应了解重点CONSTRUCT查询数据开窗查询程序g_qryparam变量说明Count使用g_row_count变数FUNCTION i010_curs() CLEAR FORM INITIALIZE g_azb. * TO NULL CONSTRUCT BY NAME g_wc ON azb01,azb02,azb06, azbuser,azbgrup,azbmodu,azbdate,azbacti BEFO

20、RE CONSTRUCT CALL cl_qbe_init()呼叫cl_qbe_init(),会将条件储存功能中,勾选 “查询时直接带入” 的条件直接显示于画面上。 ON ACTION controlp CASE WHEN INFIELD(azb01) CALL cl_init_qry_var() LET g_qryparam.form = q_gen LET g_qryparam.state = c LET g_qryparam.default1 = g_azb.azb01 CALL cl_create_qry() RETURNING g_qryparam.multiret DISPLAY

21、g_qryparam.multiret TO azb01 NEXT FIELD azb01 OTHERWISE EXIT CASE END CASEcl_init_qry_var()处理动态开窗前的部份共享变量值g_qryparam.state=“i”g_qryparam.construct=“Y”cl_create_qry()用来产生开窗画面,并供用户查询、显示及回传选择的资料00000|00002|00003CONSTRUCT BY NAME g_wc ON azb01,azb02,azb06,#屏幕上取条件 azbuser,azbgrup,azbmodu,azbdate,azbacti

22、ON ACTION controlp CASE WHEN INFIELD(azb01) CALL cl_init_qry_var() LET g_qryparam.form = q_gen LET g_qryparam.state = c LET g_qryparam.default1 = g_azb.azb01 CALL cl_create_qry() RETURNING g_qryparam.multiret DISPLAY g_qryparam.multiret TO azb01 NEXT FIELD azb01 OTHERWISE EXIT CASE END CASE INPUT BY

23、 NAME g_azb.azb01,g_azb.azb02,g_azb.azb06, g_azb.azbuser,g_azb.azbgrup,g_azb.azbmodu, g_azb.azbdate,g_azb.azbacti WITHOUT DEFAULTS ON ACTION controlp CASE WHEN INFIELD(azb01) CALL cl_init_qry_var() LET g_qryparam.form = q_gen LET g_qryparam.default1 = g_azb.azb01 CALL cl_create_qry() RETURNING g_azb

24、.azb01 DISPLAY BY NAME g_azb.azb01 NEXT FIELD azb01 OTHERWISE EXIT CASE END CASELET g_qryparam.state=“i”00000|00002|0000300000CALL cl_create_qry()RETURNING g_azb.azb01, ON IDLE g_idle_seconds CALL cl_on_idle() CONTINUE CONSTRUCT ON ACTION about CALL cl_about() ON ACTION help CALL cl_show_help() ON A

25、CTION controlg CALL cl_cmdask() ON ACTION qbe_select CALL cl_qbe_select() ON ACTION qbe_save CALL cl_qbe_save() END CONSTRUCT#数据权限的检查LET g_wc CLIPPED, cl_get_extra_cond(azbuse, azbgrup)LET g_sql=SELECT azb01 FROM azb_file ,#组合出SQL指令 WHERE ,g_wc CLIPPED, ORDER BY azb01PREPARE i010_prepare FROM g_sqlD

26、ECLARE i010_cs# SCROLL CURSORSCROLL CURSOR WITH HOLD FOR i010_prepareLET g_sql= SELECT COUNT(*) FROM azb_file WHERE , g_wc CLIPPEDPREPARE i010_precount FROM g_sqlDECLARE i010_count CURSOR FOR i010_precountEND FUNCTIONFUNCTION i010_q() LET g_row_count = 0 LET g_curs_index = 0 CALL cl_navigator_settin

27、g(g_curs_index,g_row_count) INITIALIZE g_azb.* TO NULL MESSAGE CALL cl_opmsg(q) DISPLAY TO FORMONLY.cnt CALL i010_curs() #使用者输入条件,并宣告SCROLL CURSOR IF INT_FLAG THEN LET INT_FLAG = 0 CLEAR FORM RETURN END IF OPEN i010_count FETCH i010_count INTO g_row_count DISPLAY g_row_count TO FORMONLY.cnt OPEN i01

28、0_cs#从DB产生合乎条件TEMP(0-30秒) IF SQLCA.sqlcode THEN CALL cl_err(g_azb.azb01,SQLCA.sqlcode,0) INITIALIZE g_azb.* TO NULL ELSE CALL i010_fetch(F)#读出TEMP第一笔并显示 END IFEND FUNCTION错误讯息数据维护作业(p_ze)本段应了解重点分别传入N、P、F、L、/,以供下笔、上笔、第一笔、末一笔、跳笔功能使用在跳笔功能的地方,以变量区隔是否要开窗口给用户输入笔数Fetch无误后,以目前所在笔数及总笔数控制上下笔button是否显现FUNCTION

29、 i010_fetch(p_flazb) DEFINE p_flazb LIKE type_file.chr1 CASE p_flazb WHEN N FETCH NEXT i010_cs INTO g_azb_rowid,g_azb.azb01 WHEN P FETCH PREVIOUS i010_cs INTO g_azb_rowid,g_azb.azb01 WHEN F FETCH FIRST i010_cs INTO g_azb_rowid,g_azb.azb01 WHEN L FETCH LAST i010_cs INTO g_azb_rowid,g_azb.azb01 WHEN /

30、 IF (NOT g_no_ask) THEN CALL cl_getmsg(fetch,g_lang) RETURNING g_msg LET INT_FLAG = 0错误讯息数据维护作业(p_ze) PROMPT g_msg CLIPPED,: FOR g_jump ON IDLE g_idle_seconds CALL cl_on_idle() ON ACTION about CALL cl_about() ON ACTION help CALL cl_show_help() ON ACTION controlg CALL cl_cmdask() END PROMPT IF INT_FL

31、AG THEN LET INT_FLAG = 0 EXIT CASE END IF END IF FETCH ABSOLUTE g_jump i010_cs INTO g_azb_rowid,g_azb.azb01 LET g_no_ask = FALSE END CASE IF SQLCA.sqlcode THEN CALL cl_err(g_azb.azb01,SQLCA.sqlcode,0) INITIALIZE g_azb.* TO NULL RETURN ELSE CASE p_flazb WHEN F LET g_curs_index = 1 WHEN P LET g_curs_i

32、ndex = g_curs_index - 1 WHEN N LET g_curs_index = g_curs_index + 1 WHEN L LET g_curs_index = g_row_count WHEN / LET g_curs_index = g_jump END CASE CALL cl_navigator_setting(g_curs_index, g_row_count)DISPLAY g_curs_index TO FORMONLY.idx END IF SELECT * INTO g_azb.* FROM azb_file#重读DB,因TEMP有不被更新特性 WHE

33、RE azb01 = g_azb.azb01 IF SQLCA.sqlcode THEN CALL cl_err3(sel,azb_file,g_azb.azb01,SQLCA.sqlcode,0) ELSE LET g_data_owner=g_azb.azbuser# 权限控管 LET g_data_group=g_azb.azbgrup CALL i010_show()#重新显示 END IFEND FUNCTIONg_data_owner、g_data_group为global变数,放在top.global内本段应了解重点本段应了解重点_show()显示数据FUNCTION i010_

34、show()#呈现数据 LET g_azb_t.* = g_azb.* DISPLAY BY NAME g_azb.azb01, g_azb.azb02, g_azb.azb06, g_azb.azbuser, g_azb.azbgrup, g_azb.azbmodu, g_azb.azbdate, g_azb.azbacti, g_azb.azborig, g_azb.azboriu CALL i010_azb01(d) CALL cl_show_fld_cont()END FUNCTIONmenuMAINa()i()u()show()i()q()cs()fetch()show()F/N/P

35、/Lfetch()copy()u()x()show()out()rep()r()show()delh()a()i()本段应了解重点新增前将资料清空;设定默认值FUNCTION i010_a() CLEAR FORM#清屏幕字段内容 INITIALIZE g_azb.* LIKE azb_file.* LET g_azb01_t = NULL LET g_wc = NULL CALL cl_opmsg(a) WHILE TRUE LET g_azb.azbuser = g_user LET g_azb.azboriu = g_user LET g_azb.azbgrup = g_grup#使用者

36、所属群 LET g_azb.azborig = g_grup LET g_azb.azbdate = g_today LET g_azb.azbacti = Y CALL i010_i(a) #各字段输入 IF INT_FLAG THEN #若按了DEL键 INITIALIZE g_azb.* TO NULL LET INT_FLAG = 0 CALL cl_err(,9001,0) CLEAR FORM EXIT WHILE END IF本段应了解重点本段应了解重点字段控制的function要加在BEFOREINPUT内,及条件字段的BEFORE FIELD跟AFTER FIELD字段控制写

37、法及逻辑各AFTERFIELD:字段非空白才检查字段正确性本段应了解重点本段应了解重点CONTROLO:回复旧值CONTROLP:开窗查询CONTROLZ:必要输入字段CONTROLF:开启字段说明ON IDLE:其他地方(construct段、input段、display段、prompt段)CONTROLG:执行外部指令FUNCTION i010_i (p_cmd) DEFINE p_cmd LIKE type_file.chr1, l_gen02 LIKE gen_file.gen02, l_gen03 LIKE gen_file.gen03, l_gen04 LIKE gen_file.

38、gen04, l_gem02 LIKE gem_file.gem02, l_input LIKE type_file.chr1, l_n LIKE type_file.num5 DISPLAY BY NAME g_azb.azb01,g_azb.azb02,g_azb.azb06, g_azb.azbuser,g_azb.azbgrup, g_azb.azbmodu, g_azb.azbdate,g_azb.azbacti INPUT BY NAME g_azb.azb01,g_azb.azb02,g_azb.azb06, g_azb.azbuser,g_azb.azbgrup, g_azb.

39、azbmodu, g_azb.azbdate,g_azb.azbacti WITHOUT DEFAULTS AFTER FIELD azb01 IF g_azb.azb01 IS NOT NULL THEN IF p_cmd = a OR#若输入或更改且改KEY (p_cmd = u AND g_azb.azb01 != g_azb01_t) THEN SELECT count(*) INTO l_n FROM azb_file WHERE azb01 = g_azb.azb01 IF l_n 0 THEN# Duplicated CALL cl_err(g_azb.azb01,-239,1)

40、 LET g_azb.azb01 = g_azb01_t DISPLAY BY NAME g_azb.azb01 NEXT FIELD azb01 END IF CALL i010_azb01(a) IF NOT cl_null(g_errno) THEN CALL cl_err(azb01:,g_errno,1) LET g_azb.azb01 = g_azb01_t DISPLAY BY NAME g_azb.azb01 NEXT FIELD azb01 END IF END IF END IF检查key值是否重复检查基本文件是否有资料 BEFORE INPUT LET l_input=N

41、 LET g_before_input_done = FALSE CALL i010_set_entry (p_cmd) CALL i010_set_no_entry (p_cmd) LET g_before_input_done = TRUE AFTER INPUT IF INT_FLAG THEN EXIT INPUT END IF IF g_azb.azb01 IS NULL THEN DISPLAY BY NAME g_azb.azb01 LET l_input=Y END IF IF l_input=Y THEN NEXT FIELD azb01 END IF本段应了解重点本段应了解

42、重点_set_entry( )使用cl_set_comp_entry(.,TRUE) 将字段开启_set_no_entry( )使用cl_set_comp_entry(.,FALSE)将字段关闭程序内容写法FUNCTION i010_set_entry(p_cmd) DEFINE p_cmd LIKE type_file.chr1 IF p_cmd = a AND (NOT g_before_input_done) THEN CALL cl_set_comp_entry(azb01,TRUE) END IFEND FUNCTIONFUNCTION i010_set_no_entry(p_cmd

43、) DEFINE p_cmd LIKE type_file.chr1 IF p_cmd = u AND g_chkey = N THEN CALL cl_set_comp_entry(azb01,FALSE) END IFEND FUNCTION域名若要同时设定多个字段,双括号内以逗号隔开Ex. CALL cl_set_comp_entry(“azb01,azb02”,TRUE)TRUE:设字段为ENTRYFALSE:设字段为NOENTRY某域值外部参数条件 被影响字段INPUT【B】 某域值【A】BEFORE INPUT_set_entry()_set_no_entry()设定B字段ENTR

44、Y及NOENTRYBEFORE FIELD A_set_entry()设定B字段ENTRYAFTER FIELD A_set_no_entry()设定B字段NOENTRY ON ACTION controlp CASE WHEN INFIELD(azb01) CALL cl_init_qry_var() LET g_qryparam.form = q_gen LET g_qryparam.default1 = g_azb.azb01 CALL cl_create_qry() RETURNING g_azb.azb01 DISPLAY BY NAME g_azb.azb01 NEXT FIELD

45、 azb01 OTHERWISE EXIT CASE END CASE ON ACTION CONTROLZ CALL cl_show_req_fields() ON ACTION CONTROLG CALL cl_cmdask() ON ACTION CONTROLF#字段说明 CALL cl_set_focus_form(ui.Interface.getRootNode() RETURNING g_fld_name,g_frm_name CALL cl_fldhelp(g_frm_name,g_fld_name,g_lang) ON IDLE g_idle_seconds CALL cl_

46、on_idle() CONTINUE INPUT ON ACTION about #MOD-4C0121 CALL cl_about() #MOD-4C0121 ON ACTION help #MOD-4C0121 CALL cl_show_help() #MOD-4C0121 END INPUTEND FUNCTIONFUNCTION i010_a() CLEAR FORM#清屏幕字段内容 INITIALIZE g_azb.* LIKE azb_file.* LET g_azb01_t = NULL LET g_wc = NULL CALL cl_opmsg(a) WHILE TRUE LE

47、T g_azb.azbuser = g_user LET g_azb.azbgrup = g_grup#使用者所属群 LET g_azb.azbdate = g_today LET g_azb.azbacti = Y CALL i010_i(a) #各字段输入 IF INT_FLAG THEN#若按了DEL键 INITIALIZE g_azb.* TO NULL LET INT_FLAG = 0 CALL cl_err(,9001,0) CLEAR FORM EXIT WHILE END IF IF g_azb.azb01 IS NULL THEN # KEY不可空白 CONTINUE WHI

48、LE END IF INSERT INTO azb_file VALUES(g_azb.*)# DISK WRITE IF SQLCA.sqlcode THEN CALL cl_err3(upd,azb_file,g_azb.azb01,SQLCA.sqlcode,0) CONTINUE WHILE ELSE SELECT ROWID INTO g_azb.azb01 FROM azb_file WHERE azb01 = g_azb.azb01 END IF EXIT WHILE END WHILE LET g_wc= END FUNCTIONmenuMAINa()i()u()show()i

49、()q()cs()fetch()show()F/N/P/Lfetch()copy()u()x()show()out()rep()r()show()delh()本段应了解重点确认数据是否可进行修改修改功能与新增功能共享_i()u()show()i()FUNCTION i010_u() IF g_azb.azb01 IS NULL THEN CALL cl_err(,-400,0) RETURN END IF SELECT * INTO g_azb.* FROM azb_file WHERE azb01=g_azb.azb01 IF g_azb.azbacti = N THEN CALL cl_e

50、rr(,9027,0) RETURN END IF MESSAGE CALL cl_opmsg(u) LET g_azb01_t = g_azb.azb01 BEGIN WORK OPEN i010_cl USING g_azb_rowid IF STATUS THEN CALL cl_err(OPEN i010_cl:, STATUS, 1) CLOSE i010_cl ROLLBACK WORK RETURN END IF FETCH i010_cl INTO g_azb.*#对DB锁定 IF SQLCA.sqlcode THEN CALL cl_err(g_azb.azb01,SQLCA

51、.sqlcode,1) RETURN END IF LET g_azb.azbmodu=g_user#修改者 LET g_azb.azbdate = g_today#修改日期 CALL i010_show() #显示最新数据 LET g_forupd_sql = SELECT * FROM azb_file WHERE ROWID = ? FOR UPDATE NOWAITDECLARE i010_cl CURSOR FROM g_forupd_sql WHILE TRUE CALL i010_i(u)#字段更改 IF INT_FLAG THEN LET INT_FLAG = 0 LET g_

52、azb.*=g_azb_t.* CALL i010_show() CALL cl_err(,9001,0) EXIT WHILE END IF UPDATE azb_file SET azb_file.* = g_azb.*#更新DB WHERE ROWID = g_azb_rowid IF SQLCA.sqlcode THEN CALL cl_err3(upd,azb_file,g_azb.azb01,SQLCA.sqlcode,0) CONTINUE WHILE END IF EXIT WHILE END WHILE CLOSE i010_cl COMMIT WORKEND FUNCTIO

53、NmenuMAINa()i()u()show()i()q()cs()fetch()show()F/N/P/Lfetch()copy()u()x()show()out()rep()r()show()delh()本段应了解重点确认资料是否可删除删除完毕后将数据指针重新定位,画面呈现下一笔数据r()show()delh()FUNCTION i010_r() IF g_azb.azb01 IS NULL THEN CALL cl_err(,-400,0) RETURN END IF BEGIN WORK OPEN i010_cl USING g_azb.azb01 IF STATUS THEN CAL

54、L cl_err(OPEN i010_cl:, STATUS, 0) CLOSE i010_cl ROLLBACK WORK RETURN END IFFETCH i010_cl INTO g_azb.* IF SQLCA.sqlcode THEN CALL cl_err(g_azb.azb01,SQLCA.sqlcode,0) RETURN END IFCALL i010_show()IF cl_delete() THEN LET g_doc.coloumn1 = “azb01” LET g_doc.value1 = “g_azb.azb01” CALL cl_del_doc() #删除单据

55、时,一并删除此单据的相关文件 DELETE FROM azb_file WHERE azb01=g_azb.azb01 CLEAR FORM OPEN i010_count FETCH i010_count INTO g_row_count DISPLAY g_row_count TO FORMONLY.cnt OPEN i010_cs IF g_curs_index = g_row_count + 1 THEN LET g_jump = g_row_count CALL i010_fetch(L) ELSE LET g_jump = g_curs_index LET g_no_ask = T

56、RUE CALL i010_fetch(/) END IF END IF CLOSE i010_cl COMMIT WORKEND FUNCTIONmenuMAINa()i()u()show()i()q()cs()fetch()show()F/N/P/Lfetch()copy()u()x()show()out()rep()r()show()delh()本段应了解重点确认数据是否可被拷贝若此程序有key的字段控制,要在INPUT前将key字段设为可输入FUNCTION i010_copy() DEFINE l_newno LIKE azb_file.azb01, l_oldno LIKE azb

57、_file.azb01, p_cmd LIKE type_file.chr1, l_input LIKE type_file.chr1 IF g_azb.azb01 IS NULL THEN CALL cl_err(,-400,0) RETURN END IF LET l_input=N LET g_before_input_done = FALSE CALL i010_set_entry(a) LET g_before_input_done = TRUE INPUT l_newno FROM azb01 AFTER FIELD azb01#针对输入字段一样要检查 IF l_newno IS

58、NOT NULL THEN SELECT count(*) INTO g_cnt FROM azb_file WHERE azb01 = l_newno IF g_cnt 0 THEN CALL cl_err(l_newno,-239,0) NEXT FIELD azb01 END IF SELECT gen01 FROM gen_file WHERE gen01= l_newno IF SQLCA.sqlcode THEN DISPLAY BY NAME g_azb.azb01 LET l_newno = NULL NEXT FIELD azb01 END IF END IF ON ACTION controlp#字段也可提供开窗查询 IF INFIELD(azb01) THEN CALL cl_init_qry_var() LET g_qryparam.form = q_gen LET g_qryparam.default1 = g_azb.azb01 CALL cl_create_

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论