Teamcenter Item指派按钮重载实现方法

发布时间 2023-09-12 08:04:13作者: 张永全-PLM顾问

1、在plugins.xml配置渲染Bean类

<extension
         point="com.teamcenter.rac.common.renderingHint">
       
        <renderingHint
            id="designcode"
            priority="0">
            <propertyBean
               class="com.teamcenter.rac.viewer.stylesheet.beans.DesignCodeAssignBean">
            </propertyBean>
        </renderingHint>        
    </extension>

2、实现bean类,就是一个 编码框 + 按钮,实现按钮事件(从,rendering Composite中遍历属性,取到填写的属性值,生成编码)

package com.teamcenter.rac.viewer.stylesheet.beans;


import java.util.Map;

import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Text;
import org.eclipse.ui.forms.widgets.FormToolkit;

import com.teamcenter.rac.common.Activator;
import com.teamcenter.rac.common.lov.view.controls.LOVDisplayer;
import com.teamcenter.rac.kernel.TCComponent;
import com.teamcenter.rac.kernel.TCComponentItem;
import com.teamcenter.rac.kernel.TCComponentItemRevisionType;
import com.teamcenter.rac.kernel.TCComponentItemType;
import com.teamcenter.rac.kernel.TCComponentType;
import com.teamcenter.rac.kernel.TCProperty;
import com.teamcenter.rac.kernel.TCPropertyDescriptor;
import com.teamcenter.rac.kernel.TCSession;
import com.teamcenter.rac.mrx.MFCUtility;
import com.teamcenter.rac.mrx.StringUtil;

public class DesignCodeAssignBean extends AbstractPropertyBean{
protected TextfieldPropertyBean m_propBean;
private Composite m_localComposite;
protected Button m_assignButton;
String itemType = "";
private String selectFirst = "";
private String selectSecond = "";
private String selectThird = "";
private String specValue = "";
private String selectProperty = "";
private String selectFinish = "";
// private LOVDisplayer lovFirst;
// private LOVDisplayer lovSecond;
// private LOVDisplayer lovThird;
private String firstDisplay = "";
private String secondDisplay = "";
private String thirdDisplay = "";
private String specDisplay = "";
private String propertyDisplay = "";
private String finishDisplay = null;
Shell shell = null;
TCComponentItemType partType = null;
boolean find = false;
int listIndex = -1;
public DesignCodeAssignBean(FormToolkit formtoolkit, Composite composite, boolean flag, Map map)
{
//parentComp = composite;
shell = composite.getShell();
m_localComposite = new Composite(composite, 0);
addDefaultBeanControl(formtoolkit, m_localComposite, flag, map);
addAdditionalControls();
}
protected void addDefaultBeanControl(FormToolkit formtoolkit, Composite composite, boolean flag, Map map)
{
m_propBean = new TextfieldPropertyBean(formtoolkit, composite, flag, map);
setPageAttrib(map);
setControl(m_propBean.getControl());
m_propBean.addPropertyChangeListener(this);
((TextfieldPropertyBean)m_propBean).removePropertyChangeListner();
((TextfieldPropertyBean)m_propBean).getTextControl().addPropertyChangeListener(this);
}
protected void addAdditionalControls()
{
setLayout(3);
m_assignButton = getButtonWidget();
}
protected void setLayout(int i)
{
if (m_localComposite != null)
{
GridLayout gridlayout = new GridLayout(i, false);
gridlayout.marginHeight = 0;
gridlayout.marginWidth = 0;
m_localComposite.setLayout(gridlayout);
GridData griddata = new GridData(4, 0x1000000, true, true);
m_localComposite.setLayoutData(griddata);
}
}
private void setPageAttrib(Map map)
{
String s = map != null ? (String)map.get("column") : null;
int i = 48;
if (s != null && s.length() > 0)
try
{
i = Integer.parseInt(s);
}
catch (NumberFormatException numberformatexception)
{
//Logger.getLogger(com/teamcenter/rac/viewer/stylesheet/beans/AbstractAutoAssignBean).error(numberformatexception.getClass().getName(), numberformatexception);
}
setSize(i);
}

private boolean findFirst = false;
private boolean findSecond = false;
private boolean findThird = false;
private boolean findSpec = false;
private boolean findProperty = false;
private boolean findFinish = false;
private void findPropControl(Composite parent2) {
Control[] controls = parent2.getChildren();
if(controls == null || controls.length == 0) {
System.out.println("controls == null || controls.length == 0" );
return;
}
int i = 0;
int count = controls.length;
System.out.println("count := " + count );
for(i = 0; i < count; i ++) {
System.out.println("controls[i] is := " + controls[i]);
if(controls[i] instanceof Label){
Label label = (Label)controls[i];
String labelname = label.getText();
if(labelname.startsWith(firstDisplay)) {
this.findFirst = true;
}else if(labelname.startsWith(this.secondDisplay + ":")) {
this.findSecond = true;
}else if(labelname.startsWith(this.thirdDisplay + ":")) {
this.findThird = true;
}else if(labelname.startsWith(this.propertyDisplay+ ":")) {
this.findProperty = true;
}else if(labelname.startsWith(this.finishDisplay+ ":")) {
this.findFinish = true;
}else if(labelname.startsWith(this.specDisplay+ ":")) {
this.findSpec = true;
}
}else if(controls[i] instanceof LOVDisplayer ) {
System.out.println("the concrol is lovdisplayer");
LOVDisplayer lov = (LOVDisplayer)controls[i];
if(this.findFirst) {
//this.lovFirst = lov;
this.selectFirst = lov.getSelectedValue() == null ? "" : lov.getSelectedValue().toString();
findFirst = false;
System.out.println("selectFirst := " + selectFirst);
}else if(this.findSecond) {
//this.lovSecond = lov;
this.selectSecond = lov.getSelectedValue() == null ? "" : lov.getSelectedValue().toString();
findSecond = false;
System.out.println("selectSecond := " + selectSecond);
}else if(this.findThird) {
//this.lovSecond = lov;
this.selectThird = lov.getSelectedValue() == null ? "" : lov.getSelectedValue().toString();
findThird = false;
System.out.println("selectThird := " + selectThird);
}else if(this.findProperty) {
//this.lovThird = lov;
this.selectProperty = lov.getSelectedValue() == null ? "" : lov.getSelectedValue().toString();
findProperty = false;
System.out.println("selectProperty := " + selectProperty);
}else if(this.findFinish) {
//this.lovThird = lov;
this.selectFinish = lov.getSelectedValue() == null ? "" : lov.getSelectedValue().toString();
findFinish = false;
System.out.println("selectFinish := " + selectFinish);
}
}else if(controls[i] instanceof Text ) {
Text text = (Text)controls[i];
if(this.findSpec) {
this.specValue = text.getText();
findSpec = false;
}
}
else if(controls[i] instanceof Composite){
findPropControl((Composite) controls[i]);
continue;
}
}
}
private void setSize(int i)
{
if (m_propBean instanceof TextfieldPropertyBean)
{
int j = i;
if (j == 0)
j = 48;
int k = j * 5;
GridData griddata = new GridData(4, 0x1000000, true, true);
griddata.widthHint = k;
((TextfieldPropertyBean)m_propBean).setLayoutData(griddata);
}
}

private Button getButtonWidget()
{
Button button = new Button(m_localComposite, 0);
button.setText("指派");
return button;
}

public void load(TCPropertyDescriptor tcpropertydescriptor) throws Exception {
m_propBean.setProperty(getProperty());
m_propBean.beanLabel = beanLabel;
descriptor = tcpropertydescriptor;
TCComponentType tccomponenttype = descriptor.getTypeComponent();
itemType = tccomponenttype.getType();
if(!itemType.endsWith("Revision")) {
itemType = itemType.substring(0, itemType.length() - 4);
}

listIndex = -1;
//String revType = itemType + "Revision";
try {
System.out.println("itemType := " + itemType);
TCSession session = tccomponenttype.getSession();
TCComponentItemRevisionType itemRevType = (TCComponentItemRevisionType)session.getTypeComponent(itemType + "Revision");
partType = (TCComponentItemType)session.getTypeComponent(itemType);
this.firstDisplay = itemRevType.getPropDesc("y6_Mategreat").getDisplayName();
this.secondDisplay = itemRevType.getPropDesc("y6_Matemedium").getDisplayName();
this.thirdDisplay = itemRevType.getPropDesc("y6_Matesmall").getDisplayName();
this.specDisplay = itemRevType.getPropDesc("y6_Dimensions").getDisplayName();
this.propertyDisplay = itemRevType.getPropDesc("y6_MechanicalProperty").getDisplayName();
this.finishDisplay = itemRevType.getPropDesc("y6_Finish").getDisplayName();
System.out.println("firstDisplay := " + firstDisplay);
System.out.println("secondDisplay := " + secondDisplay);
System.out.println("thirdDisplay := " + thirdDisplay);
System.out.println("specDisplay := " + specDisplay);
System.out.println("propertyDisplay := " + propertyDisplay);
System.out.println("finishDisplay := " + finishDisplay);

//Composite parent = getControl().getParent().getParent().getParent();
}catch(Exception e) {
e.printStackTrace();
}

m_propBean.getTextField().setEnabled(false);
m_propBean.getTextField().setEditable(false);
setLayout(2);
m_assignButton.setData("RCAF_ID", tcpropertydescriptor.getName());
m_propBean.load(tcpropertydescriptor);
m_assignButton.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
//updatePrimaryControlValue("111111");
Display.getDefault().asyncExec(new Runnable() {

@Override
public void run() {
// TODO Auto-generated method stub
findFirst = false;
findSecond = false;
findThird = false;
findSpec = false;
findProperty = false;
findFinish = false;
selectFirst = "";
selectSecond = "";
selectThird = "";
specValue = "";
selectProperty = "";
selectFinish = "";
Composite parent = getControl().getParent().getParent().getParent();
findPropControl(parent);
System.out.printf("after find selectFirst := " + selectFirst);
System.out.printf("after find selectThird := " + selectThird);
System.out.printf("after find selectSecond := " + selectSecond);
System.out.printf("after find specValue := " + specValue);
System.out.printf("after find selectProperty := " + selectProperty);
System.out.printf("after find selectFinish := " + selectFinish);

if(StringUtil.isNullOrEmpty(selectSecond) || StringUtil.isNullOrEmpty(selectThird)
|| StringUtil.isNullOrEmpty(specValue) || StringUtil.isNullOrEmpty(selectProperty)
|| StringUtil.isNullOrEmpty(selectFinish)) {
MFCUtility.errorMassges("【" + secondDisplay + "】、【" + thirdDisplay + "】、【" + specDisplay + "】、【" + propertyDisplay + "】、【" + finishDisplay + "】" + "必须先完成选择填充,才可以指派编码!");
return;
}


String second = selectSecond;
if(selectSecond.length() > 2) {
second = selectSecond.substring(selectSecond.length()-2);
}
System.out.printf("second := " + second);
String third = selectThird;
if(selectThird.length() > 2) {
third = selectThird.substring(selectThird.length()-2);
}
System.out.printf("third := " + third);
String itemID = "DJ" + second + third + specValue + "-" + selectProperty + selectFinish + "-001";
try {
TCComponentItem[] items = partType.findItems(itemID);
if(items != null && items.length > 0) {
itemID = items[items.length - 1].getNewID();
}
}catch(Exception e) {
e.printStackTrace();
}
final String uifId = itemID;
try {

Display.getDefault().asyncExec(new Runnable() {

@Override
public void run() {
// TODO Auto-generated method stub
setUIFValue(uifId);
}
});


}catch(Exception e) {
e.printStackTrace();
}
}

});
}
});
}
//ICSSelectionDialog dialog = null;
public void updatePrimaryControlValue(String newid) {

m_propBean.setText(newid);
setUIFValue(newid);
}

public boolean isPropertyModified(TCProperty tcproperty)
throws Exception
{
return true;
}

public void setModifiable(boolean flag)
{
this.m_propBean.setModifiable(true);
}

public Object getEditableValue()
{
return m_propBean.getEditableValue();
}

public void load(TCProperty tcproperty)
throws Exception
{
load(tcproperty.getPropertyDescriptor());
m_propBean.load(tcproperty);
setDirty(false);
//component = tcproperty.getTCComponent();
}

public TCProperty getPropertyToSave(TCProperty tcp)
throws Exception
{
if(tcp == null) {
System.out.println("getPropertyToSave := " + "null");
return null;
}else {
try {
TCProperty prop = m_propBean.getPropertyToSave(tcp);
System.out.println("value := " + m_propBean.getTextField().getText());
prop.setStringValue(m_propBean.getTextField().getText());
TCComponent comp = prop.getTCComponent();
return prop;
}catch(Exception e) {
e.printStackTrace();
}
}
// TCProperty tcproperty1 = m_propBean.getPropertyToSave(tcproperty);
// savable = m_propBean.savable;
// return tcproperty1;
return null;
}

public void setUIFValue(Object obj)
{
m_propBean.setUIFValue(obj);
}

public TCSession getSession()
{
TCSession tcsession = null;
try
{
tcsession = (TCSession)Activator.getDefault().getSessionService().getSession(com.teamcenter.rac.kernel.TCSession.class.getName());
}
catch (Exception exception)
{
//Logger.getLogger(com/teamcenter/rac/viewer/stylesheet/beans/AbstractAutoAssignBean).error(exception);
return null;
}
return tcsession;
}

public boolean isMandatory()
{
return m_propBean.isMandatory();
}
}


3、在XMLRenderingStylesheet中,property = "item_id" renderingHint="designcode", designcode为plugins。xml文件中配置的id