Exchange服务器之用webdav实现从DominoOA到Exchange的日程同步.
白羽 2018-08-13 来源 :网络 阅读 801 评论 0

摘要:本文将带你了解Exchange服务器之用webdav实现从DominoOA到Exchange的日程同步.,希望本文对大家学Exchange有所帮助。

        本文将带你了解Exchange服务器之用webdav实现从DominoOA到Exchange的日程同步.,希望本文对大家学Exchange有所帮助。


 
一、功能点说明:
    在EKP的个人日程中添加日程,可同步到EXCHANGE。
EXCHANGE:微软的邮件服务器平台,早前用于与DOMINO竞争。自带exchange的工作流,提供CDO,WEBDAV等多种开发接口。
适用场景:客户已有或较依赖于EXCHANGE的使用,从EXCHANGE转换到DOMINO的OA平台。
其他同理可实现功能:邮件,通讯录同步等等。基本都可以通过类似此功能范例来实现。
实现技术说明:
          WEBDAV,http1.1的扩展协议,可通过此协议对服务器端文件进行上载,查询,版本管理等多项功能。可通过文件流或XML文件来传递请求。微软的EXCHANGE,包括Sharepoint里,都有应用该技术。
      ajax:X,可以是自己定义的一般XML,也可以是WebService中的Soap协议的XML,当然,也可以是WEBDAV的XML定义。因此,我们在UI这一层,通过ajax,实现很多意想不到的功能,例如:Exchange集成,通过JS作为控制总线,调用多个异构系统的WS(如众所周知google地图API),做MUSHUP的混合应用,这些应用已经很多了,也是最近web2.0的一个热点。还有,在sharepoint里制作相应的webpart,直接读取list,或文档库的webservice,实现一个可以拖拉拽的门户自定义,或者自定义与Exchange集成的webpart
 ,也so easy。
    问题点:EXCHANGE里对appointment的类型存储的时间是世界时间,所以我在JS里对xml中的时间进行了处理。
代码范例:
function getUTCDateStr(date,time)
{
 var dates=date.split("-");
 var times=time.split(":");
 var utcdate=new Date(dates[0],dates[1],dates[2],times[0],times[1],"00");
 utcstr=utcdate.getUTCFullYear()+"-";
 if(utcdate.getUTCMonth()<10)
 {
  utcstr+="0"+utcdate.getUTCMonth()+"-";
 }
 else
 {
  utcstr+=utcdate.getUTCMonth()+"-";
 }
 if(utcdate.getUTCDate()<10)
 {
  utcstr+="0"+utcdate.getUTCDate()+"T";
 }
 else
 {
  utcstr+=utcdate.getUTCDate()+"T";
 }
 if(utcdate.getUTCHours()<10)
 {
  utcstr+="0"+utcdate.getUTCHours()+":";
 }
 else
 {
  utcstr+=utcdate.getUTCHours()+":";
 }
 if(utcdate.getUTCMinutes()<10)
 {
  utcstr+="0"+utcdate.getUTCMinutes(); 
 }
 else
 {
  utcstr+=utcdate.getUTCMinutes();
 }
// utcstr=utcdate.getUTCFullYear()+"-"+utcdate.getUTCMonth()+"-"+utcdate.getUTCDate()+"T"+utcdate.getUTCHours()+":"+utcdate.getUTCMinutes();
 return utcstr;
}
function SaveToExchange()
{
  
  var strXMLNSInfo = "xmlns:g=\"DAV:\" "
                + "xmlns:e=\"//schemas.microsoft.com/exchange/\" "
                + "xmlns:mapi=\"//schemas.microsoft.com/mapi/\" "
                + "xmlns:mapit=\"//schemas.microsoft.com/mapi/proptag/\" "
                + "xmlns:x=\"xml:\" xmlns:cal=\"urn:schemas:calendar:\" "
                + "xmlns:dt=\"urn:uuid:c2f41010-65b3-11d1-a29f-00aa00c14882/\" "
                + "xmlns:header=\"urn:schemas:mailheader:\" "
                + "xmlns:mail=\"urn:schemas:httpmail:\"";
    
var   strCalInfo = "<cal:location>"+document.all.F_Location.value+"</cal:location>"
                + "<cal:dtstart dt:dt=\"dateTime.tz\">"+getUTCDateStr(document.all.F_StartDate.value,document.all.F_StartTime.value)+":00.000Z</cal:dtstart>"
                + "<cal:dtend dt:dt=\"dateTime.tz\">"+getUTCDateStr(document.all.F_EndDate.value,document.all.F_EndTime.value)+":00.000Z</cal:dtend>"
                + "<cal:instancetype dt:dt=\"int\">0</cal:instancetype>"
                + "<cal:busystatus>BUSY</cal:busystatus>"
                + "<cal:meetingstatus>CONFIRMED</cal:meetingstatus>"
                + "<cal:alldayevent dt:dt=\"boolean\">0</cal:alldayevent>"
                + "<cal:responserequested dt:dt=\"boolean\">1</cal:responserequested>"
      + "<cal:reminderoffset dt:dt=\"int\">900</cal:reminderoffset>";
      
var  strHeaderInfo = "<header:to>" + ExUser + "</header:to>";
                // Set the subject of the appointment.
var  strMailInfo = "<mail:subject>"+document.all.Subject.value+"</mail:subject>"
                + "<mail:htmldescription>"+document.all.Body.value+"</mail:htmldescription>";
    
var vXML="<?xml version=\"1.0\"?>"
                + "<g:propertyupdate " + strXMLNSInfo + ">"
                + "<g:set><g:prop>"
                + "<g:contentclass>urn:content-classes:appointment</g:contentclass>"
                + "<e:outlookmessageclass>IPM.Appointment</e:outlookmessageclass>"
                + strMailInfo
                + strCalInfo
                + strHeaderInfo
                + "<mapi:finvited dt:dt=\"boolean\">1</mapi:finvited>"
                + "</g:prop></g:set>"
                + "</g:propertyupdate>";
var uri="//" + ExServer + "/exchange/"+ ExUser + "/日历/"+DocId+".eml";
var Req = new ActiveXObject("Microsoft.XMLHTTP");
 Req.open("PROPPATCH", uri, false,ExUser,ExPassword);
  Req.setRequestHeader("Content-Type","text/xml");
  Req.send(vXML);
}    

本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注职坐标系统运维之Exchange频道!

本文由 @白羽 发布于职坐标。未经许可,禁止转载。
喜欢 | 0 不喜欢 | 0
看完这篇文章有何感觉?已经有0人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程