视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
Windchill 开发培训资料
2025-09-29 08:59:27 责编:小OO
文档
主要内容:jca标签\\Validator\dataUtilities

一、Windchill自带的客制化:站点->实用程序->首选项管理器->展开"用户自定义"->将"用户自定义"选项卡的"否"改为"是"->重新打开浏览器->会出现"自定义"图标

二、增加主菜单和一级子菜单

1 、复制 navigation-actionModels.xml中的main navigation段代码到custom-actionModels.xml文件中

        

            Main navigation (tabs)

        //这里是添加的

        

            Sub tabs under the product main tab

2、修改properties文件action.properties和action_zh_CN.properties

在action.properties文件里增加如下代码:

navigation.test.description=test

test.subtest1.description=subtest1

test.subtest2.description=subtest2

在action_zh_CN.properties里增加如下代码:

navigation.test.description=\测\试            (\测\试----测试)

test.subtest1.description=\子\测\试1  (\子\测\试1----子测试1)

test.subtest2.description=\子\测\试2  (\子\测\试2----子测试2)

3、在custom-actions.xml文件中增加如下代码:

4、在netmarkets下的jsp文件夹下新建文件夹test

并在test下新建jsp文件subtest1.jsp和subtest2.jsp

注意:这里的文件名和文件夹名都不能错

5、重启服务器

四、显示所有产品列表

1、修改subtest1.jsp

<%@ taglib uri="http://www.ptc.com/windchill/taglib/components" prefix="jca"%>

<%@ taglib uri="http://www.ptc.com/windchill/taglib/fmt" prefix="fmt" %>

<%@ page import="ext.corilead.testdemo.GetProductList"%>

<%@ include file="/netmarkets/jsp/util/begin.jspf"%>

         

    

             

<%@ include file="/netmarkets/jsp/util/end.jspf"%>

2、java文件

package ext.corilead.testdemo;

import java.util.HashMap;

import java.util.Vector;

import wt.fc.QueryResult;

import wt.method.RemoteAccess;

import wt.pdmlink.PDMLinkProduct;

import wt.pds.StatementSpec;

import wt.query.QuerySpec;

import wt.query.SearchCondition;

public class GetProductList implements RemoteAccess {

        private GetProductList(){}

         public static GetProductList newGetProductList(){

        return new GetProductList();

    }

        public static Vector getAllProduct(){

        Vector v=new Vector();

        QuerySpec qs=null;

        QueryResult qr=null;

        try{

            qs=new QuerySpec(PDMLinkProduct.class);

            if(qs instanceof StatementSpec){

                qr = wt.fc.PersistenceHelper.manager.find((StatementSpec)qs);//查询所有产品列表

                while(qr.hasMoreElements()){

                    Object object = qr.nextElement();

                    if(object instanceof PDMLinkProduct){

                        HashMap map=new HashMap();

                        PDMLinkProduct pro=(PDMLinkProduct)object;

                        String name=pro.getName();

                        String creator=pro.getCreator().getName();

                        String container=pro.getContainerName();    

                        map.put("name", name);                    

                        map.put("creator", creator);

                        map.put("container", container);

                        map.put("pro", pro);

                        v.add(map);

                    }

                }

            }

            }catch(Exception e){

            e.printStackTrace();

        }        

        HashMap map=new HashMap();        

        return v;

    }

}

3、将生成的class文件拷贝到codebase对应的目录下,重启服务器

五、添加超链接

1、修改jsp文件    

2、java文件

package ext.corilead.dataUtilities;

import java.io.IOException;

import java.io.Serializable;

import java.util.HashMap;

import wt.fc.ReferenceFactory;

import wt.inf.container.WTContainer;

import wt.method.RemoteAccess;

import wt.pdmlink.PDMLinkProduct;

import wt.pom.PersistenceException;

import wt.util.WTException;

import wt.util.WTProperties;

import com.ptc.core.components.descriptor.ModelContext;

import com.ptc.core.components.factory.AbstractDataUtility;

import com.ptc.core.components.rendering.guicomponents.UrlDisplayComponent;

public class SearchDetail extends AbstractDataUtility implements RemoteAccess,Serializable {

    public Object getDataValue(String col_id, Object obj, ModelContext modelcontext)    throws WTException {

        UrlDisplayComponent goPartNumberButton = new UrlDisplayComponent();

        if(obj instanceof HashMap){        

            HashMap map=(HashMap)obj;

            String container=(String)map.get("container");

            WTContainer org=((PDMLinkProduct)map.get("pro")).getContainer();

            if (org != null) {

                String url2 = getURLByWTContainer(org);    

                goPartNumberButton.setLink(url2);

                goPartNumberButton.setLabelForTheLink(container);

                goPartNumberButton.setTarget("_blank");

            }

        }

        return goPartNumberButton;

    }

    //构造url地址

    public static String getURLByWTContainer(WTContainer org) throws PersistenceException, WTException {

        String url = "";

        ReferenceFactory referenceFactory = new ReferenceFactory();

        if (org != null) {

            String ufid = referenceFactory.getReferenceString(org);

            try {

                WTProperties properties = WTProperties.getLocalProperties();

                String urlbase = properties.getProperty("java.rmi.server.hostname");

                String webport = properties.getProperty("wt.webserver.port");

                url = "http://" + urlbase + ":" + webport + "/Windchill/app/#ptc1/comp/wt.inf.container.OrgContainer.infoPage?oid=" + ufid + "&u8=1";

                System.out.println("url==========="+url);

            } catch (IOException e) {

                e.printStackTrace();

            }

        }

        return url;

    }

}

3、在site.conf文件里注册    name="wt.services/svc/default/com.ptc.core.components.descriptor.DataUtility/containerDdetail/java.lang.Object/0"

    overridable="true"

    targetFile="codebase/com/ptc/core/components/components.dataUtilities.properties" 

value="ext.corilead.dataUtilities.SearchDetail/singleton" />

4、在windchill shell下执行命令xconfmanager –p

5、重启服务器

六、控制主菜单的可见性

1、java文件

package ext.corilead.validator;

import java.util.Locale;

import wt.org.WTPrincipal;

import wt.session.SessionHelper;

import wt.util.WTException;

import com.ptc.core.ui.validation.DefaultUIComponentValidator;

import com.ptc.core.ui.validation.UIValidationCriteria;

import com.ptc.core.ui.validation.UIValidationKey;

import com.ptc.core.ui.validation.UIValidationResult;

import com.ptc.core.ui.validation.UIValidationResultSet;

import com.ptc.core.ui.validation.UIValidationStatus;

public class NavigationValidator extends DefaultUIComponentValidator {

    public UIValidationResultSet performFullPreValidation(

            UIValidationKey paramUIValidationKey,

            UIValidationCriteria paramUIValidationCriteria, Locale paramLocale)

            throws WTException {

        // TODO Auto-generated method stub

        UIValidationResultSet resultSet =new UIValidationResultSet();

        try{

            WTPrincipal wtp= SessionHelper.manager.getPrincipal();//u-3 ?

            //if(wtp.getName().equals("Administrator")){

            System.out.println("用户名= "+wtp.getName());

            if(wtp.getName().trim().equals("Administrator")){

                System.out.println("======this is wcadmin========");

                resultSet.addResult(new UIValidationResult(paramUIValidationKey,UIValidationStatus.ENABLED));

            }else{

                System.out.println("=======this is not wcadmin=========");

                resultSet.addResult(new UIValidationResult(paramUIValidationKey,UIValidationStatus.HIDDEN));                

            }

        }catch(WTException e){    

        }        

        return resultSet;

    }

}

2、在site.xconf文件里增加如下代码:

overridable="true"

targetFile="codebase/service.properties"

value="ext.corilead.validator.NavigationValidator"/>

3、在windchill下执行命令xconfmanager –p

4、重启服务器

七、客制化部件操作下拉菜单

1、简单菜单

(1)在PartClient-actionmodels.xml文件中做如下修改

    

(2)在PartClient-actions.xml中添加如下配置

        

 

注:action name要和在PartClient-actionmodels.xml里的action name保持一致

(3)在partResource.java中添加下列内容:

   @RBEntry("search BOM")

   @RBComment("show BOM")

   public static final String PRIVATE_CONSTANT_357 = "part.searchBom.description";

(4)在partResource_zh_CN.java中添加下列内容

   @RBEntry("查找BOM")

   @RBComment("show BOM")

   public static final String PRIVATE_CONSTANT_357 = "part.searchBom.description";

(5)编译partResource.java

   在shell中执行如下命令javac +空格+partResource.java全路径

(6)编译文件partResource_zh_CN.java

   在shell下执行命令native2ascii -encoding utf-8 +空格+partResource_zh_CN.java+空格+转码后的文件存放路径回车,javac +空格+转码后的partResource_zh_CN.java文件的全路径

(7)将生成的class文件拷贝到codebase对应的相同目录下,重启服务器

2、三级子菜单

(1)在PartClient-actionmodels.xml文件中做如下修改

    

(2)PartClient-actions.xml文件

      

(3)partResource.java文件

public final class partResource extends WTListResourceBundle {

   ......

   @RBEntry("third Level")

   @RBComment("show third Level")

   public static final String PRIVATE_CONSTANT_358 = "part.thirdlevel.description";

   @RBEntry("Second Level")

   public static final String PRIVATE_CONSTANT_359 = "object.second level menu.description";

}

(4) partResource_zh_CN.java文件

public final class partResource_zh_CN extends WTListResourceBundle {

   ......

   @RBEntry("三级菜单")

   @RBComment("show third Level")

   public static final String PRIVATE_CONSTANT_358 = "part.thirdlevel.description";

   @RBEntry("二级菜单")

   public static final String PRIVATE_CONSTANT_359 = "object.second level menu.description";

}

(5)编译方法同上

重启服务器下载本文

显示全文
专题