最近给几个CRM软件配套开发了Outlook插件,讲讲Outlook插件开发注意事项
原始出处:www.cnblogs.com/Charltsing/p/OutlookAddinsTips.html
联系QQ:564955427
从去年到现在,写了四五个Outlook插件,其中两个是给CRM系统配套使用的,代码经过两三次迭代,目前基本结构相对比较稳定,所以简单说说,做个总结。
开发环境
1、不要使用VSTO开发Outlook插件,除非你是在企业内部使用,有专门的IT管理员可以确保每台电脑安装环境的统一。否则5%的电脑部署不上。
2、推荐使用Com Addins或者一些第三方开源或者商业框架开发Outlook。
3、如果需要操作MAPI或者更底层的东西,推荐使用Redemption库(收费)。
4、C#开发Outlook插件依赖Com对象,这会给开发带来一些限制。
关于Outlook
1、不要相信Outlook里面提供的事件会像想象的那样工作,你只有亲自测试,才会知道这里面有多大的坑。(例如邮件到达事件和同步事件)
2、时刻记住Outlook对邮件的各种操作都是异步的,理解这一点,你才会知道为什么某些代码工作起来不太对劲。
3、Outlook的Ribbon回调与Office其他的程序不同,可以根据不同的界面加载不同的xml,所以它支持动态更新菜单。
4、Outlook的窗格需要包装再调用创建,具体参考MSDN;修改Forms也请参考MSDN。
5、Outlook的自定义字段是有bug的,反复修改保存会导致Outlook提示邮件被占用,需要等候一段时间重试或重启Outlook。这个问题从2013的某个更新之后开始出现,到Office365依然存在。
6、Outlook对插件的启动和退出要求比较严格,对占用事件较长的插件都会禁用,因此如果你想在插件启动的时候做初始化,建议使用子线程,同时注意跨线程操作Outlook的UI问题。
7、从Outlook 2010开始,默认情况下,Outlook不会调用IDTExtensibility2接口的OnBeginShutdown和OnDisconnection,这是为了确保Outlook可以快速关闭。如果要改变这个默认设置,需要增加插件的注册表设置。
8、在加载项管理器里面去掉勾选再勾上和Outlook启动时加载插件的行为不一致,注意CTPFactoryAvailable的执行顺序。
9、小心处理内存泄漏问题。
下面是我开发的Outlook插件基本功能演示界面

最近给几个CRM软件配套开发了Outlook插件,讲讲Outlook插件开发注意事项的更多相关文章
- JEPF 3.1.2 发布,我们的软件机床(软件快速开发平台)
JEPF新一代软件快速开发平台(Java Elephant Platform)是一款优秀的平台产品,它本着灵活.快捷开发.高性能.高协作性.高稳定性.高可用性.人性化的操作体验为设计宗旨历经2年研发成 ...
- 欲实施CRM软件,必须先懂什么是CRM软件
CRM是Customer Relationship Management(客户关系管理)的缩写,它是利用信息科学技术,实现市场营销.销售.服务等活动自动化,使企业能更高效地为客户提供满意.周到的服务, ...
- 软件快速开发平台 JEPF
JEPF新一代软件快速开发平台(Java Elephant Platform)是一款优秀的平台产品,它本着灵活.快捷开发.高性能.高协作性.高稳定性.高可用性.人性化的操作体验为设计宗旨历经2年研发成 ...
- 推荐几个最好用的CRM软件,本人亲测
CRM是英文Customer Relationship Management 的简写,一般译作“客户关系管理”.CRM最早产生于美国,由Gartner Group 首先提出的CRM这个概念的.20世纪 ...
- 简单5步说清App软件在线开发、App制作多少钱?
开发制作一款App,所有人都会首先关心开发一款App多少钱这个问题.从网上的信息来看,花费个几十万是很正常的事情,甚至有人说要花上百万才能制作出一款App.那么App软件的开发制作到底和什么有关?怎么 ...
- [转]3天搞定的小型B/S内部管理类软件定制开发项目【软件开发实战10步骤详解】
本文转自:http://www.cnblogs.com/jirigala/archive/2010/10/07/1845275.html 2010-10-07 21:39 by 通用C#系统架构, 5 ...
- 小黄豆CRM软件安装
小黄豆CRM软件(官方网址:http://www.xhdcrm.com,演示地址:http://demo.xhdcrm.com)是一款开源免费的客户关系管理系统,其客户跟进模块简单易用.安装环境是wi ...
- 勤拂拭软件Android开发之旅(1) 之 Android 开发环境搭建
勤拂拭软件工作室原创出品,欢迎转载,欢迎交流. 转载请注明原文:http://www.cnblogs.com/wangleiblog/p/6019063.html 勤拂拭软件Android开发之旅目录 ...
- 云计算CRM软件厂商,你青睐哪家?
2018年CRM系统软件市场风起云涌,国内外厂商群雄逐鹿.2019年,新一轮的角逐已然展开.据Gartner报告称,CRM客户关系管理系统在2017年全球的销售额首次超越数据库管理系统((Databa ...
随机推荐
- Python内置函数清单
作者:Vamei 出处:http://www.cnblogs.com/vamei Python内置(built-in)函数随着python解释器的运行而创建.在Python的程序中,你可以随时调用这些 ...
- orm之peewee
peewee是一款orm框架,为什么选择peewee,是因为它比较简单和Django比较类似,而且还有一个async-peewee,可以进行异步化. 如何定义model和生成表 ''' 我们要定义两张 ...
- 3.flask核心与源码剖析
1.session session存储了特定用户会话所需的属性及配置信息,这样,当用户在应用程序的 Web 页之间跳转时,存储在 session 对象中的变量将不会丢失,而是在整个用户会话中一直存在下 ...
- deep_learning_Function_bath_normalization()
关于归一化的讲解的博客——[深度学习]Batch Normalization(批归一化) tensorflow实现代码在这个博客——[超分辨率]TensorFlow中批归一化的实现——tf.layer ...
- pkg-config --libs libusb-1.0
pkg-config --libs libusb-1.0 pkg-config --libs libusb-1.0 pkg-config --libs libusb-1.0
- tp5中的return
return 可以输出对象,但是不可以输出数组 class Index { public function index(Student $student) { $data = $student-> ...
- Acwing-274-移动服务(DP)
链接: https://www.acwing.com/problem/content/276/ 题意: 一个公司有三个移动服务员,最初分别在位置1,2,3处. 如果某个位置(用一个整数表示)有一个请求 ...
- 初学者的springmvc笔记02
springmvc笔记 springmvc拦截器,spring类型转换,spring实现文件上传/下载 1.SpringMVC标准配置 导入jar包:core contaner 在web.xml文件中 ...
- Phaserjs怎样用ES6开发游戏
想用ES6语法开发phaserjs游戏,是phaserCE,但是不知道怎么导入,总是报错,后来经过多次尝试,解决方法如下: 干脆不导入,直接暴露到window里,然后模块化的代码全部在window.o ...
- Mybatis中通过父类/接口来限定类的别名(TypeAlias)配置