存档&改造【07】多表查询和可操控对象的存储-CSDN博客

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

前情摘要

在可操作对象一栏中默认IS_ALL所有人可见还可以指定用户和部门可操作对象存在CODE_SYSTEM_OPERATION晶码-接入系统操作项表中部门/用户ID&NAME存在CODE_SYSTEM_OPERATION_AUTH晶码-系统操作项权限配置表表中 之间通过字段SYSTEM_OPERATION_ID连接。

表结构

逻辑关系

默认IS_ALL,当用户选择“指定部门或角色”则将选定的部门/用户存入权限配置表

但是现实却是单选项之间可以切换&存入但是另外的字段只能展示无法存入。

要实现的功能

1、鼠标点击设备编码和设备名称可查看生成的二维码

最好能复制复制不了就复制链接蒋老师说不是什么问题截个图的事儿

在对应字段上设置标识将原本的“文本”改为“链接”设置链接跳转的内容

这样就能实现点击设备编码和设备名称可查看生成的二维码

效果展示

没显示事因为对话框大小和样式限制。

2、控制部门/用户选框的显示和隐藏

可根据可操作对象的选择控制部门/用户选框的显示和隐藏

对应的项→创建动态操作→执行JavaScript代码

代码

if ($v('P243_AUTH_RANGE') == 'IS_ALL') {
    $x_Hide('P243_AUTH_ID');
    $x_Hide('P243_AUTH_NAME');
} else {
    $x_Show('P243_AUTH_ID');
    $x_Show('P243_AUTH_NAME');
}

效果展示

3、二维码操作入口设置-新增、编辑

光有可操作对象的值还不行还得校验指定部门或角色两个都不为空否则只是勾选“指定角色或部门”但是不去勾选内容不符合规则

修改后

if (($v('P243_AUTH_RANGE').length == 0 || ($v('P243_AUTH_ID').length == 0 && $v('P243_AUTH_NAME').length ==0) ) {
    alert('可操作对象不能为空');
    return false;
}

效果展示

【错误记录】PL/SQL: ORA-00971: 缺失 SET 关键字。

Ajax 调用为Execute Server-Side Code返回了服务器错误ORA-06550: 第 40 行, 第 35 列:

PL/SQL: ORA-00971: 缺失 SET 关键字。

清晰易懂的Update多表联合修改方法

SQL Update多表联合修改_update连表修改_辰辰辰cc的博客-CSDN博客https://blog.csdn.net/weixin_44635886/article/details/125196255我参考范例写的修改语句

  UPDATE CODE_SYSTEM_OPERATION SET AUTH_RANGE =
       (SELECT AUTH_NAME,JOB_NUMBER FROM CODE_SYSTEM_OPERATION_AUTH
       WHERE CODE_SYSTEM_OPERATION_AUTH.SYSTEM_OPERATION_ID = CODE_SYSTEM_OPERATION.SYSTEM_OPERATION_ID)
    WHERE EXISTS
        (SELECT * FROM CODE_SYSTEM_OPERATION_AUTH
        WHERE CODE_SYSTEM_OPERATION_AUTH.SYSTEM_OPERATION_ID = CODE_SYSTEM_OPERATION.SYSTEM_OPERATION_ID
        AND CODE_SYSTEM_OPERATION.SYSTEM_OPERATION_ID =:P243_SYSTEM_OPERATION_ID );
     v_row_count := SQL%ROWCOUNT;
     apex_util.set_session_state('P243_ROW_COUNT',v_row_count);

【问题记录】PLS-00372: 在一个过程中, RETURN 语句无法包含表达式。

Ajax 调用为Execute Server-Side Code返回了服务器错误ORA-06550: 第 14 行, 第 1 列:
PLS-00372: 在一个过程中, RETURN 语句无法包含表达式。

declare
    v_err_msg   nvarchar2(2000);
    v_user_ids  varchar2(2000);
    v_dept_ids  varchar2(2000);
    v_row_count number(10) := 0;
--     v_user_ids varchar2(2000) := 'JA063198';
--     v_dept_ids varchar2(2000) := '100';
begin

    if :AUTH_RANGE = 'IS_ALL' then
        -- 主表新增一条数据(验证是否存在);
        update CODE_SYSTEM_OPERATION
        set OPERATION_NAME = :P243_OPERATION_NAME,
            DESCRIPTION    =:P243_DESCRIPTION,
            AUTH_RANGE     =:P243_AUTH_RANGE
        where SYSTEM_OPERATION_ID = :P243_SYSTEM_OPERATION_ID;
        v_row_count := SQL%ROWCOUNT;
        apex_util.set_session_state('P243_ROW_COUNT', v_row_count);

    else
        -- 主表新增一条数据 验证是否存在
        --- 查询本次要新增的人员数据
        for c in ( select u.JOB_NUMBER
                   from (select JOB_NUMBER
                         from MPF_USER_DEPT_MAIN_ASSO_V
                         where EXT_USER_ID in (
                             select *
                             from JA_UTILS_PKG.SPLIT_STR(v_user_ids, ',')
                         )
                         union
                         select JOB_NUMBER
                         from MPF_USER_DEPT_MAIN_ASSO_V
                         where EXT_ORG_ID in (
                             select *
                             from JA_UTILS_PKG.SPLIT_STR(v_dept_ids, ',')
                         )) u
                            left join CODE_SYSTEM_OPERATION_AUTH a on u.JOB_NUMBER = a.JOB_NUMBER
                   where a.SYSTEM_OPERATION_ID = :P243_SYSTEM_OPERATION_ID
                     AND TENANT_ID = :USERTENANT
                     AND DEL_FLAG = 0)
            loop
                UPDATE CODE_SYSTEM_OPERATION
                SET OPERATION_NAME = :P243_OPERATION_NAME,
                    DESCRIPTION    =:P243_DESCRIPTION,
                    AUTH_RANGE     = (SELECT AUTH_NAME
                                      FROM CODE_SYSTEM_OPERATION_AUTH
                                      WHERE CODE_SYSTEM_OPERATION_AUTH.SYSTEM_OPERATION_ID =
                                            CODE_SYSTEM_OPERATION.SYSTEM_OPERATION_ID)
                WHERE EXISTS
                          (SELECT *
                           FROM CODE_SYSTEM_OPERATION_AUTH
                           WHERE CODE_SYSTEM_OPERATION_AUTH.SYSTEM_OPERATION_ID =
                                 CODE_SYSTEM_OPERATION.SYSTEM_OPERATION_ID
                             AND CODE_SYSTEM_OPERATION.SYSTEM_OPERATION_ID = :P243_SYSTEM_OPERATION_ID);
                v_row_count := SQL%ROWCOUNT;
                apex_util.set_session_state('P243_ROW_COUNT', v_row_count);
            end loop;
    end if;

exception
    when others then
        v_err_msg := sqlerrm || chr(13) || dbms_utility.format_error_backtrace;
        DBMS_OUTPUT.PUT_LINE(v_err_msg);
end;

 明明获取到但是提示没获取到

【问题原因】未在页中设置项
【解决办法】添加对应的项

【问题】编辑数据后保存提示“保存失败”

【原因】查看会话发现状态是“已插入”但是项值还是为0所以修改后提示失败

declare
    v_err_msg   nvarchar2(2000);
    v_user_ids  varchar2(2000);
    v_dept_ids  varchar2(2000);
    v_row_count number(10) := 0;
--     v_user_ids varchar2(2000) := 'JA063198';
--     v_dept_ids varchar2(2000) := '100';
begin

    if :P243_AUTH_RANGE = 'IS_ALL' then
        -- 主表新增一条数据(验证是否存在);
        update CODE_SYSTEM_OPERATION
        set OPERATION_NAME = :P243_OPERATION_NAME,
            DESCRIPTION    =:P243_DESCRIPTION,
            AUTH_RANGE     =:P243_AUTH_RANGE
        where SYSTEM_OPERATION_ID = :P243_SYSTEM_OPERATION_ID;
        v_row_count := SQL%ROWCOUNT;
        apex_util.set_session_state('P243_ROW_COUNT', v_row_count);

    else
        -- 主表新增一条数据 验证是否存在
        --- 查询本次要新增的人员数据
        for c in ( select u.JOB_NUMBER
                   from (select JOB_NUMBER
                         from MPF_USER_DEPT_MAIN_ASSO_V
                         where EXT_USER_ID in (
                             select *
                             from JA_UTILS_PKG.SPLIT_STR(v_user_ids, ',')
                         )
                         union
                         select JOB_NUMBER
                         from MPF_USER_DEPT_MAIN_ASSO_V
                         where EXT_ORG_ID in (
                             select *
                             from JA_UTILS_PKG.SPLIT_STR(v_dept_ids, ',')
                         )) u
                            left join CODE_SYSTEM_OPERATION_AUTH a on u.JOB_NUMBER = a.JOB_NUMBER
                   where a.SYSTEM_OPERATION_ID = :P243_SYSTEM_OPERATION_ID
                     AND TENANT_ID = :USERTENANT
                     AND DEL_FLAG = 0)
            loop
                UPDATE CODE_SYSTEM_OPERATION
                SET OPERATION_NAME = :P243_OPERATION_NAME,
                    DESCRIPTION    =:P243_DESCRIPTION,
                    AUTH_RANGE     = (SELECT AUTH_NAME
                                      FROM CODE_SYSTEM_OPERATION_AUTH
                                      WHERE CODE_SYSTEM_OPERATION_AUTH.SYSTEM_OPERATION_ID =
                                            CODE_SYSTEM_OPERATION.SYSTEM_OPERATION_ID)
                WHERE EXISTS
                          (SELECT *
                           FROM CODE_SYSTEM_OPERATION_AUTH
                           WHERE CODE_SYSTEM_OPERATION_AUTH.SYSTEM_OPERATION_ID =
                                 CODE_SYSTEM_OPERATION.SYSTEM_OPERATION_ID
                             AND CODE_SYSTEM_OPERATION.SYSTEM_OPERATION_ID = :P243_SYSTEM_OPERATION_ID);
                v_row_count := SQL%ROWCOUNT;
                apex_util.set_session_state('P243_ROW_COUNT', v_row_count);
            end loop;
    end if;

exception
    when others then
        v_err_msg := sqlerrm || chr(13) || dbms_utility.format_error_backtrace;
        DBMS_OUTPUT.PUT_LINE(v_err_msg);
end;

【解决方法】在数据定义将v_row_count初始值从0→1

declare
    v_err_msg   nvarchar2(2000);
    v_row_count number(10) := 1;

begin

    update CODE_SYSTEM_OPERATION
    set OPERATION_NAME = :P243_OPERATION_NAME,
        DESCRIPTION    =:P243_DESCRIPTION,
        AUTH_RANGE     =:P243_AUTH_RANGE
    where SYSTEM_OPERATION_ID = :P243_SYSTEM_OPERATION_ID;

    if :P243_AUTH_RANGE = 'IS_ALL' then

        delete CODE_SYSTEM_OPERATION_AUTH
        where SYSTEM_OPERATION_ID = :P243_SYSTEM_OPERATION_ID
          and TENANT_ID = :USERTENANT;

    else

        --- 查询本次要新增的人员数据
        for c in ( select u.EXT_USER_ID,u.JOB_NUMBER, u.NAME
                   from (select EXT_USER_ID,JOB_NUMBER, NAME, :P243_SYSTEM_OPERATION_ID SYSTEM_OPERATION_ID
                         from MPF_USER_DEPT_MAIN_ASSO_V
                         where EXT_USER_ID in (
                             select *
                             from JA_UTILS_PKG.SPLIT_STR(:P243_USER_ID, ':')
                         )
                         union
                         select EXT_USER_ID,JOB_NUMBER, NAME, :P243_SYSTEM_OPERATION_ID SYSTEM_OPERATION_ID
                         from MPF_USER_DEPT_MAIN_ASSO_V
                         where EXT_ORG_ID in (
                             select *
                             from JA_UTILS_PKG.SPLIT_STR(:P243_DEPT_ID, ':')
                         )) u
                            left join CODE_SYSTEM_OPERATION_AUTH a
                                      on u.EXT_USER_ID=a.AUTH_ID AND u.JOB_NUMBER = a.JOB_NUMBER and a.TENANT_ID = :USERTENANT
                   and a.SYSTEM_OPERATION_ID = :P243_SYSTEM_OPERATION_ID)

            loop
                insert into CODE_SYSTEM_OPERATION_AUTH(system_operation_id, auth_id, auth_name, job_number, tenant_id,
                                                       created_by, creation_time)
                values (:P243_SYSTEM_OPERATION_ID, c.EXT_USER_ID, c.NAME, c.JOB_NUMBER, :USERTENANT, :USER_ID, sysdate);

            end loop;
    end if;
    apex_util.set_session_state('P243_ROW_COUNT', v_row_count);
exception
    when
        others then
        rollback;
        apex_util.set_session_state('P243_ROW_COUNT', 0);
        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;

存在的问题

级联树形列表刷新后只能保存一次数据后续需刷新

二维码操作入口-列表展示-可操作对象应该设置成仅展示不能更改更改在设置里

重点和难点

二维码的生成、预览、批量下载

设备模板下载和设备导入

厂区-区域的级联展示

二维码操作入口-操作项设置-设置可操作对象

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

“存档&改造【07】多表查询和可操控对象的存储-CSDN博客” 的相关文章