利用回写功能,用户可以直接从仪表盘和分析更新数据。
具有回写到数据库权限的用户在分析中看到的回写字段为可编辑字段。他们输入的值将保存到数据库中。没有回写到数据库权限的用户看到的回写字段为只读字段。
如果用户在可编辑字段中键入值并单击回写按钮,则应用程序将运行回写模板中定义的 insert
或 update
SQL 命令。如果命令成功,则新值将更新到分析中。如果读取模板或运行 SQL 命令时出错,则会显示错误消息。
当不存在记录且用户向表中输入新数据时,将运行 insert
命令。在这种情况下,用户键入了原始值为空的表记录。用户修改现有数据时,将运行 update
命令。要显示物理表中还不存在的记录,可以创建另一个类似的表。使用此类似表可显示用户可以修改的占位符记录。
注:
在创建回写模板时,必须包括 insert
命令和 update
命令,即使不同时使用这两个命令也是如此。例如,如果仅执行 insert
,也必须包括一个空 update
语句 <update></update>
,如以下 XML 代码中所示:
insert
命令和两个空 update
语句。要进一步了解如何创建和构造回写 XML 文件,请参见创建回写模板文件。
<?xml version="1.0" encoding="utf-8" ?> <WebMessageTables xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="oracle.bi.presentation/writebackschemas/v1"> <WebMessageTable lang="en-us" system="WriteBack" table="Messages"> <WebMessage name="SetQuotaUseID"> <XML> <writeBack connectionPool="Supplier"> <insert>INSERT INTO regiontypequota VALUES(@{c5f6e60e1d6eb1098},@{c5d7e483445037d9e},'@{c3a93e65731210ed1}','@{c6b8735ea60ff3011}',@{c0432jkl53eb92cd8})</insert> <update></update> </writeBack> </XML> </WebMessage> <WebMessage name="SetForecastUseID"> <XML> <writeBack connectionPool="Supplier"> <insert>INSERT INTO regiontypeforecast VALUES(@{c83ebf607f3cb8320},@{cb7e2046a0fba2204},'@{c5a93e65d31f10e0}','@{c5a93e65d31f10e0}',@{c7322jkl93ev92cd8})</insert> <update></update> </writeBack> </XML> </WebMessage> </WebMessageTable> </WebMessageTables>
用户可以回写到任何允许从 Oracle Analytics 执行 SQL 查询的数据源。
在配置回写时,请注意以下限制:
数字列只能包含数字。不得包含任何数据格式字符,如美元符号 ($)、井号或哈希符号 (#)、百分号 (%) 等。
文本列只能包含字符串数据。
如果登录用户正在查看的仪表盘中包含分析,而分析中的数据已使用回写功能进行修改,则这些数据不会在仪表盘中自动刷新。要查看更新的数据,用户必须手动刷新仪表盘。
模板机制只能用于表视图,而且只能用于单值数据。数据透视表视图或任何其他类型的视图、多值数据或者包含单值数据的下拉列不支持模板机制。
回写列中的所有值都是可编辑的。可编辑字段在非打印机友好环境中显示时,显示效果与用户拥有回写到数据库权限时的效果相同。但是,当逻辑列映射到可能更改的物理列时,逻辑列会返回多级交叉点的值。这种情况可能会导致出现问题。
分析中的任何字段都可以标记为回写字段,即使它并非派生自您创建的回写表。但是,如果表没有启用回写功能,您便无法成功运行回写操作。内容设计者负责正确标记字段。
模板可以包含 insert
和 update
以外的 SQL 语句。回写功能会将这些语句传递给数据库。但是,Oracle 不支持也不建议使用 insert
或 update
以外的任何语句。
Oracle Analytics 只对数据输入执行最低限度的验证。如果字段为数字类型,而用户输入了文本数据,那么 Oracle Analytics 会检测到这一点,并阻止无效数据进入数据库。但是,它不会检测其他形式的无效数据输入(值超出范围、文本和数字混用等)。当用户单击回写按钮并运行 insert 或 update 语句时,无效数据会导致数据库返回错误消息。然后用户可以更正错误的输入。内容设计者可以在回写分析中加入帮助用户输入的文本,例如,“不允许在数字数据字段中输入字母数字混用的值”。
模板机制不适合用于输入任意新记录。换句话说,不要将它用作数据输入工具。
创建表进行回写时,请确保至少具有这样一列:不包含回写功能,但所含的值非空并且在每一行中都是唯一的。
回写分析不支持细化。由于细化会修改表结构,因此回写模板将无法正常工作。
注意:
模板机制获取用户输入并将其直接写入数据库。物理数据库的安全性由您自己负责。为了实现最佳安全性,请将回写数据库表存储在单独的数据库实例中。回写模板文件是一个 XML 格式的文件,其中包含一个或多个回写模板。
回写模板由以下项组成:指定模板名称的 WebMessage
元素、连接池,以及在创建的回写表与列中插入和更新记录所需的 SQL 语句。当内容设计者启用表视图进行回写时,他们必须指定用于在表视图中插入和更新记录的回写模板的名称。
回写模板必须满足以下要求:
WebMessage
:您必须使用 WebMessage 元素中的 name
属性来指定回写模板的名称。
为了使回写正常工作,在启用表视图进行回写后,内容设计者必须指定用于在视图中插入和更新记录的回写模板的名称。
以下示例显示了名为 SetQuotaUseID
的回写模板。
<WebMessage name="SetQuotaUseID">
connectionPool
:为满足安全要求,您必须在指定连接池的同时指定用于插入和更新记录的 SQL 命令。这些 SQL 命令会引用回写方案中传递的值,以生成用于修改数据库表的 SQL 语句。
VALUES
:列值可通过列 ID 或列位置引用。首选方式是使用列 ID。
字符串和日期值应使用单引号括起来。数字值不需要加单引号。
列 ID — 每个列 ID 都是随机生成的字母数字。您可以在分析的 XML 定义中找到列 ID;XML 定义位于分析编辑器的高级选项卡。例如 @{c5f6e60e1d6eb1098}
、@{c3a93e65731210ed1}
、'@{c6b8735ea60ff3011}'
,这些都是列 ID 值。
当使用列 ID 时,即使列的顺序发生变化,回写也能继续正常工作。
列位置 — 列位置从 1 开始编号。例如 @1
、@3
、'@5'
,这些都是列位置值。
当列的顺序发生变化时,回写无法再正常工作,这就是首选使用列 ID 的原因。
必须在模板中包含 <insert>
和 <update>
元素。如果您不想在元素中包含 SQL 命令,那么您必须在开始标记和结束标记之间插入一个空格。例如,您必须按如下方式输入元素:
<insert> </insert>
而不是:
<insert></insert>
如果您省略了空格,则会看到回写错误消息,例如“系统无法读取回写模板 'my_template'”。
如果参数的数据类型不是整数或实数,则应使用单引号将其括起来。如果数据库不自动提交,则可以在 insert
和 update
节点后添加可选的 postUpdate
节点,以强制提交。postUpdate
节点通常如以下示例所示:
<postUpdate>COMMIT</postUpdate>
使用列 ID 语法的回写模板文件示例
通过列 ID 引用值的回写模板文件可能如以下示例所示:
<?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="SetQuotaUseID"> <XML> <writeBack connectionPool="Supplier"> <insert>INSERT INTO regiontypequota VALUES(@{c5f6e60e1d6eb1098},@{c5d7e483445037d9e},'@{c3a93e65731210ed1}','@{c6b8735ea60ff3011}',@{c0432jkl53eb92cd8})</insert> <update>UPDATE regiontypequota SET Dollars=@{c0432jkl53eb92cd8} WHERE YR=@{c5f6e60e1d6eb1098} AND Quarter=@{c5d7e483445037d9e} AND Region='@{c3a93e65731210ed1}' AND ItemType='@{c6b8735ea60ff3011}'</update> </writeBack> </XML> </WebMessage> </WebMessageTable> </WebMessageTables>
使用列位置语法的回写模板文件示例
通过列位置引用值的回写模板文件可能如以下示例所示:
<?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="SetQuota"> <XML> <writeBack connectionPool="Supplier"> <insert>INSERT INTO regiontypequota VALUES(@1,@2,'@3','@4',@5)</insert> <update>UPDATE regiontypequota SET Dollars=@5 WHERE YR=@1 AND Quarter=@2 AND Region='@3' AND ItemType='@4'</update> </writeBack> </XML> </WebMessage> </WebMessageTable> </WebMessageTables>