Outlook 如何使用EWS或EWS托管API创建用户属性,以便它们显示在字段选择器中
我想使用EWS创建用户属性,以便它们显示在Outlook的字段选择器中。我知道使用VBA是可能的,对象模型会公开Item.UserProperties集合。但是,使用EWS,我只能访问Item.ExtendedProperty ExtendedProperty的问题是它没有出现在可选用户属性列表中 根本的问题是,我们的服务器端应用程序试图与Dynamics CRM Outlook客户端很好地协同工作。CRM Outlook客户端使用UserProperty存储自定义属性,我们的应用程序只能与EWS一起使用,我们无法找到创建用户属性的方法 一些示例代码: 用户属性(VBA Outlook): 使用事件m_objApp作为Outlook.AppointmentItem进行暗显 私有子应用程序_ItemLoad(ByVal项作为对象) 端接头 专用子m_objApp_打开(取消为布尔值) 端接头 扩展属性(Exchange EWS):Outlook 如何使用EWS或EWS托管API创建用户属性,以便它们显示在字段选择器中,outlook,dynamics-crm,exchangewebservices,Outlook,Dynamics Crm,Exchangewebservices,我想使用EWS创建用户属性,以便它们显示在Outlook的字段选择器中。我知道使用VBA是可能的,对象模型会公开Item.UserProperties集合。但是,使用EWS,我只能访问Item.ExtendedProperty ExtendedProperty的问题是它没有出现在可选用户属性列表中 根本的问题是,我们的服务器端应用程序试图与Dynamics CRM Outlook客户端很好地协同工作。CRM Outlook客户端使用UserProperty存储自定义属性,我们的应用程序只能与EW
CalendarItemType item=新的CalendarItemType();
item.MeetingTimeZone=新时区类型(){TimeZoneName=\u userTimeZone};
item.StartSpecified=真;
item.Start=GetDateFromXml(node.Value);
item.EndSpecified=true;
item.End=GetDateFromXml(node.Value);
列表属性=新列表();
添加(CreateExtendedProperty(“crmid”,pending.crmid.Value.ToString(),MapPropertyTypeType.String));
添加(CreateExtendedProperty(“crmLinkState”,“2”,MapPropertyTypeType.Double));
item.ExtendedProperty=properties.ToArray();
CreateRequest CreateRequest=新建CreateItemType()
{
Items=新的非空阵列AllitemType
{
Items=新的ItemType[]{item}
},
SavedItemFolderId=新的targetFolderId类型()
{
Item=新的DifferentiedFolderIDType()
{
Id=文件夹,
邮箱=新的EmailAddressType(){EmailAddress=\u user.Mailbox}
}
},
SendMeetingInvestments=CalendarItemCreateOrDeleteOperationType.SendToNone,
SendMeetingInvitationsSpecified=真
};
CreateItemResponseType响应=exchange.CreateItem(createRequest);
私有ExtendedPropertyType CreateExtendedProperty(字符串名称、字符串值、MapPropertyTypeType类型)
{
返回新的ExtendedPropertyType()
{
ExtendedFieldURI=新路径到ExtendedFieldType()
{
PropertyName=名称,
DifferentiedPropertySetId=DifferentiedPropertySetType.PublicString,
DifferentiedPropertySetId=true,
PropertyType=类型
},
项目=价值
};
}
差不多一年前,在微软的一个论坛上也有人问过类似的问题,但至今没有答案
我希望这样会更成功:)
谢谢,
Jeffry我认为只要您使用PublicString(看起来是这样的),这两种方法是等效的。使用MFCMAPI查看生成内容的差异如何?我在一些网站上看到了一些可能的答案。我还没有时间测试它。基本上a)EWS必须使用PUBLICSTRINGS guid。b) 您必须在所有相关文件夹中有一个addin循环,并确保userProperty已添加到集合c)然后您可以自定义列视图,等等。
If Item.Class = olAppointment Then
Set m_objApp = Item
End If
Dim oProp1 As UserProperty
Dim oProp2 As UserProperty
If m_objApp.UserProperties.Count = 0 Then
Set oProp1 = m_objApp.UserProperties.Add("crmid", olText)
oProp1.Value = ""
Set oProp2 = m_objApp.UserProperties.Add("crmLinkState", olText)
oProp2.Value = "0"
m_objApp.Save
End If
CalendarItemType item = new CalendarItemType();
item.MeetingTimeZone = new TimeZoneType() { TimeZoneName = _userTimeZone };
item.StartSpecified = true;
item.Start = GetDateFromXml(node.Value);
item.EndSpecified = true;
item.End = GetDateFromXml(node.Value);
List<ExtendedPropertyType> properties = new List<ExtendedPropertyType>();
properties.Add(CreateExtendedProperty("crmid", pending.CrmId.Value.ToString(), MapiPropertyTypeType.String));
properties.Add(CreateExtendedProperty("crmLinkState", "2", MapiPropertyTypeType.Double));
item.ExtendedProperty = properties.ToArray();
CreateRequest createRequest = new CreateItemType()
{
Items = new NonEmptyArrayOfAllItemsType
{
Items = new ItemType[] { item }
},
SavedItemFolderId = new TargetFolderIdType()
{
Item = new DistinguishedFolderIdType()
{
Id = folder,
Mailbox = new EmailAddressType() { EmailAddress = _user.MailBox }
}
},
SendMeetingInvitations = CalendarItemCreateOrDeleteOperationType.SendToNone,
SendMeetingInvitationsSpecified = true
};
CreateItemResponseType response = exchange.CreateItem(createRequest);
private ExtendedPropertyType CreateExtendedProperty(string name, string value, MapiPropertyTypeType type)
{
return new ExtendedPropertyType()
{
ExtendedFieldURI = new PathToExtendedFieldType()
{
PropertyName = name,
DistinguishedPropertySetId = DistinguishedPropertySetType.PublicStrings,
DistinguishedPropertySetIdSpecified = true,
PropertyType = type
},
Item = value
};
}