Język skryptowy systemu jest używany w Workflow Management, na przykład do formułowania warunku wstępnego lub warunku przejścia lub do określania operatorów, którzy nie są podsumowani w roli workflow.
Mechanizm workflow obsługuje zarówno własny język skryptowy systemu, jak i JavaScript w celu wyrażania złożonych relacji. Niniejsza dokumentacja zawiera szczegółowe informacje na temat poszczególnych funkcji workflow w języku skryptowym systemu. Funkcje workflow to funkcje, których kontekst użycia wymaga definicji działania. Funkcje workflow, które wymagają istnienia działania, nie mogą być używane w warunkach przejścia, ponieważ działanie nie zostało jeszcze utworzone, gdy oceniany jest warunek przejścia. Przykładami funkcji workflow są setActivityWorkDuration i setActivityPriority, które określają czas trwania przetwarzania lub priorytet, gdy tworzona jest działanie workflow.
Przykłady przedstawione w niniejszym dokumencie mają pomóc w zrozumieniu sposobu korzystania z funkcji i poleceń języka skryptowego systemu. Aby użyć przykładów w innych kontekstach aplikacji, może być konieczne ich dostosowanie. Niniejszy dokument zawiera również przykłady funkcji, które nie są częścią języka skryptowego systemu. W takim przypadku przykłady wskazują, w jaki sposób można osiągnąć tę samą lub podobną funkcjonalność przy użyciu języka skryptowego systemu.
Grupa docelowa
Grupą docelową tego dokumentu są programiści i konsultanci techniczni, którzy tworzą lub dostosowują workflow dla klientów, a także klienci, którzy zarządzają workflow.
Niniejszy dokument zakłada zrozumienie zakresu funkcji Workflow Management widocznych dla użytkownika. Ponadto, czytelnik powinien posiadać podstawową znajomość SQL lub innego języka programowania w celu zrozumienia języka skryptowego systemu.
Definicje terminów
Definicje działania
Definicja działania jest szablonem dla działań generowanych na jej podstawie. Jeśli definicja działania jest aktywna, silnik workflow generuje nowe działanie, gdy wystąpi zarejestrowane zdarzenie, pod warunkiem spełnienia warunku przejścia. Definicje działań są niezależne od bazy danych OLTP i systemu, w którym zostały zarejestrowane, ponieważ nie zawierają ani danych specyficznych dla systemu, ani danych specyficznych dla OLTP. Definicje działań są zapisywane w bazie danych repozytorium.
Deklaracje
Deklaracje to skrypty w definicjach procesów i działań, które zapewniają metody wywoływane podczas tworzenia działań, zmiany statusu i wprowadzania określonych wartości parametrów. Właściwości procesów i działań można elastycznie definiować, dostosowując deklaracje. Deklaracje są zapisywane w języku skryptowym.
GUID
GUID jest skrótem od Globally Unique Identifier i odpowiada globalnie unikalnemu identyfikatorowi. GUID to 128-bitowy numer obliczany zgodnie ze schematem Open Software Foundation (OSF) dla rozproszonych środowisk obliczeniowych (DCE). Zawiera on między innymi adres IP komputera generującego, składnik czasu i składnik losowy. Oznacza to, że dwa niezależne komputery mogą zawsze obliczyć różne identyfikatory GUID bez synchronizacji. W Comarch ERP Enterprise identyfikatory GUID są reprezentowane jako tablice bajtów Java o długości 16 i są używane głównie jako kompaktowe klucze podstawowe i obce w Business Objects.
Systemowy język skryptowy
Wyrażenia, warunki, polecenia, funkcje i deklaracje są używane do wyrażania złożonych relacji. Wszystkie te wyrażenia są częścią wspólnego języka skryptowego zwanego językiem skryptowym systemu. Składnia języka skryptowego systemu jest oparta na SQL, Pascal i Java. Język skryptowy systemu jest używany w Workflow Management, na przykład do formułowania warunku wstępnego lub warunku przejścia lub do określania operatorów, którzy nie są podsumowani w roli workflow.
Silnik workflow
Wraz z usługą zdarzeń, silnik workflow koordynuje i monitoruje wykonywanie workflow Silnik workflow jest wykonywany na serwerze komunikatów w każdym systemie.
Funkcje workflow
Funkcje workflow to funkcje, których kontekst użycia wymaga definicji działania. Funkcje workflow, które wymagają istnienia działania, nie mogą być używane w warunkach przejścia, ponieważ działanie nie zostało jeszcze utworzone, gdy oceniany jest warunek przejścia. Niniejszy dokument dzieli funkcje workflow na następujące grupy:
- Funkcje dla procesów (funkcje procesowe)
- Funkcje dla działań (funkcje działań)
- Funkcje dla edytorów (funkcje edytora)
- Funkcje wyników działań (Funkcje wyników działań)
- Funkcje wiadomości e-mail i węzłów e-mail (funkcje e-mail)
- Funkcje węzłów usług (funkcje węzłów usług)
- Funkcje dla węzłów usług internetowych
- Polecenia dla wskaźników dynamicznych (polecenia wskaźników dynamicznych)
- Funkcje dla aplikacji listy (funkcje listy)
Funkcje dla procesów (funkcje procesowe)
Funkcje dla procesów obejmują zarówno polecenia, które definiują właściwości tworzonego procesu, jak i funkcje zapytań o właściwości, które są trudne do zapytania przy użyciu określonych parametrów procesu:
- abortProcess
- processOwner
- setProcessWorkDuration
abortProcess
Nazwa |
abortProcess |
Opis |
Anuluje generowanie działania i kończy proces. |
Oznaczenia |
abortProcess() |
Parametry |
Brak |
Wynik |
W funkcji tworzenia węzła początkowego, abortProcess anuluje tworzenie procesu bez tworzenia procesu i działania początkowego. Jeśli funkcja abortProcess zostanie użyta w węźle innym niż węzeł początkowy, wszystkie działania, które są nadal otwarte, zostaną zakończone bez przetwarzania, a proces zakończy się za pośrednictwem węzła błędu z kodem błędu WFL-00576 Process aborted. |
Źródła błędów |
Użycie abortProcess w funkcji innej niż create może prowadzić do błędu. |
Przykłady |
abortProcess() w funkcji tworzenia węzła początkowego anuluje tworzenie procesu. |
Kontekst |
WF_REPOSITORY, WF_OLTP |
Uwagi |
Polecenie abortProcess może być użyte na przykład, jeśli warunek przejścia w polu o tej samej nazwie w definicji działania dla węzła początkowego nie może być w pełni odwzorowany, np. ze względu na przestrzeń lub wydajność. |
Odniesienia |
abort |
function create()
{
/* if the storage location has more UnitOnhand then the location is not empty */
if (cast(Number, getResultList(„SELECT COUNT(*) FROM
com.cisag.app.inventory.obj.UnitOnhand uoh WHERE
uoh:storageLocation = ?”,
list(parameters.oldObject:storageLocation), 1)[0][0]) > 0) {
abortProcess();
}
}
process.owner
Nazwa |
process.owner |
Opis |
Zwraca listę właścicieli procesów. |
Oznaczenia |
Guid[] processOwner() |
Parametry |
Brak |
Wynik |
Funkcja processOwner zwraca listę zawierającą identyfikatory właścicieli procesów. Jeśli proces nie ma odpowiedzialnego użytkownika, zwracana jest pusta lista. |
Źródła błędów |
Brak |
Przykłady |
isEmpty(processOwner()) sprawdza, czy do procesu przypisany jest odpowiedzialny użytkownik. Poniższy skrypt wyświetla nazwy wszystkich właścicieli procesów w dzienniku: var owners := processOwner(); for (u as Guid : owners) { echo(userName(u)); } |
Kontekst |
WF_REPOSITORY, WF_OLTP |
Uwagi |
|
Odniesienia |
Poniższy przykład z definicji działania help.processOwner zwraca identyfikatory wszystkich właścicieli procesów.
function create()
{
const ProcessOwnerOrigin as valueSet(com.cisag.sys.workflow.ProcessOwnerOrigin);
var owners as Guid[];
var ownerNames as String;
var pd := getByBusinessKey(„REPOSITORY”, CisObject(com.cisag.sys.workflow.obj.ProcessDefinition), parameters.PROCESS_DEFINITION, parameters.ORIGIN);
if (definition->ProcessDefinition:processData.sourceOfOwner = ProcessOwnerOrigin.WORKFLOW_ROLE) {
if (not isNull(definition->ProcessDefinition:ownerRole))
owners := resolveRole(definition->ProcessDefinition:ownerRole);
}
else {
if (not isNull(definition->ProcessDefinition:owner))
owners := list(userGuid(definition->ProcessDefinition:owner));
}
for (u : owners) {
ownerNames := ownerNames + ” ” + userName(u);
}
result.OWNERS := trim(ownerNames);
}
setProcessWorkDuration
Nazwa |
setProcessWorkDuration |
Opis |
Zastępuje wartość pola Czas przetwarzania w definicji procesu. |
Oznaczenia |
setProcessWorkDuration(Number milliseconds) |
Parametry |
milliseconds to czas przetwarzania w milisekundach. |
Wynik |
Funkcja setProcessWorkDuration zastępuje wartość pola Czas przetwarzania w definicji procesu. Jeśli liczba milisekund jest ujemna, czas trwania przetwarzania jest ustawiany na wartość 0. |
Źródła błędów |
Brak |
Przykłady |
setProcessWorkDuration(3600*24*1000) ustawia czas trwania przetwarzania na 24 godziny. Czas zakończenia procesu jest dokładnie 24 godziny po czasie w polu Moment rozpoczęcia. |
Kontekst |
WF_REPOSITORY, WF_OLTP |
Uwagi |
Późniejsza zmiana planowanego czasu zakończenia może prowadzić do zmiany statusu procesu. Zmiana nie ma wpływu na harmonogram działań, które zostały już utworzone. |
Odniesienia |
setActivityWorkDuration |
Funkcje dla działań (funkcje działań)
Funkcje dla działań zawierają przede wszystkim polecenia definiujące właściwości tworzonego działania. Takie polecenia mogą być używane tylko w funkcji tworzenia deklaracji.
- abort
- addAttachment
- formatDescription
- formatDescriptionHTML
- formatSubject
- primaryAttachment
- setActivityCategory
- setActivityPriority
- setActivityResult
- setActivityWorkDelay
- setActivityWorkDuration
- setSeriesDuration
abort
Nazwa |
abort |
Opis |
Anuluje generowanie działania. |
Oznaczenia |
abort() |
Parametry |
Brak |
Wynik |
W funkcji create, abort anuluje generowanie działania bez jego generowania. |
Źródła błędów |
Użycie funkcji abort w funkcji innej niż create może prowadzić do błędu.
Jeśli przerwanie zostanie użyte w węźle działania lub zdarzenia, następny krok procesu nie może zostać wygenerowany, a proces może zostać zakończony przez węzeł błędu. |
Przykłady |
abort() w funkcji create definicji działania typu Pojedyncze działanie anuluje tworzenie działania bez jego tworzenia. |
Kontekst |
WF_ACTIVITY_REPOSITORY, WF_ACTIVITY_OLTP |
Uwagi |
Polecenie przerwania może być użyte na przykład, jeśli warunek przejścia w polu o tej samej nazwie definicji działania dla pojedynczego działania nie może być całkowicie odwzorowany, np. ze względu na przestrzeń lub wydajność. |
Odniesienia |
abortProcess |
addAttachment
Nazwa |
addAttachment |
Opis |
Dodaje link do obiektu biznesowego dla działania. |
Oznaczenia |
addAttachment(CisObject object) |
Parametry |
object jest obiektem biznesowym, który ma być powiązany z działaniem. |
Wynik |
Polecenie addAttachment dodaje do działania łącze do obiektu biznesowego.
W przypadku zdarzenia typu Działanie użytkownika obiekt biznesowy przekazany w parametrze zdarzenia parameters.object jest automatycznie łączony z węzłem początkowym. |
Źródła błędów |
Jeśli obiekt i działanie nie są przechowywane w tej samej bazie danych, wystąpi błąd runtime. |
Przykłady |
addAttachment(parameters.object) w funkcji tworzenia węzła początkowego łączy obiekt biznesowy, dla którego zdarzenie zostało wywołane, z działaniem.
addAttachment(activity->Process) łączy działanie z procesem. |
Kontekst |
WF_REPOSITORY, WF_OLTP |
Uwagi |
Pierwszy link dodany za pomocą polecenia addAttachment jest linkiem preferowanym. Na karcie Powiązania i aplikacji Działania można oznaczyć dowolny załącznik jako preferowany.
Jeśli działanie użytkownika nie jest powiązane z aplikacją, preferowany powiązany obiekt biznesowy jest otwierany po otwarciu zadania. Wszystkie obiekty biznesowe powiązane z działaniem można otworzyć za pomocą menu kontekstowego zadania i zakładki Powiązania w aplikacji Działania. W aplikacjach Lista: Działania/Baza danych repozytorium i Lista: Działania/Baza danych OLTP można wyszukiwać działania za pomocą powiązanych z nimi obiektów biznesowych. Jeśli obiekt biznesowy jest powiązany z węzłem początkowym procesu, wyszukiwanie jest również możliwe w aplikacjach Lista: Procesy/Baza danych repozytorium i Lista: Procesy/Baza danych OLTP. Pole wyszukiwania dla połączonego obiektu biznesowego można wstępnie przypisać w menu kontekstowym jednostek biznesowych. |
Odniesienia |
primaryAttachment |
formatDescription
Nazwa |
formatDescription |
Opis |
Zastępuje symbol zastępczy w opisie działania konkretną wartością. |
Oznaczenia |
formatDescription(String name, String value) |
Parametry |
name to nazwa symbolu zastępczego.
value to wartość, która ma być wyświetlana zamiast symbolu zastępczego. |
Wynik |
Polecenie formatDescription zastępuje wszystkie wystąpienia nazwy zastępczej w polu edytora tekstu Oznaczenie w definicji działania określoną wartością, która ma być wyświetlana w działaniu. |
Źródła błędów |
Jeśli działanie zostało już utworzone, nie można już zmienić jej opisu. Oznacza to, że polecenie formatDescription może być używane tylko w funkcji create. |
Przykłady |
formatDescription(„item”, loadItem(„10010”):number) w funkcji create zastępuje wszystkie wystąpienia elementu zastępczego numerem elementu 10010.
Polecenie formatDescription(„item”, loadItem(„10010”):description) w funkcji create zastępuje element zastępczy opisem elementu 10010 w bieżącym języku treści. |
Kontekst |
WF_REPOSITORY, WF_OLTP |
Uwagi |
|
Odniesienia |
formatDescriptionHTML, formatSubject |
formatDescriptionHTML
Nazwa |
formatDescriptionHTML |
Opis |
Zastępuje symbol zastępczy w opisie działania fragmentem HTML. |
Oznaczenia |
formatDescriptionHTML(String key, String value) |
Parametry |
name to nazwa symbolu zastępczego.
value to wartość, która ma być wyświetlana zamiast symbolu zastępczego. |
Wynik |
Polecenie formatDescription zastępuje wszystkie wystąpienia nazwy zastępczej w polu edytora tekstu Oznaczenie w definicji działania określoną wartością, która ma być wyświetlana w działaniu. |
Źródła błędów |
Jeśli działanie zostało już utworzone, nie można już zmienić jego opisu. Oznacza to, że polecenie formatDescriptionHTML może być używane tylko w funkcji create. |
Przykłady |
formatDescriptionHTML(„item”, loadItem(„10010”):number) w funkcji create zastępuje wszystkie wystąpienia elementu zastępczego numerem elementu 10010.
Polecenie formatDescriptionHTML(„item”, loadItem(„10010”):description) w funkcji create zastępuje element zastępczy opisem elementu 10010 w bieżącym języku treści. |
Kontekst |
WF_REPOSITORY, WF_OLTP |
Uwagi |
|
Odniesienia |
formatDescriptionHTML, formatSubject, |
Poniższy przykład wyświetla opis artykułu testowego 10010 we wszystkich aktywnych językach treści. Najpierw funkcja getCisObjectList określa aktywne języki treści. Artykuł testowy jest następnie otwierany raz dla każdego aktywnego języka treści w celu określenia nazwy w odpowiednim języku. Wynik jest zapisywany jako wiersz w tabeli HTML. Korzystając z funkcji getURL i znacznika zakotwiczenia w HTML, numer artykułu jest wyświetlany jako klikalne hiperłącze w opisie działania.
function create()
{
/* item number of this example */
const ItemNumber := „10010”;
/* get system and database names */
var systemName := getSystemName();
var databaseName := getDatabaseName();
/* get system and database Guid */
var system := getByBusinessKey(„CONFIGURATION”,
CisObject(com.cisag.sys.configuration.obj.System), systemName, 1);
var database := getByBusinessKey(„CONFIGURATION”, CisObject(com.cisag.sys.configuration.obj.Database), system:guid,
databaseName, 1);
/* query configuration database for active content languages */
var params as Unknown[];
add(params, database:guid);
add(params, 1); /* active version */
var activeLanguages := getCisObjectList(„CONFIGURATION”, „SELECT
FROM com.cisag.sys.configuration.obj.DatabaseLanguage
o WHERE o:databaseGuid = ? AND o:version = ?”, params, 99);
/* build HTML table with one row for each content language */
var item as CisObject(com.cisag.app.general.obj.Item);
var url := getURL(loadItem(ItemNumber));
var htmlTable := „” + char(13);
for (l as
CisObject(com.cisag.sys.configuration.obj.DatabaseLanguage) :
activeLanguages) {
setNLSContentLanguage(l:language);
item := loadItem(ItemNumber);
htmlTable := htmlTable + „” + char(13);
echo(htmlTable);
}
htmlTable := htmlTable + „</table>”;
/* format activity */
formatDescriptionHTML(„table”, htmlTable);
}
Aby zaoszczędzić na otwieraniu dwóch obiektów System i Database, definicja działania typu Wywołanie funkcji mogłaby zwracać Guid bazy danych. Definicja działania musiałaby zostać wprowadzona w JavaScript i mogłaby wyglądać następująco:
function create()
{
var db = Java.type(’com.cisag.pgm.appserver.CisEnvironment’).getInstance();
result.GUID = com.cisag.pgm.datatype.Guid.toHexString(db.getDatabaseGuid());
}
Identyfikator GUID jest zwracany za pośrednictwem parametru zdarzenia GUID. Funkcja tworzenia rozpocznie się w następujący sposób:
function create()
{
/* item number of this example */
const ItemNumber := „10010”;
/* query configuration database for active content languages in
the database */
var params as Unknown[];
add(params, @getDatabaseGuid().GUID;
add(params, 1); /* active version */
var activeLanguages := getCisObjectList(„CONFIGURATION”, „SELECT
FROM com.cisag.sys.configuration.obj.DatabaseLanguage o WHERE
o:databaseGuid = ? AND o:version = ?”, params, 99);
formatSubject
Nazwa |
formatSubject |
Opis |
Zastępuje symbol zastępczy w temacie działania konkretną wartością. |
Oznaczenia |
formatSubject(String key, String value) |
Parametry |
key to nazwa symbolu zastępczego.
value to wartość, która ma być wyświetlana zamiast symbolu zastępczego. |
Wynik |
Polecenie formatSubject zastępuje wszystkie wystąpienia klucza zastępczego w polu Przedmiot definicji działania określoną wartością, która ma być wyświetlana w działaniu. |
Źródła błędów |
Jeśli działanie zostało już utworzone, nie można już zmienić jej tematu. Oznacza to, że polecenie formatSubject może być używane tylko w funkcji create. |
Przykłady |
formatSubject(„item”, loadItem(„10010”):number) w funkcji create zastępuje element zastępczy numerem elementu 10010.
Polecenie formatSubject(„item”, loadItem(„10010”):description) w funkcji create zastępuje element zastępczy nazwą elementu 10010 w bieżącym języku treści. |
Kontekst |
WF_REPOSITORY, WF_OLTP |
Uwagi |
|
Odniesienia |
formatDescription, formatDescriptionHTML |
primaryAttachment
Nazwa |
primaryAttachment |
Opis |
Zwraca obiekt biznesowy preferowanego łącza. |
Oznaczenia |
CisObjectReference primaryAttachment() |
Parametry |
Brak |
Wynik |
Funkcja primaryAttachment zwraca odniesienie do obiektu biznesowego preferowanego łącza działania. Jeśli działanie nie ma powiązań, zwracana jest domyślna wartość zero typu danych CisObjectReference.
W przypadku zdarzenia typu Działanie użytkownika obiekt biznesowy przekazany w parametrze zdarzenia parameters.object jest automatycznie łączony z węzłem początkowym. |
Źródła błędów |
Brak |
Przykłady |
isNull(primaryAttachment()) sprawdza, czy działanie ma powiązanie.
cast(CisObjectReference(com.cisag.app.general.obj.Item), primaryAttachment()) zwraca odniesienie do preferowanego powiązanego obiektu biznesowego wpisanego na elemencie. |
Kontekst |
WF_ACTIVITY_REPOSITORY, WF_ACTIVITY_OLTP |
Uwagi |
Pierwszy link dodany za pomocą polecenia addAttachment jest linkiem preferowanym. W zakładce Powiązania aplikacji Działania można ustawić dowolny załącznik jako preferowany.
Jeśli działanie użytkownika nie jest powiązane z aplikacją, preferowany powiązany obiekt biznesowy jest otwierany po otwarciu zadania. Wszystkie obiekty biznesowe powiązane z działaniem można otworzyć za pomocą menu kontekstowego zadania i zakładki Powiązania w aplikacji Działania. W aplikacjach Lista: Działania/Baza danych repozytorium i Lista: Działania/Baza danych OLTP można wyszukiwać działania poprzez powiązane z nimi obiekty biznesowe. Jeśli obiekt biznesowy jest powiązany z węzłem początkowym procesu, wyszukiwanie jest również możliwe w aplikacjach Lista: Procesy/Baza danych repozytorium i Lista: Procesy/Baza danych OLTP. Pole wyszukiwania dla połączonego obiektu biznesowego można wstępnie przypisać za pomocą odpowiednich akcji w menu kontekstowym jednostek biznesowych. |
Odniesienia |
addAttachment |
setActivityCategory
Nazwa |
setActivityCategory |
Opis |
Określa kategorię działania. |
Oznaczenia |
setActivityCategory(String categoryConstant) |
Parametry |
categoryConstant jest stałą wartością ValueSet com.cisag.sys.workflow.ActivityClass:
|
Wynik |
Polecenie setActivityCategory definiuje kategorię działania, a tym samym ikonę zadań w dokowanym oknie Wyszukiwanie zadań. Kategoria wybrana w definicji działania jest zmieniana za pomocą tego polecenia. |
Źródła błędów |
Jeśli działanie zostało już utworzone, kategoria nie może zostać zmieniona. Oznacza to, że polecenie setActivityCategory może być używane tylko w funkcji create. |
Przykłady |
setActivityCategory(„EMAIL”) przypisuje kategorię E-mail do działania. |
Kontekst |
WF_REPOSITORY, WF_OLTP |
Uwagi |
|
Odniesienia |
setActivityPriority |
setActivityPriority
Nazwa |
setActivityPriority |
Opis |
Określa priorytet działania. |
Oznaczenia |
setActivityPriority(Number priorityId) |
Parametry |
priorityId jest wartością liczbową ValueSet com.cisag.sys.workflow.ActivityPriority. Jeśli priorityId jest mniejsze niż 1 lub większe niż 9, używana jest najniższa lub najwyższa dopuszczalna wartość. |
Wynik |
Polecenie setActivityPriority ustawia priorytet działania, a zatem także ikonę priorytetu zadań w dokowanym oknie Wyszukiwanie zadań. Polecenie to zmienia priorytet wybrany w definicji działania. |
Źródła błędów |
Jeśli działanie zostało już utworzone, nie można już zmienić jego priorytetu. Oznacza to, że polecenie setActivityPriority może być używane tylko w funkcji create. |
Przykłady |
setActivityPriority(1) przypisuje działaniu najwyższy priorytet.
setActivityPriority(9) przypisuje działaniu najniższy priorytet. |
Kontekst |
WF_REPOSITORY, WF_OLTP |
Uwagi |
|
Odniesienia |
setActivityCategory |
setActivityResult
Nazwa |
setActivityResult |
Opis |
Określa wynik działania. |
Oznaczenia |
setActivityResult(String result) |
Parametry |
result to wynik działania w postaci ciągu znaków. |
Wynik |
Polecenie setActivityResult ustawia wynik działania. Wynik jest wyświetlany w aplikacji Działania na karcie Wyniki. Wynik można również ustawić w funkcji create przed utworzeniem działania. |
Źródła błędów |
Model danych ogranicza wynik do 80 znaków. |
Przykłady |
setActivityResult(„Hello World!”) ustawia wynik działania na Hello World!. |
Kontekst |
WF_REPOSITORY, WF_OLTP |
Uwagi |
|
Odniesienia |
setActivityWorkDelay
Nazwa |
setActivityWorkDelay |
Opis |
Określa czas trwania do rozpoczęcia okresu przetwarzania. |
Oznaczenia |
setActivityWorkDelay(Number seconds) |
Parametry |
seconds to czas w sekundach do rozpoczęcia okresu przetwarzania. |
Wynik |
Polecenie setActivityWorkDelay określa czas trwania w sekundach do rozpoczęcia okresu przetwarzania tworzonego działania. Czas trwania wprowadzony w polu Rozpoczęcie w/za definicji działania jest zmieniany przez to polecenie. |
Źródła błędów |
Jeśli działanie zostało już utworzone, nie można już zmienić czasu jego trwania. Oznacza to, że polecenie setActivityWorkDelay może być używane tylko w funkcji create. |
Przykłady |
setActivityWorkDelay(3600) ustawia czas trwania do rozpoczęcia okresu przetwarzania na jedną godzinę.
setActivityWorkDelay(seconds(activity:creationTime, addDays(startOfDay(activity:creationTime), 1)) + 1) ustawia początek okresu przetwarzania na początek następnego dnia. setActivityWorkDelay(seconds(activity:creationTime, addWorkingDays(„90310”, startOfDay(activity:creationTime), 3)) + 1) ustawia początek okresu przetwarzania na początek trzeciego dnia roboczego zgodnie z kalendarzem pracy organizacji 90310. |
Kontekst |
WF_REPOSITORY, WF_OLTP |
Uwagi |
Czas trwania jest dodawany do wartości atrybutu creationTime działania. |
Odniesienia |
setActivityWorkDuration |
setActivityWorkDuration
Nazwa |
setActivityWorkDuration |
Opis |
Określa czas przetwarzania. |
Oznaczenia |
setActivityWorkDuration(Number seconds) |
Parametry |
seconds to czas trwania w sekundach. |
Wynik |
Polecenie setActivityWorkDuration definiuje czas trwania przetwarzania w sekundach. Czas trwania wprowadzony w polu Czas opracowania w definicji działania jest zmieniany za pomocą tego polecenia. |
Źródła błędów |
Jeśli działanie zostało już utworzone, nie można już zmienić czasu trwania przetwarzania. Oznacza to, że polecenie setActivityWorkDuration może być używane tylko w funkcji create. |
Przykłady |
setActivityWorkDuration(3600) ustawia czas trwania przetwarzania na jedną godzinę po rozpoczęciu okresu przetwarzania.
Jeśli czas trwania do rozpoczęcia okresu przetwarzania wynosi 0, a aktywność rozpoczyna się natychmiast, wówczas setActivityWorkDuration(seconds(activity:creationTime, addDays(endOfDay(activity:creationTime), 1))) ustawia koniec okresu przetwarzania na koniec następnego dnia. Jeśli początek okresu przetwarzania został ustawiony na początek następnego dnia za pomocą polecenia setActivityWorkDuration(seconds(activity:creationTime, addDays(startOfDay(activity:creationTime), 1)) + 1)), wówczas setActivityWorkDuration(60 * 60 * 24 – 1) ustawia koniec okresu przetwarzania na koniec następnego dnia. setActivityWorkDuration(seconds(activity:creationTime, addWorkingDays(„90310”, endOfDay(activity:creationTime), 3))) ustawia koniec okresu przetwarzania na koniec trzeciego dnia roboczego zgodnie z kalendarzem zakładowym organizacji 90310. |
Kontekst |
WF_REPOSITORY, WF_OLTP |
Uwagi |
Czas przetwarzania jest dodawany do początku okresu przetwarzania. |
Odniesienia |
setActivityWorkDelay |
setSeriesDuration
Nazwa |
setSeriesDuration |
Opis |
Określa czas trwania serii. |
Oznaczenia |
setSeriesDuration(Number seconds) |
Parametry |
seconds to czas trwania w sekundach. |
Wynik |
Polecenie setSeriesDuration definiuje czas trwania serii działania typu Szablon seryjny lub Zdarzenie czasowe w sekundach. Czas trwania wprowadzony w polu Czas trwania serii w definicji działania jest zmieniany za pomocą tego polecenia. |
Źródła błędów |
Jeśli działanie zostało już utworzone, nie można już zmienić czasu trwania przetwarzania. Oznacza to, że polecenie setSeriesDuration może być używane tylko w funkcji create. |
Przykłady |
setSeriesDuration(3600 * 24 * 7) ustawia czas trwania serii na jeden tydzień. |
Kontekst |
WF_REPOSITORY, WF_OLTP |
Uwagi |
|
Odniesienia |
setActivityWorkDuration |
Funkcje dla edytorów (Funkcje edytora)
Funkcje dla edytorów obejmują przede wszystkim funkcje określania operatorów z zadaniami o określonym statusie. Funkcje te mogą być używane na przykład do określania operatorów do dalszych działań w przypadku przekroczenia limitu czasu:
- activeParticipants
- activeWorkers
- allParticipants
- allWorkers
- cancelledWorkers
- closedWorkers
- currentParticipants
- currentWorkers
- doneWorkers
- forwardedWorkers
- overdueWorkers
activeParticipants
Nazwa |
activeParticipants |
Opis |
Zwraca aktywnych użytkowników zaangażowanych w proces. |
Oznaczenia |
Guid[] activeParticipants() |
Parametry |
Brak |
Wynik |
Funkcja activeParticipants zwraca listę z identyfikatorami wszystkich aktywnych użytkowników zaangażowanych w proces. Użytkownik jest uważany za aktywnego uczestnika, jeśli ma zadanie o statusie W opracowaniu. Jeśli w procesie nie ma aktywnych użytkowników, zwracana jest pusta lista. |
Źródła błędów |
Jeśli funkcja activeParticipants jest używana w definicji działania, która nie jest powiązana z definicją procesu, ocena jest anulowana z błędem. |
Przykłady |
Wyrażenie size(activeParticipants()) zwraca liczbę użytkowników zaangażowanych w otwarte zadanie w procesie.
Poniższy skrypt wyświetla w dzienniku nazwy wszystkich użytkowników zaangażowanych w otwarte zadanie: var users := activeParticipants(); for (u as Guid : users) { echo(userName(u)); } |
Kontekst |
WF_REPOSITORY, WF_OLTP |
Uwagi |
|
Odniesienia |
activeWorkers, allParticipants, currentParticipants |
activeWorkers
Nazwa |
activeWorkers |
Opis |
Zwraca aktywnych operatorów działania. |
Oznaczenia |
Guid[] activeWorkers() |
Parametry |
Brak |
Wynik |
Funkcja activeWorkers zwraca listę z identyfikatorami wszystkich aktywnych operatorów działania. Pracownik jest uważany za aktywnego, jeśli ma zadanie o statusie W opracowaniu. Jeśli proces nie ma aktywnego pracownika, zwracana jest pusta lista. |
Źródła błędów |
Brak |
Przykłady |
Wyrażenie size(activeWorkers()) zwraca liczbę pracowników z otwartym zadaniem.
Poniższy skrypt wyświetla w dzienniku nazwy wszystkich użytkowników z otwartym zadaniem: var users := activeWorkers(); for (u as Guid : users) { echo(userName(u)); } |
Kontekst |
WF_ACTIVITY_REPOSITORY, WF_ACTIVITY_OLTP |
Uwagi |
|
Odniesienia |
activeParticipants, allWorkers, canceledWorkers, closedWorkers, currentWorkers, doneWorkers, forwardedWorkers, overdueWorkers |
allParticipants
Nazwa |
allParticipants |
Opis |
Zwraca wszystkich użytkowników zaangażowanych w proces. |
Oznaczenia |
Guid[] allParticipants() |
Parametry |
Brak |
Wynik |
Funkcja allParticipants zwraca listę z identyfikatorami wszystkich użytkowników zaangażowanych w proces. Użytkownik jest uważany za uczestnika, jeśli ma zadanie powiązane z procesem. Status zadania jest nieistotny. Jeśli proces nie ma uczestniczących użytkowników, zwracana jest pusta lista. |
Źródła błędów |
Jeśli funkcja allParticipants zostanie użyta w definicji działania, która nie jest powiązana z definicją procesu, ocena zostanie anulowana z błędem. |
Przykłady |
Wyrażenie size(allParticipants()) zwraca liczbę wszystkich użytkowników zaangażowanych w proces.
Poniższy skrypt wyświetla w dzienniku nazwy wszystkich użytkowników zaangażowanych w proces: var users := allParticipants(); for (u as Guid : users) { echo(userName(u)); } |
Kontekst |
WF_REPOSITORY, WF_OLTP |
Uwagi |
|
Odniesienia |
allWorkers, activeParticipants, currentParticipants |
Poniższy przykład z definicji działania help.possibleParticipants zwraca możliwych operatorów wszystkich definicji działania definicji procesu.
function create()
{
const PerformerType as valueSet(com.cisag.sys.workflow.PerformerType);
const ProcessOwnerOrigin as valueSet(com.cisag.sys.workflow.ProcessOwnerOrigin);
var users as Guid[];
var userNames as String;
var pd := getByBusinessKey(„REPOSITORY”, CisObject(com.cisag.sys.workflow.obj.ProcessDefinition), parameters.PROCESS_DEFINITION, parameters.ORIGIN);
var OQL := „SELECT FROM com.cisag.sys.workflow.obj.ActivityDefinition ad WHERE ad:processDefinition = ?”;
var adList := getCisObjectList(„REPOSITORY”, OQL, list(pd:guid), 100);
for (ad as CisObject(com.cisag.sys.workflow.obj.ActivityDefinition) : adList)
{
if (ad:data.performer.type = PerformerType.ROLE) {
users := union(users, resolveRole(ad:data.performer.guid));
}
if (ad:data.performer.type = PerformerType.USER) {
users := union(users, list(ad:data.performer.guid));
}
if (ad:data.performer.type = PerformerType.INITIATOR) {
users := union(users, list(userGuid(„process.Initiator”)));
}
if (ad:data.performer.type = PerformerType.OWNER) {
if (pd:processData.sourceOfOwner = ProcessOwnerOrigin.PROCESS_DEFINITION)
users := union(users, list(userGuid(pd:owner)));
if (pd:processData.sourceOfOwner = ProcessOwnerOrigin.WORKFLOW_ROLE)
users := union(users, resolveRole(pd:ownerRole));
}
}
for (u : users) {
userNames := userNames + ” ” + userName(u);
}
result.PARTICIPANTS := trim(userNames);
}
allWorkers
Nazwa |
allWorkers |
Opis |
Zwraca wszystkich operatorów danego działania. |
Oznaczenia |
Guid[] activeWorkers() |
Parametry |
Brak |
Wynik |
Funkcja activeWorkers zwraca listę z identyfikatorami wszystkich aktywnych pracowników danego działania. Użytkownik jest uważany za pracownika, jeśli ma zadanie powiązane z działaniem. Status zadania jest nieistotny. Jeśli aktywność nie ma agentów, zwracana jest pusta lista. |
Źródła błędów |
Brak. |
Przykłady |
Wyrażenie size(allWorkers()) zwraca liczbę pracowników z otwartym zadaniem.
Poniższy skrypt wyświetla w dzienniku nazwy wszystkich użytkowników z otwartym zadaniem: var users := activeWorkers(); for (u as Guid : users) { echo(userName(u)); } |
Kontekst |
WF_ACTIVITY_REPOSITORY, WF_ACTIVITY_OLTP |
Uwagi |
|
Odniesienia |
allParticipants, activeWorkers, canceledWorkers, closedWorkers, currentWorkers, doneWorkers, forwardedWorkers, overdueWorkers |
cancelledWorkers
Nazwa |
cancelledWorkers |
Opis |
Zwraca wszystkich użytkowników z ukończonym zadaniem bez zmian. |
Oznaczenia |
Guid[] canceledWorkers() |
Parametry |
Brak |
Wynik |
Funkcja canceledWorkers zwraca listę z identyfikatorami wszystkich użytkowników, którzy mają zadanie powiązane z działaniem o statusie Zakończone bez opracowania. Jeśli działanie nie ma pracownika z niedokończonym zadaniem, zwracana jest pusta lista. |
Źródła błędów |
Brak |
Przykłady |
Wyrażenie size(canceledWorkers()) zwraca liczbę pracowników z niedokończonym zadaniem.
Wyrażenie union(canceledWorkers(), doneWorkers()) zwraca wszystkich użytkowników, którzy ukończyli lub nie ukończyli swojego zadania. Poniższy skrypt wyświetla w dzienniku nazwy wszystkich użytkowników z niedokończonym zadaniem: var users := canceledWorkers(); for (u as Guid : users) { echo(userName(u)); } |
Kontekst |
WF_ACTIVITY_REPOSITORY, WF_ACTIVITY_OLTP |
Uwagi |
|
Odniesienia |
activeWorkers, allWorkers, closedWorkers, currentWorkers, doneWorkers, forwardedWorkers, overdueWorkers |
closedWorkers
Nazwa | closedWorkers |
Opis | Zwraca wszystkich operatorów z zablokowanym zadaniem. |
Podpisy | Guid[] closedWorkers() |
Parametry | Brak |
Wynik | Funkcja closedWorkers zwraca listę z identyfikatorami wszystkich użytkowników, którzy mają zadanie powiązane z działaniem o statusie Zablokowane. Jeśli działanie nie ma edytora z zablokowanym zadaniem, zwracana jest pusta lista. |
Źródła błędów | Brak |
Przykłady | Wyrażenie size(closedWorkers()) zwraca liczbę pracowników z zamkniętym zadaniem.
Poniższy skrypt wyświetla w dzienniku nazwy wszystkich użytkowników z zablokowanym zadaniem: var users := closedWorkers(); for (u as Guid : users) { echo(userName(u)); } |
Kontekst | WF_ACTIVITY_REPOSITORY, WF_ACTIVITY_OLTP |
Uwagi | |
Zobacz także | activeWorkers, allWorkers, canceledWorkers, currentWorkers, doneWorkers, forwardedWorkers, overdueWorkers |
currentParticipants
Nazwa |
currentParticipants |
Opis |
Zwraca użytkowników aktualnie zaangażowanych w proces. |
Oznaczenia |
Guid[] currentParticipants() |
Parametry |
Brak |
Wynik |
Funkcja currentParticipants zwraca listę z identyfikatorami wszystkich użytkowników aktualnie zaangażowanych w proces. Obejmuje to użytkowników, którzy są przypisani do zadania z jednym z następujących statusów:
Jeśli żaden użytkownik nie jest aktualnie zaangażowany w proces, zwracana jest pusta lista. |
Źródła błędów |
Jeśli funkcja currentParticipants jest używana w definicji działania, która nie jest powiązana z definicją procesu, ocena jest anulowana z błędem. |
Przykłady |
Wyrażenie size(currentParticipants()) zwraca liczbę aktualnie uczestniczących użytkowników.
Poniższy skrypt wyświetla nazwy wszystkich użytkowników aktualnie zaangażowanych w proces: var users := currentParticipants(); for (u as Guid : users) { echo(userName(u)); } |
Kontekst |
WF_REPOSITORY, WF_OLTP |
Uwagi |
|
Odniesienia |
currentWorkers, activeParticipants, allParticipants |
currentWorkers
Nazwa |
currentWorkers |
Opis |
Zwraca wszystkich operatorów z otwartym zadaniem. |
Oznaczenia |
Guid[] currentWorkers() |
Parametry |
Brak |
Wynik |
Funkcja currentWorkers zwraca listę z identyfikatorami wszystkich użytkowników, którzy mają zadanie powiązane z działaniem w jednym z następujących statusów:
Jeśli działanie nie ma operatora z otwartym zadaniem, zwracana jest pusta lista. |
Źródła błędów |
Brak |
Przykłady |
Wyrażenie size(currentWorkers()) zwraca liczbę pracowników z otwartym zadaniem.
Wyrażenie currentWorkers() jako operator akcji następczej po przekroczeniu czasu może tworzyć nowe zadania dla wszystkich procesorów, którzy jeszcze nie ukończyli swoich zadań, ukończyli je nieprzetworzone lub przekazali je dalej. Poniższy skrypt wyświetla w dzienniku nazwy wszystkich użytkowników z otwartym zadaniem: var users := currentWorkers(); for (u as Guid : users) { echo(userName(u)); } |
Kontekst |
WF_ACTIVITY_REPOSITORY, WF_ACTIVITY_OLTP |
Uwagi |
|
Odniesienia |
currentParticipants, activeWorkers, allWorkers, canceledWorkers, closedWorkers, doneWorkers, forwardedWorkers, overdueWorkers |
doneWorkers
Nazwa |
doneWorkers |
Opis |
Zwraca wszystkich operatorów z ukończonym zadaniem. |
Oznaczenia |
Guid[] doneWorkers() |
Parametry |
Brak |
Wynik |
Funkcja doneWorkers zwraca listę z identyfikatorami wszystkich użytkowników, którzy mają zadanie powiązane z działaniem ze statusem Zakończone. Jeśli działanie nie ma pracownika z ukończonym zadaniem, zwracana jest pusta lista. |
Źródła błędów |
Brak |
Przykłady |
Wyrażenie size(doneWorkers()) zwraca liczbę pracowników z ukończonym zadaniem.
Wyrażenie union(canceledWorkers(), doneWorkers()) zwraca wszystkich użytkowników, którzy ukończyli lub nie ukończyli swojego zadania. Poniższy skrypt wyświetla w dzienniku nazwy wszystkich użytkowników, którzy ukończyli zadanie: var users := doneWorkers(); for (u as Guid : users) { echo(userName(u)); } |
Kontekst |
WF_ACTIVITY_REPOSITORY, WF_ACTIVITY_OLTP |
Uwagi |
|
Odniesienia |
activeWorkers, allWorkers, canceledWorkers, closedWorkers, currentWorkers, forwardedWorkers, overdueWorkers |
forwardedWorkers
Nazwa |
forwardedWorkers |
Opis |
Zwraca wszystkich operatorów z przekazanym zadaniem. |
Oznaczenia |
Guid[] forwardedWorkers() |
Parametry |
Brak |
Wynik |
Funkcja forwardedWorkers zwraca listę z identyfikatorami wszystkich użytkowników, którzy mają zadanie powiązane z działaniem o statusie Przekazane. Jeśli działanie nie ma operatora z przekazanym zadaniem, zwracana jest pusta lista. |
Źródła błędów |
Brak |
Przykłady |
Wyrażenie size(forwardWorkers()) zwraca liczbę pracowników z przekazanym zadaniem.
Poniższy skrypt wyświetla nazwy wszystkich użytkowników z przekazanym zadaniem do dziennika: var users := forwardedWorkers(); for (u as Guid : users) { echo(userName(u)); } |
Kontekst |
WF_ACTIVITY_REPOSITORY, WF_ACTIVITY_OLTP |
Uwagi |
|
Odniesienia |
activeWorkers, allWorkers, canceledWorkers, closedWorkers, currentWorkers, doneWorkers, overdueWorkers |
overdueWorkers
Nazwa |
overdueWorkers |
Opis |
Zwraca wszystkich operatorów z zaleglym zadaniem. |
Oznaczenia |
Guid[] overdueWorkers() |
Parametry |
Brak |
Wynik |
Funkcja overdueWorkers zwraca listę z identyfikatorami wszystkich użytkowników, którzy mają zadanie powiązane z działaniem o statusie Zaległe. Jeśli działanie nie ma pracownika z zaległym zadaniem, zwracana jest pusta lista. |
Źródła błędów |
Brak |
Przykłady |
Wyrażenie size(overdueWorkers()) zwraca liczbę pracowników z zaległym zadaniem.
Poniższy skrypt wyświetla w dzienniku nazwy wszystkich użytkowników z zaleglym zadaniem: var users := overdueWorkers(); for (u as Guid : users) { echo(userName(u)); } |
Kontekst |
WF_ACTIVITY_REPOSITORY, WF_ACTIVITY_OLTP |
Uwagi |
|
Odniesienia |
activeWorkers, allWorkers, canceledWorkers, closedWorkers, currentWorkers, doneWorkers, forwardedWorkers |
Funkcje wyników działania (Funkcje wyników działania)
Funkcje wyników działania inicjują elementy okien dialogowych wprowadzania wyników działania i wprowadzania wyników procesu:
- formatEntityField
- formatSelectionField
- setResultFieldEditable
- setResultFieldVisible
formatEntityField
Nazwa |
formatEntityField |
Opis |
Inicjuje pole encji w wynikach działania. |
Oznaczenia |
formatEntityField(String name, String ldtPath)
formatEntityField(String name, String ldtPath, HashMap<String, Object> presets) |
Parametry |
name to nazwa pola encji.
ldtPath jest nazwą logicznego typu danych (opis danych LDT) zawierającego ścieżkę. presets to tablica hash z wartościami domyślnymi dla pomocy wejściowej logicznego typu danych. |
Wynik |
Polecenie formatEntityField inicjalizuje nazwę pola wyników typu Pole jednostki biznesowej lub Powiązanie jednostki biznesowej w oknie dialogowym wprowadzania wyników działania i wprowadzania wyników procesu.
Wstępne ustawienia tabeli hash zajmują pola wyboru w wyszukiwaniu wartości pomocy i uniemożliwiają wprowadzanie danych we wstępnie przypisanych polach wyboru (tylko do odczytu). |
Źródła błędów |
Jeśli logiczny typ danych pola wyniku i logiczny typ danych ldtPath nie są zgodne, wystąpi błąd wykonania.
Błąd runtime pojawia się również, jeśli nie można ustawić wartości domyślnych dla pomocy wejściowej. |
Przykłady |
formatEntityField(„partner”, „com.cisag.app.general:Partner.lt”) inicjuje pole encji partner zgodnie z logicznym typem danych com.cisag.app.general.Partner.
formatEntityField(„partner”, „com.cisag.app.sales:SalesOrderNumber.lt”, hashMap(customerNumber := „10010”, status:=2) inicjalizuje pole encji partner zgodnie z logicznym typem danych com.cisag.app.sales.SalesOrderNumber i wstępnie przypisuje pola wyboru Zamawiający i Status z wartością 10010 i 2 dla statusu Zwolniony i chroni pola wyboru przed wprowadzeniem. |
Kontekst |
WF_REPOSITORY, WF_OLTP |
Uwagi |
Funkcja oczekuje logicznego typu danych z dwukropkiem (:) oddzielonym od ścieżki i z przyrostkiem .lt. Na przykład logiczny typ danych com.cisag.app.sales.SalesOrderNumber jest przekazywany do funkcji jako ciąg znaków com.cisag.app.sales:SalesOrderNumber.lt.
Odpowiedni logiczny typ danych dla pola encji można zwykle znaleźć za pomocą klucza biznesowego encji biznesowej. Na przykład klucz biznesowy zamówienia sprzedaży składa się z dwóch atrybutów: rodzaju i numeru. Trudno jest wyszukać lub wybrać zamówienie sprzedaży za pomocą rodzaju, więc numer zamówienia sprzedaży jest bardziej obiecującym atrybutem. Atrybut number posiada logiczny typ danych com.cisag.app.sales.SalesOrderNumber. Logiczny typ danych zawiera opis danych o tej samej nazwie com.cisag.app.sales.SalesOrderNumber. Wyszukiwanie .obj.SalesOrderFieldSearch jest przechowywane w opisie danych. W obiekcie deweloperskim tego wyszukiwania nazwy, które mają być używane w parametrze ustawień wstępnych, znajdują się w kolumnie Nazwy na zakładce podrzędnej OQL. Tylko pola wyboru wyświetlane w oknie dialogowym wyszukiwania mogą być wstępnie przypisane. Jeśli w kolumnie Pozycja atrybutu wyszukiwania nie jest zapisana żadna sekwencja, atrybut zwykle nie może zostać wstępnie przypisany. Pola wyboru niektórych typów danych również nie mogą być wstępnie przypisane. Na przykład, aby wstępnie przypisać pole wyboru dla rodzaju zamówienia sprzedaży, lepiej jest użyć atrybutu typeCode jako ctxSalesOrderType, ponieważ łatwiej jest wstępnie przypisać ciąg znaków. Nawet jeśli pomoc dotycząca wprowadzania danych może być ograniczona poprzez wstępne przypisanie pól wyboru, jednostki biznesowe, które nie są oferowane w pomocy dotyczącej wprowadzania danych, mogą być wprowadzane poprzez kopiowanie i wklejanie. Wstępne przypisanie pól wyboru nie zastępuje zatem sprawdzania poprawności za pomocą funkcji walidacji. |
Odniesienia |
formatSelectionField |
formatSelectionField
Nazwa |
formatSelectionField |
Opis |
Inicjuje dynamiczne pole wyboru w wynikach działania. |
Oznaczenia |
formatSelectionField(String name, HashMap values) |
Parametry |
name to nazwa pola wyboru.
values to tablica haszująca z nazwami i wartościami selekcji. |
Wynik |
Polecenie formatSelectionField inicjalizuje pole wyniku nazwy w oknie dialogowym wprowadzania wynikóe działań i wprowadzania wyników procesu.
Polecenie może być używane tylko w funkcji applyDefaults. |
Źródła błędów |
Nazwa pola wyników musi być zdefiniowana jako Dynamiczne pole wyboru lub Dynamiczne pole wielokrotnego wyboru. |
Przykłady |
formatSelectionField(„approvalStatus”, hashMap(APPROVED:=”Yes”, REJECTED:=”No”)) definiuje dwie wartości wyboru APPROVED i REJECTED dla dynamicznego pola wyboru approvalStatus. |
Kontekst |
WF_REPOSITORY, WF_OLTP |
Uwagi |
W funkcjach zatwierdzania i zamykania wynik można sprawdzić za pomocą zmiennej results.approvalStatus. |
Odniesienia |
formatEntityField |
Zdarzenie typu Zdarzenie użytkownika jest możliwe tylko dla jednostek biznesowych. Aby rozpocząć proces dla elementu zależnego, takiego jak pozycja zamówienia sprzedaży, pole wyboru dynamicznego Szczegóły jest inicjowane numerem i opisem artykułu pozycji zamówienia sprzedaży.
function applyDefaults()
{
/* initialize dynamic result field with line items */
var hm := new(HashMap);
var details := getCisObjectList(„SELECT FROM
com.cisag.app.sales.obj.SalesOrderDetail o WHERE o:header = ? ORDER
BY o:number”, list(parameters.object:guid), 100);
for (detail as
CisObject(com.cisag.app.sales.obj.SalesOrderDetail) : details) {
hm[format(detail:number, „0”)] := cast(String, detail:number) +
” ” + detail->Item:number + ” ” + detail->Item:description;
}
formatSelectionField(„details”, hm);
}
Poniższy warunek przejścia dezaktywuje zdarzenie użytkownika w menu kontekstowym, jeśli zamówienie sprzedaży nie zawiera pozycji:
parameters.object:detailCount > 0
setResultFieldEditable
Nazwa |
setResultFieldEditable |
Opis |
Określa możliwość edycji pola wyników. |
Oznaczenia |
setResultFieldEditable(String name, Boolean editable) |
Parametry |
name to nazwa pola wyników.
editable to możliwość edycji pola wyniku. |
Wynik |
Polecenie setResultFieldEditable definiuje możliwość edycji nazwy pola wyniku w oknie dialogowym wprowadzania wyników działania i wprowadzania wyników procesu.
Polecenie może być używane tylko w funkcji applyDefaults. |
Źródła błędów |
Brak |
Przykłady |
setResultFieldEditable(„approvalStatus”, false) określa, że pole wyniku approvalStatus nie jest edytowalne. |
Kontekst |
WF_REPOSITORY, WF_OLTP |
Uwagi |
|
Odniesienia |
setResultFieldVisible |
setResultFieldVisible
Nazwa |
setResultFieldVisible |
Opis |
Określa widoczność pola wyników. |
Oznaczenia |
setResultFieldVisible(String name, Boolean editable) |
Parametry |
name to nazwa pola wyników.
editable to widoczność pola wyników. |
Wynik |
Polecenie setResultFieldVisible ustawia widoczność nazwy pola wyniku w oknie dialogowym wprowadzania wyników działań i wprowadzania wynikow procesu.
Polecenie może być używane tylko w funkcji applyDefaults. |
Źródła błędów |
Brak |
Przykłady |
setResultFieldVisible(„approvalStatus”, false) określa, że pole wyniku approvalStatus nie jest wyświetlane. |
Kontekst |
WF_REPOSITORY, WF_OLTP |
Uwagi |
|
Odniesienia |
setResultFieldEditable |
Funkcje wiadomości e-mail i węzłów e-mail (funkcje e-mail)
Można użyć funkcji wiadomości e-mail i węzłów wiadomości e-mail, aby skonfigurować wysyłanie wiadomości e-mail w tych dwóch typach działań:
- addMailAttachment
- setMailLinkTarget
- setMailRecipientsBCC
- setMailRecipientsCC
- setMailRecipientsTo
- setMailReplyTo
- setMailSender
- setMailTemplate
addMailAttachment
Nazwa |
addMailAttachment |
Opis |
Dołącza plik do wysyłanej wiadomości e-mail. |
Oznaczenia |
addMailAttachment(String fileName, Bytes content) |
Parametry |
fileName to nazwa pliku nadana załącznikowi w wiadomości e-mail.
content zawiera zawartość załączonego pliku. |
Wynik |
Polecenie addMailAttachment dołącza plik do wysyłanej wiadomości e-mail. Do obliczenia tego parametru można użyć funkcji readFile. To polecenie działa tylko w definicjach działań typu Węzeł e-mail lub Interaktywny węzeł e-mail. |
Źródła błędów |
Brak |
Przykłady |
addMailAttachment(„MyFileName.html”, readFile(„kstore://” + getDatabaseName() + „/Documents/Workflow/Mailtemplate_en.html”)) dołącza szablon wiadomości e-mail Mailtemplate_en.html z katalogu Workflow w Knowledge Store do wysyłanej wiadomości e-mail i nadaje załącznikowi nazwę MyFileName.html. |
Kontekst |
WF_REPOSITORY, WF_OLTP |
Uwagi |
|
Odniesienia |
readFile (więcej informacji znajduje się w dokumentacji Systemowy język skryptowy: Funkcje podstawowe) |
setMailLinkTarget
Nazwa |
setMailLinkTarget |
Opis |
Ustawia serwer aplikacji dla linków w wiadomościach e-mail. |
Oznaczenia |
setMailLinkTarget(String serverName) |
Parametry |
serverName to nazwa serwera aplikacji. |
Wynik |
Polecenie setMailLinkTarget ustawia serwer aplikacji, którego adres URL jest używany w generowanych linkach wysyłanych wiadomości e-mail. Przesłany serwer aplikacji jest ignorowany, jeśli serwery docelowe dla odbiorcy wiadomości e-mail zostały skonfigurowane przez użytkownika i jeśli serwer aplikacji dla odbiorcy nie został przypisany.
Jeśli polecenie setMailLinkTarget nie zostanie wywołane, serwer docelowy dla linków jest określany zgodnie z opisem w dokumentacji Silnik workflow. |
Źródła błędów |
Brak |
Przykłady |
setMailLinkTarget(getServerName()) używa serwera aplikacji bieżącego uruchomionego środowiska dla adresów URL w linkach w wysyłanych wiadomościach e-mail. |
Kontekst |
WF_REPOSITORY, WF_OLTP |
Uwagi |
W systemach z serwerem aplikacji nie jest wymagana dalsza konfiguracja. Serwerem docelowym jest serwer aplikacji, na którym uruchomiony jest silnik workflow.
Jeśli system składa się z kilku serwerów aplikacji, należy wprowadzić serwer aplikacji dialogu w polu Docelowy serwer dla atrybutów linka dla wszystkich serwerów aplikacji w aplikacji Panel System. Serwer ten jest używany dla wszystkich łączy w wiadomościach e-mail workflow wysyłanych przez serwer wiadomości. Jeśli serwer docelowy jest zależny od użytkownika, można również przypisać serwery docelowe specyficzne dla roli workflow w aplikacji Role workflow. |
Odniesienia |
formatDescriptionHTML, serverLinkTarget (więcej informacji znajduje się w dokumentacji Język skryptowy systemu: Funkcje podstawowe), setMailTemplate |
setMailRecipientsBCC
Nazwa |
setMailRecipientsBCC |
Opis |
Ustawia odbiorcę BCC wysyłanej ‑wiadomości e-mail. |
Oznaczenia |
setMailRecipientsBCC(String mailAddress) |
Parametry |
mailAddress to adres e-mail odbiorcy BCC. Można wprowadzić wiele adresów e-mail oddzielonych przecinkiem. |
Wynik |
Polecenie setMailRecipientsBCC ustawia odbiorcę BCC (blind carbon copy) wysyłanej ‑wiadomości e-mail. |
Źródła błędów |
To polecenie działa tylko w definicjach działań typu Węzeł e-mail i Interaktywny węzeł e-mail. |
Przykłady |
setMailRecipientsBCC(„workflow@comarch.com”) ustawia odbiorcę BCC na workflow@comarch.com. |
Kontekst |
WF_REPOSITORY, WF_OLTP |
Uwagi |
|
Odniesienia |
setMailRecipientsCC, setMailRecipientsTo, setMailReplyTo, setMailSendertsetMailTemplate |
setMailRecipientsCC
Nazwa |
setMailRecipientsCC |
Opis |
Ustawia odbiorcę CC wysyłanej ‑wiadomości e-mail. |
Oznaczenia |
setMailRecipientsCC(String mailAddress) |
Parametry |
mailAddress to adres e-mail odbiorcy CC. Można wprowadzić wiele adresów e-mail, oddzielając je przecinkiem. |
Wynik |
Polecenie setMailRecipientsCC ustawia odbiorcę CC (carbon copy) wysyłanej ‑wiadomości e-mail. |
Źródła błędów |
To polecenie działa tylko w definicjach działania typu Węzeł e-mail i Interaktywny węzeł e-mail. |
Przykłady |
setMailRecipientsCC(„workflow@comarch.com”) ustawia odbiorcę CC na workflow@comarch.com.
setMailRecipientsCC(userMailAddress(process.Initiator)) ustawia wyzwalacz procesu jako odbiorcę CC. |
Kontekst |
WF_REPOSITORY, WF_OLTP |
Uwagi |
|
Odniesienia |
setMailRecipientsBCC, setMailRecipientsTo, setMailReplyTo, setMailSender, setMailTemplate |
setMailRecipientsTo
Nazwa |
setMailRecipientsTo |
Opis |
Ustawia odbiorcę ‑wiadomości e-mail, która ma zostać wysłana. |
Oznaczenia |
setMailRecipientsTo(String mailAddress) |
Parametry |
mailAddress to adres e-mail odbiorcy. Można wprowadzić wiele adresów e-mail, oddzielając je przecinkiem. |
Wynik |
Polecenie setMailRecipientsTo ustawia odbiorcę wysyłanej wiadomości ‑e-mail.
Jeśli procesorem działania nie jest system lub zlecenie przetwarzania, ale jeden lub więcej użytkowników, silnik workflow wysyła wiadomość e-mail do każdego z tych użytkowników. Silnik workflow używa adresu e-mail użytkownika przechowywanego w panelu systemu. Polecenie setMailReplyTo zastępuje wszystkie adresy e-mail operatorów działania adresem e-mail określonym w parametrze mailAddress. |
Źródła błędów |
To polecenie działa tylko w definicjach działania typu Węzeł e-mail i Interaktywny węzeł e-mail. |
Przykłady |
setMailRecipientsTo(„workflow@comarch.com”) ustawia odbiorcę na workflow@comarch.com. |
Kontekst |
WF_REPOSITORY, WF_OLTP |
Uwagi |
|
Odniesienia |
setMailRecipientsBCC, setMailRecipientsCC, setMailReplyTo, setMailSender, setMailTemplate |
setMailReplyTo
Nazwa |
setMailReplyTo |
Opis |
Ustawia adres e-mail odpowiedzi na ‑wiadomość e-mail, która ma zostać wysłana. |
Oznaczenia |
setMailReplyTo(String mailAddress) |
Parametry |
mailAddress to adres e-mail odpowiedzi. |
Wynik |
Polecenie setMailReplyTo ustawia adres e-mail odpowiedzi na ‑wiadomość e-mail, która ma zostać wysłana.
Polecenie setMailReplyTo zastępuje ten adres e-mail odpowiedzi adresem e-mail określonym w parametrze mailAddress. |
Źródła błędów |
To polecenie działa tylko w definicjach działań typu Węzeł e-mail i Interaktywny węzeł e-mail.
Używany serwer pocztowy może uniemożliwiać użycie adresu e-mail odpowiedzi określonego za pomocą mailAddress. Jeśli to konieczne, należy sorawdzić dzienniki błędów serwera poczty, jeśli wiadomości e-mail z innym adresem e-mail odpowiedzi nie są dostarczane poprawnie. |
Przykłady |
setMailReplyTo(„workflow@comarch.com”) ustawia adres e-mail odpowiedzi na workflow@comarch.com. |
Kontekst |
WF_REPOSITORY, WF_OLTP |
Uwagi |
|
Odniesienia |
setMailRecipientsBCC, setMailRecipientsCC, setMailRecipientsTo, setMailSender, setMailTemplate |
setMailSender
Nazwa |
setMailSender |
Opis |
Ustawia nadawcę wiadomości e-mail, która ma zostać wysłana. |
Oznaczenia |
setMailSender(String mailAddress) |
Parametry |
mailAddress to adres e-mail nadawcy. |
Wynik |
Polecenie setMailSender ustawia nadawcę wiadomości ‑e-mail, która ma zostać wysłana.
Mechanizm workflow używa adresu e-mail przechowywanego w dla nadawcy. Polecenie setMailSender zastępuje tego nadawcę adresem e-mail określonym w parametrze mailAddress. |
Źródła błędów |
To polecenie działa tylko w definicjach działań typu Węzeł e-mail i Interaktywny węzeł e-mail.
Używany serwer pocztowy może uniemożliwiać użycie adresu e-mail podanego w mailAddress jako nadawcy. Jeśli to konieczne, należy sprawdzić dzienniki błędów serwera poczty, jeśli wiadomości e-mail z innym adresem e-mail odpowiedzi nie są dostarczane poprawnie. |
Przykłady |
setMailSender(„workflow@comarch.com”) ustawia nadawcę na workflow@comarch.com. |
Kontekst |
WF_REPOSITORY, WF_OLTP |
Uwagi |
|
Odniesienia |
setMailRecipientsBCC, setMailRecipientsCC, setMailRecipientsTo, setMailReplyTo, setMailTemplate |
setMailTemplate
Nazwa |
setMailTemplate |
Opis |
Zmienia szablon wiadomości e-mail, która ma zostać wysłana. |
Oznaczenia |
setMailtemplate(String templateName) |
Parametry |
templateName to nazwa szablonu wiadomości e-mail.
Należy w szczególności pamiętać, że należy podać nazwę szablonu wiadomości e-mail bez skrótu językowego i typu pliku. Język wyświetlania użytkownika określa, który z możliwych plików szablonów o określonej nazwie jest używany. Na przykład, jeśli templateName ma wartość Mailtemplate, a językiem wyświetlania użytkownika jest en, wówczas używany jest plik szablonu wiadomości e-mail Mailtemplate_en.html. Jeśli język treści jest przechowywany w ustawieniach użytkownika odbiorcy, dla którego nie ma szablonu wiadomości e-mail o określonej nazwie, wówczas używany jest plik szablonu wiadomości e-mail dla domyślnego języka systemu. |
Wynik |
Polecenie setMailTemplate zmienia szablon wiadomości e-mail, która ma zostać wysłana. Oznacza to, że można używać szablonów wiadomości e-mail, które różnią się od standardowego szablonu wiadomości e-mail. Polecenie działa nie tylko w definicjach działania typu Węzeł e-mail i Interaktywny węzeł e-mail, ale ma również zastosowanie we wszystkich typach działań dla powiadomień e-mail przez silnik workflow, np. w przypadku przekroczenia limitu czasu lub błędu w procesie.
Jeśli templateName jest pustym ciągiem znaków, używany jest pusty szablon wiadomości e-mail, który wykorzystuje tylko tekst zdefiniowany w opisie. Użycie pustego szablonu wiadomości e-mail może być szczególnie przydatne w przypadku definicji aktywności typu Węzeł e-mail i Interaktywny węzeł e-mail. Jeśli templateName nie jest prawidłowym szablonem wiadomości e-mail, używany jest domyślny szablon wiadomości e-mail. |
Źródła błędów |
Brak |
Przykłady |
setMailTemplate(„Mailtemplate”) używa plików szablonów wiadomości e-mail Mailtemplate_en.html, Mailtemplate_en.html, Mailtemplate_fr.html itd.
setMailTemplate(„”) nie używa pustego szablonu wiadomości e-mail. |
Kontekst |
WF_REPOSITORY, WF_OLTP |
Uwagi |
Rozdział Dostosowywanie szablonów wiadomości e-mail w dokumentacji Silnik workflow opisuje sposób dostosowywania szablonów wiadomości e-mail.
Domyślny szablon wiadomości e-mail jest zdefiniowany w stałej DEFAULT tabeli łańcuchowej com.cisag.sys.workflow.template.MailTemplates. Pusty szablon wiadomości e-mail jest zdefiniowany w stałej EMPTY. |
Odniesienia |
setMailRecipientsBCC, setMailRecipientsCC, setMailRecipientsTo, setMailReplyTo, setMailSender |
Funkcje węzłów usług (funkcje węzłów usług)
Funkcje węzłów usług oferują opcje konfiguracji aktywności ze zleceniem przetwarzania jako obsługującym:
- formatBatchJobResult
- formatBatchJobOutputResult
- getJobResults
- isJobToBeScheduled
- setJobName
- setJobQueue
- setJobServer
- setJobUser
- setJobVoucherTemplateOutputOptions
- setJobWaitFinish
formatBatchJobResult
Nazwa |
formatBatchJobResult |
Opis |
Tworzy tekst dla wyników przetwarzania w tle. |
Oznaczenia |
formatBatchJobResult(HashMap parameters) |
Parametry |
parameters są parametrami zdarzenia com.cisag.pgm.services.batch.BatchJobStateChanged. |
Wynik |
Opcjonalnie przetwarzanie w tle aktywnie informuje użytkownika o pomyślnym lub nieprawidłowym zakończeniu zadania przetwarzania. W takim przypadku w przeglądarce internetowej automatycznie pojawia się okno dialogowe powiadomienia, z którego można przełączyć się bezpośrednio do aplikacji Zlecenia przetwarzania lub Zlecenia wydania przy użyciu odpowiednich parametrów. Alternatywnie, powiadomienie może zostać wysłane za pośrednictwem zdarzenia workflow com.cisag.pgm.services.batch.BatchJobStateChanged. Aby wysłać powiadomienie o tej samej lub podobnej treści co dialog powiadomienia przy użyciu definicji działania, dostępne są dwie funkcje formatBatchJobResult i formatBatchJobOutputResult, które konwertują parametry zdarzenia bezpośrednio na tekst. |
Źródła błędów |
|
Przykłady |
formatBatchJobResult(parameters) formatuje wynik przetwarzania w tle na podstawie parametrów zdarzenia com.cisag.pgm.services.batch.BatchJobStateChanged. |
Kontekst |
WF_REPOSITORY |
Uwagi |
|
Odniesienia |
formatBatchJobOutputResult, isJobToBeScheduled |
formatBatchJobOutputResult
Nazwa |
formatBatchJobOutputResult |
Opis |
Tworzy tekst dla wyników przetwarzania w tle. |
Oznaczenia |
formatBatchJobOutputResult(HashMap parameters) |
Parametry |
parameters są parametrami zdarzenia com.cisag.pgm.services.batch.BatchJobStateChanged. |
Wynik |
Opcjonalnie przetwarzanie w tle aktywnie informuje użytkownika o pomyślnym lub nieprawidłowym zakończeniu zadania przetwarzania. W takim przypadku w przeglądarce internetowej automatycznie pojawia się okno dialogowe powiadomienia, z którego można przełączyć się bezpośrednio do aplikacji Zlecenia przetwarzania lub Zlecenia wydania przy użyciu odpowiednich parametrów. Alternatywnie, powiadomienie może zostać wysłane za pośrednictwem zdarzenia workflow com.cisag.pgm.services.batch.BatchJobStateChanged. Aby wysłać powiadomienie o tej samej lub podobnej treści co dialog powiadomienia przy użyciu definicji działania, dostępne są dwie funkcje formatBatchJobResult i formatBatchJobOutputResult, które konwertują parametry zdarzenia bezpośrednio na tekst. |
Źródła błędów |
|
Przykłady |
formatBatchJobOutputResult(parameters) formatuje wynik wyjściowy przetwarzania w tle na podstawie parametrów zdarzenia com.cisag.pgm.services.batch.BatchJobStateChanged. |
Kontekst |
WF_REPOSITORY |
Uwagi |
|
Odniesienia |
formatBatchJobResult, isJobToBeScheduled |
getJobResult
Nazwa |
getJobResult |
Opis |
Zwraca wynik połączonej aplikacji działającej w tle w postaci HashMap. |
Oznaczenia |
HashMap getJobResults() |
Parametry |
Brak |
Wynik |
Funkcja getJobResult zwraca wyniki działania aplikacji w tle zapisane w parametrze resultParmeters (należy zwrócić uwagę na pisownię!) w postaci HashMap. Wyniki te można wyświetlić na karcie Wyniki w oknie dialogowym właściwości zlecenia przetwarzania.
Jeśli obsługujący działanie nie jest zleceniem przetwarzania, polecenie nie ma żadnego efektu. |
Źródła błędów |
Funkcja getJobResult zwraca wiarygodny wynik tylko wtedy, gdy jest używana w funkcji zamykania, a działanie oczekuje na zlecenie przetwarzania, albo za pomocą polecenia setJobWaitFinish(true), albo poprzez aktywację pola wyboru Oczekuje na zadanie przetwarzania w definicji działania. |
Przykłady |
getJobResult() zwraca HashMap z wynikami aplikacji działającej w tle. |
Kontekst |
WF_ACTIVITY_REPOSITORY, WF_ACTIVITY_OLTP |
Uwagi |
|
Odniesienia |
setJobWaitFinish |
Akcja CreateCountLists (45) aplikacji działającej w tle com.cisag.app.inventory.physical.log.PhysicalInventoryCountProcessing zwraca listę z identyfikatorami GUID wygenerowanych list inwentaryzacyjnych:
{resultParmeters:CisParameterList:
{ResultNumberOfSuccessfulResults:1}
{ResultPhysicalInventoryCountListGuids:[[B@5570b91]}}.
W węźle usługi funkcja zamknięcia wywołuje funkcję getJobResults w celu oceny wygenerowanych list inwentaryzacyjnych i wysyła identyfikację wygenerowanych list do dziennika.
function close(state as Number)
{
var rp as HashMap;
var clGenerated as Number;
var clGuids as Guid[];
var cl as CisObject(com.cisag.app.inventory.physical.obj.PhysicalInventoryCountList);
rp := cast(HashMap, getJobResult().resultParmeters);
clGenerated := cast(Number, rp.ResultNumberOfSuccessfulResults);
clGuids := cast(Guid[], rp.ResultPhysicalInventoryCountListGuids);
echo(format(clGenerated, „0”) + ” count list(s) generated:”);
for (g : clGuids) {
cl := getByPrimaryKey(CisObject(com.cisag.app.inventory.physical.obj.PhysicalInventoryCountList), g);
echo(cl->PhysicalInventory->Type:code + „-” + cl->PhysicalInventory:number + ” ” + cl:number);
}
}
isJobToBeScheduled
Nazwa |
isJobToBeScheduled |
Opis |
Zapytanie o status przetwarzania w tle. |
Oznaczenia |
Boolean isJobToBeScheduled(Guid guid)
Boolean isJobToBeScheduled(CisObject job) Boolean isJobToBeScheduled(CisObjectReference job) |
Parametry |
guid to identyfikator GUID zlecenia przetwarzania.
job jest zleceniem przetwarzania lub odwołaniem do zlecenia przetwarzania. |
Wynik |
Funkcja isJobToBeScheduled wysyła zapytanie o stan przetwarzania w tle. Oceniany jest atrybut getActivityAbortMode. Funkcja zwraca wartość true, jeśli przetwarzanie w tle jest zaplanowane i może zostać wykonane. |
Źródła błędów |
Brak |
Przykłady |
isJobToBeScheduled(parameters.batchJobGuid) sprawdza, czy przetwarzanie w tle jest zaplanowane dla zaprogramowanego zdarzenia com.cisag.pgm.services.batch.BatchJobStateChanged (status zadania przetwarzania został zmieniony). |
Kontekst |
WF_ACTIVITY_REPOSITORY |
Uwagi |
|
Odniesienia |
formatBatchJobResult, formatBatchJobOutputResult |
setJobName
Nazwa |
setJobName |
Opis |
Określa nazwę zleceniaprzetwarzania. |
Oznaczenia |
setJobName(String jobName) |
Parametry |
jobName to nazwa zlecenia przetwarzania. |
Wynik |
Polecenie setJobName określa nazwę zlecenia przetwarzania powiązanego z działaniem. Nazwa jest wyświetlana w kolumnie Zlecenie przetwarzania aplikacji Zlecenia przetwarzania. Specyfikacja może zatem uprościć ocenę zleceń przetwarzania. Jeśli nie określono nazwy, nie jest ona wyświetlana w aplikacji Zlecenia przetwarzania.
Jeśli obsługujący działanie nie jest zleceniem przetwarzania, polecenie nie ma żadnego efektu. |
Źródła błędów |
Polecenie setJobName musi zostać użyte w funkcji tworzenia, tj. przed przetwarzaniem w tle. |
Przykłady |
setJobName(definition:code + ” ” + activity:number) wyświetla identyfikację definicji działania i działania jako nazwę zlecenia przetwarzania. |
Kontekst |
WF_REPOSITORY, WF_OLTP |
Uwagi |
Nazwa zlecenia przetwarzania jest ograniczona do 50 znaków. |
Odniesienia |
setJobQueue, setJobServer, setJobUser, setJobVoucherTemplateOutputOptions, setJobWaitFinish |
setJobQueue
Nazwa |
setJobQueue |
Opis |
Definiuje kolejkę przetwarzania dla przetwarzania w tle. |
Oznaczenia |
setJobQueue(String name) |
Parametry |
name to nazwa kolejki przetwarzania. |
Wynik |
Polecenie setJobQueue definiuje kolejkę przetwarzania, w której umieszczane jest zlecenie przetwarzania utworzone dla działania. Jeśli nie określono kolejki przetwarzania, używana jest kolejka przetwarzania zdefiniowana w funkcji konfiguracji Workflow management.
Jeśli opracowujący działanie nie jest zleceniem przetwarzania, polecenie nie ma żadnego efektu. |
Źródła błędów |
Polecenie setJobQueue musi zostać użyte w funkcji tworzenia, tj. przed przetwarzaniem w tle.
Użytkownik uruchamiający aplikację działającą w tle musi być uprawniony do korzystania z kolejki przetwarzania. |
Przykłady |
setJobQueue(„JOBQUEUE01”) określa, że zlecenie przetwarzania jest umieszczane w kolejce przetwarzania JOQUEUE01. |
Kontekst |
WF_REPOSITORY, WF_OLTP |
Uwagi |
|
Odniesienia |
setJobName, setJobServer, setJobUser, setJobVoucherTemplateOutputOptions, setJobWaitFinish |
setJobServer
Nazwa |
setJobServer |
Opis |
Definiuje serwer aplikacji do przetwarzania w tle. |
Oznaczenia |
setJobServer(String serverName) |
Parametry |
serverName to nazwa serwera aplikacji. |
Wynik |
Polecenie setJobServer określa, na którym serwerze aplikacji wykonywana jest aplikacja działająca w tle powiązana z definicją działania. Jeśli nie określono kolejki przetwarzania, używany jest serwer aplikacji bieżącego środowiska uruchomieniowego. Z reguły jest to serwer aplikacji, na którym zdarzenie zostało wyzwolone.
Jeśli operator działania nie jest zleceniem przetwarzania, polecenie nie ma żadnego efektu. |
Źródła błędów |
Polecenie setJobServer musi zostać użyte w funkcji tworzenia, tj. przed przetwarzaniem w tle.
Serwer aplikacji musi być zgodny z kolejką przetwarzania. |
Przykłady |
setJobServer(„ADV620”) określa, że aplikacja działająca w tle jest wykonywana na serwerze aplikacji ADV620. |
Kontekst |
WF_REPOSITORY, WF_OLTP |
Uwagi |
|
Odniesienia |
setJobName, setJobQueue, setJobUser, setJobVoucherTemplateOutputOptions, setJobWaitFinish |
setJobUser
Nazwa |
setJobUser |
Opis |
Definiuje użytkownika do przetwarzania w tle. |
Oznaczenia |
setJobUser(String userName)
setJobUser(Guid userGuid) |
Parametry |
userName to nazwa użytkownika.
userGuid jest identyfikatorem użytkownika. |
Wynik |
Polecenie setJobUser definiuje użytkownika, który ma wykonywać aplikację w tle. Jeśli nie określono użytkownika, do przetwarzania zadań używany jest użytkownik zdefiniowany w funkcji konfiguracji Workflow management.
Jeśli obsługujący działanie nie jest zleceniem przetwarzania, polecenie nie ma żadnego efektu. |
Źródła błędów |
Polecenie setJobUser musi zostać użyte w funkcji tworzenia, tj. przed przetwarzaniem w tle.
Użytkownik uruchamiający aplikację działającą w tle musi być upoważniony zarówno do uruchamiania aplikacji działającej w tle, jak i do korzystania z kolejki przetwarzania. |
Przykłady |
setJobUser(„ADMINISTRATOR”) uruchamia aplikację działającą w tle dla administratora.
setJobUser(event.userGuid) uruchamia aplikację działającą w tle dla użytkownika, który wywołał zdarzenie prowadzące do utworzenia działania. |
Kontekst |
WF_REPOSITORY, WF_OLTP |
Uwagi |
|
Odniesienia |
setJobName, setJobQueue, setJobServer,setJobVoucherTemplateOutputOptions, setJobWaitFinish |
setJobVoucherTemplateOutputOptions
Nazwa |
setJobVoucherTemplateOutputOptions |
Opis |
Używa standardowego szablonu dokumentu podczas tworzenia dokumentu. |
Oznaczenia |
setJobVoucherTemplateOutputOptions (Boolean voucherTemplateOutputOptions) |
Parametry |
voucherTemplateOutputOptions określa, czy standardowy szablon dokumentu jest używany do generowania dokumentów. |
Wynik |
Jeśli voucherTemplateOutputOptions ma wartość true, standardowy szablon dokumentu jest używany do tworzenia dokumentu. Jeśli wartość wynosi false, nie jest on używany. Domyślny szablon dokumentu to ten sam szablon, który jest proponowany, gdy dokument jest tworzony interaktywnie.
Jeśli aplikacja działająca w tle powiązana z działaniem nie generuje dokumentów, polecenie nie ma żadnego efektu. |
Źródła błędów |
Polecenie setJobVoucherTemplateOutputOptions musi zostać użyte w funkcji tworzenia, tj. przed przetwarzaniem w tle.
Jeśli voucherTemplateOutputOptions ma wartość false, nie jest używany żaden szablon dokumentu końcowego, co zwykle prowadzi do anulowania tworzenia dokumentu. Dlatego zaleca się, aby zawsze używać polecenia setJobVoucherTemplateOutputOptions(true) podczas generowania dokumentów. |
Przykłady |
setJobVoucherTemplateOutputOptions(true) określa, że standardowy szablon dokumentu jest używany podczas generowania dokumentu . |
Kontekst |
WF_REPOSITORY, WF_OLTP |
Uwagi |
|
Odniesienia |
setJobWaitFinish
Nazwa |
setJobWaitFinish |
Opis |
Oczekuje na zakończenie połączonego zlecenia przetwarzania. |
Oznaczenia |
setJobWaitFinish(Boolean waitFinish) |
Parametry |
waitFinish określa, czy działanie zostanie zakończone dopiero po zakończeniu zadania przetwarzania powiązanego z działaniem (true), czy natychmiast (false). |
Wynik |
Jeśli wait ma wartość true, działanie zostanie zakończone dopiero po zakończeniu zadania przetwarzania powiązanego z działaniem. Oznacza to, że wyniki przetwarzania w tle mogą być analizowane w funkcji close. Jeśli zadanie przetwarzania zostało pomyślnie zakończone, parametr stanu w funkcji zamykania ma wartość 40 (DONE), w przeciwnym razie wartość 50 (CANCELED).
Polecenie setJobWaitFinish zastępuje wartość pola wyboru Oczekuje na zadanie przetwarzania w definicji działania. Jeśli obsługujący działanie nie jest zleceniem przetwarzania, polecenie nie ma żadnego efektu. |
Źródła błędów |
Polecenie setJobWaitFinish musi zostać użyte w funkcji tworzenia, tj. przed przetwarzaniem w tle. |
Przykłady |
setJobWaitFinish(true) oznacza, że aktywność zostanie zakończona dopiero po zakończeniu powiązanego zadania przetwarzania.
setJobWaitFinish(false) powoduje, że działanie zostanie zakończone natychmiast po utworzeniu zadania przetwarzania w tle. W takim przypadku analiza wyników nie jest możliwa. |
Kontekst |
WF_REPOSITORY, WF_OLTP |
Uwagi |
Wyniki działania aplikacji w tle można analizować za pomocą funkcji getJobResults. |
Odniesienia |
getJobResults |
Funkcje dla węzłów usług internetowych
Węzeł usługi internetowej zapewnia funkcjonalność wywoływania usługi internetowej i analizowania wyników. Wywołanie jest realizowane przez stale połączoną aplikację działającą w tle com.cisag.sys.workflow.webservices.log.ServiceClient.
Funkcje węzłów usług sieciowych oferują opcje konfiguracji działań typu Węzeł usług sieci Web:
- getServiceResponse
- parseJson
- parseXml
getServiceResponse
Nazwa |
getServiceResponse |
Opis |
Zwraca parametr wyniku responseBody dla działania typu Węzeł usług sieci Web. |
Oznaczenia |
String getServiceResponse() |
Parametry |
Brak |
Wynik |
Funkcja zwraca parametr responseBody aplikacji działającej w tle com.cisag.sys.workflow.webservices.log.ServiceClient jako ciąg znaków.
Funkcja odpowiada wyrażeniu getJobResult()[„resultParmeters”][„responseBody”]. |
Źródła błędów |
Brak |
Przykłady |
getServiceResponse() zwraca wynik działania typu Węzeł usług sieci Web. |
Kontekst |
WF_ACTIVITY_REPOSITORY, WF_ACTIVITY_OLTP |
Uwagi |
Wynik może być analizowany tylko w funkcji close. Wynik jest dostępny tylko wtedy, gdy pole wyboru Oczekuje na zadanie przetwarzania jest aktywowane w definicji działania lub polecenie setJobWaitFinish(true) zostało wykonane w funkcji create w deklaracjach. |
Odniesienia |
parseJson, parseXml |
function close(state as Number)
{
var response := parseJson(getServiceResponse());
if (size(response.errors) = 0) {
process.promise := response.promise;
}
}
parseJson
Nazwa |
parseJson |
Opis |
Tworzy HashMap z ciągu znaków w formacie Java Script Object Notation (JSON). |
Oznaczenia |
HashMap parseJson(String body) |
Parametry |
body jest ciągiem znaków w JavaScript Object Notation (JSON). |
Wynik |
Funkcja parseJson zwraca HashMap z jednym elementem dla każdego parametru w body. |
Źródła błędów |
Jeśli ciąg znaków nie jest zapisany w JavaScript Object Notation (JSON) lub nie można go przeanalizować, zwracana jest wartość zero. |
Przykłady |
echo(parseJson(„{’a’:’hello’, 'b’:’world’}”) wyświetla na konsoli '{a=[S=hello], b=[S=world]}’.
echo(parseJson(„{a:1, b:2, c:3}”) wyświetla na konsoli '{a=[N=1], b=[N=2], c=[N=3]}’. cast(String, parseJson(„{a:jeden, b:dwa, c:trzy}”).c) zwraca ciąg trzy. |
Kontekst |
WSZYSTKO |
Uwagi |
Można również użyć funkcji parseJson w definicji działania typu Wywołanie funkcji, aby przekazać złożone dane do definicji działania jako ciąg znaków. |
Odniesienia |
getServiceResponse, parseXml |
function create()
{
var p_text := parameters.TEXT;
var r_parsedText := parseJson(p_text);
echo(r_parsedText);
}
parseXml
Nazwa |
parseXml |
Opis |
Tworzy tablicę z ciągu znaków w formacie XML (Extensible Markup Language). |
Oznaczenia |
HashMap parseXml(String body)
HashMap parseXml(String body, String expression) |
Parametry |
body jest ciągiem znaków w formacie XML (Extensible Markup Language), który ma zostać przeanalizowany.
parse jest węzłem w treści, który ma zostać przeanalizowany. |
Wynik |
Funkcja parseXml zwraca HashMap z każdym elementem XML jako listą i każdym znacznikiem XML jako elementem listy. |
Źródła błędów |
Jeśli ciąg znaków nie jest zapisany w Extensible Markup Language (XML) lub nie może być przeanalizowany, zwracana jest wartość zero. |
Przykłady |
echo(parseXml(„<rss version=’2.0′><channel><title>RSS Title</title></channel></rss>”)) wypisuje {#document=[L=[[H={rss=[L=[[H={channel=[L=[[H={title=[S=RSS Title]}]]]}]]}]]} na konsoli.
parseXml(„<rss version=’2.0′><channel><title>RSS Title</title></channel></rss>”, „rss/channel/title”) zwraca HashMap z zawartością {rss/channel/title=[S=RSS Title]}. |
Kontekst |
WSZYSTKO |
Uwagi |
|
Odniesienia |
getServiceResponse, parseJson |
function create()
{
var p_text := parameters.TEXT;
var p_pathExpression := parameters.PATH_EXPRESSION;
var r_parsedText := new(HashMap);
if (p_pathExpression = „”)
r_parsedText := parseXml(p_text);
else
var r_parsedText := parseXml(p_text, p_pathExpression);
echo(r_parsedText);
}
<?xml version=”1.0″ encoding=”UTF-8″?>
<semiramis xmlns=”com.cisag.app.general.obj.Partner”
xsi:schemaLocation=”com.cisag.app.general.obj.Partner Partner.xsd”
created=”2020-07-09T17:18:43.616Z” locale=”en-US-
XMLSchemaCompliant” xmlns:xsi=”http://www.w3.org/2001/XMLSchema-
instance” nlsMode=”SINGLE_LANGUAGE” dateTimeMode=”COMPACT”>
<Partner xmlns=”com.cisag.app.general.obj.Partner”>
<number>JOB</number>
<type>INTERNAL</type>
<person>
<givenName>Max</givenName>
<middleNames>Headroom</middleNames>
<surname>JOB</surname>
<Salutation>
<name>200</name>
</Salutation>
</person>
<human>true</human>
</Partner>
</semiramis>
Jeśli zmienna partner zawiera plik eksportu, wyrażenie parseXML(partner, „/semiramis/Partner/person/surname”} zwraca HashMap {/semiramis/Partner/person/surname=[S=JOB]}.
Polecenia dla wskaźników dynamicznych (Polecenia wskaźników dynamicznych)
Wskaźnik reprezentuje kluczową wartość techniczną lub biznesową, której wartość ma być monitorowana. Silnik systemu udostępnia już szereg wskaźników. Użytkownik może wprowadzić dodatkowe wskaźniki dynamiczne. Wskaźniki dynamiczne mogą być jednego z następujących typów:
- Wskaźnik agregacji
- Wskaźnik licznika
- Wskaźnik liczby
- Wskaźnik stanu
W przypadku wskaźników licznika i agregacji nie określono definicji działania dla wskaźnika. Jednak każda definicja działania może wyzwolić zdarzenie dla licznika lub wskaźnika agregacji, jeśli wystąpi określone zdarzenie, np. zdarzenie biznesowe. Zwykle ta definicja działania ma za zadanie jedynie wyzwolić zdarzenie dla wskaźnika. Nie jest jednak wymagana żadna dalsza reakcja ze strony użytkownika.
Można użyć dwóch poleceń dla wskaźników dynamicznych, aby uruchomić wskaźniki agregacji i licznika:
- fireAggregatorIndicator
- fireCounterIndicator
Więcej informacji na temat wskaźników można znaleźć w dokumentacji Wprowadzenie: Wskaźniki i Wskaźniki dynamiczne.
fireAggregatorIndicator
Nazwa |
fireAggregatorIndicator |
Opis |
Uruchamia wskaźnik agregacji. |
Oznaczenia |
fireAggregatorIndicator(String dynamicIndicatorName, Number value) |
Parametry |
dynamicIndicatorName to nazwa wskaźnika agregacji.
value to wartość dodawana do wskaźnika agregacji. |
Wynik |
Polecenie fireAggregatorIndicator uruchamia wskaźnik agregacji dynamicIndicatorName z wartością value. |
Źródła błędów |
Wskaźnik agregacji dynamicIndicatorName musi być wcześniej utworzony jako wskaźnik dynamiczny. |
Przykłady |
fireAggregatorIndicator(„invoicedAmount”, 100) zwiększa wskaźnik agregacji invoicedAmount o 100.
fireAggregatorIndicator(„invoicedAmount”, parameters.newObject:netAmountDomestic:amount1) w definicji działania ze zdarzeniem typu Jednostka biznesowa dla faktury sprzedaży (com.cisag.app.sales.obj.CustomerInvoice) zwiększa wskaźnik agregacji invoicedAmount o całkowitą kwotę netto faktury sprzedaży. Ponieważ duże faktury sprzedaży są zapisywane w blokach, definicja działania powinna mieć następujące warunki przejścia: Insert podtyp: parameters.newObject:number <> Change podtyp: parameters.newObject:number <> i parameters.oldObject:number = |
Kontekst |
WF_REPOSITORY, WF_OLTP |
Uwagi |
Stan wskaźników agregacji i liczników można wizualizować w aplikacji Dashboard (od wersji 6.1). |
Odniesienia |
fireCounterIndicator |
fireCounterIndicator
Nazwa |
fireCounterIndicator |
Opis |
Zwiększa wartość wskaźnika licznika o liczbę 1. |
Oznaczenia |
fireCounterIndicator(String dynamicIndicatorName) |
Parametry |
dynamicIndicatorName to nazwa wskaźnika licznika. |
Wynik |
Polecenie fireAggregatorIndicator zwiększa wskaźnik licznika dynamicIndicatorName o liczbę 1. |
Źródła błędów |
Wskaźnik licznika dynamicIndicatorName musi być wcześniej utworzony jako wskaźnik dynamiczny. |
Przykłady |
fireCounterIndicator(„custeromerReturns”) zwiększa wskaźnik agregacji customerReturns o wartość 1, np. podczas wprowadzania zwrotu klienta lub podczas księgowania przyjęcia towaru ze zwrotu klienta. |
Kontekst |
WF_REPOSITORY, WF_OLTP |
Uwagi |
Stan wskaźników agregacji i zliczania można wizualizować w aplikacji Dashboard (od wersji 6.1). |
Odniesienia |
fireAggregatorIndicator |
Wywołania funkcji dla wskaźników płatności i stanu
Wskaźniki dynamiczne mogą być jednego z następujących typów:
- Wskaźnik agregacji
- Wskaźnik licznika
- Wskaźnik liczby
- Wskaźnik stanu
Wskaźniki agregacji i wskaźniki licznika są wyzwalane przez dwie funkcje skryptowe fireAggregatorIndicator i fireCounterIndicator. Działanie generowane przez określone zdarzenie zwiększa wartość wskaźnika dynamicznego, tj. działają one zgodnie z zasadą push.
Z drugiej strony wskaźniki liczbowe i wskaźniki stanu działają zgodnie z zasadą pull. W razie potrzeby wskaźnik dynamiczny wyświetlany na pulpicie nawigacyjnym wywołuje definicję działania typu Wywołanie funkcji powiązaną ze wskaźnikiem. Definicja działania oblicza wartość lub stan i zwraca go za pomocą parametru wyniku. W przypadku wskaźnika liczbowego parametr wyniku musi mieć nazwę VALUE i być typu danych number.
Definicja działania dla wskaźnika liczbowego musi mieć parametr wyniku typu danych Ciąg znaków o nazwie STATUS. Definicja działania dla wskaźnika stanu musi mieć dwa parametry wyniku typu danych Ciąg znaków. Pierwszy parametr wyniku przekazuje status i musi mieć nazwę STATE. Drugi parametr wyniku przekazuje opis wartości stanu i musi mieć nazwę DESCRIPTION.
Poniższe deklaracje określają liczbę zaksięgowanych dziś przyjęć towarów i zwracają wynik do wskaźnika dynamicznego za pośrednictwem zmiennej wynikowej VALUE.
const OrderStatus as valueSet(com.cisag.app.general.OrderStatus);
function create()
{
/* Get time particles for OQL query */
var fromDate := today();
var fromYear := format(year(fromDate), „0000”);
var fromMonth := format(month(fromDate), „00”);
var fromDay := format(day(fromDate), „00”);
/* Use default time zone ID of the system */
var timeZoneId := timeZoneId(fromDate);
/* create OQL statement */
var OQL :=
„SELECT COUNT(*) FROM
com.cisag.app.purchasing.obj.ReceiptOfGoods o ” +
„WHERE o:date >= toTimestamp('” + timeZoneId + „'” +
„, ” + fromYear + „, ” + fromMonth + „, ” + fromDay +
„, 00, 00, 00, 0000) AND o:status = 3”;
/* query the database */
var receiptsOfGoodsPostedToday := cast(Number, getResultList(OQL,
list(), 1)[0][0]);
/* return the result */
result.VALUE := receiptsOfGoodsPostedToday;
}
Funkcje dla aplikacji kokpitu (Funkcje kokpitu)
Z pomocą funkcji createFilter można użyć do wstępnego przypisania pól wyboru w aplikacji kokpitu.
createFilter
Nazwa |
createFilter |
Opis |
Tworzy filtr do wstępnego przypisania pola wyboru aplikacji kokpitu. |
Oznaczenia |
String createFilter(String filterType, Unknown filterValue)
String createFilter(String filterType, Unknown[] filterValue) |
Parametry |
filterType to typ danych filtra.
filterValue jest wartością filtra. |
Wynik |
Funkcja createFilter tworzy filtr do wstępnego przypisania pola wyboru aplikacji kokpitu. Oznacza to, że pola wyboru, które wymagają formatowania specyficznego dla użytkownika lub zależnego od języka, takie jak dzisiaj dla okresu czasu lub 2021-01-01 lub 01.01.2021 dla daty, mogą być również wstępnie przypisane przez działanie. |
Źródła błędów |
|
Przykłady |
createFilter(„bin[54]”, loadPartner(„10010”)) wypełnia pole wyboru w aplikacji kokpitu linkiem do partnera 10010. |
Kontekst |
WF_ACTIVITY_REPOSITORY, WF_ACTIVITY_OLTP |
Uwagi |
|
Odniesienia |
fireAggregatorIndicator |
Poniższa tabela przedstawia niektóre z najczęściej używanych typów danych dla pól wyboru w aplikacjach typu lista:
Typ filtra | Opis |
Filter[str(x)] | Ciąg znaków o długości x |
Filter[str(x,ml)] | Wielojęzyczny ciąg znaków o długości x |
ValueSetFilter[vset] | Pole wyboru |
Filter[guid] | GUID, np. identyfikator GUID użytkownika |
Filter[stmp] | Znacznik czasu z identyfikatorem GUID strefy czasowej |
Filter[objStmp] | Znacznik czasu ze strefą czasową za pośrednictwem obiektu biznesowego |
Filter[bool] | Wartość logiczna |
Filter[int] | Integer |
Filter[long] | Długa liczba całkowita |
Filter[dec(7,4)] | Liczba dziesiętna |
Filter[byte] | Wartość bajtu |
Filter[part(PointInTime)] | Mianowanie z dokładnością i kalendarzem |
Filter[part(Duration)] | Czas trwania |
Filter[part(Quantity)] | Ilość z identyfikatorem GUID jednostki |
Filter[part(ForeignAmount)] | Kwota z identyfikatorem GUID waluty |
Filter[part(DomesticAmount)] | Kwota w trzech walutach lokalnych |
Filter[part(OrganizationalUnit)] | Jednostka organizacyjna |
Filter[part(person)] | Osoba |
Filter[bin(54)] | Łączenie obiektów biznesowych |