今天把以前做过的一个obiee的一个回写功能回顾一下,以供参考。
Obiee的这个回写功能一般是不推荐使用的,本人在开发过程中觉得这个用户体验是相当的不好,而且是没有任何的验证功能。
实现这个功能的主要步骤分以下几步:
(1)在前台报表开通回写功能
打开一张报表,在结果中点击edit,坐上角有一个笔状的按钮,”回写属性“,填上模板名称和按钮名,像我这里是priviledge和‘确定’,这个模板名字要与下面的代码中的名字一致
(2)在设置的模板中添加相应的执行代码,一般在路径C:\OracleBIData\web\msgdb\customMessages的xml里面(你可以新建一个新的xml文件注:每个模板的名字都要不同)
在插入和更新中使用的都是更新的代码(本人试了多次,无法直接使用insert的代码来实现,在这里如果是插入的话会在对应id是0的行上做更新)
附上该模板的代码:
<WebMessage name="priviledge">
<XML>
<writeBack connectionPool="abc">
<insert>UPDATE c_priviledge
SET p_id=CASE '@{c0}' when '0' then to_char((SELECT MAX(P_ID) + 1 FROM c_priviledge)) else '@{c0}' end,
project_name=trim('@{c1}'),group_name=trim('@{c2}'),emp_id=trim('@{c3}'),emp_name=trim('@{c4}'),
user_name=trim('@{c5}'),priviledge=trim('@{c6}'),item=trim('@{c7}')
WHERE p_id='@{c0}'</insert>
<update>UPDATE c_priviledge
SET p_id=CASE '@{c0}' when '0' then to_char((SELECT MAX(P_ID) + 1 FROM c_priviledge)) else '@{c0}' end,
project_name=trim('@{c1}'),group_name=trim('@{c2}'),emp_id=trim('@{c3}'),emp_name=trim('@{c4}'),
user_name=trim('@{c5}'),priviledge=trim('@{c6}'),item=trim('@{c7}')
WHERE p_id='@{c0}'</update>
</writeBack>
</XML>
</WebMessage>
(3)通过触发器生成一条新的用来完成插入操作的数据(即当id=0的行被插入数据后,生成一条新的id=0的空数据行)
CREATE OR REPLACE TRIGGER C_PRIVILEDGE_TR
AFTER UPDATE ON c_priviledge
DECLARE
V1 NUMBER;
BEGIN
FOR C1 IN (SELECT 1 AS NUM
FROM c_priviledge
WHERE P_ID = 0) LOOP
V1 := C1.NUM;
END LOOP;
IF V1 = 1 THEN
NULL;
ELSE
INSERT INTO c_priviledge
(P_ID)
VALUES
(0);
COMMIT;
END IF;
EXCEPTION
WHEN OTHERS THEN
NULL;
END;
通过以上的步骤就可以实现一个完整的BIEE回写的功能,当然由于时间有限,应该还有很多地方有待完善。