Ulepszenia w programie SharePoint 2010

Autor: Paul Andrew

Program SharePoint 2007 wprowadził przepływ pracy dla aplikacji pracy zespołowej, a wiele organizacji skorzystało na tym przenosząc procesy wykonywane ręcznie do przepływu pracy programu SharePoint. Głównym powodem, dla którego do tworzenia oprogramowania wykorzystujemy przepływ pracy jest zarządzanie procesami długotrwałymi. Natomiast, podczas gdy sprzęt komputerowy zaprojektowany jest tak, aby kończyć procesy możliwie najszybciej, oczekiwanie na to, aż człowiek wypełni formularze, podejmie decyzje, lub udostępni wyniki działań zewnętrznych zawsze trwa dłużej, niż milisekundowy czas reakcji wymagany, aby procesor CPU był zajęty. Przepływ pracy programu SharePoint jest idealnym sposobem automatyzacji takich procesów ręcznych, które wcześniej wymagały papieru, lub użycia złożonego oprogramowania do zapisywania i monitorowania czynności długotrwałych.

Windows Worflow Foundation po raz pierwszy wprowadzono w 2005 roku, pierwotnie jako część Microsoft .NET Framework 3.0. Obecnie program SharePoint 2010 oferuje wiele nowych ulepszeń dla deweloperów przepływu pracy i opiera się na popularności przepływu pracy w programie SharePoint 2007. Przepływ pracy SharePoint zalecany jest dla długotrwałych przepływów pracy ludzkiej, gdy często oczekujemy na ukończenie zadań przez człowieka. Niniejszy artykuł dokona wprowadzenia do głównych koncepcji i opisze nowe dostępne funkcje. Po pierwsze omówię nowe funkcje w programie SharePoint 2010 dla deweloperów przepływu pracy, a następnie przyjrzę się kilku nowym scenariuszom użytkownika.

Ulepszenia narzędzi tworzenia modelu przepływu pracy

Program SharePoint 2010 daje większy wybór narzędzi, aby umożliwić lepsze dopasowanie się do potrzeb tych, którzy tworzą i obsługują modele przepływu pracy. Wśród narzędzi przeznaczonych do programowania przepływu pracy są Visual Studio 2010, SharePoint Designer 2010 oraz Visio 2010.

Należy zauważyć, że program SharePoint 2010 wymaga .NET Framework 3.5. Następna wersja .NET Framework 4.0 jest obecnie opracowywana, ale osie czasu produktu wskazują na to, że program SharePoint 2010 nie będzie od tego środowiska zależny.

Program Visual Studio 2010 posiada wiele ulepszeń narzędzi wykorzystywanych przy projektach SharePoint, szczególnie w przypadku projektów przepływu pracy. Nowa funkcja pakowania SharePoint Solution (WSP) pomaga łatwo wdrożyć przepływy pracy na serwerze SharePoint, jednocześnie umożliwiając dodanie formularzy inicjowania oraz asocjacji przepływu pracy ASPX do projektów przepływu pracy Visual Studio 2010 (Ilustracja 1). W późniejszej części niniejszego artykułu pokażę, jak dodać formularz inicjacji.


llustracja 1: Szablony projektów programu Visual Studio 2010 w SharePoint

Program SharePoint Designer 2010 posiada również nowego graficznego projektanta przepływu pracy, który służy do opracowywania przepływów pracy i wdrażania ich bezpośrednio do programu SharePoint. Można go również użyć, jako narzędzia prototypującego przed dokonaniem dalszego opracowania przepływów pracy w programie Visual Studio 2010.

Kolejnym ulepszeniem w programie SharePoint Designer 2010 jest możliwość edytowania gotowych przepływów pracy, które znajdują się w programie SharePoint. Program SharePoint Designer 2010 używa również formularzy InfoPath, jeśli program InfoPath jest zainstalowany, lub składnika Web Part formularza danych, jeśli program InfoPath nie jest zainstalowany. Wcześniej program SharePoint Designer 2007 używał wyłącznie formularzy ASPX. Ponieważ obecnie możliwe jest użycie formularzy InfoPath, w bardzo łatwy sposób można je edytować w programie InfoPath, w celu dalszego udoskonalania ich. Jeśli w przepływie pracy określone zostaną nowe kolumny, będą one automatycznie dodane do schematu listy skojarzonej z przepływem pracy. Są to tzw. kolumny asocjacji, których można używać w całym przepływie pracy programu SharePoint Designer. Dane dotyczące profilu użytkownika można powiązać z właściwościami w przepływie pracy, umożliwiając otrzymywanie informacji na temat profilu użytkownika programu SharePoint. Można, na przykład, sprawdzić nazwisko bezpośredniego menadżera dokonującego zatwierdzeń.

Program SharePoint Designer 2010 zawiera nowego projektanta procesów zadań w przepływie pracy, jak również pozwala na elastyczność w sposobie zarządzania procesem zatwierdzania, a to wszystko w ramach jednego działania. Dotyczy to definiowania procesów eskalacji, delegowania, definiowania wymogów dotyczących zatwierdzania oraz semantyki sytuacji, w której podczas zatwierdzania następuje zmiana dokumentu źródłowego.

Modele przepływu pracy mogą być tworzone w programie Visio 2010, a następnie edytowane w programie SharePoint Designer 2010. Visio 2010 obsługuje notację modelowania procesów biznesowych. Obsługuje również podprocesy i kontenery, w celu rozbicia diagramu oraz walidację, w celu dokonania analizy diagramu, pod kątem poprawnej konstrukcji.

Nowe modele przepływu pracy w programie SharePoint 2010

Przepływy pracy witryny

Przepływy pracy witryny zwalniają deweloperów przepływu pracy z obowiązku wymagania uruchomienia przepływów pracy na elemencie listy, lub elemencie dokumentu. Jest to przydatne w sytuacji, gdy proces wdrażany przez przepływ pracy nie uruchamia się z powodu elementu listy, lub dokumentu. Jest to tak powszechny scenariusz, że deweloperzy tworzą fikcyjne listy oraz elementy tylko po to, aby dodać przepływy pracy. W programie Visual Studio 2010 wystarczy wybrać Przepływ pracy witryny (Site Workflow) podczas tworzenia elementu projektu przepływu pracy, tak, jak pokazuje Ilustracja 2.


Ilustracja 2 Okno dialogowe przepływu pracy witryny/listy

Do aktywowanych przepływów pracy witryny można przejść wybierając Site Workflows (Przepływy pracy witryny) z menu Akcje witryny w programie SharePoint. Pokazane są tam nowe przepływy pracy, które można uruchomić, dowolne uruchomione przepływy pracy witryny oraz ukończone przepływy pracy. Ponieważ przepływy pracy witryny nie posiadają elementu listy, ani dokumentu, z których mogłyby się uruchomić, należy uruchomić je ręcznie poprzez interfejs użytkownika programu SharePoint, lub poprzez interfejs API programu SharePoint.

Deklaratywne przepływy pracy wielokrotnego użycia

W programie SharePoint Designer 2010 możliwe jest tworzenie deklaratywnych przepływów pracy. W SharePoint 2007 model przepływu pracy utworzony w programie SharePoint Designer można powiązać tylko z jedną listą. Przepływy pracy wielokrotnego użycia nie polegają na określonej liście, lecz mogą zostać powiązane z dowolną listą. Taki projekt przepływu pracy może zostać użyty wielokrotnie i możemy powiązać go z wieloma listami. Ponadto możemy użyć polecenia Zapisz jako szablon, w celu utworzenia pliku WSP zawierającego przepływ pracy wielokrotnego użycia, który możemy przenieść na inny serwer SharePoint, lub do programu Visual Studio 2010. W programie SharePoint Designer oznacza to brak dostępu do pól listy, w celu uzyskania dostępu do danych, ponieważ żadna określona struktura listy nie została połączona.

Ulepszenia środowiska wykonawczego i hostingu

Przepływy pracy o wysokim poziomie uprawnień

W programie SharePoint 2007 przepływy pracy uruchamiane były jako tożsamość zalogowanego użytkownika. W programie SharePoint 2010 dzięki przepływom pracy o wysokim poziomie uprawnień można wskazać konto, które ma uruchomić przepływ pracy, aby nadać mu potrzebne dodatkowe uprawnienia (patrz Ilustracja 3). Podczas tworzenia przepływu pracy w programie SharePoint Designer 2010 możliwe jest dodawanie indywidualnych etapów, które umożliwiają uruchomienie go, jako autora przepływu pracy zamiast zalogowanego użytkownika.


llustracja 3: **Przepływ pracy programu SharePoint Designer pokazujący etap personifikacji o wysokim poziomie uprawnień

Lokalizacja usługi SPTimer**

Program SharePoint wykonuje instancje przepływu pracy w jednym, lub dwóch miejscach w zależności od ostatniej akcji. Jeśli ostatnia akcja w przepływie pracy oczekiwała na danych wprowadzonych przez użytkownika, przepływ pracy kontynuuje działanie na frontonie sieci Web, gdzie użytkownik ukończył wprowadzanie danych. Jeśli przepływ pracy kontynuowany jest z mechanizmu opóźniającego, lub ze zdarzenia otrzymanego gdzie indziej, uruchamia się w ramach usługi SPTimer. Korzystając z nowej opcji w administracji centralnej programu SharePoint możemy ustawić preferowany serwer, na którym uruchamia się usługa SPTimer. W tym celu kliknij w menu Zarządzanie bazami danych zawartości sekcji Zarządzanie aplikacjami administracji centralnej programu SharePoint. Następnie kliknij bazę danych zawartości i przewiń w dół do ustawienia Preferowany serwer dla zadań czasomierza (jak pokazuje Ilustracja 4). Można również ręcznie zatrzymać usługę SPTimer na dowolnym serwerze, na którym nie chcemy jej uruchamiać.


Ilustracja 4: Ustawianie Preferowanego serwera dla zadań czasomierza przepływu pracy

Ulepszenia komunikatów przepływu pracy

Program SharePoint 2010 dodaje cztery nowe odbiorniki zdarzeń przepływu pracy dla przepływów pracy opartych na liście. Dostępne cztery odbiorniki zdarzeń przepływu pracy to Uruchamianie, Uruchomiony, Przełożony oraz Ukończony (jak pokazuje Ilustracja 5). Są one podobne do pozostałych odbiorników zdarzeń programu SharePoint i w odpowiedzi na zdarzenie uruchamiają kod na serwerze. Aby uprościć proces opracowywania, w programie Visual Studio 2010 zawarto typy projektów odbiornika zdarzeń, aby ułatwić wykorzystanie tych zdarzeń. Nowe zdarzenia załączane są do określonej listy i uruchamiają się za każdym razem, gdy zdarzenie pojawi się w instancjach przepływu pracy powiązanych z tą listą, co oznacza, że te odbiorniki zdarzeń nie mogą uruchamiać się w przepływach pracy witryny. Odbiorniki zdarzeń również wymagają listy.


Ilustracja 5: Odbiorniki zdarzeń, które można utworzyć w programie Visual Studio 2010

Program SharePoint 2007 ułatwił zaangażowanie ludzi w przepływy pracy, ale wysyłanie, lub odbieranie komunikatów z systemów zewnętrznych sprawiało trudności. Zalecano użycie elementów zadania, w celu wysłania komunikatów do systemu zewnętrznego przy użyciu usługi sieci Web oraz aby system zewnętrzny aktualizował zadanie, by zwróciło wynik.

W programie SharePoint 2010 dodano obsługę łączonych usług przepływu pracy. Powinny być one znane deweloperom produktu Windows Workflow Foundation (WF). Określa się je poprzez utworzenie interfejsu zawierającego metody i zdarzenia. Taki interfejs podłączony jest do pary działań o nazwie CallExternalMethod oraz HandleExternalEvent. WF środowiska .NET Framework posiada narzędzie o nazwie WCA.exe, którego zadaniem jest generowanie opartych na interfejsie silnie typizowanych działań związanych z wysyłaniem i odbieraniem. Wygenerowane działania mogą zostać również użyte w przepływie pracy programu SharePoint. Nie wymagają one interfejsu ustawionego jako właściwości, a zatem mogą zostać przeciągnięte bezpośrednio z zestawu narzędzi do warstwy projektowania przepływu pracy.

Kod usługi zintegrowany z przepływem pracy programu SharePoint ładowany jest do pamięci podręcznej GAC, aby przepływ pracy mógł uzyskać do niego dostęp. Musi on dziedziczyć z klasy podstawowej SPWorkflowService, a odwoływanie się do niego następuje z web.config.

Przy użyciu nowych działań możliwe jest wysyłanie asynchronicznych komunikatów do systemów zewnętrznych bezpośrednio z przepływ pracy programu SharePoint. Zagłębię się w temat tworzenia oraz użycia tych działań w dalszej części niniejszego artykułu, w drugim zbiorze wskazówek.

Wskazówki dotyczące budowania prostego przepływu pracy w programie Visual Studio 2010

Głównym założeniem przepływu pracy w programie SharePoint jest interakcja z ludźmi, a zatem najprostszą rzeczą jest przypisać komuś zadanie i oczekiwać na reakcję. Poniżej pokażę, jak nowe narzędzia programu Visual Studio 2010 SharePoint upraszczają proces przypisywania zadań.

Krok 1 – Utwórz nowy projekt sekwencyjnego przepływu pracy programu SharePoint

Tworzenie nowego projektu przepływu pracy programu SharePoint jest proste. W nowym selektorze szablonów projektu wybierz sekwencyjny przepływ pracy, jak pokazuje Ilustracja 1. Można to również wykonać przy pomocy stylu przepływu pracy komputera stanu.

Nowy kreator projektów przepływu pracy ma cztery strony. Na pierwszej stronie wspólnej dla wszystkich szablonów projektów narzędzi programu SharePoint, identyfikujemy adres URL lokalnej witryny programu SharePoint, której chcemy użyć do wdrożenia lub debugowania rozwiązania, jak pokazuje Ilustracja 6.


Ilustracja 6: Pierwsza strona nowego Kreatora projektów przepływu pracy

Na drugiej stronie podajemy nazwę przepływu pracy i decydujemy, czy chcemy powiązać go z listą, czy z witryną. Strona ta została wcześniej pokazana na Ilustracji 2.

Na trzeciej stronie decydujemy, czy program Visual Studio ma za nas automatycznie powiązać przepływ pracy, czy zrobimy to ręcznie po jego wdrożeniu. Jeśli pozostawimy zaznaczone pole wyboru do dyspozycji będą wybrane opcje, z którymi lista może zostać powiązana (jeśli wcześniej wybierzemy przepływ pracy oparty na liście), historia przepływu pracy oraz listy zadań (patrz Ilustracja 7). Zwykle historia oraz lista zadań nie będą wymagały zmiany.


Ilustracja 7: Trzecia strona nowego Kreatora projektów przepływu pracy

Na czwartej i ostatniej stronie wybieramy sposób uruchomienia przepływu pracy (patrz Ilustracja 8).  Nie powinno się usuwać zaznaczenia wszystkich trzech możliwości, ponieważ wtedy bardzo trudno będzie go uruchomić. W przypadku przepływu pracy witryny możliwy jest jedynie wybór ręcznego uruchomienia. W przypadku przepływu pracy opartego na liście można również wybrać uruchamianie instancji przepływu pracy, gdy dokument jest tworzony, lub uruchamianie, gdy dokument zostanie zmieniony.


Ilustracja 8: Czwarta strona nowego Kreatora projektów przepływu pracy

Nowy pusty model przepływu pracy pokazany jest na Ilustracji 9 w warstwie projektowania programu Visual Studio 2010. Aktywowane działanie przepływu pracy pochodzi od działania HandleExternalEvent i zapewnia dane inicjujące z programu SharePoint do instancji przepływu pracy. Działanie HandleExternalEvent omówię w dalszej części.


Ilustracja 9: Domyślny pusty przepływ pracy pokazujący działanie WorkflowActivated

Krok 2 – Dodaj formularz inicjowania do przepływ pracy

Formularz inicjowania można pokazać użytkownikom podczas uruchamiania przepływu pracy. Pozwala to przepływowi pracy zebrać parametry przed uruchomieniem. Dodać go możemy w programie Visual Studio 2010 zwyczajnie klikając prawym przyciskiem myszy na element przepływu pracy w programie Solution Explorer, a następnie wybierając Dodaj i Nowy element, jak pokazuje Ilustracja 10. Wybierz szablon Formularz inicjowania przepływu pracy. Nastąpi automatyczne przypisanie nowego formularza do przepływu pracy. Jest to formularz ASPX, który edytujemy w HTML (patrz Ilustracja 11).


Ilustracja 10: Dodawanie formularza inicjowania przepływu pracy

Jedną metodę, o nazwie GetInitiationData, należy edytować w kodzie poza plikiem ASPX. Metoda ta zwraca jedynie ciąg. Jeśli istnieje wiele wartości, zaleca się ich serializację we fragmencie XML przed ich zwróceniem. Kiedy instancja przepływu pracy jest już uruchomiona, ciąg można uzyskać w prosty sposób odwołując się do workflowProperties.InitiationData. Wartości wielokrotne będą musiały zostać zdeserializowane z fragmentu XML, jeśli ich serializacja została dokonana w GetInitiationData.


Ilustracja 11: Domyślny formularz ASPX inicjowania przepływu pracy

W przypadku formularza inicjowania zostanie dodane pojedyncze pole tekstowe, a następnie zostanie ono zwrócone z metody GetInitiationData. Tagi w poniższym kodzie są dodawane wewnątrz pierwszego taga asp:Content, w następujący sposób:

<asp:TextBox ID="MyID" runat="server" /> <br />

Metoda GetInitiationData już istnieje . Wystarczy teraz dodać kod, aby zwrócić właściwość MyID.Text. Poniższy kod pokazuje kod zaktualizowanej metody:

private string GetInitiationData()
{
  // TODO: Return a string that contains the initiation data that will be passed to the workflow. Typically , this is in XML format.
  return MyID.Text;
}

Krok 3 – Dodaj działanie z dziennika przepływu pracy

Działanie LogToHistoryList jest niezwykle łatwe w użyciu. Każda utworzona instancja przepływu pracy posiada listę historii, którą można wyświetlić w interfejsie użytkownika programu SharePoint. Działanie bierze parametr pojedynczego ciągu i dodaje element do tej listy. Można go użyć do raportowania stanu instancji przepływu pracy do wdrożonych użytkowników. Wystarczy przeciągnąć działanie LogToHistoryList z przybornika do projektu przepływu pracy i ustawić właściwość opisu (patrz Ilustracja 12).


Ilustracja 12: Przybornik programu Visual Studio pokazuje czynności przepływu pracy programu SharePoint

Właściwości w przepływach pracy mają nazwę właściwości zależności. Są one powiązane w środowisku wykonawczym z inną właściwością zależności działań, taką jak pole, właściwość, lub metoda. Proces ten często nazywa się procesem połączeniowym. Pozwala on na współpracę działań w przepływie pracy nawet, jeśli nie posiadają one dla siebie nawzajem szczegółowych informacji o typie w czasie kompilacji. Każda właściwość w oknie właściwości w programie Visual Studio jest połączona z polem klasy, lub z właściwością klasy w klasie przepływu pracy. Najłatwiej jest tworzyć pola, a okno dialogowe, które pojawia się podczas procesu łączenia właściwości przepływu pracy, pozwala na tworzenie nowych pól, tworzenie nowych właściwości, lub łączenie z właściwościami już istniejącymi.


Ilustracja 13: Powiązanie właściwości zależności z utworzonym polem

Ilustracja 13 pokazuje dodawanie nowego pola z nazwą domyślną. Poniżej znajduje się kod dodany do obsługi zdarzeń MethodInvoking dla działania, w celu ustawienia właściwości w danych inicjacji przepływu pracy:

public String logToHistoryListActivity1_HistoryDescription1 = default(System.String);

private void logToHistoryListActivity1_MethodInvoking(object sender, EventArgs e)
{
  logToHistoryListActivity1_HistoryDescription1 = workflowProperties.InitiationData;
}

Właściwość HistoryDescription można ustawić bezpośrednio w kodzie, ponieważ nie łączy się ona między działaniami, ale jest to proste działanie dobre do tego, aby nauczyć się nieco na temat właściwości zależności.

Krok 4 – Dodaj działanie CreateTask

Krok ten jest główną częścią interakcji przepływu pracy ludzkiej, znaną jako element zadania SharePoint. Utwórz zadanie, przypisz je do osoby, a następnie poczekaj, aż dana osoba wprowadzi w nim zmiany. Działanie CreateTask musi zostać przeciągnięte do warstwy projektowania przepływu pracy, a następnie skonfigurowane z wszystkimi wymaganymi właściwościami. Ilustracja 14 pokazuje okno właściwości CreateTask zaraz po przeciągnięciu tam działania.


Ilustracja 14: Okienko właściwości pokazujące działanie CreateTask

Pierwszym potrzebnym w tej sytuacji elementem jest token korelacji dla zadania. Token korelacji używany jest do korelacji komunikatów w przepływie pracy. Zapewnia on unikatowy identyfikator, który umożliwia mapowanie między obiektem zadania w określonej instancji przepływu pracy a środowiskiem wykonawczym przepływu pracy w programie SharePoint. Wykorzystuje się to, aby, kiedy program SharePoint otrzymuje komunikat dla instancji przepływu pracy, mógł on zlokalizować poprawne zadanie wewnątrz poprawnej instancji przepływu pracy. Właściwość CorrelationToken musi być skonfigurowana. Nie zaleca się natomiast użycia WorkflowToken dla zadań, mimo że nie jest to zabronione w narzędziu. Wprowadź TaskToken, jako nową nazwę tokena korelacji i naciśnij Enter. Następnie rozwiń symbol (+), który się pojawi i kliknij listę rozwijaną po prawej od OwnerActivityName i wybierz przepływ pracy.

Należy skonfigurować TaskId oraz określić nowy identyfikator GUID dla identyfikatora zadania. Można to zrobić wybierając właściwość TaskId i klikając wielokropek […], w celu wywołania edytora właściwości. Kliknij kartę Dowiąż do nowego członka, wybierz Utwórz pole, a następnie kliknij OK. To samo należy zrobić w przypadku właściwości TaskProperties ponownie wybierając właściwość, klikając wielokropek oraz dodając nowe pole. Następnie dwukrotnie kliknij nowe działanie CreateTask w warstwie projektowania przepływu pracy, aby wywołać kod obsługi createTask1_MethodInvoking i ustawić właściwości w kodzie.

Nowemu zadaniu należy nadać tytuł. Oprócz tego ustawię opis zadania w ciągu, który wziąłem z formularza inicjacji. Oto dodany kod po ustawieniu tych wszystkich właściwości:

public Guid createTask1_TaskId1 = default(System.Guid);
public SPWorkflowTaskProperties createTask1_TaskProperties1 = new
  Microsoft.SharePoint.Workflow.SPWorkflowTaskProperties();

private void createTask1_MethodInvoking(object sender, EventArgs e)
{
  createTask1_TaskId1 = Guid.NewGuid();
  createTask1_TaskProperties1.Title = "Hello";
  createTask1_TaskProperties1.Description = workflowProperties.InitiationData;
}

Krok 5 – Dodaj działania OnTaskChanged oraz CompleteTask

Użyj działania While, aby oczekiwać na zmiany w zadaniu, aż zobaczysz zmiany, które Cię interesują. Działanie to musi zawierać inne działanie, takie jak OnTaskChanged. Działanie Listen może również zostać wykorzystane do nasłuchiwania wielu zdarzeń w tym samym czasie poprzez dodanie działania Listen z rzeczywistym odbiornikiem zdarzeń wewnątrz gałęzi Listen. Można ewentualnie poczekać do momentu usunięcia zdarzenia działaniem OnTaskDeleted.

Częstym wymogiem jest eskalowanie, lub limit czasu oczekiwania na zdarzenie. Spełnić go można poprzez użycie działania Listen do nasłuchiwania zarówno zmienionego komunikatu zadania, jak i komunikatu czasomierza przy użyciu działania Delay. Pierwszy komunikat, jaki otrzyma jedno z dwóch działań wznawia przepływ pracy, a pozostałe działania kończą oczekiwanie. Działanie Delay wysyła komunikat, kiedy wystąpi limit czasu.

Powyżej opisałem wiele opcji, ale najprostszą jest użycie OnTaskChanged, które będzie oczekiwać na dowolną zmianę elementu zadania, a następnie będzie kontynuować. Aby skonfigurować OnTaskChanged, należy przyłączyć właściwości CorrelationToken oraz TaskId do tych samych pól, co CreateTask.

Na koniec dodaj działanie CompleteTask i ponownie ustaw działania CorrelationToken oraz TaskId. Jak pokazuje Ilustracja 15, działania, które oczekują na komunikat są zielone, a działania, które wysyłają komunikat mają kolor niebieski. Schemat ten pozostaje niezmienny w całym przepływie pracy programu SharePoint.


Ilustracja 15: Ukończony prosty model zadania przepływu pracy

Krok 6 – Wdrażaj i przetestuj przepływ pracy

Przepływ pracy jest już prawie kompletny, więc naciśnij F5 i oczekuj na wdrażanie. Wciśnięcie F5 skompiluje przepływ pracy, spakuje przepływ pracy do WSP, wdroży WSP do programu SharePoint, aktywuje funkcje programu SharePoint, załączy debugera Visual Studio 2010 do programu SharePoint i uruchomi program Internet Explorer z witryną programu SharePoint.

Kiedy witryna programu SharePoint pojawi się, wybierz Przepływy pracy witryny z menu Akcje witryny. Pokazane zostaną wszystkie przepływy pracy witryny. Aby uruchomić swój przepływ pracy, kliknij go. Po dokonaniu wyboru zobaczysz formularz swojego przepływu pracy, jak pokazuje Ilustracja 16.


Ilustracja 16: Formularz inicjacji przepływu pracy

Do niniejszego podstawowego początkowego modelu przepływu pracy można dodać również inne ulepszenia, takie jak użycie typu zawartości, w celu określenia zadania, jakie przypisujemy osobie, użycie poczty elektronicznej do powiadamiania użytkowników o przypisanym im zadaniu, a nawet użycie formularzy InfoPath do tworzenia dla użytkowników bardziej złożonych formularzy wypełnianych w wiadomości email, lub online.

Wskazówki dotyczące budowania łączonej usługi przepływu pracy

Nowością w programie SharePoint 2010 jest możliwość dodawania łączonych usług przepływu pracy do programu SharePoint. Taka możliwość zawsze istniała w funkcji Windows Workflow Foundation, ale środowisko wykonawcze przepływu pracy hostowane przez program SharePoint było zablokowane i wcześniej na to nie zezwalało. Łączone usługi przepływu pracy zaprojektowane są głównie do wysyłania i odbierania komunikatów z instancji przepływu pracy. Jednak są one również przydatne dla dowolnych długotrwałych operacji systemowych takich, jak długotrwała kalkulacja.

Jest to mechanizm wykorzystywany przez środowisko wykonawcze przepływu pracy do zarządzania długotrwałymi pracami, jak generalizacja obsługi wiadomości. Zwyczajnie wykonuje krótkotrwałe prace w ramach działań i zawiesza przepływ pracy do momentu ukończenia akcji długotrwałych, lub otrzymania komunikatu o wskazaniu osoby, która ukończyła zadanie. Zatem oczekując na odpowiedź danej osoby instancja przepływu pracy zostaje zapisana w magazynie trwałym i nie korzysta z zasobów CPU i RAM na serwerze, na którym jest uruchomiona. (Zapis w magazynie trwałym oznacza po prostu, że stan instancji przepływu pracy zostaje zapisany w rekordzie bazy danych w taki sposób, aby możliwe było jej przywrócenie z magazynu trwałego oraz późniejsze kontynuowanie.)

Wszystkie typy zadań długotrwałych obsługiwane są przez przepływ pracy w taki sam sposób. Po pierwsze uruchamia on długotrwałe zadanie, lub wysyła komunikat, a następnie zawiesza przepływ pracy do momentu zakończenia zadania długoterminowego, lub do czasu otrzymania odpowiedzi. Aby upewnić się, że po otrzymaniu odpowiedzi wznowiono prawidłową instancję przepływu pracy, wykorzystuje się token korelacji.

Rozważmy zatem dwa elementarne przykłady pracy długoterminowej. Jeden przykład to synchroniczne żądanie usługi sieci Web, gdzie wywołujący jest zablokowany do momentu otrzymania odpowiedzi w kanale. Taka sytuacja nie jest dostosowana do uruchamiania w ramach działania przepływu pracy. Aby ukończyć działanie, usługa przepływu pracy musi poczekać na wywołanie usługi sieci Web. Następnie wysyła komunikat z odpowiedzią z powrotem do instancji przepływu pracy. Innym przykładem jest element roboczy intensywnie korzystający z procesora CPU, który musi zostać uruchomiony, ale ponieważ może to zająć więcej czasu, niż sekundę, uruchamia się go poza działaniem przepływu pracy. Co więcej, możesz użyć usługi przepływu pracy i utworzyć w niej wątek, w celu wykonania elementu roboczego intensywnie korzystającego z procesora CPU. Nowy wątek odsyła komunikat, jak tylko zostanie zakończony.

Oba opisane przykłady wdrażane są tym samym schematem. Niniejszy zbiór wskazówek pokazuje, jak utworzyć nowy sekwencyjny przepływ pracy programu SharePoint i wywołać usługę połączenia przepływu pracy, która bierze pod uwagę liczby pierwsze, aby określić ile liczb pierwszych znajduje się w zbiorze poniżej 100 000 000. Takie zadanie zajmuje zbyt wiele czasu, aby wykonywać je w linii głównej działania.

Krok 1 – Utwórz łączoną usługę przepływu pracy

Aby utworzyć łączoną usługę przepływu pracy w programie Visual Studio 2010, należy wdrożyć usługę, jako interfejs i sklasyfikować ją w projekcie. Ilustracja 17 pokazuje przykład łączonej usługi przepływu pracy, którą można dodać do projektu w nowym pliku klasy o nazwie MyService.cs. W kodzie, definicja interfejsu znajduje się w IMyService, implementacja interfejsu w klasie MyService a metoda MessageOut uruchamia większość warunków logicznych poprzez anonimową metodę delegowania w oddzielnym wątku, gdzie wywołanie RaiseEvent odsyła komunikat do oczekującego działania HandleExternalMessage.

Ilustracja 17: Łączona usługa przepływu pracy

// Interface declaration
[ExternalDataExchange]
public interface IMyService
{
  event EventHandler<MyEventArgs> MessageIn;
  void MessageOut(string msg);
}

// Arguments for event handler
[Serializable]
public class MyEventArgs : ExternalDataEventArgs
{
  public MyEventArgs(Guid id) : base(id) { }
  public string sAnswer;
}

// Class for state
class FactoringState
{
  public SPWeb web;
public Guid instanceId;
  public FactoringState(Guid instanceId, SPWeb web)
  {
    this.instanceId = instanceId;
    this.web = web;
  }
}

// Interface implementation
class MyService : Microsoft.SharePoint.Workflow.SPWorkflowExternalDataExchangeService,
                  IMyService
{
  public event EventHandler<MyEventArgs> MessageIn;
  public void MessageOut(string msg)
  {
    ThreadPool.QueueUserWorkItem(delegate(object state)
      {
        FactoringState factState = state as FactoringState;
        DateTime start = DateTime.Now;
        int topNumber = 100000000;
        BitArray numbers = new System.Collections.BitArray(topNumber, true);

        for (int i = 2; i < topNumber; i++)
        { if (numbers[i]) { for (int j = i * 2; j < topNumber; j += i)
          numbers[j] = false; } }
        int primes = 0; for (int i = 2; i < topNumber; i++)
        { if (numbers[i]) primes++; }

        string sAnswer = "Found " + primes + " in " +
          Math.Round(DateTime.Now.Subtract(start).TotalSeconds, 0) + " seconds";

        // Send event back through CallEventHandler
        RaiseEvent(factState.web, factState.instanceId, typeof(IMyService),
                   "MessageIn", new object[] { sAnswer });
      }, new FactoringState(WorkflowEnvironment.WorkflowInstanceId,
                            this.CurrentWorkflow.ParentWeb));
    }

    // Plumbing that routes the event handler
    public override void CallEventHandler(Type eventType, string eventName,
      object[] eventData, SPWorkflow workflow, string identity,
      System.Workflow.Runtime.IPendingWork workHandler, object workItem)
    {
      var msg = new MyEventArgs(workflow.InstanceId);
      msg.sAnswer = eventData[0].ToString();
      msg.WorkHandler = workHandler;
      msg.WorkItem = workItem;
      msg.Identity = identity;
      // If more than one event - you'd need to switch based on parameters
      this.MessageIn(null, msg);
    }
    public override void CreateSubscription(MessageEventSubscription subscription)
    { throw new NotImplementedException(); }
    public override void DeleteSubscription(Guid subscriptionId)
    { throw new NotImplementedException(); }

Krok 2 – Aktualizuj web.config

Kiedy łączona usługa przepływu pracy zostanie utworzona, należy ją zarejestrować w środowisku wykonawczym przepływu pracy uruchomionym w programie SharePoint. Aby wykonać tę czynność, edytuj sekcję web.config dla usług przepływu pracy. Wymagana edycja web.config powinna zostać wykonana przy użyciu odbiornika funkcji, który wywołuje SPWebApplication.WebConfigModifications.Add. Poniższy kod pokazuje wpis dodatkowej konfiguracji, która ma zostać dodana:

<WorkflowServices><WorkflowService Assembly="WorkflowProject1, Version=1.0.0.0, Culture=neutral, PublicKeyToken=YOURPUBLICKEY" Class="WorkflowProject1.MyService">
</WorkflowService></WorkflowServices>

Nazwę zestawu oraz informacje na temat klucza publicznego można uzyskać przy użyciu GACUTIL.EXE /l.

Krok 3 – Utwórz model przepływu pracy

Pozostałe czynności są już prosta. Dodaj działania Call External Method i Handle External Event do przepływu pracy i skonfiguruj je, aby wskazać je usłudze, jak pokazuje Ilustracja 18. Działanie Call External Method wywoła MessageOut w usłudze, a działanie Handle External Event będzie oczekiwać na MessageIn zdarzenia. Wymaga to ustawienia właściwości InterfaceType oraz EventName w każdym z dwóch działań.


Ilustracja 18: Przepływ pracy ukończony przy użyciu łączonych usług przepływu pracy


Ilustracja 19: Ukończona łączona usługa przepływu pracy dokonująca obliczeń liczb pierwszych

Krok 4 – Uruchom przepływ pracy

Kiedy uruchomisz przepływ pracy, uruchomi on oddzielny wątek w łączonej usłudze przepływu pracy, aby wykonała obliczenia liczb pierwszych. Po 10-15 sekundach od uruchomienia pojawi się element historii przepływu pracy, jak pokazuje Ilustracja 19. Pokazane jest, że poniżej 100 000 000 znajduje się 5 761 455 liczb pierwszych.

Jak pokazano, istnieje kod, który można napisać dla łączonych usług przepływu pracy oraz więcej kodów dla każdego systemu, z jakim się łączymy. Istnieją dwie opcje redukcji ilości kodu wymaganej do komunikowania się z usługami zewnętrznymi. Jedna polega na sprzężeniu z serwerem BizTalk Server i wykorzystaniu biblioteki karty BizTalk, w celu łączenia się z innymi systemami. Druga opcja polega na użyciu usług łączności biznesowej w programie SharePoint 2010, które zapewniają sposób uwidaczniania danych z innych systemów poprzez zewnętrzne listy.

Prosty i skuteczny

Nowe narzędzia w programach Visual Studio 2010, SharePoint Designer 2010 oraz Visio 2010, sprawiają, że deweloperom łatwiej jest rozpocząć skuteczne działanie z przepływem pracy w programie SharePoint 2010. Dzięki nowym funkcjom w hoście przepływu pracy programu SharePoint 2010 program SharePoint jest zarówno bardziej niezawodny, jak i bardziej odpowiedni do rozwiązywania szerszego zakresu problemów z oprogramowaniem w przepływie pracy.

Niełatwo jest zbudować przepływy pracy, ani wdrożyć je do programu SharePoint przy użyciu standardowych narzędzi pakowania pliku WSP programu SharePoint WSP, które dostarczane są z programem Visual Studio 2010. Umiejętność wdrażania do standardowych witryn programu SharePoint, które są powszechne w dużych firmach oznacza, że przepływy pracy mogą zostać zastosowane w znaczenie prostszy sposób. Przepływy pracy w programie SharePoint ułatwiają tworzenie długotrwałych procesów, które komunikują się z ludźmi poprzesz zadania i wiadomości email. Przepływy pracy w programie SharePoint obecnie ułatwiają również komunikację z systemami poprzez łączone usługi przepływu pracy, usługi łączności biznesowej oraz serwer BizTalk Server.

Kod dla obu zbiorów wskazówek zawartych w niniejszym artykule można pobrać z mojego blogu pod adresem blogs.msdn.com/pandrew.