2016-04-04 75 views
0

我在Oracle ADF中有兩個視圖對象。視圖對象之間的雙向同步

LineVO表示訂單行 - 每個產品一行。

產品通過幾個屬性來區分...說「模型」和「顏色」。所以,VO#1爲每個模型/顏色組合包含一行。

ModelVO表示線條的模型級別摘要。

這兩個VO都有一個「數量」字段(一個整數)。

它們之間有一個ViewLink,每個對象都有一個行訪問器。

我想實現這兩個視圖對象之間的雙向協調,使得:

  • 當用戶查詢數據,ModelVO.Quantity等於LineVO.Quantity的總和,對相關行
  • 當用戶更新任何LineVO.Quantity時,ModelVO.Quantity會立即更新以反映新的總數
  • 當用戶更新ModelVO.Quantity時,數量會在關聯的LineVO行之間分佈(根據複雜的業務邏輯我希望在這裏不重要)。

我已經嘗試了許多不同的方式來做到這一點,並不能完美實現它。

現在,我正在研究將ModelVO.Quantity設置爲Groovy表達式「LineVO.sum('Quantity')」的變體。不幸的是,我所嘗試的任何一種方法都是從LineVO-> ModelVO工作或從ModelVO-> LineVO工作,但從來沒有同時進行。

有人可以提出一種方法來做到這一點?我想在模型層(EO或VO或組合)中做到這一點。

回答

0

沒關係..它原來是簡單:

ModelVO.Quantity必須被設置爲一個Groovy「LineVO.sum(‘數量’)」,它必須有一個recalcExpression集到哪裏可以控制的事情的方法因此它只會在我更改LineVO.Quantity值時重新計算。

我的方法最初沒有工作的原因是因爲,當用戶更新LineVO.Quantity價值,我想重新計算,我被lineVORow.getModelVO()得到ModelVO行......即通過視圖訪問。

顯然,它返回行的內部副本,而不是實際的行。

當我通過applicationModule.getModelVO().getCurrentRow()獲得父行時,整件事情就完美了。

我已經發布了另一個關於爲什麼通過視圖訪問器訪問行不起作用的問題。那部分對我來說依然是個謎。