You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

156 lines
5.4 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

package cn.net.connor.plm.batchRevision;
import java.awt.Frame;
import com.teamcenter.rac.aif.AbstractAIFApplication;
import com.teamcenter.rac.aif.common.actions.AbstractAIFAction;
import com.teamcenter.rac.aif.kernel.AIFComponentContext;
import com.teamcenter.rac.aif.kernel.InterfaceAIFComponent;
import com.teamcenter.rac.kernel.TCComponent;
import com.teamcenter.rac.kernel.TCComponentFolder;
import com.teamcenter.rac.kernel.TCComponentItem;
import com.teamcenter.rac.kernel.TCComponentItemRevision;
import com.teamcenter.rac.kernel.TCComponentPseudoFolder;
import com.teamcenter.rac.kernel.TCComponentReleaseStatus;
import com.teamcenter.rac.kernel.TCException;
import com.teamcenter.rac.kernel.TCSession;
import com.teamcenter.rac.util.MessageBox;
public class BatchRevisionAction extends AbstractAIFAction {
private AbstractAIFApplication application;
private TCSession session;
public BatchRevisionAction(AbstractAIFApplication application, Frame frame, String param) {
super(application, frame, param);
this.application = application;
this.session = (TCSession)application.getSession();
}
@Override
public void run() {
// MessageBox.post("触发“批量修订”逻辑!", "我的打印信息", MessageBox.INFORMATION);
System.out.println("触发“批量修订”按钮!");
try {
for (InterfaceAIFComponent targetComponent : application.getTargetComponents()) {
String targetName = targetComponent.getProperty("object_string");
String folderTrueName = null;
if (targetComponent instanceof TCComponentPseudoFolder) {
TCComponentPseudoFolder folder = (TCComponentPseudoFolder)targetComponent;
//选中文件夹所在的版本对象
TCComponentItemRevision owningRevision = (TCComponentItemRevision)folder.getOwningComponent();
String folderName = folder.getStringProperty("object_string");
System.out.println("选中文件夹的显示名称="+folderName+"-"+folder.getType());
if (folderName != null && folderName.equals("问题项")) {
folderTrueName = "CMHasProblemItem";
}else if (folderName != null && folderName.equals("受影响项")) {
folderTrueName = "CMHasImpactedItem";
}
System.out.println("选中文件夹对应的真实名称="+folderTrueName);
if (folderTrueName != null) {
//获取选中文件夹内的对象 -referenceListProperty
TCComponent[] referenceListProperty = owningRevision.getReferenceListProperty(folderTrueName);
if (referenceListProperty != null && referenceListProperty.length > 0) {
// session.getUserService().call("bypass", new Object[] { true });
String xdErroItemRevString = "";//未发布的修订失败的版本对象信息,用换行分割
//将选中文件夹下的对象遍历:升版,并将新版放到【解决方案零组件】-CMHasSolutionItem 下
for (int i = 0; i < referenceListProperty.length; i++) {
TCComponentItemRevision rev = (TCComponentItemRevision)referenceListProperty[i];
TCComponentItem item = rev.getItem();
//判断该版本对象是否已发布,若未发布则跳过,无法修订
if (!isRelease(rev)) {
System.out.println(">>>版本【"+rev.getStringProperty("object_string")+"】未发布,不允许修订,跳过!");
xdErroItemRevString += " "+rev.getStringProperty("object_string")+"\n";
continue;
}else {
//版本已发布,升版,加入文件夹下
try {
TCComponentItemRevision newItemRevision = rev.saveAs(null);
owningRevision.add("CMHasSolutionItem", newItemRevision);
} catch (Exception e) {
try {
TCComponentItemRevision latestItemRevision = rev.getItem().getLatestItemRevision();
owningRevision.add("CMHasSolutionItem", latestItemRevision);
System.out.println("已存在新版本");
}catch (Exception e2) {
e2.printStackTrace();
}
}
}
}
// session.getUserService().call("bypass", new Object[] { false });
System.out.println("批量修订完成!");
if (xdErroItemRevString != null && !xdErroItemRevString.equals("")){
MessageBox.post("批量修订完成!\n部分版本修订失败。原因未发布\n "+xdErroItemRevString, "我的打印信息", MessageBox.INFORMATION);
}else {
MessageBox.post("批量修订完成!", "修订结果", MessageBox.INFORMATION);
}
}else {
System.out.println("未获取到文件夹["+folderName+"-"+folderTrueName+"]下的子项!");
MessageBox.post("未获取到文件夹["+folderName+"-"+folderTrueName+"]下的子项!", "修订结果", MessageBox.INFORMATION);
}
}else {
System.out.println("获取选中文件夹的属性真实值失败!");
}
}else {
System.out.println("选中对象【"+targetName+"】的类型 [非文件夹] ,为:"+targetComponent.getType());
}
}
} catch (Exception e) {
System.out.println("批量修订失败:");
e.printStackTrace();
}
}
/**
* 判断版本对象是否已发布
* @param rev
* @return
* @throws TCException
*/
private boolean isRelease(TCComponentItemRevision rev) throws TCException {
AIFComponentContext[] releaseList = rev.getChildren("release_status_list");
if (releaseList != null && releaseList.length > 0) {
TCComponentReleaseStatus status = (TCComponentReleaseStatus) releaseList[releaseList.length-1].getComponent();
String releaseName = status.getProperty("name");
if (!releaseName.contains("发布")||!releaseName.contains("TCM")) {
return false;
}else {
return true;
}
}else {
return false;
}
}
}