规范使用Teamcenter提供的RCP抽象类:AbstractAIFAction、AbstractAIFCommand、AbstractAIFDialog、AbstractAIFOperation

继Tc创建插件的demo,建立新建文件夹功能

首先了解一下Tc实现某个操作的调用顺序,以及实现功能的方法。
在使用过程中Operation一般用于执行有等待的任务逻辑。比如传入业务对象,收集数据后调用服务接口的情况。

Dialog是在需要界面做中间逻辑信息收集时才会使用的。比如修改对象属性,得先通过界面获取希望值。

Command充当业务逻辑前置处理器的作用。如判断选中对象是否符合预期条件

Action和Handler都是触发器,只是Action很少用。建议在Command中处理硬条件,如是否配置首选项,是否有查询等。在Handler或Action中处理软条件,如是否为预期的目标对象,对象的条件是否满足

AbstractAIFAction调用AbstractAIFCommand

package com.tc.template.handlers;

import java.awt.Frame;

import com.teamcenter.rac.aif.AbstractAIFApplication;
import com.teamcenter.rac.aif.AbstractAIFUIApplication;
import com.teamcenter.rac.aif.common.actions.AbstractAIFAction;

public class RevisesAction extends AbstractAIFAction {

	public RevisesAction(AbstractAIFUIApplication abstractaifuiapplication, String s) {
		super(abstractaifuiapplication, s);
	}

	public RevisesAction(AbstractAIFApplication abstractaifapplication, Frame frame, String s) {
		super(abstractaifapplication, frame, s);
	}

	public void run() {
		try {
			new RevisesLogicCommand().executeModal();
		} catch (Exception e) {
			e.printStackTrace();
		}
		return;
	}
}

 

  Handler调用AbstractAIFCommand

package com.tc.template.handlers;

import org.eclipse.core.commands.AbstractHandler;
import org.eclipse.core.commands.ExecutionEvent;
import org.eclipse.core.commands.ExecutionException;

public class RevisesHandler extends AbstractHandler {

	@Override
	public Object execute(ExecutionEvent arg0) throws ExecutionException {

		try {
			RevisesDialogCommand cmd = new RevisesDialogCommand();
			cmd.executeModal();
			cmd.indata();
		} catch (Exception e) {
			e.printStackTrace();
		}
		return null;
	}

}

  

   AbstractAIFCommand调用AbstractAIFDialog并初始化数据

package com.tc.template.handlers;

import com.teamcenter.rac.aif.AbstractAIFCommand;

public class RevisesDialogCommand extends AbstractAIFCommand {
	private RevisesDialog dialog;

	public RevisesDialogCommand() {
		// 使用set过Runnable的Command执行executeModal方法,Dialog是可以设置模态窗口的,单独使用的Dialog则不能设置模态,且不能浮在应用上
		dialog = new RevisesDialog();
		setRunnable(dialog);
	}

	public void indata() {
		// 初始化数据需要使用线程 不然界面卡死
		dialog.initData();
	}
}

  

  AbstractAIFDialog调用AbstractAIFOperation(代码想表示,事件定义在按钮上)

package com.tc.template.handlers;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import com.teamcenter.rac.aif.AbstractAIFDialog;
import com.teamcenter.rac.aif.AbstractAIFOperation;
import com.teamcenter.rac.aifrcp.AIFUtility;

public class RevisesDialog extends AbstractAIFDialog implements ActionListener {
	private static final long serialVersionUID = 1L;
	
	public void initData(){
		new Thread(new Runnable() {
			
			@Override
			public void run() {
				//从远端获取数据并更新到界面
			}
		}).start();;
	}

	@Override
	public void actionPerformed(ActionEvent e) {
		AbstractAIFOperation op = new InitDialogDataOperation();
		AIFUtility.getCurrentApplication().getSession().queueOperation(op);
	}

}

  

  AbstractAIFCommand调用AbstractAIFOperation

package com.tc.template.handlers;

import com.teamcenter.rac.aif.AbstractAIFCommand;
import com.teamcenter.rac.aif.AbstractAIFOperation;
import com.teamcenter.rac.aifrcp.AIFUtility;

public class RevisesLogicCommand extends AbstractAIFCommand {
	public void doLogic() {

		AbstractAIFOperation op = new LogicOperation();
		AIFUtility.getCurrentApplication().getSession().queueOperation(op);
	}
}

  

总结:关于AbstractAIFCommand,AbstractAIFOperation,AbstractAIFDialog的创建和执行有以下几点

  1、AbstractAIFDialog只能在AbstractAIFCommand中初始化,并且Command立即调用setRunnable,将Dialog实例set进去;

  2、AbstractAIFOperation只能使用TcApp.getSession().queueOperation(Operation实例)来执行;

  3、AbstractAIFCommand在初始化后,调用其.executeModal()方法才是规范方式。

posted @ 2023-08-23 16:57  我吃柠檬  阅读(13)  评论(0)    收藏  举报