Windchill二次开发实战(8)——给菜单添加过滤器

Windchill二次开发实战(8)——给菜单添加过滤器

根据具体的业务需要,某些菜单可能需要在特定的情况下才能显示出来,这时候就可以给菜单添加过滤器,实现在特定条件下才显示出来。
用 Windchill二次开发实战(2)——添加自定义下拉菜单 做示例。

1.配置custom-actionModels.xml和custom-actions.xml
custom-actionModels.xml中配置了图样目录

<model name="more parts actions" menufor="wt.part.WTPart">
   ...
   <action name="tyMenuNewWizard" type="tPartNewTab" shortcut="true"/>
   ...
</model>

在custom-actions.xml中对action的定义做修改,添加过滤器。
有两种方式:
(1).指定具体的对象类型,这里指定对象是部件(WTPart)的情况下才能显示。

<objecttype name="tPartNewTab" resourceBundle="ext.ty.resources.TyResource">
   <action name="tyMenuNewWizard">
      <command windowType="page" url="javascript:PTC.tjs.TYMenuReport()"/>
      <supportedTypes>
        <type value="wt.part.WTPart"/>
      </supportedTypes>
   </action>
</objecttype>

(2).添加自定义的过滤器。如果还要针对更加具体的情况进行设置的话,例如部件状态为正在工作时才能显示。

<objecttype name="tPartNewTab" resourceBundle="ext.ty.resources.TyResource">
   <action name="tyMenuNewWizard">
      <command windowType="page" url="javascript:PTC.tjs.TYMenuReport()"/>
      <includeFilter name="tyFilter"/>
   </action>
</objecttype>

2.自定义过滤器"tyFilter"
添加xconf配置文件,然后执行 xconfmanager -i xconf_file_name 发布到windchill中。

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE Configuration SYSTEM "xconf.dtd">
<Configuration targetFile="codebase/wt.properties">
  <Service context="default" name="com.ptc.core.ui.validation.SimpleValidationFilter" targetFile="codebase/service.properties">
  <Option requestor="null" serviceClass="ext.ty.validators.TyFilter" selector="tyFilter" cardinality="duplicate"/>
  </Service>
</Configuration>

过滤器配置好后,再实现TyFilter就可以完成菜单的过滤器功能了。

public class TyFilter extends DefaultSimpleValidationFilter {
    // 重写preValidateAction方法
	@Override
    public UIValidationStatus preValidateAction(UIValidationKey uiValidationKey, UIValidationCriteria uiValidationCriteria) {
        // 先默认设置为隐藏
        UIValidationStatus localUIValidationStatus = UIValidationStatus.HIDDEN;
        // 获取对象
		Persistable persistable = uiValidationCriteria.getContextObject().getObject();
		// 如果对象是部件(WTPart)
		if (persistable instanceof WTPart) {
			WTPart part = (WTPart) persistable;
			// 如果是正在工作状态,才设置为显示
			if (part.getLifeCycleState().toString().equals("INWORK")) {
				localUIValidationStatus = UIValidationStatus.ENABLED;
			}
		}
		return localUIValidationStatus;
	}
}

你可能感兴趣的:(#,PLM)