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

Kamil Warowny

SharePoint Online + Azure Free, Cześć 1: Cykliczne przetwarzanie danych
Sierpień 14, 2018 APN Promise SA

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.

Wielu klientów korzystających z SharePoint Online po raz pierwszy lub takich, którzy zmigrowali się z wersji on-premise trafia na wymagania biznesowe, które do zrealizowania potrzebują cyklicznego i 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 było uruchamiać zadania cykliczne (Joby).

W części przypadków rozwiązaniem było przygotowanie np. usługi Windows, która po uruchomieniu na serwerze Windows (fizycznym lub wirtualnym) co określony czas przetwarzała dane. Jednak nie każdy z klientów posiada serwery które są nieustannie włączone.

Z pomocą przychodzą nam Azure Functions.

Azure Functions

Funkcje Azure pozwalają na tworzenie nieskomplikowanych funkcji bezserwerowych w chmurze. Mogą być skalowane w miarę 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. Raz dziennie do pracownika obsługującego dostarczanie licencji ma spływać informacja o nowych zamówieniach.

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 wykonywanych cyklicznie.

Tworzenie funkcji

Po wejściu w panel administracyjny Azure dodajemy Function App. Następnie dodajemy funkcję typu Timer np. w języku C#.

Po chwili oczekiwania mamy już gotową funkcję.

Po przejściu do zakładki „Integrate” możemy zdefiniować częstotliwość uruchamiania funkcji zgodnie ze standardem CRON.

Powyższy przykład pokazuje wywołanie funkcji co 5 minut.

Przykład zastosowania

Na witrynie SharePoint stworzono listę Zamówienia widoczną poniżej. Do listy trafiają informacje o sprzedaży produktu u klientów. Raz dziennie system ma powiadamiać pracownika o nowych zamówieniach.

Przykład implementacji funkcji Azure:


using Microsoft.SharePoint.Client; 
using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Net; 
using System.Security; 
using System.Text; 
using System.Threading.Tasks; 

public static void Run(TimerInfo myTimer, TraceWriter log) 
{ 

using (ClientContext clientContext = new ClientContext(„https://NAZWA_TENATA.sharepoint.com/sites/NAZWA_WITRYNY/")) 
{ 
SecureString passWord = new SecureString(); 
foreach (char c in „HASŁO".ToCharArray()) 
passWord.AppendChar(c); 

clientContext.Credentials = new SharePointOnlineCredentials(„UŻYTKOWNIK@DOMENA.PL", passWord); 

Web web = clientContext.Web; 

List zamowienia = web.Lists.GetByTitle(„Zamówienia"); 

ListItemCollection items = zamowienia.GetItems(CamlQuery.CreateAllItemsQuery()); 

clientContext.Load(web); 
clientContext.Load(zamowienia); 
clientContext.Load(items); 
clientContext.ExecuteQuery(); 

var itemsFromToday = items.Where(ee => ((DateTime)ee[„Created"]).Date == DateTime.Now.Date).ToList(); 

StringBuilder sb = new StringBuilder(); 
sb.Append(„<h2>Nowe zamówienia</h2>"); 

foreach (ListItem item in itemsFromToday) 
{ 
sb.Append(„<p>Klient: " + item[„Klient"].ToString() + „</p>"); 
sb.Append(„<p>Produkt: " + item[„Produkt"].ToString() + „</p>"); 
sb.Append(„<p>Ilość: " + item[„Licencje"].ToString() + „</p>"); 
sb.Append(„<p></p>"); 
} 

SendMail(sb.ToString(), log); 
} 

} 

private static void SendMail(string v, TraceWriter log) 
{ 
log.Info($"Message: „+v); 

// do wysłania wiadomości można użyć np. Exchange Web Services (EWS) 
}

Powyższy kod jest tylko przykładem i powinien być zoptymalizowany np. poprzez zbudowanie zapytania CAML które wyfiltruje zamówienia stworzone danego dnia aby nie przetwarzać wcześniejszych zamówień.

Do poprawnego uruchomienia funkcji wymagane jest dodanie pliku Project.json o zawartości pokazanej poniżej. Dzięki temu Azure dołączy do naszej funkcji wymagane biblioteki z NuGet.

Jeśli wszystko napisaliśmy poprawnie po kliknięciu w przycisk Run zobaczymy poniższy efekt:

W ramach testów funkcja została ustawiona aby startować co 5 minut. Poprawne działanie możemy zobaczyć w logu:

Po poprawnym przetestowaniu funkcji należy ustawić jej docelowe wyzwalanie. Dla przykładu ustawienie wyzwalania codziennie o godzinie 23:

Komunikacja z SharePoint i Exchange

Zbudowanie kodu funkcji jest identyczne jak zbudowanie aplikacji konsolowej które wykonywała by 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” również dostępnych w NuGet można połączyć się z Exchange i wysłać email do użytkownika informujący o efekcie przetwarzania danych. Należy jednak pamiętać aby referencje do bibliotek NuGet wskazać w pliku Project.json pokazanym w przykładzie.

Podsumowanie

Wykorzystując Azure Functions 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 korzystających z usługi Office 365. Przy racjonalnym ustawieniu częstotliwości przetwarzania danych i optymalizacji 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 wyzwalanych co określony czas:

  • Informowanie o nowych elementach w listach i bibliotekach SharePoint spełanijących konkretne warunki
  • Wykonywanie obliczeń na danych zawartych w listach SharePoint
  • Przygotowywanie raportów w oparciu o dane SharePoint
  • Przesyłanie do bibliotek SharePoint wiadomości ze skrzynek Exchange
  • Generowanie globalnych kalendarzy i list zadań w oparciu o kalendarze i zadania na witrynach zespołowych

 

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!