目前我正在编写一个outlook插件,用于将goolge联系人与outlook同步,但我必须介绍一些特殊情况:
当在谷歌方面删除联系人时,我的应用程序会检测到丢失的联系人,并根据Outlook中的联系人信息创建新联系人。 有没有办法从谷歌获取事件或历史记录,告诉我用户删除了这个联系人?
编辑1: 这是我的代码如何访问联系人(什么工作FINE):
public GoogleAccessor()
{
var parameters = new OAuth2Parameters()
{
ClientId = CLIENTID,
ClientSecret = CLIENTSECRET,
RedirectUri = REDIRECTURI,
Scope = SCOPES
};
string url = OAuthUtil.CreateOAuth2AuthorizationUrl(parameters);
//An own webbrowser for processing the access tokens
IAuthorizationCodeProvider authcodeProvider = new Presentation.BrowserAuthorizationCodeProvider(new Presentation.BrowserAuthentificatorVM());
parameters.AccessCode = authcodeProvider.GetAuthorizationCode(url);
if(parameters.AccessCode == null)
throw new GoogleOAuthException("AccesCode returned 'null' and failed!");
OAuthUtil.GetAccessToken(parameters);
this._contactsRequest = new ContactsRequest(new RequestSettings(APPLICATIONNAME, parameters) {AutoPaging = true});
}
public IList<IContact> GetAllMappedContacts()
{
Feed<Google.Contacts.Contact> f = _contactsRequest.GetContacts();
this._feedUri = new Uri(f.AtomFeed.Feed);
var photoList = new List<PhotoObject>();
foreach (var entry in f.Entries)
{
var photoObject = GetContactPhoto(entry);
if(photoObject != null)
photoList.Add(photoObject);
}
_googleMapper = new GoogleMapper(f.Entries);
return _googleMapper.MapToLocalContacts();;
}
答案 0 :(得分:0)
关于同步的事情一般是同步通常意味着在一个方向上工作。
来源数据 - &gt;数据流 - &gt;收到的数据。
在这种情况下,Outlook是您的源数据,Google是您收到的数据。所有信息都需要来自您的来源。由于这是一个Outlook加载项,因此您创建我的建议是添加一个按钮到您的加载项功能区。你可以随意调用按钮(也许是“dontSyncButton”),但它的目的是成为你的联系人的分类。
使其成为当选择联系人然后单击按钮时,联系人将获得特殊分类(可能是“Dont Sync”)。
现在为执行同步的代码提供一些逻辑,并让逻辑决定是否同步联系人。此外,如果联系人包含特殊类别,请给出一些逻辑来告诉程序删除Google中的联系人。下面的半伪代码:
if(contact.Categories.ToString() == "Dont Sync")
{
//Don't Sync Contact
If(googleContact.Exists())
{
//Delete contact from Google if it exist
googleContact.Delete();
}
}
else
{
//Sync Contact
}
如果Outlook有许多用户看不到的可修改属性会很好,但是因为它不是我能想到的最佳选择之一。我这样做是为了将共享Outlook文件夹中的联系人同步到个人文件夹,到目前为止它一直运行良好。
希望这有帮助!