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

news2024/11/27 23:41:02

前情摘要

在可操作对象一栏中,默认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;

存在的问题:

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

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

重点和难点:

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

设备模板下载和设备导入

厂区-区域的级联展示

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1096705.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Prompt 驱动架构设计:探索复杂 AIGC 应用的设计之道?

你是否曾经想过,当你在 Intellij IDEA 中输入一个段代码时,GitHub 是如何给你返回相关的结果的?其实,这背后的秘密就是围绕 Prompt 生成而构建的架构设计。 Prompt 是一个输入的文本段落或短语,用于引导 AI 生成模型执…

《数字图像处理-OpenCV/Python》连载(22)绘制直线与线段

《数字图像处理-OpenCV/Python》连载(22)绘制直线与线段 本书京东优惠购书链接:https://item.jd.com/14098452.html 本书CSDN独家连载专栏:https://blog.csdn.net/youcans/category_12418787.html 第 4 章 绘图与鼠标交互 本章介…

Http/https代理和抓包分析

前言 最近工作需要部署http/https的代理,所以用squid部署了一下,重新回顾了一下http和https的代理知识。 HTTP代理 根据《HTTP 权威指南》如图: 这种情况下,对访问服务器而言,它会把代理当做客户端,完全…

C++算法:前缀和基础

相关 源码测试用例下载 https://download.csdn.net/download/he_zhidan/88430716 包括4个压缩包,初始代码,实现前缀和,实现前缀积,实现前缀异或。都是在前者的基础上修改的。 本博文是CSDN学院课程的讲义 https://edu.csdn.net/c…

【linux kernel】linux的platform设备驱动框架分析

文章目录 一、简介二、platform总线三、platform设备和驱动的匹配过程四、platrom驱动和platform设备五、platform驱动设计六、代码示例 🔺【linux内核系列文章】 👉对一些文章内容进行了勘误,本系列文章长期不定时更新,希望能分享…

可视化上证50结构图

可视化上证50结构图 缘由收集数据先获取50支成分股列表获取各成分股票K线数据 数据处理找出来,再删除,然后重新下载数据最终获得每日报价的变化值 图形结构处理聚类分析使用affinity_propagation(亲和传播)聚类 嵌入二维平面空间可视化小结热力图 缘由 …

Excel和图片如何互相转换?有何技巧?

一、将图片转为excel表格 首先,打开金鸣识别网站,点击“点击添加需转换的图片或PDF”按钮,添加待识别的图片或PDF文件。 添加完待识别的图片或PDF后,点击“提交识别”按钮,程序便开始识别。 识别完成后,系…

无效的 page.json [“window“] 页面.json配置了“window“: {“disableScroll“: true}

问题:启动小程序时报错 无效的 page.json ["window"] 页面 解决: app.json 全局配置才使用window对象,在单独的页面直接写disableScroll:true即可 //app.json中添加,window里面添加就可以了 "window": { …

儿童写作业用的护眼灯哪种好?双十一写作业护眼灯推荐

这些年大家对于身体健康越来越重视,尤其是关于儿童青少年的眼睛健康问题,因此作为学生们常用的护眼台灯也成为了非常多家长为孩子选择的学习台灯。而还没给孩子准备台灯的家长们也都想买上一盏台灯给孩子使用,但市面上的护眼台灯太多了&#…

【ElasticSearch】学习笔记

【ElasticSearch】学习笔记 【一】ElasticSearch是什么?【二】Mac安装ElasticSearch【三】Mac安装可视化界面Kibana 【一】ElasticSearch是什么? ElasticSearch是一个分布式、Restful风格的搜索和数据分析引擎,Stark的核心。 可以应用在比如…

XnViewMP forMac/Windows中文版:轻松管理和浏览您的图片库

您是否厌倦了使用不方便、功能有限的图片浏览软件?现在,让我向您介绍一款强大而全面的图片浏览软件——XnViewMP! XnViewMP是一款免费开源的跨平台图片浏览软件,它具有出色的功能和易用性,适用于个人用户和专业摄影师…

助力森林火情预警检测,基于YOLOv7-tiny、YOLOv7和YOLOv7x开发构建无人机航拍场景下的森林火情检测是别预警系统

火情的预警与检测识别对于保障林业安全,减少人员伤亡有着重要的意义,科学有效地早发现早扑灭是最有效的干预手段,本文的主要是想就是想要建立基于无人机航拍场景下的森林火情检测预警系统,整体效果如下所示: 这里文中选…

TikTok整合谷歌搜索功能,探索新的流量入口

随着社交媒体平台的不断崛起和发展,用户们的需求也在不断演变。如今,人们不仅仅是在社交媒体上分享自己的生活点滴,还希望从中获取更多有用的信息。 因此,社交媒体平台正积极寻找与搜索引擎的整合方式,以满足用户的多…

小程序开发平台源码系统+万能门店小程序功能+完整的搭建教程

大家好啊,今天来给大家分享一个小程序开发平台,这款平台源码系统中包含了万能门店小程序功能,一起来看看吧。 系统特色功能一览: 全端覆盖:独立版万能门店全端云小程序可以一键生成全端小程序,包括微信小程…

2023_Spark_实验十三:Spark RDD 求员工工资总额

一、主题:Spark RDD 求员工工资总额及排名 问题提出:近三年来,全球新冠疫情已经严重影响了现有经济情况,公司高层领导对公司运行情况进行深入了解,需要了解每个部门的人力成本,以至于更加合理的优化人力资…

从头开始机器学习:神经网络

一、说明 如果你还没有做过逻辑回归,你会在这里挣扎。我强烈建议在开始之前查看它。您在逻辑回归方面的能力将影响您学习神经网络的难易程度和速度。 二、神经网络简介 神经网络是一个神经元网络。这些神经元是逻辑回归函数,它们被链接在一起形成一个网络…

vim基础命令批量替换

正常模式 v(小写)正常模式下面会出现VISUAL,可以可以选择指定连续区域可以随意选择,这个用的最多 ctrl v(小写) 这个可以类似于sublime这种按照固定前几个字符选择 最后一列哪个a其实已经选择了&#xf…

论文导读 | 八月下旬特征选择专题期刊精选

推文作者:丰于杭 编者按 在“八月下旬特征选择专题期刊精选”中,我们有主题、有针对性地选择了MSOM, Operations Research, Management Science等管理科学杂志中一些有趣的文章,不仅对文章的内容进行了概括与点评,而且也对文章的结…

c++视觉处理----图像模板匹配

模板匹配matchTemplate() matchTemplate() 是OpenCV中用于模板匹配的函数之一。它的主要作用是在一幅图像中搜索模板图像的位置,即找到模板在图像中的匹配位置。 函数原型如下: void cv::matchTemplate(InputArray image,InputArray templ,OutputArra…