Modelowanie procesów za pomocą C#

Uwaga
W wersji 2020.0.0 Comarch DMS mechanizm modelowania procesów metodą C# jest wersją beta.

Od wersji 2021.1.0 modelowanie procesów w języku C# jest objęte licencją Premium.

Oprogramowano funkcjonalność tworzenia własnych zdarzeń w języku C#. W aktualnej wersji możliwość modelowania zdarzeń w języku C# dostępna jest w kontrolkach:

  • Dane tabelaryczne,
  • Dane tabelaryczne, kolumna typu lista,
  • Data i godzina,
  • Dokument elektroniczny,
  • Komunikat,
  • Kontrahent,
  • Liczba całkowita,
  • Liczba rzeczywista,
  • Liczba stałoprzecinkowa,
  • Lista,
  • Tekst,
  • Towar,
  • Własna akcja.

W większości kontrolek możliwe jest tworzenie skryptów służących zarówno inicjowaniu wartości w kontrolkach, jak i obserwowaniu wartości innych kontrolek. Obserwowanie wartości umożliwia „reagowanie” na zmiany. Dla kontrolek typu dane tabelaryczne oraz własna akcja możliwa jest również „obserwacja samej siebie”.

Aby włączyć funkcjonalność należy przy instalacji lub aktualizacji systemu zaznaczyć parametr „Wersja Premium” lub w w pliku Web.config wartość klucza PremiumFunctionality ustawić na „True” i wprowadzić odpowiedni klucz licencji.  <add key=”PremiumFunctionality” value=”false” />

Włączenie edytora C# skutkuje pojawieniem się dodatkowych opcji na definicjach kontrolek.

Pozycja C# Script w opcjach inicjowania wartości kontrolki typu tekst

Pozycja C# Script w kontrolce typu Własna akcja

Po wskazaniu inicjowania wartości za pomocą C# Script i kliknięciu w 
uruchamiana jest formatka, w której należy wpisać kod C#.

Okno Skrypt C#

Okno Skrypt C# składa się z pola, w którym należy wpisać kod, a następnie skompilować i zapisać przyciskiem .

Kod po skompilowaniu zapisywany jest w formie biblioteki w lokalizacji …\bin\.scriptsc_cache w katalogu, w którym zainstalowano aplikację web Comarch DMS.

W polu Referencje należy wpisać nazwy bibliotek, z których będzie korzystał kod C#. Domyślną lokalizacją, w której należy umieścić biblioteki jest …\bin\scripts_bin w katalogu, w którym zainstalowano aplikację web Comarch DMS.

W edytorze skryptów C# wyświetlane są podpowiedzi zawierające obiekty kontrolek karty obiegu (Globals.MainFrame.*) oraz zmienne (Globals.Common.*).

Podpowiedzi wyświetlane w edytorze skryptów C#

Modelowanie procesów za pomocą skryptu C# – podstawowe informacje

Użytkownik modelujący typ obiegu metodą C# ma do dyspozycji obiekt „Globals”, dzięki któremu ma dostęp do takich informacji jak np. identyfikator dokumentu Poprzez ten obiekt ma również dostęp do wartości kontrolek znajdujących się na karcie obiegu.

Obiekt „Globals” zawiera następujące informacje (właściwości):

  • Właściwość „Common” – w której znajdują się następujące identyfikatory:
    • UserId (typu int) Identyfikator operatora,
    • WorkflowId (typu int) Identyfikator typu obiegu,
    • DocumentId (typu int?) Identyfikator dokumentu,
    • StageId (typu int?) Identyfikator etapu,
    • DocumentCompanyId (typu int) Identyfikator spółki,
    • ParentDocumentId (typu int?) Identyfikator właściciela dokumentu.

Typ zakończony „?” (int?) oznacza, że oprócz wartości numerycznych zmienna może przechowywać również wartość NULL (pustą). Przykładowa sytuacja to brak wpisanej wartości w kontrolce typu liczba całkowita.

  • Właściwość „MainFrame” – zawiera nazwy identyfikatorów kontrolek z karty obiegu.

W kontrolce Dane tabelaryczne dostępne są następujące funkcje i właściwości:

  • MainFrame.<nazwaDT>.Items[Index]… – odwołanie do wartości kontrolki
    • Funkcje
      • MainFrame.<nazwaDT>.AddRow() – dodaj kolejny wiersz.
      • MainFrame.<nazwaDT>.AddRows(count) – dodaj wiersze, gdzie „count” oznacza ile wierszy ma zostać dodane.
      • MainFrame.<nazwaDT>.RemoveRow(index) – usuń wiersz, gdzie „index” to wiersz, który ma zostać usunięty.
      • MainFrame.<nazwaDT>.Clear() – usuwa wszystkie wiersze.
    • Właściwości
      • MainFrame.<nazwaDT>.Column – informacja o modyfikowanej komórce – numer kolumny.
      • MainFrame.<nazwaDT>.Row – informacja o modyfikowanej komórce – numer wiersza.
      • MainFrame.<nazwaDT>.RowCount – informacja o ilości wierszy w DT
.
Wskazówka
W tablicach C# – pierwszy wiersz to 0
Uwaga

Podczas pierwszego uruchomienia operacji zamodelowanej mechanizmem C# może nastąpić opóźnienie działania mechanizmu. Wynika to z konieczności załadowania biblioteki dll do pamięci komputera.

Ze względu na konieczność zachowania nomenklatury nazewniczej języka C#, nie jest możliwe używanie polskich znaków diakrytycznych oraz spacji w identyfikatorach kontrolek.

Użytkownik może modyfikować wartości kontrolek poprzez modyfikację właściwości „Value” lub „Text”. Np. Globals.MainFrame.Liczba.Value = 10;

Możliwe jest to jednak tylko dla kontrolek, dla których został wprowadzony kod C#, czyli zostało wywołane zdarzenie OnInit lub OnChange (obserwacja). Pozostałe właściwości są tylko do odczytu.

Przyklad
Przepisanie wartości z kontrolki typu liczba całkowita o nazwie Liczba do kontrolki typu tekst o nazwie Tekst:

Globals.MainFrame.Tekst.Text = Globals.MainFrame.Liczba.Value.ToString();

Przyklad

Pobranie wartości z kontrolki skladnik i zapisanie tej wartości w kontrolce suma powiększonej o 1.

var a = Globals.MainFrame.skladnik.Value ?? 0; // jeżeli pusta wartość zapisz 0
a = a + 1;
Globals.MainFrame.suma.Value = a;

Przyklad

Przepisanie wartości z kontrolki typu tekst do kontrolki typu liczba całkowita, pod warunkiem, że wpisana wartość jest liczbą.

if (IsNumeric (Globals.MainFrame.Wartosc_tekst.Text))
{
Globals.MainFrame.Liczba.Value = Int32.Parse(Globals.MainFrame.Wartosc_tekst.Text);
}

public static bool IsNumeric(string value)
{
return value.All(char.IsNumber);
}

Przyklad

Przykład pobrania informacji o identyfikatorze operatora i wyświetlenia jej w kontrolce typu tekst.

var info = „Identyfikator operatora: ” + Globals.Common.UserId;
Globals.MainFrame.Informacja.Text = info;

Dla kontrolki „Własna akcja” został oprogramowany przełącznik, dzięki któremu można wskazać miejsce uchronienia skompilowanego kodu C#. Istnieje możliwość uruchomienia kodu w ramach procesu IIS lub w ramach niezależnego procesu (jednowątkowego). Uruchomienie na niezależnym procesie zalecane jest w przypadku obsługi API, które nie powinno działać na procesach wielowątkowych, jakim jest proces IIS.

Ustawienie miejsca uruchomienia kodu C# dla kontrolki „Własna akcja”

Czy ten artykuł był pomocny?