使用 Microsoft 的 EWS 创建在线 Lync/Skype 会议
Using Microsoft's EWS to create online Lync/Skype meeting
有人知道如何使用 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
和正确的 bool 值(测试 -
在变量 activeResults
中创建了与 Outlook 的在线和定期会议),但我不知道从哪里获得会议 link 和加入会议所需的其他 Lync/Skype 属性。
我也不确定在哪里以及如何分配 Lync/Skype 会议 URL 和其他属性的值。
有时我问自己是否值得开发一些基于 MS 产品的应用程序,因为他们的文档很糟糕。
在骂了MS一个星期后,我找到了解决办法。使用 MFCMAPI 工具,您可以检查邮箱中的项目 属性 及其值。
- 下载程序link
- 构建并运行它
- Session - 登录 - 选择您的邮件配置文件 - 选择邮箱并双击
- 操作-打开特殊文件夹-日历-双击日历
- 在线打开项目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 会议:没有页脚将加入 link 和 phone 号码等。
也许还有其他差异,但目前我们在 Skype for business 中看到它带有加入按钮,我们还在 Outlook 提醒中看到它带有加入按钮。
作为解决方法,我们必须 hard-code 约会的正文内容。
还有会议 ID,可以使用 UCWA 2.0 (https://docs.microsoft.com/en-us/skype-sdk/ucwa/myonlinemeetings_ref)
我们使用 UCWA 2.0 创建了 Skype 电话会议并将其附加到 EWS 约会 object。
有人知道如何使用 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
和正确的 bool 值(测试 -
在变量 activeResults
中创建了与 Outlook 的在线和定期会议),但我不知道从哪里获得会议 link 和加入会议所需的其他 Lync/Skype 属性。
我也不确定在哪里以及如何分配 Lync/Skype 会议 URL 和其他属性的值。
有时我问自己是否值得开发一些基于 MS 产品的应用程序,因为他们的文档很糟糕。
在骂了MS一个星期后,我找到了解决办法。使用 MFCMAPI 工具,您可以检查邮箱中的项目 属性 及其值。
- 下载程序link
- 构建并运行它
- Session - 登录 - 选择您的邮件配置文件 - 选择邮箱并双击
- 操作-打开特殊文件夹-日历-双击日历
- 在线打开项目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 会议:没有页脚将加入 link 和 phone 号码等。 也许还有其他差异,但目前我们在 Skype for business 中看到它带有加入按钮,我们还在 Outlook 提醒中看到它带有加入按钮。 作为解决方法,我们必须 hard-code 约会的正文内容。 还有会议 ID,可以使用 UCWA 2.0 (https://docs.microsoft.com/en-us/skype-sdk/ucwa/myonlinemeetings_ref)
我们使用 UCWA 2.0 创建了 Skype 电话会议并将其附加到 EWS 约会 object。