You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Oracle Apex新CSS日历中HTML标签使用问题求助

解决Oracle APEX新版CSS日历HTML格式化与链接问题

在APEX 5以上的新版CSS日历中,直接在calendar_text列拼接HTML会被自动转义,无法生效。以下是三种可行的解决方案:

方案1:通过JavaScript动态渲染HTML内容

步骤1:修改SQL查询,传递原始数据

将需要格式化的字段单独列出,保留calendar_text作为基础显示内容:

select 
    t.startdate_dt
  , t.enddate_dt
  , t.responsibility
  , t.customer_name
  , t.customer_phone
  , t.my_generated_link
  , t.responsibility || ' | ' || t.customer_name as calendar_text
from t_mytasks t

步骤2:添加JavaScript初始化代码

在日历区域的高级 > JavaScript初始化代码中插入以下脚本,动态替换条目内容:

document.addEventListener('DOMContentLoaded', () => {
    const calendarRegion = APEX.region('YOUR_CALENDAR_STATIC_ID'); // 替换为你的日历区域静态ID
    const events = calendarRegion.widget().option('events');
    
    document.querySelectorAll('.apex-calendar-event').forEach(eventEl => {
        const eventMatch = events.find(e => e.title.trim() === eventEl.textContent.trim());
        if (!eventMatch) return;
        
        // 构建目标HTML
        const html = `
            <b>${eventMatch.responsibility}</b><br><br>
            ${eventMatch.customer_name}<br>
            ${eventMatch.customer_phone}<br>
            <a href="${eventMatch.my_generated_link}">Link</a>
        `;
        eventEl.innerHTML = html;
        
        // 可选:用APEX内置导航优化链接跳转
        eventEl.querySelector('a').addEventListener('click', e => {
            e.preventDefault();
            apex.navigation.redirect(eventMatch.my_generated_link);
        });
    });
});

方案2:自定义日历条目模板(APEX 20.2+推荐)

新版APEX支持自定义条目HTML模板,直接映射SQL列实现格式化:

  1. 进入日历区域编辑页,切换到外观标签页
  2. 在「条目模板」下拉框选择「自定义」
  3. 输入模板内容(替换变量需与SQL列名完全一致):
<div class="apex-calendar-event #APEX_CAL_CSS_CLASSES#">
    <b>#RESPONSIBILITY#</b><br><br>
    #CUSTOMER_NAME#<br>
    #CUSTOMER_PHONE#<br>
    <a href="#MY_GENERATED_LINK#" class="apex-link">Link</a>
</div>

该方案无需额外JS,APEX会自动将SQL列值填充到模板中,支持完整HTML格式。

方案3:开启区域HTML允许(有限场景适用)

如果你的APEX版本支持,可通过开启区域的HTML允许选项,结合安全的HTML拼接实现:

步骤1:修改SQL查询(使用apex_escape确保安全)

select 
    t.startdate_dt
  , t.enddate_dt
  , '<b>' || apex_escape.html(t.responsibility) || '</b><br><br>' ||
    apex_escape.html(t.customer_name) || '<br>' ||
    apex_escape.html(t.customer_phone) || '<br>' ||
    apex_item.link(p_url => t.my_generated_link, p_label => 'Link') as calendar_text
from t_mytasks t

步骤2:开启区域HTML允许

在日历区域的属性 > 安全中,将「允许HTML」设置为「是」。注意:部分新版本可能默认过滤部分标签,此方案优先级低于前两种。

内容的提问来源于stack exchange,提问作者Juergen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 00:11:10