SharePoint Online + Azure Free, Część 2: Zdarzenia dodania i edycji elementu listy bądź dokumentu

Kamil Warowny

SharePoint Online + Azure Free, Część 2: Zdarzenia dodania i edycji elementu listy bądź dokumentu
Sierpień 21, 2018 APN Promise SA

SharePoint Online + Azure Free, Część 2: Zdarzenia dodania i edycji elementu listy bądź dokumentu

W artykule zostanie przedstawiona możliwość wykorzystania bezpłatnych funkcjonalności Azure Functions w połączeniu z SharePoint Online celem automatycznych reakcji na dodanie lub edycję elementu listy lub dokumentu w witrynie SharePoint.

Klienci korzystający z SharePoint Online oraz tacy, którzy zmigrowali się z wersji on-premise trafiają często na wymagania biznesowe, które do zrealizowania potrzebują automatycznego przetwarzania danych. Może to być przetwarzanie zawartości, nadawanie uprawnień, generowanie dokumentów, przesyłanie powiadomień itp. Niestety w przypadku SharePoint Online taka funkcjonalność nie jest dostępna w porównaniu do SharePoint on-premise, gdzie można użyć do tego „event handlerów” reagujących na zdarzenia listy czy biblioteki SharePoint. Przykładami takich zdarzań może być dodanie, edycja czy usunięcie elementu listy bądź biblioteki.

Do chwili obecnej jedynym rozwiązaniem pozwalającym na obsługę zdarzeń w sposób bardziej zawansowany było przygotowanie programistycznego rozwiązania typu „provider hosted app”. Niestety rozwiązanie wymagało posiadania serwera IIS on-premise lub skorzystania z rozwiązań chmurowych pozwalających na hostowanie solucji napisanych w ASP.NET, co zazwyczaj generowało dodatkowe koszty.

Z pomocą ponownie (zob. artykuł pt. SharePoint Online + Azure Free  Cześć 1 cykliczne przetwarzanie danych) przychodzą nam Azure Functions.

Azure Functions

Funkcje Azure pozwalają na tworzenie nieskomplikowanych funkcji bezserwerowych w chmurze. Mogą być skalowane w ramach potrzeb, aby uzyskać duże możliwości obliczeniowe.

Obsługiwane są różne języki programowania w tym C# i Java. Istnieje możliwość sięgania po dane do pozostałych usług w ramach Azure oraz do systemów zewnętrznych poprzez Internet. Wykonanie kodu może być wyzwalane przez zapytania np. GET, POST lub poprzez wyzwalanie czasowe.

Zgodnie z cennikiem, jeśli cykliczne przetwarzanie danych nie będzie zbyt częste, usługę możemy wykorzystywać bezpłatnie.

Problem biznesowy

Klient posiada SharePoint Online w usłudze Office 365. Zbudował witrynę, w której gromadzi informacje o zamówieniach. Zamówienia wprowadzane są przez handlowców do listy SharePoint. Po wprowadzeniu nowego zamówienia automatycznie ma zostać wysłana informacja o nowym zamówieniu do pracownika realizującego zamówienia.

Klient nie posiada własnego środowiska serwerów, co uniemożliwia stworzenie usługi powiadomień w formie np. usługi Windows czy aplikacji konsolowej uruchamianej przez harmonogram. Rozwiązaniem okazuje się wykorzystanie Azure Functions wyzwalanych poprzez zdarzenia SharePoint.

Obsługiwane zdarzenia

Zdarzenia, które są zgłaszane dla list i bibliotek SharePoint:

  • ItemAdded
  • ItemUpdated
  • ItemDeleted
  • ItemCheckedOut
  • ItemCheckedIn
  • ItemUncheckedOut
  • ItemAttachmentAdded
  • ItemAttachmentDeleted
  • ItemFileMoved
  • ItemVersionDeleted

Tworzenie funkcji

W przykładzie zostanie użyta lista SharePoint o nazwie „Zamówienia”, utworzona w ramach artykułu SharePoint Online + Azure Free  Cześć 1 cykliczne przetwarzanie danych.

Po wejściu w panel administracyjny Azure dodajemy Function App. Następnie dodajemy funkcję typu „HTTP trigger”: np. w języku C#.

Podajemy nazwę funkcji i wskazujemy dostęp anonimowy.

Po chwili oczekiwania mamy już gotową funkcję.

Dodatkowo musimy się upewnić czy nasza konfiguracja wygląda jak na rysunku poniżej.

Tryb autoryzacji można zmienić na „function”, dzięki czemu do adresu URL naszej funkcji dodawany jest dodatkowy kod zabezpieczający, który uniemożliwia wywołanie funkcji znając jedynie jej adres.

Przy rejestracji webhook SharePoint wysyła w zapytaniu HTTP token uwierzytelniający, który musimy zwrócić w ciągu 5 sekund. Jeśli to nastąpi, zdarzenie zostanie zarejestrowane w SharePoint i będzie zgłaszać komunikaty do naszej funkcji. Aby webhook był poprawnie rejestrowany w SharePoint Online każda z naszych funkcji musi posiadać poniższy fragment kodu. Jedyna jego funkcjonalność to odczytanie treści tokenu z przychodzącego zapytania HTTP i jeśli token istnieje, wysłanie go jako odpowiedź.

Więcej o rejestracji zdarzeń w SharePoint można przeczytać w artykule pt. Create a new subscription. Rejestracji można dokonać poprzez zapytanie REST lub korzystając z dodatku do Chrome o nazwie „SP Editor”.

Na chwilę obecną webhooki rejestrowane są w SharePoint na 90 dni i po upływie tego czasu należy ponowić rejestrację. Można to obsłużyć w kodzie funkcji Azure.

Jeśli funkcja jest poprawnie podłączona, po wystąpieniu zdarzeń otrzymamy dane o ich wystąpieniu. Przykład odczytu zdarzeń znajduje się poniżej. Przykład pokazuje odczytanie danych z zapytania HTTP, a następnie jego deserializację do obiektu. Model obiektu pokazany jest w dalszej części artykułu.

Aby kod skompilował się poprawnie należy jeszcze dodać plik „Projekt.json” o zawartości wskazanej poniżej. Plik ten odpowiada za import zewnętrznych bibliotek z NuGet potrzebnych do poprawnego działania funkcji.

Aby sprawdzić działanie webhook oraz funkcji należy dodać nowy element do listy Zamówienia. Po chwili w logu funkcji widać informacje o zgłoszeniu się webhooka. Zdarzenia mogą spłynąć z opóźnieniem do 5 minut.

W efekcie dodania nowego elementu do listy funkcja otrzyma notyfikację zbliżoną do poniższej:


{"value":[{
"subscriptionId":"364edea5-2a74-42dd-b718-xxxxxxxxxxxx",
"clientState":"pnp-js-core-subscription",
"expirationDateTime":"2018-06-10T18:52:34.2300000Z",
"resource":"1a4acced-4ac0-492a-97ee-xxxxxxxxxxxxx",
"tenantId":"f02c140c-df5e-4e1b-b82c-xxxxxxxxxxxx",
"siteUrl":"/sites/xxxxxxxxxxxxx",
"webId":"4a7b7a78-5eca-4bff-848a-xxxxxxxxxxxxxxx"
}]}

Najważniejsze parametry:

  • webId – ID witryny, która zgłosiła notyfikację
  • siteUrl – URL witryny, na której wystąpiło zdarzenie
  • resource – ID listy lub biblioteki, w której wystąpiło zdarzenie

Korzystając z wiedzy o dostępie do danych poprzez CSOM (przykład w artykule pt. SharePoint Online + Azure Free  Cześć 1 cykliczne przetwarzanie danych) będących w SharePoint, posiadane powyżej informacje są wystarczające, aby połączyć się do listy, która zgłosiła zdarzenie i odpowiednio na nie zareagować. Aby uzyskać informacje o elemencie, który się zmienił lub został dodany, można wykorzystać funkcję „getchanges” obiektu List. Więcej informacji można uzyskać czytając artykuł pt. Reading the SharePoint change log from CSOM autorstwa Paula Schaefleina lub korzystając z MSDNu.

Komunikacja z SharePoint

Podobnie, jak w przypadku “funkcji wyzwalanej cyklicznie”, zbudowanie kodu “funkcji obsługującej zdarzenia” jest identyczne, jak zbudowanie aplikacji konsolowej, która wykonywałaby operacje na danych znajdujących się w witrynie SharePoint. W Visual Studio wystarczy stworzyć projekt aplikacji konsolowej, doinstalować z NuGet biblioteki np. „Microsoft.SharePointOnline.CSOM 16.1.7414.1200” i stworzyć standardowe rozwiązanie komunikujące się i przetwarzające dane SharePoint. Dodatkowo, korzystając z bibliotek „Microsoft.Exchange.WebServices 2.2.0”, dostępnych również w NuGet, można połączyć się z Exchange i wysłać do użytkownika email z informacją o efekcie przetwarzania danych. Dodatkowo, do odczytania notyfikacji potrzebny jest jeszcze pakiet „Newtonsoft.Json 10.0.3”.

Powyższe przykłady są typową implementacją obsługi danych SharePoint, więc ich kod nie został przedstawiony w artykule.

Podsumowanie

Wykorzystując Azure Functions wyzwalane zdarzeniami w połączeniu z SharePoint Online można przygotować wiele dodatkowych mechanizmów przetwarzania danych, które do tej pory z różnych powodów były niedostane dla klientów. W przypadku, gdy zdarzenia nie pojawiają się zbyt często i wykonano poprawną optymalizację czasu wykonywania kodu, funkcjonalności mogą być dla klienta bezpłatne.

U naszych klientów spotkaliśmy się z różnymi potrzebami, które zostały zrealizowane z użyciem Azure Functions wyzwalanymi przez zdarzenia SharePoint:

  • Informowanie o nowych elementach w listach i bibliotekach SharePoint spełniających konkretne warunki
  • Wykonywanie obliczeń na danych zawartych w listach SharePoint po wystąpieniu zdarzeń
  • Uzupełnianie metadanych
  • Nadawanie uprawnień do elementów
  • Obsługa prostych procesów obiegu dokumentów

Podziel się

Autor: Kamil Warowny

Kamil Warowny

Kamil Warowny

Zespół: Apps

Ostatnie artykuły autora

SharePoint Online + Azure Free, Część 2: Zdarzenia dodania i edycji elementu listy bądź dokumentu

SharePoint Online + Azure Free, Część 2: Zdarzenia dodania i edycji elementu listy bądź dokumentu

W artykule przedstawiono możliwość wykorzystania bezpłatnych funkcjonalności Azure Functions w połączeniu z SharePoint Online celem automatycznych reakcji na dodanie lub edycję elementu listy lub dokumentu w witrynie SharePoint.

SharePoint Online + Azure Free, Cześć 1: Cykliczne przetwarzanie danych

SharePoint Online + Azure Free, Cześć 1: Cykliczne przetwarzanie danych

Niniejszy artykuł przedstawia możliwość wykorzystania bezpłatnych funkcjonalności Azure w połączeniu z SharePoint Online celem automatyzacji przetwarzania cyklicznego danych zamieszczonych w witrynie SharePoint.

SharePoint 2016 Farm Solutions + Angular

SharePoint 2016 Farm Solutions + Angular

Artykuł przedstawia sposób wykonania dodatku SharePoint 2016 Farm Solution w połączeniu z Angular.

Skontaktuj się z Kamilem

 

Administratorem danych gromadzonych z wykorzystaniem formularza jest A.P.N. Promise S.A. Podane przez Ciebie dane będą przetwarzane w zakresie niezbędnym do podjęcia kontaktu lub realizacji określonego żądania zgodnie z art. 6 ust. 1 lit. b RODO przez okres niezbędny dla realizacji Twojego zgłoszenia. Wszelkie informacje w zakresie przetwarzania podanych przez Ciebie w formularzu danych oraz posiadanych uprawnieniach znajdziesz w Polityce prywatności. Kliknij i dowiedz się więcej jeżeli informacje podane powyżej nie są dostatecznie jasne!