iT邦幫忙

2018 iT 邦幫忙鐵人賽
DAY 3
0
自我挑戰組

Aras PLM開發練功30天系列 第 3

[Aras Day3] Server Event-OnAfterUpdate & this物件

延續Day2的內容在實作另一個OnAfter的功能

新增一支Method,並加入到Work Order,設定OnAfterUpdate
新增Method

這次來看看同樣的程式在修改後觸發會發生什麼

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;

測試結果
OnAfterUpdate Cost

再改寫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值
OnAfterUpdate Cost 可存檔

這是因為OnAfter事件是已經將物件資料存進資料庫後才觸發,因此通常OnAfter只會用來驗證資料,尤其是關聯資料的最常使用,這會在之後的章節說明,那讓我們研究一下this這個物件究竟是什麼?

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;

結果
錯誤Log

我把這段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


上一篇
[Aras Day2] 新增第一個Server Event-OnBefore
下一篇
[Day4] AML ? 屬於Aras 的XML格式
系列文
Aras PLM開發練功30天30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言