延續Day2的內容在實作另一個OnAfter的功能
新增一支Method,並加入到Work Order,設定OnAfterUpdate
這次來看看同樣的程式在修改後觸發會發生什麼
Innovator inn=this.getInnovator();
string cost=this.getProperty("cost","");
int costInt=int.Parse(cost);
if(costInt >2000){
return inn.newError("Cost is not >2000");
}
return this;
測試結果
再改寫cost值
Innovator inn=this.getInnovator();
string cost=this.getProperty("cost","");
int costInt=int.Parse(cost);
if(costInt >2000){
//return inn.newError("Cost is not >2000");
this.setProperty("cost","2000");
}
return this;
發現存檔後居然沒有改變cost值
這是因為OnAfter事件是已經將物件資料存進資料庫後才觸發,因此通常OnAfter只會用來驗證資料,尤其是關聯資料的最常使用,這會在之後的章節說明,那讓我們研究一下this這個物件究竟是什麼?
我們將上述的程式碼改寫,返回一個錯誤訊息是this.ToString()
Innovator inn=this.getInnovator();
// string cost=this.getProperty("cost","");
// int costInt=int.Parse(cost);
// if(costInt >2000){
// //return inn.newError("Cost is not >2000");
// this.setProperty("cost","2000");
// }
return inn.newError(this.ToString());
return this;
結果
我把這段XML訊息重整一下
<Item type="Work Order" typeId="4C2C774E061048DFB7CB1BC08D7B73A6" id="0B2F42187CC14B03A79699C7353B8B06">
<config_id keyed_name="0B2F42187CC14B03A79699C7353B8B06" type="Work Order">0B2F42187CC14B03A79699C7353B8B06</config_id>
<cost>2001</cost>
<created_by_id keyed_name="Innovator Admin" type="User">30B991F927274FA3829655F50C99472E</created_by_id>
<created_on>2017-12-06T12:18:23</created_on>
<current_state keyed_name="Start" type="Life Cycle State" name="Start">AD2BF0F522244950A30B0750F2A090C9</current_state>
<generation>1</generation>
<id keyed_name="0B2F42187CC14B03A79699C7353B8B06" type="Work Order">0B2F42187CC14B03A79699C7353B8B06</id>
<is_current>1</is_current>
<is_released>0</is_released>
<item_number>W002</item_number>
<keyed_name>0B2F42187CC14B03A79699C7353B8B06</keyed_name>
<locked_by_id keyed_name="Innovator Admin" type="User">30B991F927274FA3829655F50C99472E</locked_by_id>
<major_rev>A</major_rev>
<modified_by_id keyed_name="Innovator Admin" type="User">30B991F927274FA3829655F50C99472E</modified_by_id>
<modified_on>2017-12-06T12:46:13</modified_on>
<new_version>1</new_version>
<not_lockable>0</not_lockable>
<permission_id keyed_name="Default Access" type="Permission">9122CD065CF04141B8EFE263FC80BEA4</permission_id>
<state>Start</state>
</Item>
當資料物件已經完成CRUD時,回傳資料透過這個this物件給後端程式,並且CRUD所回應的this內容各有不同。
這個this物件隸屬於Item類別,是Aras把資料轉換成XML的形式打包成物件,這種方式稱呼為AML,
所以對Item物件進行欄位讀取或修改皆是透過AML後,Aras替我們完成SQL的語法命令,之後會有更多的範例來解釋AML