客户端自定义
自定义功能区 UI
1. 找到下列文件:
<Windchill>\codebase\com\ptc\windchill\enterprise\nativeapp\msoi\client\custom\wtCustomMenu.xml
2. 将下列文本添加到该文件中:
<?xml version="1.0"?>
<groups>
<group id="ExcelActionsGroup" tag="ExcelActionsGroup"
label="Excel actions group"
screentip="Custom Excel actions group" visible="true">
<button id="SearchParts" tag="SearchParts" enabled="true" label="Search parts" screentip="Sample custom action to search parts on the Windchill server." getImage="MsoiGetImage" onAction="MsoiOnAction" keytip="sp"/>
</group>
</groups>
下次运行 Microsoft Excel 的 Windchill Desktop Integration 客户端连接到此服务器时,更新的功能区 UI 定义将下载到客户端缓存中。
3. 关闭 Microsoft Excel 并重启。此步骤是必需的,因为 Windchill 加载项将在 Microsoft Office 应用程序 (Excel) 中加载,即使在连接到任何 Windchill 服务器之前也是如此。在第二次启动 Microsoft Excel 时,应会显示一个新组和一个操作:
创建自定义命令
现在,您必须实现所引入的自定义操作。配置命令时需要定义一组在单击功能区控件时将调用的操作。
tag 控件的 SearchParts 属性应与命令键相匹配。这就是 Windchill Desktop Integration 使用命令在功能区 UI 上建立与自定义控件的关联的方式。
根据示例说明,命令必须执行以下操作:
1. 从 Microsoft Excel 工作表读取标题值。
2. 发送要发送至服务器的特性名称。
3. 再次将响应送入工作表。
导航至下列文件:
<Windchill>\codebase\com\ptc\windchill\enterprise\nativeapp\msoi\client\custom\wtCustomActions.xml
将下列文本添加到该文件中:
<?xml version="1.0"?>
<commandset>
<command key="SearchParts">
<action method="run_macro" type="CLIENT">
<defaultdata key="macro_name">GetHeaders</defaultdata>
</action>
<action serverAction="customization.DTICustomizationDemo" type="WIZARD"/>
<action method="run_macro" type="CLIENT">
<defaultdata key="macro_name">PutValues</defaultdata>
<defaultdata key="macro_args"/>
</action>
</command>
</commandset>
现在,您有两个客户端操作,且在这两者之间有一个服务器操作。
运行宏
在此示例中,单元格 A1-D1 由查询部件时所需的特性进行填充:
1. 引入一个仅使用分隔符连接这四个单元格的文本的宏。
| 宏的名称 GetHeaders 必须与操作配置数据参数 macro_name 相匹配。 |
2. 创建另一个宏,此宏随后会从服务器拾取响应,并将其填充到工作表中。根据操作配置,必须将此宏命名为 PutValues。Microsoft Excel 工作簿的 VBA 代码现如以下示例所示:
请注意,上述 PutValues 宏中的代码只会生成一条警报消息,其中包含从 Windchill 服务器接收到的自定义响应。实际上,此代码可以执行复杂的操作,例如为某些单元格生成内联验证下拉列表。
'A reference to msxml6.dll is needed
Dim dom As New DOMDocument60
dom.LoadXML (strResponse)
'Using xpath, construct a csv list of choices for the number
Dim strNumberChoices As String
For Each elem In dom.SelectNodes("/Results/*/Number")
strNumberChoices = strNumberChoices & "," & elem.Text
Next
'Remove initial comma
strNumberChoices = Strings.Right(strNumberChoices, Len(strNumberChoices) - 1)
With Range("C1").Validation
'Remove previous validation (likely that user redoing a seed part search)
.Delete
.Add Type:=xlValidateList, _
AlertStyle:=xlValidAlertStop, _
Operator:=xlBetween, _
Formula1:=strNumberChoices
End With