2016-09-02 50 views
3

我正在自定義PLM Windchill Workflow,它提供了執行java代碼片段的機制。不幸的是,他們'插入'到準備服務的方法,這意味着有沒有辦法導入類,所以我必須包括完整的包名稱來使用它。不要試圖理解下面的代碼片段,只要看看它是如何看起來像:在方法中導入類?

wt.fc.QueryResult activities = wt.fc.PersistenceHelper.manager.find((wt.pds.StatementSpec) activitiesQuery); 
    while (activities.hasMoreElements()) { 
      wt.workflow.work.WfAssignedActivity activity = (wt.workflow.work.WfAssignedActivity) activities.nextElement(); 
      if(activity.getDisplayIdentifier().toString().equals("Analyze Image Request")){ 
       java.util.List<wt.workflow.work.WorkItem> workItems = wt.workflow.status.WfWorkflowStatusHelper.service.getWorkItems(activity); 
       for (wt.workflow.work.WorkItem workItem : workItems){ 
        String action = workItem.getActionPerformed(); 
        if(action != null && action.equals("Accepted")){ 
         wt.org.WTPrincipalReference approver = workItem.getOwnership().getOwner(); 
         n_approver = approver.getFullName() + " ("+approver.getDisplayName()+")"; 
         wt.fc.collections.WTHashSet approverSet = new wt.fc.collections.WTHashSet(java.util.Arrays.asList(approver)); 
         wt.project.Role role = wt.project.Role.toRole("APPROVER"); 
         com.ptc.windchill.pdmlink.change.server.impl.WorkflowProcessHelper.setChangeItemParticipants(report, role, approverSet); 
         break; 
        } 
       } 
       break; 
      } 
     } 

enter image description here

我的問題是 - 如何使這個代碼的可讀性更強?當然,沒有辦法在方法內部導入類,甚至沒有辦法將這個片段分成單獨的方法(因爲它被「粘貼」成一個),所以我正在尋找其他的想法。

+2

在自定義類中編寫代碼,然後調用它? – Andreas

+0

@Andreas我可以將一些代碼提取到分離的類並調用它,但是我必須在此代碼段中留下很多邏輯,所以是的,這是一個非常好的選項,但仍然無法解決我的主要問題。謝謝。 – Damiano

回答

2

讓代碼更具可讀性的一個選擇是將多個行之間的鏈接方法/屬性調用分開。

例如,該行:

wt.project.Role role = wt.project.Role.toRole("APPROVER"); 

可以改寫爲:

wt.project.Role role = wt 
         .project 
         .Role 
         .toRole("APPROVER"); 
+0

絕對是一個好的。將介紹,謝謝。 – Damiano

+0

@Damiano實際上這個表示法已經用於Java的功能方面,例如當調用Guava庫中的嵌套方法時。 –

1

你不能。 工作流表達式是方法體。 像

wt.fc.QueryResult activities = wt.fc.PersistenceHelper.manager.find((wt.pds.StatementSpec) activitiesQuery); 

的聲明在$ WT_HOME /代碼庫/重量/工作流程/ EXPR/ 一類具有一個方法結束:

public static Object executemethod_1(Object[] var0, Object[] var1) throws Exception { 
wt.fc.QueryResult activities = wt.fc.PersistenceHelper.manager.find((wt.pds.StatementSpec) activitiesQuery); 

// some generated code to handle variables... 
} 

所以,你不能使用進口。

但是: 如果你有PDMLink的版本比10, 可以外部化的工作流程表達更大

http://support.ptc.com/cs/help/windchill_hc/wc100_hc/index.jspx?id=WFTemplateExtExpression&action=show

這下創建/代碼庫/ ext中的Java類/重量/工作流程/外部化

然後你可以做你想做的事情,但是你必須編譯這些類,並且在修改的情況下做一個停止/啓動。

基本上,這是沒有什麼比從表達式調用外部代碼比較多,所以我不經常使用它......

1

您還可以從定製的Java類這個完整的代碼。

您只需調用您的類並從Java類中獲取所需的最終參數以使其更具可讀性。

如果您需要多個輸出,請在Java類中編寫多個方法,並在工作流表達式中調用它們。