规范使用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()方法才是规范方式。

浙公网安备 33010602011771号