#单据必须是审核状态才能执行这个功能
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