- 下例显示了用 C# 编写Task Add-in 的完整源代码。
- 使用 C# 类库 (.NET Framework) 创建 Visual Studio 中的项目。
- 实现 IEdmAddIn5。
- 在“任务属性”对话框中创建自定义页。
- 自定义任务详细信息页面。
注意: 若要填充下面的 GUID 属性,请在 IDE 中单击“工具”>“创建 GUID”,选择“GUID 格式 5”,单击“复制”,然后单击“退出”。用复制的字符串替换 [Guid("")]。
- 启动VS。
- 新建项目,选择类库。
- 在“解决方案资源管理器”中右键单击项目名称 ,然后单击添加引用。
-
在 左侧面板单击 浏览 ,选择EPDM.Interop.epdm,然后单击添加。
- 如果需要,引入相关的程序集。
-
- 在“解决方案资源管理器”中右击项目名称,然后单击“属性”。
- “应用程序>程序集信息”。
- 取消勾选“使程序集 COM 可见(M)”。
- 修改Class1.cs。这里修改类名为TaskAddin.cs。
- 添加和创建GUID。
- 修改代码
using System;
using System.Runtime.InteropServices;//添加
using System.Windows;
using EPDM.Interop.epdm;
namespace Task_Add_in
{
[Guid("6EC3D9F8-D202-45A5-8F12-3EB5DED97A7E"), ComVisible(true)]
public class TaskAddin : IEdmAddIn5
{
}
}
-
对EdmCmdType.EdmCmd_TaskSetup、EdmCmd_TaskSetupButton、EdmCmd_TaskRun、EdmCmd_TaskDetails进行处理
using System; using System.Runtime.InteropServices;//添加 using System.Windows; using EPDM.Interop.epdm; namespace Task_Add_in { [Guid("6EC3D9F8-D202-45A5-8F12-3EB5DED97A7E"), ComVisible(true)] public class TaskAddin : IEdmAddIn5 { public void GetAddInInfo(ref EdmAddInInfo poInfo, IEdmVault5 poVault, IEdmCmdMgr5 poCmdMgr) { try { poInfo.mbsAddInName = "My Text Add-in"; poInfo.mbsCompany = "Dassault Systemes"; poInfo.mbsDescription = "Example demonstrates a task that finds files that have been in selected workflow states a selected number of days"; poInfo.mlAddInVersion = 1; //Minimum SOLIDWORKS PDM Professional version needed for Tasks is 10.0 poInfo.mlRequiredVersionMajor = 10; poInfo.mlRequiredVersionMinor = 0; //Register to call OnCmd on task-related events poCmdMgr.AddHook(EdmCmdType.EdmCmd_TaskSetup); //EdmCmd_TaskSetup,40 = Use this hook to add a task setup page to a task properties dialog box wizard,钩子将Task设置页添加到任务属性对话框向导 poCmdMgr.AddHook(EdmCmdType.EdmCmd_TaskSetupButton);//EdmCmd_TaskSetupButton,41 = OK or Cancel was clicked in the task properties dialog box wizard,在任务属性对话框向导中单击了“确定”或“取消” poCmdMgr.AddHook(EdmCmdType.EdmCmd_TaskRun);//EdmCmd_TaskRun,43 = This hook is called on the task server; you should perform the actual work there,钩子在任务服务器上调用;你应该在那里执行实际工作 poCmdMgr.AddHook(EdmCmdType.EdmCmd_TaskDetails);//EdmCmd_TaskDetails,42 = Use this hook to add your own custom page to the task details dialog box in the task list 钩子将您自己的自定义页面添加到任务列表中的任务详细信息对话框中 } catch (System.Runtime.InteropServices.COMException ex) { MessageBox.Show("HRESULT = 0x" + ex.ErrorCode.ToString("X") + ex.Message); } catch (Exception ex) { MessageBox.Show(ex.Message); } } public void OnCmd(ref EdmCmd poCmd, ref EdmCmdData[] ppoData) { try { switch (poCmd.meCmdType) { case EdmCmdType.EdmCmd_TaskSetup: OnTaskSetup(ref poCmd, ref ppoData); break; case EdmCmdType.EdmCmd_TaskSetupButton: OnTaskSetupButton(ref poCmd, ref ppoData); break; case EdmCmdType.EdmCmd_TaskRun: OnTaskRun(ref poCmd, ref ppoData); break; case EdmCmdType.EdmCmd_TaskDetails: OnTaskDetails(ref poCmd, ref ppoData); break; } } catch (System.Runtime.InteropServices.COMException ex) { MessageBox.Show("HRESULT = 0x" + ex.ErrorCode.ToString("X") + ex.Message); } catch (Exception ex) { MessageBox.Show(ex.Message); } } private void OnTaskDetails(ref EdmCmd poCmd, ref EdmCmdData[] ppoData) { MessageBox.Show("hook type :EdmCmdType.EdmCmd_TaskDetails\n" + "OnTaskDetails is called"); } private void OnTaskRun(ref EdmCmd poCmd, ref EdmCmdData[] ppoData) { MessageBox.Show("hook type :EdmCmdType.EdmCmd_TaskRun\n" + "OnTaskRun is called"); } private void OnTaskSetup(ref EdmCmd poCmd, ref EdmCmdData[] ppoData) { MessageBox.Show("hook type :EdmCmdType.EdmCmd_TaskSetup\n" + "OnTaskSetup is called"); } private void OnTaskSetupButton(ref EdmCmd poCmd, ref EdmCmdData[] ppoData) { MessageBox.Show("hook type :EdmCmdType.EdmCmd_TaskSetupButton\n" + "OnTaskSetupButton is called"); } } }
- 安装生成的Add-in。
- 打开PDM 管理工作。
- 登录。
- 在插件中添加新插件。
- 管理 -> 任务 -> 新建任务 -> 输入任务名称
- -> 选择 My Task Add-in ,消息类型为EdmCmdType.EdmCmd_TaskSetup
- -> 点击确定或取消,消息类型为EdmCmdType.EdmCmd_TaskSetupButton
- 任务 -> 任务列表 -> 选择任务 -> 选择细节,消息类型为EdmCmdType.EdmCmd_TaskDetails
- 设置任务后启动客户端,设置任务主机,当任务运行时,消息类型为EdmCmdType.EdmCmd_TaskSetupButton
任务 -> 任务列表 -> 选择任务 -> 选择细节,消息类型为EdmCmdType.EdmCmd_TaskDetails 这一步不清楚为什么有时候触发不了函数