Я задавал тот же вопрос: Синхронизировать список с внешним видом только с элементами в текущем представлении. .В этом случае можно было использовать протокол stssync, чтобы делать все, что вы хотите.Это требует больших усилий (к счастью, кто-то уже написал реализацию )
Но было еще одно решение, которое я в конечном итоге использовал - реализация оболочки для веб-сервиса Lists.asmx и переписывание запросов Outlook (с помощью пользовательскихФайл Global.asax), чтобы использовать этот новый веб-сервис вместо Lists.asmx, который запрашивает только конкретное представление в списке.
if (ctx.Request.UserAgent.Contains("Microsoft Office Outlook") && path.ToLower().IndexOf("_vti_bin/lists.asmx") >= 0)
{
ctx.RewritePath("/_layouts/OutlookLists.asmx");
}
Я не уверен, что вам нужно такое решение.Если вы это сделаете, вы можете спросить, и я могу опубликовать источник решения для веб-сервиса, однако я больше не использую этот веб-сервис самостоятельно.И вы можете использовать его как черновик, а не как готовый код.
Источник опубликован на CodePlex .
Относительно проблемы сценария
Я не знаю, почему идентификатор списка не заменяется идентификатором представления.Я попытался запустить функцию в консоли сценария (F12 для IE8 / 9)
>> 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');
Как видите, аргумент функции (третий) был заменен идентификатором представления вместо идентификатора списка.
Не забудьте удалить операторы console.log перед развертыванием, потому что, если в IE нет инструментов для веб-разработчиков, в нем произойдет сбой javascript.