Sharepoint Teamsite-calendar-webpart - сохранить встречу в Outlook - PullRequest
1 голос
/ 17 февраля 2020

Есть ли способ сохранить запись календаря javascript в личном календаре Outlook в веб-части календаря sharepoint?

Я хочу сохранить созданную запись в директории sharepoint-calendar в личном календаре внешнего вида пользователя, который ее создал.

Любой совет, как это сделать?

1 Ответ

0 голосов
/ 18 февраля 2020

Итак, ответ "вид".

Технически вам не нужно писать JavaScript, чтобы достичь этого, поскольку в SharePoint есть встроенный URL-адрес службы, который будет загружать файл .ICS на компьютер пользователя, и любую систему календаря этого пользователя по умолчанию (например, Outlook) откроет это как новый элемент календаря.

Хотя вы можете создать эту ссылку вручную, если хотите обеспечить загрузку элемента календаря для одного указанного c события, вы, безусловно, можете использовать JavaScript для динамического заполнения значений параметров в этом URL, что может будет проще, чем искать эти значения по отдельности, чтобы вручную создать ссылку.

URL-адрес, по которому можно указать гиперссылку для создания файла .ics: https://**SITE_URL**/_vti_bin/owssvr.dll?CS=109&Cmd=Display&List={**LIST_GUID**}&CacheControl=1&ID=**EVENT_ID**&Using=event.ics

SITE_URL - URL-адрес сайта, на котором размещен календарь LIST_GUID - Уникальный идентификатор вашего календаря (guid) EVENT_ID - Целочисленный идентификатор события календаря

например:

https://mysharepointserver/sites/myteamsite/_vti_bin/owssvr.dll?CS=109&Cmd=Display&List={B2E3EC57-9BA6-46A2-B072-578C9796A42E}&CacheControl=1&ID=26&Using=event.ics

В качестве примера того, кого вы можете использовать JavaScript для генерации этой ссылки на событие, следующий код может быть вставлен в скрипт Редактируйте веб-часть на той же странице, что и веб-часть представления календаря, и она вставляет символ стрелки вниз перед каждой ссылкой на событие, которая запускает файл .ics для этого события. В этом сценарии предполагается, что на вашей странице уже загружена библиотека jQuery, и вам потребуется заменить строку «NameOfYourEventsList» ниже на фактическое название вашего списка событий.

function lookupListBeforeAppendingCalendarLink() {
    var context = new SP.ClientContext.get_current();
    var web = context.get_web();
    list = web.get_lists().getByTitle("NameOfYourEventsList");
    context.load(list, 'Id');

    context.executeQueryAsync(Function.createDelegate(this,listIdSuccess), Function.createDelegate(this,error));

}

function listIdSuccess() {
    var listId = list.get_id();
    appendAddToCalendarLink(listId);
}

function error(sender, args) {
    console.log('Request failed. ' + args.get_message() +
        '\n' + args.get_stackTrace());
}

function appendAddToCalendarLink(listId) {
    jQuery('.ms-acal-rootdiv .ms-acal-item').each(function () {
            var currentCalendarAnchor = jQuery('a', jQuery(this));
            var itemId = currentCalendarAnchor.attr('href').split('?ID=')[1];

            currentCalendarAnchor.before("<a href='" + _spPageContextInfo.webServerRelativeUrl + "/_vti_bin/owssvr.dll?CS=109&Cmd=Display&List=" + listId + "&CacheControl=1&ID=" + itemId + "&Using=event.ics'>&darr;</a>");
    });

}

function customizeCalendar() {
    //if you know the list id, you can hard code it here, 
    // otherwise use function to look it up first by List title
    // var listId = 'B2E3EC57-9BA6-46A2-B072-578C9796A42E'
    // appendAddToCalendarLink(listId);
    lookupListBeforeAppendingCalendarLink();
}

ExecuteOrDelayUntilScriptLoaded(customizeCalendar, "sp.js")

...