0

我们想在部件视图中添加一个命令(按钮、菜单项、上下文菜单中的条目或类似的条目)来执行 Java 代码。在 Java 代码中应该有对该部分的引用。

我们尝试在 psb-actionmodels.xml 和 cat-actions.xml 中添加条目但没有成功 - 没有出现菜单项。

我们缺少什么?

在此处输入图像描述

4

2 回答 2

1

阅读文档(艰苦的工作)

感谢 Vignesh Vino 告诉我阅读文档......

我确实阅读了它。我以前读过它,但我迷路了。阅读并不是那么容易,因为(在我看来)文档没有深入到足以从中获得好的例子。
有了这个答案,我想分享我学到的东西。如果我错了或者您知道更多详细信息,请发表评论。
$windchill 是您的安装路径。

自定义actions.xml

$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

Java 源代码

从上面显示的 custom-actions.xml 中取消注释时触发的 java 源(配置的 'exec' 方法必须是public static显示的参数NmCommandBean):

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
        ...
    }
    ...
}

编译java源码

您必须从 Windchill shell(设置了多个环境变量的命令行)编译代码和资源文件:

windchill shell> ant -f bin\tools.xml class -Dclass.includes=com/gb/** -Dclass.force=true

重启服务器

完成此操作后,您可以重新启动 windchill 服务或(更快)在此处重新加载所有操作:
在此处输入图像描述

重新加载 WTPart 信息页面并在此处找到您的菜单:
在此处输入图像描述

JSP

如果您更喜欢触发 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模式

设置 tomcat mode=dev 强制每次交付前编译jsp:

windchill shell> ant -f WindchillConfigAssistant.xml configureTomcat

此命令要求您设置模式。dev如果要在交付前编译 jsp 并prod在生产模式下编译,则设置为。

于 2021-03-12T11:53:28.690 回答
0

我猜您正在尝试在零件信息页面的菜单下创建一个操作。您添加操作按钮的方法不是 PTC 推荐的方法。虽然它会起作用,但您的自定义设置将在升级过程中变得难以维护。

尝试以下步骤来添加一个操作按钮来调用您的 java 代码

  • jcaDebug通过在浏览器上启用来查找菜单的操作模型。
  • 使用这些文件custom-action.xmlcustom-actionmodels.xml添加您的动作模型并定义您的动作。这基本上会覆盖 ootb 操作条目。

Windchill 帮助中心对此 https://support.ptc.com/help/windchill/whc/whc_en/#page/Windchill_Help_Center%2FWCCG_UICust_AddActionsHook_WCClientArchAction.html有详细的过程

于 2021-03-09T05:39:14.323 回答