【Oracle APEX开发小技巧17】交互式网格操作按钮根据条件/状态设置能否被点击生效

在日常APEX开发中会有如下场景:

当满足某些条件/状态时,可以对交互式网格进行操作;不满足时希望操作按钮置灰且无法点击生效。

例如下面的案例:

因为预览、下载、重新提交都是建立在有图片的前提下的,所以只有有图片按钮才会显示,否则按钮置灰且无法点击。

为实现上述要求,

第一步,需要在交互式表格的查询SQL设置一个判断标志,用来查询判断用户是否有图片;

第二步,对判断标志进行CSS处理,对不满足情况的操作按钮进行置灰禁用处理;

第三步,到页面上进行验证。

以下是对应的操作:

1.交互式网格SQL表达式中判断是否有图片,页设置→源→SQL查询

sql 复制代码
SELECT * FROM (
    SELECT
        DU.DEPT_USER_ID,
        U.USER_ID,
        U.NAME,
        U.JOB_NUMBER,
        CASE
            WHEN E.PINYIN_XING IS NOT NULL THEN E.PINYIN_XING || ' ' || E.PINYIN_MING
            ELSE E.PINYIN_MING
        END AS PINYIN,
        U.HIRED_DATE,
        U.TITLE,
        E.PHOTO_URL,
        NVL(E.STATUS, '1_WAIT_INIT') AS STATUS,
        DECODE(E.PHOTO_URL,null,0,1) IS_HIDE,
        '' AS OPERATE,
        -- 使用ROW_NUMBER()按状态排序
        ROW_NUMBER() OVER (
            ORDER BY CASE NVL(E.STATUS, '1_WAIT_INIT')
                WHEN '1_WAIT_INIT' THEN 1
                WHEN '2_WAIT_SUBMIT' THEN 2
                WHEN '3_WAIT_CONFIRM' THEN 3
                WHEN '4_WAIT_EXPORT' THEN 4
                WHEN '5_EXPORTED' THEN 5
                ELSE 6
            END
        ) AS RN
    FROM SHARE_BASIC_JA_DING_USER_V@MPF U
             INNER JOIN SHARE_BASIC_JA_DING_DEPT_USER_V@MPF DU ON U.USER_ID = DU.USER_ID
             LEFT JOIN SHARE_BASIC_JA_DING_DEPT_V@MPF D ON D.DEPT_ID = DU.DEPT_ID
             LEFT JOIN CA_INFO_EXTEND_T E ON E.DING_USER_ID = U.USER_ID AND E.DEPT_ID = D.DEPT_ID
    WHERE U.IS_LEAVE = 0
      AND (
          :P10_DEPT_ID IS NULL
          OR :P10_DEPT_ID = ''
          OR :P10_DEPT_ID = 'ALL'
          OR EXISTS (
              SELECT 1
              FROM TABLE(JA_UTILS_PKG.SPLIT_STR(:P10_DEPT_ID,':')) S
              WHERE TO_NUMBER(S.DATA_VAL) = DU.DEPT_ID
          )
      )
)
-- 外层查询不需要ORDER BY,APEX会按RN顺序显示

2.拼接操作状态标志位:列→OPERATE(操作,默认为空,在设置中通过HTML设置为按钮)→设置→HTML表达式 ,拼接后形如is_modify_0或is_modify_1。

需要注意的点:

因为我们在第一点SQL查询的时候设置的是图片为空设为0,所以第3点时需要对is_modify_0进行置灰及禁用限制。

html 复制代码
<span>
	<a href="#" class='is_modify_&IS_HIDE.' onclick="btnClick('download','&DEPT_USER_ID.')" style="text-dcoration:none;">
		下载
	</a>
    &nbsp;
	<a href="#"  class='is_modify_&IS_HIDE.'  onclick="showImagePreview('&PHOTO_URL.')" style="text-dcoration:none;">
		预览
	</a>
	&nbsp;
    <a href="#" class='is_modify_&IS_HIDE.'  onclick="btnClick('resubmit','&DEPT_USER_ID.')" style="text-dcoration:none;">
		重新提交
	</a>
</span>

3.在CSS→内嵌 设置对应样式

javascript 复制代码
/* 使链接按钮置灰且无法点击 */
.is_modify_0 {
    color: #cccccc !important;           /* 文字颜色置灰 */
    cursor: not-allowed !important;      /* 鼠标显示禁止符号 */
    pointer-events: none !important;     /* 禁用所有鼠标事件 */
    /* text-decoration: line-through !important; 添加删除线表示不可用 */
     /* opacity: 0.6 !important;            降低透明度 */
}


/* 悬浮样式 */
.longlinedots{
    max-width: 900px;	/*设置容器最大宽度*/
    white-space: nowrap;	/* 设置段落文本不换行(不换行才有可能行溢出)*/
    overflow: hidden;		/* 关闭滚动条,超出部分隐藏*/
    text-overflow: ellipsis;	/* 超出部分添加省略号*/
}
/*给该选择器添加悬浮事件,实现悬浮显示全部内容*/
.longlinedots:hover {
    overflow: visible;
    white-space: inherit;
}

/* 直接显示为换行 */
.a-GV-table td  {
    word-wrap: break-word;
	overflow-wrap: break-word;
    overflow: initial;
    white-space: initial;
    text-overflow: initial;
}

效果展示

相关推荐
7ioik13 分钟前
说一说MySQL数据库基本架构?
数据库·mysql·架构
@淡 定13 分钟前
Redis持久化机制
数据库·redis·缓存
云老大TG:@yunlaoda36026 分钟前
华为云国际站代理商DAS的跨境合规适配是如何保障数据合规的?
网络·数据库·华为云
TG:@yunlaoda360 云老大28 分钟前
华为云国际站代理商HiLens的技术优势对跨境客户有哪些具体帮助?
服务器·数据库·华为云
+VX:Fegn089539 分钟前
计算机毕业设计|基于springboot + vue健身房管理系统(源码+数据库+文档)
数据库·vue.js·spring boot·后端·课程设计
Leon-Ning Liu43 分钟前
当SGA大于hugepage的时候,Oracle数据库是怎么使用hugepage的
数据库·oracle
马克学长44 分钟前
SSM校园二手交易系统aqj3i(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面
数据库·ssm 框架·javaweb 开发
利剑 -~1 小时前
letcode数据库题联系
数据库
小程故事多_801 小时前
Agent Skills深度解析,让智能体从“会连接”到“会做事”的核心引擎
数据库·人工智能·aigc
TG:@yunlaoda360 云老大1 小时前
华为云国际站代理商的DDM主要有什么作用呢?
服务器·数据库·华为云