我是靠谱客的博主 乐观芒果,最近开发中收集的这篇文章主要介绍【实习之T100开发】T100程序功能代码积累azzq171 可查询函数说明adzi170 可执行SQL,查看数据库数据提示报错信息(弹框)年龄限制 18~60审核后修改身份证[已审核]和[无效] 状态下无法修改单号开窗需要传参数(参照表编号、程序编号)+ 开窗测试工具使用项次自增开窗选择后,点击[确定]后直接带值审核相关资料异动中, 资料审核者,资料审核日期已审核时隐藏未审核,失效时隐藏审核数据库查询出某个值并显示在画面上源码分析,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

程序功能代码

  • 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审核后修改身份证[已审核]和[无效] 状态下无法修改单号开窗需要传参数(参照表编号、程序编号)+ 开窗测试工具使用项次自增开窗选择后,点击[确定]后直接带值审核相关资料异动中, 资料审核者,资料审核日期已审核时隐藏未审核,失效时隐藏审核数据库查询出某个值并显示在画面上源码分析所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(71)

评论列表共有 0 条评论

立即
投稿
返回
顶部