利用BIEE的回写功能。
第一步:创建要回写调用的模板。
OracleBI\web\msgdb\customMessages\ 目录下创建一个XML文件,内容如下:
<?xml version="1.0" encoding="utf-8" ?>
<WebMessageTables xmlns:sawm="com.siebel.analytics.web/message/v1">
<WebMessageTable lang="en-us" system="WriteBack" table="Messages">
<WebMessage name="BI_UPPWD">
<XML>
<writeBack connectionPool="BI_UPPWD">
<insert> </insert>
<update>UPDATE BI_USERS SET PASSWORD='@{c3}' WHERE WORKNO ='@{c0}' </update>
</writeBack>
</XML>
</WebMessage>
</WebMessageTable>
<WebMessageTable lang="en-us" system="WriteBack" table="Messages">
<WebMessage name="ADMIN_INFO">
<XML>
<writeBack connectionPool="BI_UPPWD">
<insert> </insert>
<update>UPDATE BI_USERS SET GROUPS='@{c3}',GEO='@{c4}',STATE='@{c5}',PASSWORD='@{c2}' WHERE WORKNO ='@{c0}' </update>
</writeBack>
</XML>
</WebMessage>
</WebMessageTable>
</WebMessageTables>
目前看到的XML文件里我定义了2个回写模版
1、BI_UPPWD | 用户自己修改密码
2、ADMIN_INFO | 管理员管理用户的信息
文件名称可以随便定义,必须要放置到上面指定的文件目录下。
模板内容中必须有<insert></insert> 和 <update></update> 2个标签
如果insert 内容没有的话,用空格代替
遇到的错误列表,和解决方案:
1、系统无法读取回写模板 'writeback'。请与您的系统管理员联系
解答:如果在 insert 和update 中没有写要执行的语句,必须要有空格
2、写入服务器时出错,请检查以确保您已输入合适的值,如果仍有问题,请与您的系统管理员联系。
解答:需要在Admin Tool 里面的GROUP 属性 Query Limits 中Execute Direct Database Requests 设置为 allow。
3、写入到服务器时出错。 请检查以确保您已输入合适的值。 如果仍有问题, 请与您的系统管理员联系。
Odbc 驱动程序返回一个错误 (SQLExecDirectW)。
错误明细
错误代码: OPR4ONWY:U9IM8TAC:OI2DL65P
状态: HY000。 代码: 10058。 [NQODBC] [SQL_STATE: HY000] [nQSError: 10058] 出现一般错误。 [nQSError: 27024] EXECUTE PHYSICAL 语句必须指定一个要执行的物理 SQL 语句。 (HY000)
发出的 SQL: EXECUTE PHYSICAL CONNECTION POOL ndsc_pool
解答:在insert和update中放入相同的SQL语句(这个问题我一直认为是BIEE的BUG,我当时尝试了很多种方法都不得解决,最后在OTN上找到相关资料)
ANSWER 设置:
将用户表信息展示在页面上,必须用表视图显示数据
在 设置回写属性
其中BI_UPPWD 是我们在回写模板中指定的 <WebMessage name="BI_UPPWD">
然后操作要进行回写的列,点击属性
设置值交互作用 类型为回写。
模板中的UPDATE 语句 中的顺序必须跟报表中的列需要一致
<update>UPDATE BI_USERS SET PASSWORD='@{c3}' WHERE WORKNO ='@{c0}' </update>
这里对应新密码 代表第一列 用户工号
调整完模板需要重启的服务
1、BISERVER
2、Oracle BI Presentation Server
3、OC4J