2016-09-02 8 views
3

私は、Javaコードスニペットを実行するメカニズムを提供するPLM Windchill Workflowをカスタマイズしています。残念ながら、彼らはをインポートする方法がないので、があるので、には完全なパッケージ名が含まれていることを意味する、準備されたサービスのメソッドに '挿入'されます。 - どのようにこのコードは、任意のより読みやすくするためにメソッドのクラスをインポートしますか?

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

@アンドレアス私は分離したクラスにいくつかのコードを抽出して呼び出すことができますが、このスニペットには多くのロジックを残さなければならないので、非常に良い選択ですが、依然として私の主な問題は解決しません。ありがとう。 – Damiano

答えて

2

コードをより読みやすくするための1つのオプションは、連鎖したメソッド/プロパティ呼び出しを複数の行に分けることです。例えば

、この行:あなたはできません

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

間違いなく良いものです。紹介、ありがとう。 – Damiano

+0

@Damiano実際には、この表記法はすでにJavaの機能面で使用されています。 Guavaライブラリのネストされたメソッドを呼び出すとき –

1

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

は次のように書き換えることができます。 ワークフロー式はメソッド本体です。

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

よう 文はメソッドを持つ$ WT_HOME /コードベース/重量/ワークフロー/式/ 下のクラスで終わる:

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... 
} 

だから、あなたは、インポートを使用することはできません。しかし

: あなたが10より大きいPDMLinkのバージョンをお持ちの場合は、 あなたがこのコードベース//EXT /重量/ワークフローの下でJavaクラスを作成/

を外部ワークフロー式

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

を外部化することができますが

あなたが望むことはできますが、これらのクラスをコンパイルし、修正があった場合には停止/開始する必要があります。

基本的に、あなたがカスタマイズされたJavaクラスから、この完全なコードを呼び出すことができ、それは表現から外部のコードを呼び出すよりも何もないので、私はそれをたくさん使用していない...

1

Javaクラスから必要な最終パラメータを取得して読みやすくするだけで済みます。

複数の出力が必要な場合は、Javaクラスで複数のメソッドを記述し、ワークフロー式で呼び出すことができます。

関連する問題