概述
程序功能代码
- azzq171 可查询函数说明
- adzi170 可执行SQL,查看数据库数据
- 提示报错信息(弹框)
- 年龄限制 18~60
- 审核后修改身份证
- [已审核]和[无效] 状态下无法修改
- 单号开窗需要传参数(参照表编号、程序编号)+ 开窗测试工具使用
- 开窗参数写成全局变量
- 项次自增
- 开窗选择后,点击[确定]后直接带值
- 审核相关
- [已审核]不允许直接失效,[失效]不允许直接审核
- 单身没有数据,审核会报错
- 资料异动中, 资料审核者,资料审核日期
- 已审核时隐藏未审核,失效时隐藏审核
- 数据库查询出某个值并显示在画面上
- 源码分析
- 开窗代码
目录:【实习】T100学习笔记
azzq171 可查询函数说明
adzi170 可执行SQL,查看数据库数据
提示报错信息(弹框)
INITIALIZE g_errparam TO NULL
LET g_errparam.extend = "警告:" #错误信息的前缀
LET g_errparam.code = 'aap-00113' #错误信息代码,在常用工具->错误讯息维护作业中添加
LET g_errparam.popup = FALSE #错误信息是否需要弹框(false不用,true则有)
CALL cl_err()
NEXT FIELD CURRENT
年龄限制 18~60
cl_null()
用于判断是否为空g_oozyuc_m.oozyuc004
获取表头变量- azzi920 错误代码维护,
"coo-00666"
是我自定义的错误编号
#检查年龄必须 >=18 并且 <=60
IF NOT cl_null(g_oozyuc_m.oozyuc004) THEN
IF g_oozyuc_m.oozyuc004 < 18 OR g_oozyuc_m.oozyuc004 > 60 THEN
INITIALIZE g_errparam TO NULL
LET g_errparam.extend = ""
LET g_errparam.code = "coo-00666"
LET g_errparam.popup = TRUE
CALL cl_err()
NEXT FIELD oozyuc004
END IF
END IF
报错 代码段:
INITIALIZE g_errparam TO NULL LET g_errparam.extend = "" LET g_errparam.code = "coo-00666" #azzi920维护错误码 LET g_errparam.popup = TRUE CALL cl_err() # NEXT FIELD oozyuc005
审核后修改身份证
不要忘记在 ui_dialog 里定义变量:
DEFINE l_success LIKE type_t.num10
在 ON ACTION modify_sfz 处添加代码:
#應用 a43 樣板自動產生(Version:4)
ON ACTION modify_sfz
LET g_action_choice="modify_sfz"
IF cl_auth_chk_act("modify_sfz") THEN
#add-point:ON ACTION modify_sfz name="menu2.modify_sfz"
#单据必须是审核状态才能执行这个功能
IF g_oozyuc_m.oozyucstus = 'Y' THEN
#因为修改画面上的身份证需要异动到数据表,所以需要开启事务
CALL s_transaction_begin()
#通过下面函数返回的l_success,判断事务是提交还是回滚
CALL cooi666_modify_sfz() RETURNING l_success
IF NOT l_success THEN
CALL s_transaction_end('N', '0') #回滚
ELSE
CALL s_transaction_end('Y', '0') #提交
END IF
ELSE #报错,单据状态不是审核,不能点此按钮
INITIALIZE g_errparam TO NULL
LET g_errparam.extend = ""
LET g_errparam.code = "coo-00667"
LET g_errparam.popup = TRUE
CALL cl_err()
EXIT MENU #报错后退出MENU
END IF
#END add-point
END IF
然后去写 cooi666_modify_sfz() 函数的代码:
PRIVATE FUNCTION cooi666_modify_sfz()
DEFINE l_success LIKE type_t.num10 #返回值
#将返回值默认为TRUE,在下面如果有报错就默认为false,表示事务会执行回滚
LET l_success = TRUE
#先开启游标,找的是MAIN函数里面的for update的游标,目的是为了锁住这边资料不被其他人修改
OPEN cooi666_cl USING g_enterprise,g_oozyuc_m.oozyuc00
#这里是判断cooi123_cl这个游标对应得SQL语句有无报错
IF STATUS THEN #若报错,走下面的报错信息,并且关闭游标,直接返回FALSE
INITIALIZE g_errparam TO NULL
LET g_errparam.extend = "OPEN cooi666_cl:"
LET g_errparam.code = STATUS
LET g_errparam.popup = TRUE
CALL cl_err()
CLOSE cooi666_cl #关闭游标
LET l_success = FALSE
RETURN l_success #直接返回 FALSE
END IF
#通过input语法直接修改身份证号,如果不写input,不能在画面上输入字段的值
DIALOG ATTRIBUTES(UNBUFFERED,FIELD ORDER FORM)
INPUT BY NAME g_oozyuc_m.oozyuc005 ATTRIBUTE(WITHOUT DEFAULTS)
BEFORE INPUT
BEFORE FIELD oozyuc005
AFTER FIELD oozyuc005 #校验带值
IF NOT cl_null(g_oozyuc_m.oozyuc005) THEN
#写一些其他逻辑
DISPLAY BY NAME g_oozyuc_m.oozyuc005
END IF
ON CHANGE oozyuc005
ON ACTION controlp INFIELD oozyuc005 #如果是需要开窗写在下面
AFTER INPUT #input输入之后,直接更新到数据库
UPDATE oozyuc_t SET oozyuc005 = g_oozyuc_m.oozyuc005
WHERE oozyucent = g_enterprise
AND oozyuc001 = g_oozyuc_m.oozyuc001
IF SQLCA.SQLCODE THEN
INITIALIZE g_errparam TO NULL
LET g_errparam.extend = ""
LET g_errparam.code = SQLCA.SQLCODE
LET g_errparam.popup = TRUE
CLOSE cooi666_cl
CALL cl_err()
LET l_success = FALSE
END IF
END INPUT #input结束
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 ACTION controlr
CALL cl_show_req_fields()
ON ACTION controls
IF g_header_hidden THEN
CALL gfrm_curr.setElementHidden("vb_master",0)
CALL gfrm_curr.setElementImage("controls","small/arr-u.png")
LET g_header_hidden = 0 #visible
ELSE
CALL gfrm_curr.setElementHidden("vb_master",1)
CALL gfrm_curr.setElementImage("controls","small/arr-d.png")
LET g_header_hidden = 1 #hidden
END IF
ON ACTION accept
ACCEPT DIALOG
ON ACTION cancel #取消
LET INT_FLAG = TRUE
ON ACTION close #关闭,右上角的(X)
ACCEPT DIALOG
ON ACTION exit #离开
ACCEPT DIALOG
#交談指令共用ACTION
&include "common_action.4gl"
CONTINUE DIALOG
END DIALOG
RETURN l_success
END FUNCTION
[已审核]和[无效] 状态下无法修改
- 有3种状态:N:未审核、X:无效、Y:已审核
cl_set_act_visible()
:用于设置功能是否显现
将代码添加在 xxx_set_act_no_visible
IF g_oozyuc_m.oozyucstus NOT MATCHES "[N]" THEN #N未审核/X无效/Y已审核
CALL cl_set_act_visible("modify,delete,modify_detail", FALSE)
END IF
单号开窗需要传参数(参照表编号、程序编号)+ 开窗测试工具使用
下图中,在 adzi210开窗设计器中可以看到,单号的开窗识别码要求传2个参数,分别是 参照表编号 和 程序编号 ,需要我们在代码里添加。
- 参照表编号 在下面的【单据别建立流程】中有讲,aooi100中可以查看
- 程序编号在代码里是个全局变量,
g_prog
,本程序中即cxmt666
开窗测试工具的使用
在 adzi210开窗设计工具中,查出了对应的开窗识别码后,点击【开窗测试工具】,然后将对应的参数输入,点击右边的开窗,即可查出对应的值。
如果没有查出来,按照【单据别建立流程】检查一遍流程。
在 ON ACTION controlp INFIELD xmzyucdocno
,即点击单号开窗的位置,写代码:
#add by lzy #2021/1/27 根据当前的据点找到对应的单据别参照表号
LET l_ooef004 = ''
SELECT ooef004 INTO l_ooef004 FROM ooef_t
WHERE ooefent = g_enterprise #企业编号=当前企业编号
AND ooef001 = g_site #组织编号=据点
#給予arg
LET g_qryparam.arg1 = l_ooef004
LET g_qryparam.arg2 = g_prog #程序编号:cxmt666
注:l_ooef004
需要在前面定义变量,我们在 cxmt666_input
开头定义:
DEFINE l_ooef004 LIKE ooef_t.ooef004 #add by lzy#2021/1/27 单据别参照表号
开窗参数写成全局变量
在上面我们是用 l_
开头的局部变量的方式写的,但是有时候很多开窗要传的参数是一样的,如果每次都要重新写,那将很麻烦,不如直接改成全局变量,后需要用到都可以拿来用。
将变量声明到 MAIN 上面的全局区域:
#add-point:自定義模組變數(Module Variable) (請盡量不要在客製環境修改此段落內容, 否則將後續patch的調整需人工處理) name="global.variable"
DEFINE g_ooef004 LIKE ooef_t.ooef004 #add by lzy#2021/1/27 单据别参照表号
DEFINE g_ooef024 LIKE ooef_t.ooef024 #add by lzy#2021/1/27 供应商编号
DEFINE g_ooef019 LIKE ooef_t.ooef019 #add by lzy#2021/1/27 税区编号
#end add-point
在 xxxx_init()
的画面资料初始化区域写SQL查询:
#add-point:畫面資料初始化 name="init.init"
LET g_ooef004 = ''
LET g_ooef024 = ''
SELECT ooef004,ooef024,ooef019 INTO g_ooef004,g_ooef024,g_ooef019 FROM ooef_t
WHERE ooefent = g_enterprise #企业编号=当前企业编号
AND ooef001 = g_site #组织编号=据点
#end add-point
最后在 ON ACTION controlp INFIELD xxxxx
处给参数赋值即可。
项次自增
在 axmt500 xxxx_input
> DIALOG
> BEFORE INSERT
下的 #項次加1
处可以捞到代码:
#項次加1
SELECT MAX(xmdcseq)+1 INTO g_xmdc_d[l_ac].xmdcseq FROM xmdc_t
WHERE xmdcent = g_enterprise AND xmdcdocno = g_xmda_m.xmdadocno
IF cl_null(g_xmdc_d[l_ac].xmdcseq) OR g_xmdc_d[l_ac].xmdcseq = 0 THEN
LET g_xmdc_d[l_ac].xmdcseq = 1
END IF
开窗选择后,点击[确定]后直接带值
这个和 AFTER FIELD
过栏位是不同的,需要写在开窗后面(ON ACTION
里)
# add by lzy 2021/2/22 点击确定后就显示参考字段(与过栏位区分)
INITIALIZE g_ref_fields TO NULL
LET g_ref_fields[1] = g_xmaguc_m.xmaguc003
CALL ap_ref_array2(g_ref_fields,"SELECT pmaal004 FROM pmaal_t WHERE pmaalent="||g_enterprise||" AND pmaal001=? AND pmaal002='"||g_dlang||"'","") RETURNING g_rtn_fields
LET g_xmaguc_m.xmaguc003_desc = '', g_rtn_fields[1] , ''
DISPLAY BY NAME g_xmaguc_m.xmaguc003_desc
审核相关
[已审核]不允许直接失效,[失效]不允许直接审核
xxx_statechange
中设置状态码变更后的操作
cl_set_act_visible
用于设置某个功能不显现
#add-point:menu前 name="statechange.before_menu"
CASE g_xmaguc_m.xmagucstus
# 失效不允许审核
WHEN "X"
CALL cl_set_act_visible("valid",FALSE)
# 已审核不允许失效
WHEN "Y"
CALL cl_set_act_visible("void",FALSE)
#160204-00006#1--add--(E)
END CASE
单身没有数据,审核会报错
#add-point:stus修改前 name="statechange.b_update"
CASE g_xmaguc_m.xmagucstus
# 单身没有数据,不允许审核 add by lzy 2021/2/24
WHEN "N"
SELECT MAX(xmahucseq)+1 INTO g_xmahuc_d[l_ac].xmahucseq FROM xmahuc_t
WHERE xmahucent = g_enterprise AND xmahuc001 = g_xmaguc_m.xmaguc001
IF cl_null(g_xmahuc_d[l_ac].xmahucseq) OR g_xmahuc_d[l_ac].xmahucseq = 0 THEN
CLOSE cxmi902_cl
INITIALIZE g_errparam TO NULL
LET g_errparam.extend = "警告:" #错误信息的前缀
LET g_errparam.code = 'agl-00336' #错误信息代码,在常用工具->错误讯息维护作业中添加
LET g_errparam.popup = TRUE #错误信息是否需要弹框(false不用,true则有)
CALL s_transaction_end('N','0') #(ver:19)
CALL cl_err()
RETURN
END IF
END CASE
资料异动中, 资料审核者,资料审核日期
写在statechange
里的 #add-point:stus修改後 name="statechange.a_update"
中
主要是修改一下执行的SQL,将[资料审核者]和[资料审核日期]一起变了
已审核时隐藏未审核,失效时隐藏审核
函数 cl_set_act_visible
:用于设置功能是否显现
在xxx_statechange
里的#add-point:menu前 name="statechange.before_menu"
中:
#add-point:menu前 name="statechange.before_menu"
CASE g_xmaguc_m.xmagucstus
WHEN "X"
CALL cl_set_act_visible("valid",FALSE)
WHEN "Y"
CALL cl_set_act_visible("void",FALSE)
#160204-00006#1--add--(E)
END CASE
#end add-point
数据库查询出某个值并显示在画面上
#檢查成功時後續處理
# add by lzy 2021/2/23 录入时根据客户查询最大版本+1预设
SELECT MAX(isdauc002) INTO g_isdauc_m.isdauc002
FROM isdauc_t
WHERE isdaucent = g_enterprise
AND isdaucsite = g_site
AND isdauc001 = g_isdauc_m.isdauc001
IF (cl_null(g_isdauc_m.isdauc002)) OR (g_isdauc_m.isdauc002=0) THEN
LET g_isdauc_m.isdauc002 = 1 # 为空或者为0,那么置为1
ELSE
# 不为空不为0,则在最大的基础上+1
LET g_isdauc_m.isdauc002 = g_isdauc_m.isdauc002 + 1
END IF
DISPLAY BY NAME g_isdauc_m.isdauc002
源码分析
开窗代码
最后
以上就是乐观芒果为你收集整理的【实习之T100开发】T100程序功能代码积累azzq171 可查询函数说明adzi170 可执行SQL,查看数据库数据提示报错信息(弹框)年龄限制 18~60审核后修改身份证[已审核]和[无效] 状态下无法修改单号开窗需要传参数(参照表编号、程序编号)+ 开窗测试工具使用项次自增开窗选择后,点击[确定]后直接带值审核相关资料异动中, 资料审核者,资料审核日期已审核时隐藏未审核,失效时隐藏审核数据库查询出某个值并显示在画面上源码分析的全部内容,希望文章能够帮你解决【实习之T100开发】T100程序功能代码积累azzq171 可查询函数说明adzi170 可执行SQL,查看数据库数据提示报错信息(弹框)年龄限制 18~60审核后修改身份证[已审核]和[无效] 状态下无法修改单号开窗需要传参数(参照表编号、程序编号)+ 开窗测试工具使用项次自增开窗选择后,点击[确定]后直接带值审核相关资料异动中, 资料审核者,资料审核日期已审核时隐藏未审核,失效时隐藏审核数据库查询出某个值并显示在画面上源码分析所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复