Task Add-in Sample (C#)

  1. 下例显示了用 C# 编写Task Add-in 的完整源代码。
  • 使用 C# 类库 (.NET Framework) 创建 Visual Studio 中的项目。
  • 实现 IEdmAddIn5。
  • 在“任务属性”对话框中创建自定义页。
  • 自定义任务详细信息页面。

注意: 若要填充下面的 GUID 属性,请在 IDE 中单击“工具”>“创建 GUID”,选择“GUID 格式 5”,单击“复制”,然后单击“退出”。用复制的字符串替换 [Guid("")]。


  1. 启动VS。
  2. 新建项目,选择类库。                                    
  3. 在“解决方案资源管理器”中右键单击项目名称 ,然后单击添加引用。
    1. 在 左侧面板单击 浏览 ,选择EPDM.Interop.epdm,然后单击添加

    2. 如果需要,引入相关的程序集。
  4. 在“解决方案资源管理器”中右击项目名称,然后单击“属性”。
    1. “应用程序>程序集信息”。                         
    2. 取消勾选“使程序集 COM 可见(M)”。                         
  5. 修改Class1.cs。这里修改类名为TaskAddin.cs。
    1.  添加和创建GUID。
    2. 修改代码
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
    {

    }
}

  1. 对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");
            }
        }
    }
  2. 安装生成的Add-in。
    1. 打开PDM 管理工作。
    2. 登录。
    3. 在插件中添加新插件。
  3. 管理 -> 任务  ->  新建任务   ->  输入任务名称 
    1. -> 选择 My Task Add-in ,消息类型为EdmCmdType.EdmCmd_TaskSetup
    2. -> 点击确定或取消,消息类型为EdmCmdType.EdmCmd_TaskSetupButton
    3. 任务 -> 任务列表 -> 选择任务 -> 选择细节,消息类型为EdmCmdType.EdmCmd_TaskDetails
    4. 设置任务后启动客户端,设置任务主机,当任务运行时,消息类型为EdmCmdType.EdmCmd_TaskSetupButton             

     

     


    任务 -> 任务列表 -> 选择任务 -> 选择细节,消息类型为EdmCmdType.EdmCmd_TaskDetails  这一步不清楚为什么有时候触发不了函数


https://download.csdn.net/download/hd51cc/87893987

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/27810.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

软考A计划-系统架构师-学习笔记-第三弹

点击跳转专栏>Unity3D特效百例点击跳转专栏>案例项目实战源码点击跳转专栏>游戏脚本-辅助自动化点击跳转专栏>Android控件全解手册点击跳转专栏>Scratch编程案例点击跳转>软考全系列 👉关于作者 专注于Android/Unity和各种游戏开发技巧&#xff…

Redis 持久化机制

Redis 是个基于内存的数据库。那服务一旦宕机,内存中数据必将全部丢失。所以丢失数据的恢复对于 Redis 是十分重要的,我们首先想到是可以从数据库中恢复,但是在由 Redis 宕机时(说明相关工作正在运行)且数据量很大情况…

上课补充的知识

题目 char类型的默认值是\u0000 数组的创建方式 数组的遍历 遍历:从头到尾,依次访问数组每一个位置,获取每一个位置的元素.形式如下: 我们通过数组的下标操作数组,所以for循环变量操作的也是数组下标 开始:开始下标0 结束:结束下标length-1 如何变化: 语法: for…

软考A计划-系统架构师-学习笔记-第二弹

点击跳转专栏>Unity3D特效百例点击跳转专栏>案例项目实战源码点击跳转专栏>游戏脚本-辅助自动化点击跳转专栏>Android控件全解手册点击跳转专栏>Scratch编程案例点击跳转>软考全系列 👉关于作者 专注于Android/Unity和各种游戏开发技巧&#xff…

【java】IO流

IO流 原理 分类 字节流与字符流 节点流与包装流 Java IO详解(五)------包装流 - YSOcean - 博客园 (cnblogs.com)JAVA I/O流 字符流和字节流、节点流和处理流(包装流、过滤流)、缓冲流_过滤流和缓冲流,字节流的关系_X-Dragon烟雨任平生的博客-CSDN博客 字符流 i…

Redis常见问题、各个分布式锁优缺点-05

Redis集群为什么至少需要三个master节点,并且推荐节点数为奇数? 因为新master的选举需要大于半数的集群master节点同意才能选举成功,如果只有两个master节点,当其中一个挂了,是达不到选举新master的条件的。 奇数个ma…

【Linux】 -- TCP协议 (一)

TCP协议 Tcp协议可靠性冯诺依曼体系结构 TCP的协议格式序号与确认序号窗口大小六个标志位 确认应答机制 (ACK)超时重传机制连接管理机制 Tcp协议 TCP全称为 “传输控制协议”(Transmission Control Protocol) TCP协议被广泛应用…

C语言---形参所导致的段错误

前言 今天刷B站&#xff0c;无意之间看到一个宣称90%人都会错的嵌入式面试题。感兴趣就看了一下。卡了十多分钟才想明白&#xff0c;只是一个小知识点&#xff0c;但还是分享一下。 题目 #include <stdio.h> #include <stdlib.h> #include <string.h>void g…

信道编码的基本概念

本专栏包含信息论与编码的核心知识&#xff0c;按知识点组织&#xff0c;可作为教学或学习的参考。markdown版本已归档至【Github仓库&#xff1a;https://github.com/timerring/information-theory 】或者公众号【AIShareLab】回复 信息论 获取。 文章目录 信道编码信道编码的…

Spring,注解开发

Spring是一个轻量级的控制反转&#xff08;IOC&#xff09;和面向切面编程&#xff08;AOP&#xff09;的框架 1、组成 spring七大模块详解 2、IOC理论推导 传统的开发 (pojo层、DAO层和业务层&#xff09; &#xff08;1&#xff09;UserDao &#xff08;2) UserDaoImpl (3)…

CSS基础学习--5 background背景

一、介绍&#xff1a; CSS 背景属性用于定义HTML元素的背景。 CSS 属性定义背景效果: background-color 背景颜色background-image 背景图片background-repeatbackground-attachmentbackground-position 二、属性 2.1、background-color 属性定义了元素的背景颜色 <s…

位图以及布隆过滤器

本文主要讲解哈希思想的实际应用&#xff0c;位图和布隆过滤器。 位图 讲解位图之前我们先来解答这样一道腾讯的面试题 给40亿个不重复的无符号整数&#xff0c;没排过序。给一个无符号整数&#xff0c;如何快速判断一个数是否在这40亿个数中。【腾讯】 很多人立马就想到了用…

【零基础学机器学习 5】机器学习中的分类:什么是分类以及分类模型

&#x1f468;‍&#x1f4bb; 作者简介&#xff1a;程序员半夏 , 一名全栈程序员&#xff0c;擅长使用各种编程语言和框架&#xff0c;如JavaScript、React、Node.js、Java、Python、Django、MySQL等.专注于大前端与后端的硬核干货分享,同时是一个随缘更新的UP主. 你可以在各个…

Shell编程循环语句(for、while、until)

目录 一、for 循环 1.用法和特点 2.执行指定次数 3.遍历和迭代 &#xff08;1&#xff09;遍历 &#xff08;2&#xff09;迭代 4.操作实例 二、 while 循环 1.用法和特点 2.操作实例 三、until 循环 1.用法和特点 2.操作实例 一、for 循环 1.用法和特点 读取不…

【动态规划专栏】-- 01 背包问题 -- 动态规划经典题型

目录 背包问题概述 01 背包问题 01背包⭐⭐ 【算法原理】 第一问 第二问 C 算法代码 复杂度分析 【空间优化 - 滚动数组】 C 算法代码 复杂度分析 分割等和子集⭐⭐ 【算法原理】 对于类01背包问题 C 算法代码 【空间优化 - 滚动数组】 C 算法代码 目标和…

常见网络服务器并发模型

近些年&#xff0c;随着互联网的大发展&#xff0c;高并发服务器技术也快速进步&#xff0c;从简单的循环服务器模型处理少量网络并发请求&#xff0c;演进到解决C10K&#xff0c;C10M问题的高并发服务器模型。本文主要以TCP为例&#xff0c;总结了几种常见的网络服务器模型的实…

Java注解的入门学习

一、概念 Java注解是一种元数据形式&#xff0c;可以被添加到Java代码中的各种元素&#xff08;类、方法、字段等&#xff09;上&#xff0c;以提供关于这些元素的额外信息。注解是在Java 5中引入的一项特性&#xff0c;它们不直接影响代码的执行&#xff0c;而是提供了一种机…

本周大新闻|Vision Pro头显重磅发布;苹果收购AR厂商Mira

本周XR大新闻&#xff0c;上周Quest 3发布之后&#xff0c;本周苹果MR头显Vision Pro正式发布&#xff0c;也是本周AR/VR新闻的重头戏。 ​AR方面&#xff0c;苹果发布VST头显Vision Pro&#xff08;虽然本质是台VR&#xff0c;但以AR场景为核心&#xff09;以及visionOS&…

【三、网络配置与系统管理】

1 网络配置 ifconfig 显示网络接口的配置信息 [rootredis100 ~]# ifconfig ens33: flags4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500inet 192.168.10.100 netmask 255.255.255.0 broadcast 192.168.10.255inet6 fe80::f5c3:6a96:fe05:1965 prefixlen 64 scop…

如何使用Docker实现分布式Web自动化!

1、前言 顺着docker的发展&#xff0c;很多测试的同学也已经在测试工作上使用docker作为环境基础去进行一些自动化测试&#xff0c;这篇文章主要讲述在docker中使用浏览器进行自动化测试如果可以实现可视化&#xff0c;同时可以对浏览器进行相关的操作。 如果你想学习自动化测…