我们想在部件视图中添加一个命令(按钮、菜单项、上下文菜单中的条目或类似的条目)来执行 Java 代码。在 Java 代码中应该有对该部分的引用。
我们尝试在 psb-actionmodels.xml 和 cat-actions.xml 中添加条目但没有成功 - 没有出现菜单项。
我们缺少什么?
我们想在部件视图中添加一个命令(按钮、菜单项、上下文菜单中的条目或类似的条目)来执行 Java 代码。在 Java 代码中应该有对该部分的引用。
我们尝试在 psb-actionmodels.xml 和 cat-actions.xml 中添加条目但没有成功 - 没有出现菜单项。
我们缺少什么?
感谢 Vignesh Vino 告诉我阅读文档......
我确实阅读了它。我以前读过它,但我迷路了。阅读并不是那么容易,因为(在我看来)文档没有深入到足以从中获得好的例子。
有了这个答案,我想分享我学到的东西。如果我错了或者您知道更多详细信息,请发表评论。
$windchill 是您的安装路径。
$windchill\codebase\config\actions\custom-actions.xml:
这是定义动作的地方。
我只定义了一个,名字是gbaction1
,嵌入在一个名为 的对象类型中gbactiontype1
。
要在菜单中查看文本,您必须创建一个所谓的“资源包”。详细信息如下 - 它只是一个文件。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE listofactions SYSTEM "actions.dtd">
<listofactions>
<objecttype name="gbactiontype1" resourceBundle="com.gb.actions.GbActions1rb">
<action name="gbaction1">
<!—call function in a java class: -->
<!-- <command class="com.gb.actions.GbActionA" method="exec"/> -->
<!— or display a jsp site in a popup window: -->
<command url="netmarkets/jsp/gbactiontype1/gbaction1.jsp" windowType="popup"/>
<supportedTypes>
<!-- add this if you want to the action to be displayed for wtparts -->
<type value="wt.part.WTPart"/>
<!-- ECN (for change notices) -->
<type value="wt.change2.WTChangeOrder2"/>
<!-- for documents -->
<type value="wt.doc.WTDocument" />
</supportedTypes>
</action>
</objecttype>
</listofactions>
$windchill\codebase\config\actions\PartClient-actionmodels.xml:
我在这里放置了对上面定义的操作的引用
<!-- Part information page Actions list -->
<model name="more parts actions" menufor="wt.part.WTPart">
<action name="gbaction1" type="gbactiontype1"/>
...
$windchill/src/com/gb/actions/GbActions1rb.rbInfo 中的资源包文件:
ResourceInfo.class=wt.tools.resource.StringResourceInfo
ResourceInfo.customizable=false
ResourceInfo.deprecated=false
gbactiontype1.gbaction1.description.value=menutext gbaction1
#doc: Note that icons for actions in the menus are only displayed for actions that also display in the toolbar
#gbactiontype1.gbaction1.tooltip.value=tooltip gbaction1
#relative to <windchill>/netmarkets/images?
#gbactiontype1.gbaction1.icon.value=multi_update.gif
gbactiontype1.gbaction1.icon.value=../../wtcore/images/gb/gb.png
从上面显示的 custom-actions.xml 中取消注释时触发的 java 源(配置的 'exec' 方法必须是public static
显示的参数NmCommand
Bean):
public class GbActionA extends JCAAction {
private static final Logger logger = LogR.getLogger(GbActionA.class.getName());
public GbActionA(ActionDefinition ad) {
super(ad); //never called?
}
public static void exec(NmCommandBean cmdBean) {
System.out.println("### GbActionA exec ###");
//how to get the WTPart:
cmdBean.getActionOid().getOidObject(); //ie. wt.part.WTPart:681208
...
}
...
}
您必须从 Windchill shell(设置了多个环境变量的命令行)编译代码和资源文件:
windchill shell> ant -f bin\tools.xml class -Dclass.includes=com/gb/** -Dclass.force=true
完成此操作后,您可以重新启动 windchill 服务或(更快)在此处重新加载所有操作:
如果您更喜欢触发 jsp 页面:
jsp 文件的路径在 custom-actions.xml 中命令标记的 url 属性中给出(见上文):
<html>
<head>
<link rel="stylesheet" href="../../netmarkets/css/windchill-base.css">
<link rel="stylesheet" href="../../netmarkets/themes/windchill/xtheme-windchill.css">
</head>
<body>
<hr>
<%@ page import = "java.util.Map" %>
<%@page import="java.util.Enumeration"%>
<%@page import="java.lang.Exception"%>
<% request.setAttribute("hulla","true"); %><br>
<% out.println("hulla is " + request.getAttribute("hulla")); %><br>
<%
Enumeration e = request.getParameterNames();
while(e.hasMoreElements()) {
String paramName = e.nextElement().toString();
out.println(paramName + " = " + request.getParameter(paramName)+"<br>");
}
%>
<hr>
</body>
</html>
我添加了一些代码来获取参数名称。最有趣的可能是
oid
。在我的测试中,该参数包含VR:wt.part.WTPart:626136
.
设置 tomcat mode=dev 强制每次交付前编译jsp:
windchill shell> ant -f WindchillConfigAssistant.xml configureTomcat
此命令要求您设置模式。dev
如果要在交付前编译 jsp 并prod
在生产模式下编译,则设置为。
我猜您正在尝试在零件信息页面的菜单下创建一个操作。您添加操作按钮的方法不是 PTC 推荐的方法。虽然它会起作用,但您的自定义设置将在升级过程中变得难以维护。
尝试以下步骤来添加一个操作按钮来调用您的 java 代码
jcaDebug
通过在浏览器上启用来查找菜单的操作模型。custom-action.xml
并custom-actionmodels.xml
添加您的动作模型并定义您的动作。这基本上会覆盖 ootb 操作条目。Windchill 帮助中心对此 https://support.ptc.com/help/windchill/whc/whc_en/#page/Windchill_Help_Center%2FWCCG_UICust_AddActionsHook_WCClientArchAction.html有详细的过程