有人知道如何使用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);
}
我获得了具有正确bool值的属性IsOnlineMeeting
(已测试 -
在变量activeResults
中创建了与Outlook的在线和定期会议,但我不知道在何处获得加入会议所需的会议链接和其他Lync / Skype属性。
此外,我不确定在何处以及如何分配Lync / Skype会议URL和其他属性的值。
有时候我会问自己是否值得开发基于MS产品的应用程序,因为他们的文档很糟糕。
答案 0 :(得分:0)
经过一周的诅咒MS,我找到了解决方案。使用MFCMAPI工具,您可以检查邮箱中项目的属性及其值。
如果您打开该属性,您可以在顶部看到类似的内容:
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;
}
使用正确的扩展定义,您可以轻松地从项目中获取值。
Value
ExtendedProperties
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)属性。
答案 1 :(得分:0)
好吧,我只设置了一个扩展属性就设法使它工作了(差不多!):
appointment.SetExtendedProperty(
new ExtendedPropertyDefinition(
new Guid("00020329-0000-0000-C000-000000000046"),
"OnlineMeetingExternalLink",
MapiPropertyType.String
),
skypeMeeting.JoinUrl
);
我之所以说这几乎是因为约会在Outlook中打开时看起来并不完全像Skype会议:没有页脚将加入链接和电话号码等。 也许还有其他差异,但是现在我们在Skype for business中使用“加入”按钮可以看到它,并且在Outlook提醒中也可以通过“加入”按钮看到它。 解决方法是,我们必须对约会的正文内容进行硬编码。 会议ID也可以使用UCWA 2.0(https://docs.microsoft.com/en-us/skype-sdk/ucwa/myonlinemeetings_ref)
获取。我们使用UCWA 2.0创建Skype电话会议并将其附加到EWS约会对象。