我问过同样的问题:仅将当前视图中的项目与 Outlook 同步列表。。在这种情况下,可以使用 stssync 协议来做任何你想做的事情。这需要付出很大的努力(幸运的是有人已经写了一个执行)
但我最终使用了另一个解决方案 - 实现 Lists.asmx Web 服务的包装器并重写 Outlook 请求(通过使用自定义 Global.asax 文件)以使用这个新的 Web 服务而不是 Lists.asmx,它只查询列表中的特定视图。
if (ctx.Request.UserAgent.Contains("Microsoft Office Outlook") && path.ToLower().IndexOf("_vti_bin/lists.asmx") >= 0)
{
ctx.RewritePath("/_layouts/OutlookLists.asmx");
}
我不确定您是否需要这样的解决方案。如果您这样做,您可能会问,我可能会发布该 Web 服务的解决方案源,但我自己不再使用该 Web 服务。您可以将其用作草稿,而不是生产就绪的代码。
来源已发布于CodePlex.
关于脚本问题
我不知道为什么列表 id 没有被视图 id 替换。我尝试在脚本控制台中运行该函数(IE8/9 为 F12)
>> var menuItems = document.getElementsByTagName('ie:menuitem');
for (var i = 0; i < menuItems.length; i++) {
itm = menuItems(i);
if (itm.id.match('OfflineButton') != null) {
console.log('listName:' + ctx.listName.toLowerCase() + 'viewName:' + ctx.view.toLowerCase());
if (ctx != null && ctx.listName != null && ctx.view != null) {
console.log('Inside if block');
//Replace listId to viewId being used so outlook will query only items in current view.
//Must have custom web service in place to handle that request, because it iwll not work OOTB.
console.log("Before: " + itm.onMenuClick);
itm.onMenuClick = itm.onMenuClick.replace(ctx.listName.toLowerCase(), ctx.view.toLowerCase());
console.log("After: " + itm.onMenuClick);
break;
}
}
}
LOG: listName:{fe89e809-7de4-4f43-9bc2-7e8ce6624ed0}viewName:{7364a843-c7f2-47d8-b4a3-5dc7381b6248}
LOG: Inside if block
LOG: Before: javaScript:ExportHailStorm('tasks','https:\u002f\u002fserver\u002fsapulces\u002fdarbu_parskata','{fe89e809-7de4-4f43-9bc2-7e8ce6624ed0}','Uz\u0146\u0113muma darbu p\u0101rskata sapulce','Uzdevumi','\u002fsapulces\u002fdarbu_parskata\u002fLists\u002fUzdevumi','','\u002fsapulces\u002fdarbu_parskata\u002fLists\u002fUzdevumi');
LOG: After: javaScript:ExportHailStorm('tasks','https:\u002f\u002fserver\u002fsapulces\u002fdarbu_parskata','{7364a843-c7f2-47d8-b4a3-5dc7381b6248}','Uz\u0146\u0113muma darbu p\u0101rskata sapulce','Uzdevumi','\u002fsapulces\u002fdarbu_parskata\u002fLists\u002fUzdevumi','','\u002fsapulces\u002fdarbu_parskata\u002fLists\u002fUzdevumi');
正如您所看到的,函数参数(第三个)已被替换为视图 id,而不是列表 id。
不要忘记在部署之前删除 console.log 语句,因为如果 IE 没有 Web 开发工具,javascript 会在那里崩溃。