寫回讓使用者能夠直接從儀表板和分析更新資料。
具備寫回資料庫權限的使用者在分析中見到的寫回欄位皆為可編輯欄位。這些使用者輸入的值會儲存到資料庫。不具備寫回資料庫權限的使用者,會以唯讀欄位的方式見到寫回欄位。
在使用者於可編輯欄位中輸入值並按一下寫回按鈕後,應用程式便會執行寫回範本中定義的 insert
或 update
SQL 命令。如果命令成功執行,系統就會以新的值更新分析。如果讀取範本或執行 SQL 命令時發生錯誤,則會顯示錯誤訊息。
使用者輸入的新資料記錄若尚不存在於表格中,應用程式便會執行 insert
命令。在此情況下,使用者所輸入表格記錄的原始值會是空值。當使用者修改現有資料時,update
命令便會執行。若要顯示實體表格中尚不存在的記錄,您可以建立另一個相似的表格。然後,使用此相似表格顯示使用者可以修改的預留位置記錄。
註:
建立寫回範本時,即使未使用 insert
命令和 update
命令,還是必須包含這兩個命令。例如,如果只要執行 insert
,您還是必須包含空的 update
敘述句 <update></update>
,如下列 XML 程式碼所示:
insert
命令和兩個空 update
敘述句的範例寫回 XML 檔案。若要進一步瞭解如何建立與建構寫回 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 會偵測到該問題,並避免將無效的資料傳送至資料庫。然而它無法偵測其他形式的無效資料輸入 (超出範圍的值、文字和數字混合等)。當使用者按一下寫回按鈕,而插入或更新作業正在執行,資料庫會傳回資料無效的錯誤訊息。使用者稍後便能更正錯誤的輸入。內容設計人員可在寫回分析中包含文字以協助使用者,例如「不允許在數值資料欄位輸入文數字混合值」。
範本機制不適用於輸入任意新記錄。換句話說,不要使用它作為資料輸入工具。
建立寫回的表格時,請確定至少一個資料欄不含寫回功能,但包含每個資料列的唯一值且不是空值。
寫回分析不支援向下展開。由於向下展開會修改表格的結構,因此無法使用寫回範本。
注意:
範本機制會將使用者輸入直接寫入資料庫。確保實體資料庫的安全是您的責任。為了獲得最佳的安全性,請將寫回資料庫表格儲存至唯一的資料庫執行處理。寫回範本檔案是包含一或多個寫回範本的 XML 格式檔案。
寫回範本是由指定範本名稱、連線集區的 WebMessage
元素,以及在寫回表格和資料欄中插入與更新記錄所需的 SQL 敘述句組成。當內容設計人員啟用表格檢視的寫回功能時,必須指定要在表格檢視中用於插入與更新記錄的寫回範本名稱。
寫回範本必須符合以下需求:
WebMessage
:您必須在 WebMessage 元素中使用 name
屬性指定寫回範本的名稱。
為了使寫回正確運作,啟用表格檢視的寫回功能時,內容設計人員必須指定要在檢視中用於插入與更新記錄的寫回範本名稱。
此範例顯示名為 SetQuotaUseID
的寫回範本。
<WebMessage name="SetQuotaUseID">
connectionPool
:為了符合安全需求,您必須指定連線集區以及插入與更新記錄的 SQL 命令。這些 SQL 命令參照寫回綱要中傳送的值來產生用以修改資料庫表格的 SQL 敘述句。
VALUES
:您可以透過資料欄 ID 或資料欄位置來參照資料欄值。使用資料欄 ID 會比較好。
請使用單引號將字串與日期值括起來。數值則不需使用單引號。
資料欄 ID - 每個資料欄 ID 都是隨機產生的文數字。您可以在分析編輯器進階頁籤中可用分析的 XML 定義中找到資料欄 ID。例如,如下所示的資料欄 ID 值:@{c5f6e60e1d6eb1098}
、@{c3a93e65731210ed1}
、'@{c6b8735ea60ff3011}'
當您使用資料欄 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>