基于Outlook的知识分享小工具

     最近因为部分资深开发人员抱怨,基于Sharepoint的Knowhow管理系统填写太复杂,代码没有高亮等等各种吐槽。隐含意思其实不想写Knowhow,但这种话没人明讲,讨论起来大家信誓旦旦宣称有道笔记、为知笔记如何好用,自己都是随手记,回家还可以用手机看代码......反正现在写着不爽! 相信很多人都遇到类似的场景,国人对于技术分享、经验积累这种事情,无论如何威逼利诱,总是会有种种理由挣扎。工具不是最重要的,但工具能成为借口。

     于是,从善如流地将如何提高写Knowhow的友好性摆上工作议程。最简单最习惯的操作是什么?想来想去,想到Outlook!!邮件几乎是标准配置,大家都非常习惯利用Outlook写各种内容,包括回答问题、总结方案,其中有非常多的内容属于某个意义上的Knowhow。基于Outlook来进一步完善知识管理的基本思路就此成形:

     1)邮件作为基本的写作格式载体,与日常的交流一样。

     2)邮件发到项目邮件组,要求subject中必须加前缀,如[knowhow]、[lessons]、[summary]等

     3)利用Outlook宏工具自动采集,每次打开Outlook时自动执行,将采集的邮件内容存放到网站数据库中。网站自带的搜索功能作为一个查询的工具。

 当然,通过说明subject的写法,这个方案顺利得到了所有成员的支持,几乎没有理由拒绝发邮件嘛。

 现在,我们着重讲讲outlook编写中的几个技术点

主脚本处理思路

 1)创建一个按钮,用于触发邮件收集事件。按钮就叫“Mail Collect”

 2)在按钮事件中开始对收件箱中的邮件内容进行遍历,按照一定的规则(什么邮件内容可以作为Knowhow采集存储)采集正文内容

 3)写一个过程,将邮件内容存储到数据库中,包括subject、邮件发送人、正文内容等,附件内容作为文件单独保存

 4)如果希望更完美一点,可以加个分词模块、代码识别模块,这些可以一步步加。

Outlook里的脚本 (本不想写,VBA实在太多资料了,不过还是记上点关键的)

增加按钮

这部分直接从网上找到,非原创,如有雷同,巧合.....

Sub addTotalButton()

   On Error Resume Next

  Dim vsoCommandBar As CommandBar

    '得到要添加的工具栏

  Set vsoCommandBar = Outlook.ActiveExplorer.CommandBars("ExcelClub")

'如果工具栏为空,则增加

    If (vsoCommandBar Is Nothing) Then
         Set vsoCommandBar = Outlook.ActiveExplorer.CommandBars.Add("ExcelClub", msoBarTop)
         Set vsoCommbandButton = vsoCommandBar.Controls.Add(1)'在工具栏上增加一个按钮
         vsoCommbandButton.Caption = "Mail Collect"   '按钮的名字
         '按钮显示的图标
           vsoCommbandButton.FaceId = 65
          '按钮显示的类型是图标和文本都显示
          vsoCommbandButton.Style = msoButtonIconAndCaption
          vsoCommandBar.Visible = True  '显示增加的工具栏
   Else
          vsoCommandBar.Delete
 End If

End Sub

邮件遍历

 遍历收件箱中的邮件,首先需要创建一个命名空间 Outlook.Application.GetNamespace("MAPI")  注意,MAPI接口是由微软公司提供的一系列供使用者开发Mail、Scheduling、bulletin board、communication程序的编程接口。利用它来建立一个session,然后获得邮箱默认文件夹对象,对文件夹对象里的Items进行遍历。基础代码如下:

Set nmsName = Outlook.Application.GetNamespace("MAPI")  '得到Outlook的命名空间
Set inFolder = nmsName.GetDefaultFolder(Outlook.olFolderInbox) '得到inbox目录
'遍历inbox里的邮件
For Each mail In inFolder.Items
'如果class等于43,表示这是一封邮件;如果class等于53,表示这是一个日历,如果你有兴趣,可以玩一玩日历。
If mail.Class = 43 Then
    Set m = mail  '获取到邮件对象
     x = m.SenderName '取发件人的名称
     y = m.Recipients  ‘收件人
     z = m.Subject   ’主题
     body=m.Body   ‘正文
'----规则检查,识别出属于Knowhow内容的邮件-----------

 'Rulescheck具体内容省略,大家可以根据自己的需求设置,无非就是收件人,发件人、subject前缀检查或正文内容搜索等
  If RuleCheck(x,y,z,body) then
     SavetoKnowhowDatabase(m)
  End If
End If

Next

保存内容到数据库 SavetoKnowhowDatabase

如果借助Sharepoint的二次开发API来实现无缝对接,工作量会比较大。由于之前对Sharepoint库表结构有所了解,加上不想投入太多精力,这里采用了直接操作sharepoint数据库的形式。这种方式不建议,风险很大,不过因为目前的sharepoint用途很单一,独立的,所以就这么干了。

更好的方式,建议大家找一个CMS系统或类似zblog的系统,他们的数据库结构简单,直接操作数据库没有任何风险。

知识库Web端的查询与展示

如果能在保存时对subject内容进行分词,然后形成关键字,在Web端利用搜索功能就能很方便的组织内容展示方式,一般CMS都具备这样的功能。不再累述。

posted @ 2012-08-03 16:04  美瑞网  阅读(725)  评论(0编辑  收藏  举报