到了第5天,我想應該正式來提升程式難度,看得越多範例程式碼,才能體會出Aras真正的好處。
就讓我先新增 Work Order,並且在下方的Part頁籤Create Related的方式建立4筆資料。
然後在work order的ItemType Server Event新增事件
程式碼內容
Innovator inn=this.getInnovator();
//讀取關聯表
Item related_part_items=inn.newItem("work_order_part","get");
related_part_items.setProperty("source_id",this.getID());
related_part_items=related_part_items.apply();
//判斷是否讀取錯誤
if(related_part_items.isError()==false){
//建立迴圈
for(int i=0 ; i< related_part_items.getItemCount();i++){
Item related_table_item = related_part_items.getItemByIndex(i);//讀取關聯表物件
Item part=related_table_item.getRelatedItem();//讀取關聯物件
if(part.getProperty("name","")=="xxx1"){
return inn.newError("Item is xxx1");
}
}
}
return this;
Aras中,關聯表會自動產生source_id去記錄父親物件ID,related_id則記住子階物件或關聯物件。
父親物件 <------- (source_id)RelationShip關聯表(related_id) --------> 子階物件
因此程式上先用source_id條件篩選與此物件ID相同的關聯表物件,再來用迴圈執行自己所需要的功能,如驗證、修改資料等等,還有一個重點,關聯物件剛新增的時候,是不存在於資料庫上的,所以把程式放到onBeforeUpdate會讀取不到關聯表(此時還未建立),初學者可以自行嘗試看看。
你文中提到:Aras中,關聯表會自動產生source_id去記錄父親物件ID,related_id則記住子階物件或關聯物件。
尤其是關聯表會自動產生source_id這句話,我自建反而不會自動產生source_id,只能自己手動建立,然後延用你的程式讀取source_id反而會出錯,為什麼??
再者新增資料後再刪除,反而主itemtype資料可以清除,但子itemtype卻無法刪除??
附上兩張主從itemtype的圖
哈囉~
關聯表是指你圖上的work_order_part這個名稱的itemtype
你的狀況是
work_order <------- (source_id)work_order_part關聯表(related_id) --------> work_order_part2
父workorder ; 子workorder_part2
workorder <------- (source_id)work_order_part關聯表(related_id) --------> workorder_part2
是的
Q1:你文中提到:Aras中,關聯表會自動產生source_id去記錄父親物件ID,related_id則記住子階物件或關聯物件。
尤其是關聯表會自動產生source_id???
我個人只能手動建立連結workorder_part2->source_id,如上圖(workorder_part2那張)所示。你是用什麼手法,可以自動生成source_id的關聯???
Q2:我建立父workorder與子workorder_part2,然後新增資料後,又刪除它但是workorder_part2的資料並沒有被刪除
前幾天,問了PLM顧問,他說:PLM刪除父workorder資料與父workorder和子workorder_part2關聯,子workorder_part2的資料要另外刪除,請問他的說法是對的嗎???