Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/rest/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何规划可用性检查并为Outlook创建新会议?_Java_Rest_Sharepoint_Calendar_Outlook - Fatal编程技术网

Java 如何规划可用性检查并为Outlook创建新会议?

Java 如何规划可用性检查并为Outlook创建新会议?,java,rest,sharepoint,calendar,outlook,Java,Rest,Sharepoint,Calendar,Outlook,我正在创建一个Java web应用程序来管理一组学生和教师之间的会议。他们都已经使用Outlook来管理电子邮件和个人日历 我想知道是否有可能通过REST服务使用Exchange、Office365或Sharepoint Team Calendar构建我的web应用程序的日程安排功能,以便检查可用性并为学生和一名可用教师创建会议: 到目前为止,我发现的最有希望的机制是Microsoft Sharepoint Server的日历,它的协作功能使创建会议和检查用户列表的可用性成为可能。缺点是它不支

我正在创建一个Java web应用程序来管理一组学生和教师之间的会议。他们都已经使用Outlook来管理电子邮件和个人日历

我想知道是否有可能通过REST服务使用Exchange、Office365或Sharepoint Team Calendar构建我的web应用程序的日程安排功能,以便检查可用性并为学生和一名可用教师创建会议:

到目前为止,我发现的最有希望的机制是Microsoft Sharepoint Server的日历,它的协作功能使创建会议和检查用户列表的可用性成为可能。缺点是它不支持一对一的会议,而是支持整个团队(据我所知)

我的第二个选择是要求小组中的每个人(系里的学生和老师)公开他们的个人日历,这样web应用程序就可以检查学生和老师的可用性,并发送会议请求。显而易见的问题是这种方法带来的隐私/安全问题

我的最后一个选择是在web应用程序中构建一个专有日历,并向每个人发送iCal请求,这是我目前不太喜欢的选择,因为这感觉像是在重新发明轮子。这种方法的明显问题是两个独立日历之间的同步


此外,此功能必须是一个非常常见的需求,因此应该有大量的博客解释如何利用Exchange/Sharepoint/Office365来实现它(由于我雇主的基础架构基于Microsoft,因此不考虑其他平台)。然而,无论这是如此明显,没有人谈论它,还是我没有在正确的地方搜索。有什么建议可以告诉我正确的方向吗?

Exchange本机显示EWS(Exchange Web服务)中公开的用户日历可用性,您的网络管理员必须配置启用EWS的Exchange server。 但是你猜怎么着。。。Office 365(据我所知)已启用EWS服务,到期交换是Office 365服务的一部分

由于EWS是普通的Web服务,您应该在java中使用的任何东西中创建“服务存根”或代理,以创建映射wsdl文件的服务引用

交换EWS是我的首选解决方案

希望这有帮助

这是参考页面,此链接显示如何使用C#中的服务参考进行正确的API调用

静态无效GetUserAvailability(ExchangeServiceBinding esb)
{
//确定比较忙/闲信息的时间。
持续时间=新的持续时间();
duration.StartTime=DateTime.Now;
duration.EndTime=DateTime.Now.AddHours(4);
//确定用于比较忙/闲信息的选项。
FreeBusyViewOptions类型fbViewOptions=新建FreeBusyViewOptions类型();
fbViewOptions.TimeWindow=持续时间;
fbViewOptions.RequestedView=FreeBusyViewType.MergedOnly;
fbViewOptions.RequestedViewSpecified=true;
fbViewOptions.MergedFreeBusyIntervalInMinutes=35;
fbViewOptions.MergedFreeBusyIntervalInMinutesSpecified=true;
MailboxData[]邮箱=新的MailboxData[1];
邮箱[0]=新邮箱数据();
//标识要查看忙/闲数据的用户邮箱。
EmailAddress EmailAddress=新的EmailAddress();
emailAddress.Address=”tplate@contoso.com";
emailAddress.Name=String.Empty;
邮箱[0]。电子邮件=电子邮件地址;
邮箱[0]。ExcludeConflicts=false;
//提出请求。
GetUserAvailabilityRequestType请求=新建GetUserAvailabilityRequestType();
//设置请求的时区。
request.TimeZone=new SerializableTimeZone();
request.TimeZone.Bias=480;
request.TimeZone.StandardTime=新的SerializableTimeZoneTime();
request.TimeZone.StandardTime.Bias=0;
request.TimeZone.StandardTime.DayOfWeek=DayOfWeekType.Sunday.ToString();
request.TimeZone.StandardTime.DayOrder=1;
request.TimeZone.StandardTime.Month=11;
request.TimeZone.StandardTime.Time=“02:00:00”;
request.TimeZone.DaylightTime=新的SerializableTimeZoneTime();
request.TimeZone.DaylightTime.Bias=-60;
request.TimeZone.DaylightTime.DayOfWeek=DayOfWeekType.Sunday.ToString();
request.TimeZone.DaylightTime.DayOrder=2;
request.TimeZone.DaylightTime.Month=3;
request.TimeZone.DaylightTime.Time=“02:00:00”;
//将邮箱添加到请求中。
request.MailboxDataArray=邮箱;
//将视图选项添加到请求中。
request.freebusyviewooptions=fbViewOptions;
尝试
{
//发送请求并获得响应。
GetUserAvailabilityResponseType响应=esb.GetUserAvailability(请求);
//访问忙/闲信息。
if(response.FreeBusyResponseArray.Length<1)
{
抛出新异常(“没有可用的忙/闲响应数据”);
}
其他的
{
foreach(响应中的FreeBusyResponseType fbrt.FreeBusyResponseArray)
{
if(fbrt.ResponseMessage.ResponseClass==ResponseClassType.Error)
{
WriteLine(string.Format(“错误:{0}”,fbrt.ResponseMessage.MessageText));
}
其他的
{
//显示忙/闲流。
FreeBusyView fbv=fbrt.FreeBusyView;
WriteLine(string.Format(“合并的忙/闲数据:{0}”,fbv.MergedFreeBusy));
}
}
}
}
捕获(例外e)
{
//执行错误处理。
控制台写入线(e.Message);
Console.ReadLine();
}
}
static void GetUserAvailability(ExchangeServiceBinding esb)
{
    // Identify the time to compare free/busy information.
    Duration duration = new Duration();
    duration.StartTime = DateTime.Now;
    duration.EndTime = DateTime.Now.AddHours(4);

    // Identify the options for comparing free/busy information.
    FreeBusyViewOptionsType fbViewOptions = new FreeBusyViewOptionsType();
    fbViewOptions.TimeWindow = duration;
    fbViewOptions.RequestedView = FreeBusyViewType.MergedOnly;
    fbViewOptions.RequestedViewSpecified = true;
    fbViewOptions.MergedFreeBusyIntervalInMinutes = 35;
    fbViewOptions.MergedFreeBusyIntervalInMinutesSpecified = true;

    MailboxData[] mailboxes = new MailboxData[1];
    mailboxes[0] = new MailboxData();

    // Identify the user mailbox to review for free/busy data.
    EmailAddress emailAddress = new EmailAddress();

    emailAddress.Address = "tplate@contoso.com";
    emailAddress.Name = String.Empty;

    mailboxes[0].Email = emailAddress;
    mailboxes[0].ExcludeConflicts = false;

    // Make the request.
    GetUserAvailabilityRequestType request = new GetUserAvailabilityRequestType();

    // Set the time zone of the request.
    request.TimeZone = new SerializableTimeZone();
    request.TimeZone.Bias = 480;
    request.TimeZone.StandardTime = new SerializableTimeZoneTime();
    request.TimeZone.StandardTime.Bias = 0;
    request.TimeZone.StandardTime.DayOfWeek = DayOfWeekType.Sunday.ToString();
    request.TimeZone.StandardTime.DayOrder = 1;
    request.TimeZone.StandardTime.Month = 11;
    request.TimeZone.StandardTime.Time = "02:00:00";
    request.TimeZone.DaylightTime = new SerializableTimeZoneTime();
    request.TimeZone.DaylightTime.Bias = -60;
    request.TimeZone.DaylightTime.DayOfWeek = DayOfWeekType.Sunday.ToString();
    request.TimeZone.DaylightTime.DayOrder = 2;
    request.TimeZone.DaylightTime.Month = 3;
    request.TimeZone.DaylightTime.Time = "02:00:00";

    // Add the mailboxes to the request.
    request.MailboxDataArray = mailboxes;

    // Add the view options to the request.
    request.FreeBusyViewOptions = fbViewOptions;

    try
    {
        // Send the request and get the response.
        GetUserAvailabilityResponseType response = esb.GetUserAvailability(request);

        // Access free/busy information.
        if (response.FreeBusyResponseArray.Length < 1)
        {
            throw new Exception("No free/busy response data available.");
        }
        else
        {
            foreach (FreeBusyResponseType fbrt in response.FreeBusyResponseArray)
            {
                if (fbrt.ResponseMessage.ResponseClass == ResponseClassType.Error)
                {
                    Console.WriteLine(string.Format("Error: {0}", fbrt.ResponseMessage.MessageText));
                }
                else
                {
                    // Show the free/busy stream.
                    FreeBusyView fbv = fbrt.FreeBusyView;
                    Console.WriteLine(string.Format("Merged free/busy data: {0}", fbv.MergedFreeBusy));
                }
            }
        }
    }
    catch (Exception e)
    {
        // Perform error processing.
        Console.WriteLine(e.Message);
        Console.ReadLine();
    }
}