使用工作流程變數 (Set) 修改屬性
此主題提供了一個使用工作流程變數與「執行運算式」自動機制節點來修改主要企業物件屬性的範例。如果參與者沒有直接修改屬於其指派任務主旨之物件的權限,這會很有用。
描述
PersistableAdapter API 可用來根據已指派活動的工作流程變數取得及設定 PBO 屬性值。工作流程變數值衍生自任務中的使用者輸入。
指示
會使用下列高層級程序:
1. 在工作流程範本中,建立一或多個流程層級變數。這些變數代表您想要修改的 PBO 屬性。選取 int、boolean 或 java.lang.string 的「類型名稱」(資料類型)。確保變數「可見」且「可重設」。
2. 在所指派任務活動節點的「變數」標籤中,建立初始化自的活動變數,並複製到您在之前步驟中建立的流程層級變數中。這些變數可用來取得使用者輸入,以取得之後會複製到流程層級變數中的值。
3. 建立「執行運算式」自動機制。在「運算式」標籤中輸入會以工作流程變數更新 PBO 屬性的程式碼,其值可透過指派活動時的使用者輸入獲得。如需運算式程式碼範例,請參閱下一節。
運算式程式碼範例
在下面的程式碼範例中,有使用下列內部名稱 (如「類型管理員」中所示)、變數名稱與資料類型的四個變數:
屬性內部名稱 | 工作流程變數名稱 | 資料類型 |
---|
StringAttribute | StringAttributeVariable | java.lang.String |
BooleanAttribute | BooleanAttributeVariable | 布林值 |
DateAttribute | DateAttributeVariable | java.lang.String |
IntegerAttribute | IntegerAttributeVariable | int |
| 下列範例也提供有關如何從字串資料類型設定 DateAttribute 值格式的指示。 |
wt.part.WTPart part = (wt.part.WTPart)primaryBusinessObject;
//Get check out folder for the current user in the session
wt.folder.Folder checkoutFolder = wt.vc.wip.WorkInProgressHelper.service.getCheckoutFolder();
//Check out object
wt.vc.wip.CheckoutLink chklink = wt.vc.wip.WorkInProgressHelper.service.checkout(part, checkoutFolder, "Check out comment");
wt.part.WTPart wrk = (wt.part.WTPart) chklink.getWorkingCopy();
System.out.println("\nChecked out WTPart ......"+wrk.getName()+"\t"+wrk.getCheckoutInfo());
com.ptc.core.lwc.server.PersistableAdapter pbo = new com.ptc.core.lwc.server.PersistableAdapter(wrk, null, null, null);
System.out.println("\nGot pbo...."+pbo.toString());
pbo.load("StringAttribute","BooleanAttribute","DateAttribute","IntegerAttribute");
System.out.println("Loading Attributes");
System.out.println("StringAttribute : "+pbo.get("StringAttribute"));
System.out.println("BooleanAttribute : "+pbo.get("BooleanAttribute"));
System.out.println("DateAttribute : "+pbo.get("DateAttribute"));
System.out.println("IntegerAttribute : "+pbo.get("IntegerAttribute"));
pbo.set("StringAttribute", StringAttributeVariable);
pbo.set("BooleanAttribute", BooleanAttributeVariable);
pbo.set("IntegerAttribute", new java.lang.Long(IntegerAttributeVariable));
//Date attribute is more complex
java.text.DateFormat df = java.text.DateFormat.getDateInstance(java.text.DateFormat SHORT);
String tempDate= DateAttributeVariable;
java.util.Date objectDate = df.parse(tempDate);
pbo.set("DateAttribute", new java.sql.timestamp(objectDate.gettime()));
wt.fc.Persistable p = pbo.apply();
//Modify attributes
wt.fc.PersistenceHelper manager.modify(p);
try
{
// Check in object
wt.vc.wip.WorkInProgressHelper.service.checkin((wt.vc.wip.Workable) p, "Check in comment");
}
catch (wt.util.WTException e)
{
e.printStackStrace();
}
catch (wt.util.WTPropertyVetoException e)
{
e.printStackTrace();
}