前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >极简开发,半小时创建权限维护表单

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

作者头像
加菲猫的VFP
发布2021-08-16 15:09:37
6440
发布2021-08-16 15:09:37
举报
文章被收录于专栏:加菲猫的VFP

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

一、新建框架表单

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

点选菜单:工具->选项->表单(选项卡)->选中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

代码语言:javascript
复制
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条件

代码语言:javascript
复制
select MODULE,DESCRIPTION,ENABLED,roleright.ID 
from roleright inner join  rights 
on roleright.right_id=rights.id
where userid=?this.uid

保存即可。

2、表单代码编写

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

代码语言:javascript
复制
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事件

代码语言:javascript
复制
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方法

代码语言:javascript
复制
If Inlist(This.Opcode,0)  &&浏览模式
    This.Enabled=.T.
Else
    This.Enabled=.F.
Endif

编辑按钮Qiyu_cmdedit1按钮click事件

代码语言:javascript
复制
Thisform.opcode=2  &&编辑模式

撤消按钮Qiyu_cmdcancel1按钮click事件

代码语言:javascript
复制
Thisform.Oca.Undo()
Thisform.Opcode=0

保存按钮Qiyu_cmdcancel1按钮click事件

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

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

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

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

代码语言:javascript
复制
If Inlist(Thisform.Opcode,1,2)
    This.ReadOnly=.F.
    This.column3.Enabled=.T.    
Else
    This.ReadOnly=.T.
    This.column3.Enabled=.F.
Endif

思考题:

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

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-03-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 加菲猫的VFP 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档