极简开发,半小时创建权限维护表单

本文介绍利用框架的自响应控件来完成设置表单的开发。

一、新建框架表单

配置新建表单类为框架表单类

点选菜单:工具->选项->表单(选项卡)->选中Qiyu单笔维护.vcx->qiyu_form_singlecursor表单类

图片

点击空项目的表单->新建

图片

如上图,表单新建完成

二、拖入相应自响应控件,设置好表单

图片

三、过一下大脑

1 用户列表,不需要增删改,表格的用户名列 enabled=.f.

数据查询用MSSQLHelper查询

2 权限列表,有修改需求,那么编辑、撤消、保存按钮安排上。表格模块,菜单名(enabled=.f.),可用(sparse=.f.),再将其表格列里的TEXT1控件改成CHECKBOX控件,并将该控件的Caption属性清空。

修改,保存用DAL_CA

因为是单表操作,直接用二层结构 (UI层,DAL层)即可完成目的。

3 点击右侧的用户,右侧的权限列表根据用户发生变化(DAL_CA传入user_pass.id参数变化)。

四、业务逻辑代码编写

1、生成DAL_CA类,打祺佑框架代码生成器

图片

2、展示权限的SQL

select MODULE,DESCRIPTION,ENABLED,roleright.ID from roleright 
inner join  rights on roleright.right_id=rights.id

复制到自定义CA的文本框,选择好远程表名,获取远程表,点击生成CA代码。

图片

生成好的代码,保存到DAL目录中 (规范文件存放)

图片

因为需要传递参数,我们需要修改生成的DAL_CA代码,打开DAL_ROLERIGHT.PRG,找到SetupCA方法,

将 selectcmd的内容改成如下语句 一个id要指定表名,一个where条件

select MODULE,DESCRIPTION,ENABLED,roleright.ID 
from roleright inner join  rights 
on roleright.right_id=rights.id
where userid=?this.uid

图片

保存即可。

2、表单代码编写

表单Load事件 (实现打开即是第一个用户的权限设置)

Do SetEnv &&环境参数设定
oDBSQLhelper=Newobject("MSSQLHelper","MSSQLHelper.prg")
If oDBSQLhelper.SQLQuery("select u_dm,id from user_pass","user_pass")<0
    Messagebox(oDBSQLhelper.errmsg)
    Return .F.
Endif
oCA=Newobject("dal_roleright","dal_roleright.prg")
        oca.uid=user_pass.Id  &&将用户表第一个用户的ID赋值给DAL_CA 传参
If !oCA.CursorFill(.T.)
    Aerror(laerror)
    Messagebox(laerror(2))
    Return .F.
Endif
Thisform.oca=oca

实现编辑模式下点击左侧表格,右边的权限表格重新按用户ID取数据。

Qiyu_grid_sort1表格(用户列表)的AfterRowColChange事件

Lparameters nColIndex
Thisform.Oca.uid=user_pass.Id
If !Thisform.Oca.CursorRefresh()
    Aerror(laerror)  &&错误信息
    Messagebox(laerror(2)) 
Endif
Thisform.refresh()

重设Qiyu_grid_sort1表格(用户列表)自响应行为

业务逻辑写法:如果是浏览模式下,用户列表表格控件可用,否则不可用。

Qiyu_grid_sort1表格(用户列表)的SetState方法

If Inlist(This.Opcode,0)  &&浏览模式
    This.Enabled=.T.
Else
    This.Enabled=.F.
Endif

编辑按钮Qiyu_cmdedit1按钮click事件

Thisform.opcode=2  &&编辑模式

撤消按钮Qiyu_cmdcancel1按钮click事件

Thisform.Oca.Undo()
Thisform.Opcode=0

保存按钮Qiyu_cmdcancel1按钮click事件

If !Thisform.Oca.Save()
    Messagebox(Thisform.Oca.msg)  &&显示错误信息
    Return
Endif
Thisform.Opcode=0  &&浏览模式
Wait Windows "保存成功"

OK,此时运行表单,似乎一切就绪。

图片

但在动图的最后出现了缓冲区不能修改的问题,这个BUG是因为,明明我的表格设为只读状态了,你点击CHECHKBOX虽然不能改变里面的内容,但是会引发了表的缓冲状态变化,此时再调用Cursorrefresh就会触发这个错误。

那就打个补丁,在表格的refresh事件添加如下代码

If Inlist(Thisform.Opcode,1,2)
    This.ReadOnly=.F.
    This.column3.Enabled=.T.    
Else
    This.ReadOnly=.T.
    This.column3.Enabled=.F.
Endif

思考题:

添加用户,添加新菜单都需要往RoleRigth写相应的权限数据。这个写入数据的业务逻辑代码写在哪里更好呢?

注:DEMO源码下载,请于框架会员群中下载。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

加菲猫的VFP

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值