当前位置: 首页 > article >正文

【开发问题解决方法记录】04.dian 权限表单优化

 权限表单优化方向:

父级权限从晶点权限表获取做成列表下拉选中

权限名称和编码一行两列

页面id从

select *
from APEX_APPLICATION_PAGES where APPLICATION_ID=304;

中获取

【遇到的问题1】

DG可以获取到页面信息,但是表和应用程序无法获取到

【问题原因】走了弯路,直接去查对应数据表就好了,不用专门建表再查询
【问题解决】直接在值列表使用SQL查询:

select PAGE_NAME , PAGE_ID
from APEX_APPLICATION_PAGES where APPLICATION_ID=:APP_ID;

【遇到问题2】

在权限编码框中写入自动编码的代码,但是点击自动生成无效

先后执行顺序:若是用户未手动输入,点击新增按钮,先自动生成CODE再执行新增操作。

报错:

Access to undefined Per Request (Memory Only) variable P33_PERMISSION_ID

访问未定义的每个请求 (仅内存) 变量P33_PERMISSION_ID

【问题原因】

说明不能笼统卸载一起,因为P33_PERMISSION_ID在自动生成CODE的代码中是作为判断的的输入项,而在新增执行代码中是自增的,在按下“新增”按钮前都无法获取,所以会报错

【解决方法】

将自动生成CODE的代码和新增代码分开并校验

【代码】

自动生成权限CODE并校验

declare
    v_err_msg        nvarchar2(2000);--错误提示
    v_permission_code nvarchar2(32);  --权限编码
    row_count        number(20) := 1;
    v_count          number(20) := 0;
begin
  /**
     * CREATE BY: xiaoxiao
     * CREATE DATE: 2023-12-05 18:54
     * MODIFY BY:
     * MODIFY DATE:
     * DESCRIBE:自动生成权限CODE并校验
     */
    if :P33_PERMISSION_CODE is null then
        select 'JD-' || to_char(sysdate, 'yymmddhh24misssss') into v_permission_code from dual;
    else
        v_permission_code := :P33_PERMISSION_CODE;
    end if;
    if :P33_PERMISSION_ID is null then   --新增
        select count(1) --查询是否有重名情况
        into v_count
        from BASIC_SYSTEM_PERMISSION
        where PERMISSION_NAME = :P33_PERMISSION_NAME
          and TENANT_ID = :USER_TENANT
          and DEL_FLAG = 0;
        if v_count = 0 then --没有重名情况
            select count(1)--查询CODE是否有重复
            into v_count
            from BASIC_SYSTEM_PERMISSION
            where TENANT_ID = :USER_TENANT
              and PERMISSION_CODE = :P33_PERMISSION_CODE
              and DEL_FLAG = 0;
            if v_count > 0 then  --CODE重复
                row_count := -1;
                apex_util.set_session_state('P33_MESSAGE', '权限CODE重复');
            end if;
        else  --重名
            row_count := -1;
            apex_util.set_session_state('P33_MESSAGE', '权限名称重复');
        end if;
    else  --修改
        select count(1)
        into v_count
        from BASIC_SYSTEM_PERMISSION
        where TENANT_ID = :USER_TENANT
          and DEL_FLAG = 0
          and PERMISSION_ID != :P33_PERMISSION_ID;
        if v_count = 0 then
            select count(1)
            into v_count
            from BASIC_SYSTEM_PERMISSION
            where TENANT_ID = :USER_TENANT
              and permission_code = :P33_PERMISSION_CODE
              and DEL_FLAG = 0
              and PERMISSION_ID != :P33_PERMISSION_ID;
            if v_count > 0 then
                row_count := -1;
                apex_util.set_session_state('P33_MESSAGE', '权限CODE重复');
            end if;
        else
            row_count := -1;
            apex_util.set_session_state('P33_MESSAGE', '权限名称重复');
        end if;
    end if;

    apex_util.set_session_state('P33_ROW_COUNT', row_count);
exception
    when others then
        apex_util.set_session_state('P33_ROW_COUNT', 0);
        apex_util.set_session_state('P33_MESSAGE', '数据异常,请联系管理员');
        v_err_msg := sqlerrm || chr(13) || dbms_utility.format_error_backtrace;
        JA_WRITE_LOG('P' || :APP_PAGE_ID || ':' || :APP_PAGE_ALIAS, 'error', v_err_msg, :USER_ID, :USERTENANT,
                     :APP_NAME || ':' || :APP_ID);
end;

执行新增

-- 新增权限
declare
    v_err_msg        nvarchar2(2000);
    v_permission_code nvarchar2(32);
    v_permission_id        number(20) ;
    row_count        number(20) := 0;
     /**
     * create by: xiaoxian
     * create date:2023/12/6 10:09
     * modify by:
     * modify date:
     * describe:权限新增
     */
begin
    if :P33_PERMISSION_CODE is null then  --用户未手动输入,自动生成CODE
        select 'JD-' || to_char(sysdate, 'yymmddhh24misssss') into v_permission_code from dual;
    else  --用户手动输入CODE
        v_permission_code := :P33_PERMISSION_CODE;  --自动生成的CODE赋值
    end if;
    -- insert or update
    if :P33_permission_id is null then  --新增
        insert into BASIC_SYSTEM_PERMISSION(
       PARENT_PERMISSION_ID,
       PERMISSION_CODE,
       PERMISSION_NAME,
       PERMISSION_TYPE,
       PERMISSION_URL,
       PERMISSION_LEVEL,
       PAGE_ID,
       SORT,
       REMARK,
       IS_ENABLE,
       DEL_FLAG,
       TENANT_ID,
       CREATED_BY,
       CREATION_DATE )
        values (:P33_PARENT_PERMISSION_ID, v_permission_code,:P33_PERMISSION_NAME, 'MENU',
                :P33_PERMISSION_URL,:P33_PERMISSION_LEVEL,:P33_PAGE_ID,:P33_SORT,:P33_REMARK,
                1,0,:USER_TENANT,:USER_ID,sysdate)
        returning permission_id into v_permission_id;
        row_count := SQL%ROWCOUNT;
        -- apex_util.set_session_state('P33_permission_id', v_permission_id);
    else   --修改
        update BASIC_SYSTEM_PERMISSION
        set UPDATED_BY=:USER_ID,
            UPDATE_DATE=sysdate,
            PARENT_PERMISSION_ID =:P33_PARENT_PERMISSION_ID,
            permission_code = v_permission_code,
            PERMISSION_NAME = :P33_PERMISSION_NAME,
            PERMISSION_URL = :P33_PERMISSION_URL,
            PERMISSION_LEVEL = :P33_PERMISSION_LEVEL,
            PAGE_ID = :P33_PAGE_ID,
            SORT = :P33_SORT,
            REMARK = :P33_REMARK
        where PERMISSION_ID = :P33_PERMISSION_ID;
        row_count := SQL%ROWCOUNT;
        v_permission_id :=:p33_PERMISSION_ID;
    end if;

    apex_util.set_session_state('P33_ROW_COUNT', row_count);
    apex_util.set_session_state('P33_PERMISSION_ID', v_permission_id);
    apex_util.set_session_state('P33_PERMISSION_CODE', v_permission_code);

exception
    when others then
        apex_util.set_session_state('P33_ROW_COUNT', 0);
        v_err_msg := sqlerrm || chr(13) || dbms_utility.format_error_backtrace;
       JA_WRITE_LOG('P' || :APP_PAGE_ID || '-系统设置-权限管理-新增', 'ERROR', V_ERR_MSG, :USER_ID, :USER_TENANT,
                     :APP_NAME || ':' || :APP_ID);
end;

效果:


http://www.kler.cn/a/159467.html

相关文章:

  • 【C#设计模式(11)——外观模式(Facade Pattern)】
  • 给阿里云OSS绑定域名并启用SSL
  • 微信小程序自定义顶部导航栏(适配各种机型)
  • 38配置管理工具(如Ansible、Puppet、Chef)
  • 工作和学习遇到的技术问题
  • Python 中.title()函数和.lower()函数
  • 【图像拼接】论文精读:Quasi-Homography Warps in Image Stitching(QHW)
  • 【PTA题目】6-4 走台阶方法 分数 15
  • 【1day】Panabit 日志系统openid接口SQL注入漏洞
  • el-table全部选择和全部取消
  • 大语言模型有那些能力和应用
  • C语言--每日选择题--Day37
  • 【android开发-11】android中创建自定义布局并引入自定义布局的参考例子
  • ctfshow sql 186-190
  • css实现最简单的3d透视效果,通过旋转可以直观感受到
  • Python源码15:使用海龟画图turtle画小黄人
  • 基于SpringBoot的仓库管理系统设计与实现附带源码和论文
  • 企企通供应链专家:拥抱智能化趋势,企业如何打造智慧供应链形成竞争优势?
  • 题目:小明的彩灯(蓝桥OJ 1276)
  • 三 STM32F4使用Sys_Tick 实现微秒定时器和延时
  • quickapp_快应用_系统接口应用
  • 咨询室游戏
  • java基础之String类
  • Django回顾【三】
  • 西南科技大学C++程序设计实验七(继承与派生二)
  • CONTROLLING VISION-LANGUAGE MODELS FOR MULTI-TASK IMAGE RESTORATION