3

Java コード スニペットを実行するメカニズムを提供する PLM Windchill ワークフローをカスタマイズしています。残念ながら、それらは準備されたサービスのメソッドに「挿入」されます。つまり、クラスをインポートする方法がないため、使用するには完全なパッケージ名を含める必要があります。以下のスニペットを理解しようとしないでください。どのように見えるかを見てください。

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

ここに画像の説明を入力

私の質問は、このコードを読みやすくするにはどうすればよいですか? もちろん、メソッド内にクラスをインポートする方法はありません。このスニペットを個別のメソッドに分割する方法さえありません (1 つに「貼り付け」されるため)。他のアイデアを探しています。

4

3 に答える 3

2

コードを読みやすくする 1 つのオプションは、チェーンされたメソッド/プロパティの呼び出しを複数の行に分割することです。

たとえば、次の行です。

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

次のように書き換えることができます。

wt.project.Role role = wt
                       .project
                       .Role
                       .toRole("APPROVER");
于 2016-09-02T07:43:39.473 に答える
2

カスタマイズされた Java クラスからこの完全なコードを呼び出すことができます。

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

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

于 2018-01-06T07:00:43.853 に答える
1

できません。ワークフロー式はメソッド本体です。みたいな発言

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

メソッドで $WT_HOME/codebase/wt/workflow/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

これにより、/codebase/ext/wt/workflow/externalize の下に Java クラスが作成されます

その後、必要なことを行うことができますが、これらのクラスをコンパイルし、変更の場合は停止/開始を行う必要があります。

基本的には式から外部コードを呼び出すだけなのであまり使わないのですが…

于 2016-10-27T08:54:37.553 に答える