>有人知道如何使用EWS创建在线会议(Lync/Skype)的会议请求吗?
因此,我的方法是首先通过 Outlook 创建联机和定期会议,然后模拟具有相同属性的事件创建。
这是我用于获取会议的代码片段(calendarView
已经初始化了开始日期、结束日期等):
ExtendedPropertyDefinition extendedOnlineMeetingProperty =
new ExtendedPropertyDefinition(new Guid("{00062008-0000-0000-c000-000000000046}"), 34112,
MapiPropertyType.Integer);
var properties = new PropertySet(
ItemSchema.Id,
AppointmentSchema.ICalUid,
ItemSchema.Subject,
AppointmentSchema.Start,
AppointmentSchema.End,
AppointmentSchema.Organizer,
AppointmentSchema.Location,
AppointmentSchema.LegacyFreeBusyStatus,
AppointmentSchema.IsCancelled,
AppointmentSchema.ICalRecurrenceId,
AppointmentSchema.MyResponseType, // Mandatory Meeting.MyResponseType can be retrieved without a search in the participant list
ItemSchema.LastModifiedTime,
AppointmentSchema.IsOnlineMeeting,
AppointmentSchema.IsMeeting,
ItemSchema.DisplayTo) { };
properties.Add(extendedOnlineMeetingProperty);
var activeResults = service.FindAppointments(WellKnownFolderName.Calendar, calendarView).ToList();
if (activeResults.Count > 0)
{
service.LoadPropertiesForItems(activeResults, properties);
}
我得到了具有正确布尔值的属性IsOnlineMeeting
(测试- 使用Outlook创建了在线和定期会议),activeResults
但我不知道在哪里可以获得会议链接和加入会议所需的其他Lync/Skype属性。
我也不确定在哪里以及如何分配 Lync/Skype 会议 URL 和其他属性的值。
有时我会问自己,开发一些基于 MS 产品的应用程序是否值得,因为它们的文档很糟糕。
经过一周的诅咒MS,我找到了解决方案。使用 MFCMAPI 工具,可以检查邮箱中的项目具有的属性及其值。
- 下载程序链接
- 构建并运行它 会话 - 登录 - 选择
- 您的邮件配置文件 - 选择邮箱并双击
- 操作 - 打开特殊文件夹 - 日历 - 双击日历
- 通过联机 S4B/Lync 会议打开项目
- UC* 属性是我一直在寻找的属性。
如果您打开该属性,您可以在顶部看到类似以下内容:
ag: 0x8096001E
Type: PT_STRING8
DASL: http://schemas.microsoft.com/mapi/string/{00020329-0000-0000-C000-000000000046}/UCMeetingSetting
Named Prop Name: UCMeetingSetting
Named Prop Guid: {00020329-0000-0000-C000-000000000046} = PS_PUBLIC_STRINGS
所以我对扩展属性的定义是错误的。它不仅是一个属性,但实际上你需要所有7个属性。
所以定义应该是:
private static ExtendedPropertyDefinition CreateOnlineMeetingProperty()
{
ExtendedPropertyDefinition extendedUCMeetingSetting =
new ExtendedPropertyDefinition(new Guid("{00020329-0000-0000-C000-000000000046}"), "UCMeetingSetting",
MapiPropertyType.String);
return extendedUCMeetingSetting;
}
使用正确的扩展定义,您可以轻松地从项目中获取值。
- 访问
ExtendedProperties
Value
- 呼叫
TryGetProperty
var activeResults = service.FindAppointments(new FolderId(WellKnownFolderName.Calendar, resource.Email),calendarView).ToList(); service.LoadPropertiesForItems(activeResults, properties); foreach (Appointment result in activeResults) { // 1. var b = result.ExtendedProperties[1].Value; // 2. string UCMeetingSetting; result.TryGetProperty(extendedUCMeetingSetting, out UCMeetingSetting); }
上述步骤,您可以获取所需的任何扩展属性,而不仅仅是统一通信 (UC) 属性。
好的,我设法通过仅设置扩展属性之一来使其工作(几乎!
appointment.SetExtendedProperty(
new ExtendedPropertyDefinition(
new Guid("00020329-0000-0000-C000-000000000046"),
"OnlineMeetingExternalLink",
MapiPropertyType.String
),
skypeMeeting.JoinUrl
);
我说几乎是因为当您在Outlook中打开约会时,约会看起来与Skype会议不完全相同:没有页脚,加入链接和电话号码等。 也许还有其他差异,但现在我们在Skype for Business中看到它与"加入"按钮,并且我们还在带有"加入"按钮的Outlook提醒中看到它。 作为一种解决方法,我们必须对约会的正文内容进行硬编码。 也可以使用UCWA 2.0(https://learn.microsoft.com/en-us/skype-sdk/ucwa/myonlinemeetings_ref)获取会议ID。
我们使用 UCWA 2.0 创建 Skype 电话会议并将其附加到 EWS 约会对象。