在方法中导入类?

时间:2016-09-02 07:40:49

标签: java import workflow code-snippets ptc-windchill

我定制了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

我的问题是 - 如何让这段代码更具可读性?当然没有办法在方法中导入类,甚至没有办法将这个片段分成单独的方法(因为它被粘贴到一个方法中)所以我正在寻找其他的想法

3 个答案:

答案 0 :(得分:2)

使代码更具可读性的一个选择是跨多行分离链式方法/属性调用。

例如,这一行:

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

可以改写为:

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

答案 1 :(得分:2)

您可以从Customized Java类调用此完整代码。

您只需调用您的类并从Java类中获取所需的最终参数,以使其更具可读性。

如果需要多个输出,请在Java类中编写多个方法,并在工作流表达式中调用它们。

答案 2 :(得分: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...
}

所以,你不能使用import。

但是: 如果您的PDMLink版本大于10, 您可以外部化工作流表达式

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

这将在/ codebase / ext / wt / workflow / externalize

下创建一个java类

然后你可以做你想做的事,但你必须编译这些类,并在修改的情况下停止/启动。

基本上,它只不过是从表达式中调用外部代码,所以我不会经常使用它...