Język skryptowy systemu: Funkcje podstawowe

Spis treści

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 obsługuje zarówno własny język skryptowy systemu, jak i JavaScript do wyrażania złożonych relacji. Niniejsza dokumentacja zawiera szczegółowe informacje na temat poszczególnych funkcji ogólnych języka skryptowego systemu. Funkcje ogólne to funkcje, których kontekst użycia nie wymaga ani definicji działania, ani bazy danych OLTP. Przykładami funkcji ogólnych są createCisDate i createTimestamp, które tworzą CisDate lub czas, a także getByPrimaryKey i getByBusinessKey, które otwierają obiekt biznesowy przy użyciu jego klucza podstawowego lub klucza biznesowego.

Przykłady zawarte w tym 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ą własnym 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

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.

Funkcje ogólne

Funkcje ogólne to funkcje, których kontekst użycia nie wymaga ani definicji działania, ani bazy danych OLTP. Niniejszy dokument dzieli funkcje ogólne na następujące grupy:

  • Funkcje arytmetyczne
  • Funkcje logiczne
  • Funkcje dla ciągów znaków
  • Funkcje daty i godziny
  • Funkcje dla list
  • Funkcje GUID
  • Funkcje dla zestawów wartości 
  • Funkcje dla obiektów biznesowych
  • Funkcje dla instrukcji OQL
  • Funkcje NLS
  • Funkcje dla plików
  • Funkcje dla użytkowników
  • Polecenia wyzwalania zdarzeń
  • Funkcje systemowe i konfiguracyjne
  • Funkcje wiadomości
  • Funkcje dla wartości zerowych
  • Inne funkcje

Funkcje arytmetyczne (Arithmetic functions)

Funkcje arytmetyczne reprezentują podstawowe operacje arytmetyczne. Funkcje arytmetyczne obejmują

  • abs
  • ceil
  • floor
  • max
  • min
  • neg
  • round
abs

Nazwa

abs

Opis

abs zwraca wartość bezwzględną liczby.

Podpisy

Number abs(Number value)

Parametry

value jest liczbą.

Wynik

Wartość bezwzględna value jako liczby.

Źródła błędów

Brak

Przykłady

abs(3.14159) zwraca wartość 3.14159.

abs(-3.14159) zwraca -3.14159.

Kontekst

ALL

Uwagi

 

Zobacz także

 

Przykład
Poniższy przykład z definicji działania help.abs zwraca wartość bezwzględną liczby:

function create()

{

  var p_number := parameters.NUMBER;

  var r_abs := abs(p_number);

  result.VALUE := r_abs;

}

ceil

Nazwa

ceil

Opis

ceil zaokrągla liczbę w górę.

Podpisy

Number ceil(Number value)

Number ceil(Number value, Number scale)

Parametry

value to liczba, która powinna zostać zaokrąglona w górę.

scale to liczba cyfr potomnych dla wyniku.

Wynik

Liczba value zaokrąglona do scale miejsc dziesiętnych. Jeśli wartość scale nie jest określona, przyjmowane jest 0 miejsc po przecinku. Jeśli scale jest liczbą ujemną lub nie jest liczbą całkowitą, jest zaokrąglana do round(abs(„scale”)).

Źródła błędów

Brak

Przykłady

ceil(3.14159) zwraca 4.

ceil(-3.1415) zwraca -3.

ceil(3.14159 2) zwraca 3.15.

ceil(-3.14159 4) zwraca -3.1415.

Kontekst

ALL

Uwagi

 

Zobacz także

ceil, round

Przykład
Poniższy przykład z definicji działania help.ceil zaokrągla liczbę w górę:

function create()

{

  var p_number := parameters.NUMBER;

  var p_scale := parameters.SCALE;

  var r_ceil := ceil(p_number, p_scale);

 

  result.VALUE := r_ceil;

}

floor

Nazwa

floor

Opis

floor zaokrągla liczbę.

Podpisy

Number floor(Number value)

Number floor(Number value, Number scale)

Parametry

value to liczba, która powinna zostać zaokrąglona w dół.

scale to liczba cyfr potomnych dla wyniku.

Wynik

Liczba value jest zaokrąglana w dół do scale miejsc dziesiętnych. Jeśli wartość scale nie jest określona, przyjmowane jest 0 miejsc po przecinku. Jeśli scale jest liczbą ujemną lub nie jest liczbą całkowitą, jest zaokrąglana w dół do round(abs(„scale”)).

Źródła błędów

Brak

Przykłady

floor(3.14159) zwraca 3.

floor(-3.1415) zwraca -4.

floor(3.14159 4) zwraca wartość 3.1415.

floor(-3.14159 2) zwraca -3.15.

Kontekst

ALL

Uwagi

 

Zobacz także

ceil, round

Przykład
Poniższy przykład z definicji działania help.floor zaokrągla liczbę.

function create()

{

  var p_number := parameters.NUMBER;

  var p_scale := parameters.SCALE;

  var r_ceil := floor(p_number, p_scale);

  result.VALUE := r_ceil;

}

max

Nazwa

max

Opis

max określa największą liczbę, CisDate lub Timestamp z maksymalnie 9 parametrów.

Podpisy

Number max(Number p1)

Number max(Number p1, Number p2)

Number max(Number p1, Number p2, Number p3,…, Number p9)

CisDate max(CisDate p1)

CisDate max(CisDate p1, CisDate p2)

CisDate max(CisDate p1, CisDate p2, CisDate p3,…, CisDate p9)

Timestamp max(Timestamp p1)

Timestamp max(Timestamp p1, Timestamp p2)

Timestamp max(Timestamp p1, Timestamp p2, Timestamp p3,…, Timestamp p9)

Parametry

p1 to pierwsza liczba, CisDate lub punkt w czasie.

p2 to druga liczba, CisDate lub punkt w czasie.

p3 to trzecia liczba, CisDate lub punkt w czasie.

[…]

p9 to dziewiąta liczba, CisDate lub punkt w czasie.

Wynik

Największa liczba, CisDate lub Timestamp spośród przesłanych parametrów.

Źródła błędów

Brak

Przykłady

max(-3, 1) zwraca 1.

max(MIN_DATE, MAX_DATE) zwraca 9999.12.31.

max(MIN_DATE, UNDEFINED_DATE) zwraca 1000.01.01.

Jeśli parameters odwołuje się do obiektu biznesowego z częścią updateInfo, wówczas max(parameters.object:updateInfo.createTime, parameters.object:updateInfo.updateTime) zwraca czas ostatniej zmiany. Jeśli obiekt biznesowy nie został zmieniony od czasu jego utworzenia, wyrażenie zwraca czas utworzenia.

Kontekst

ALL

Uwagi

 

Zobacz także

min

Przykład
Poniższy przykład z definicji działania help.max zwraca największą z dwóch liczb, dwóch czasów i dwóch CisDates:

function create()

{

  var p_number1 := parameters.NUMBER1;

  var p_number2 := parameters.NUMBER2;

  var p_timestamp1 := parameters.TIMESTAMP1;

  var p_timestamp2 := parameters.TIMESTAMP2;

  var p_cisDate1 := createCisDate(year(p_timestamp1), month(p_timestamp1), day(p_timestamp1));

  var p_cisDate2 := createCisDate(year(p_timestamp2), month(p_timestamp2), day(p_timestamp2));

  var r_max_number := max(p_number1, p_number2);

  var r_max_cisDate := max(p_cisDate1, p_cisDate2);

  var r_max_timestamp := max(p_timestamp1, p_timestamp2);

  result.VALUE_NUMBER := r_max_number;

  result.VALUE_CISDATE := r_max_cisDate;

  result.VALUE_CISDATE := r_max_cisDate;

  result.VALUE_TIMESTAMP := r_max_timestamp;

}

Aby określić największą liczbę z listy zawierającej więcej niż 9 liczb, można użyć na przykład następującej funkcji zdefiniowanej przez użytkownika:

function maxOfList(numberList as Number[]) as Number {

  var largest := 0;

  if (size(numberList) > 0)

    największy := numberList[0];

  for (n as Number : numberList)

    if (n > największy)

      largest := n;}

  return largest;

}

min

Nazwa

min

Opis

min określa najmniejszą liczbę, CisDate lub Timestamp z maksymalnie 9 parametrów.

Podpisy

Number min(Number p1)

Number min(Number p1, Number p2)

Number min(Number p1, Number p2, Number, p3,…, Number p9)

CisDate min(CisDate p1)

CisDate min(CisDate p1, CisDate p2)

CisDate min(CisDate p1, CisDate p2, CisDate p3,…, CisDate p9)

Timestamp min(Timestamp p1)

Timestamp min(Timestamp p1, Timestamp p2)

Timestamp min(Timestamp p1, Timestamp p2, Timestamp p3,…, Timestamp p9)

Parametry

p1 to pierwsza liczba, CisDate lub punkt w czasie.

p2 to druga liczba, CisDate lub punkt w czasie.

p3 to trzecia liczba, CisDate lub punkt w czasie.

[…]

p9 to dziewiąta liczba, CisDate lub punkt w czasie.

Wynik

Najmniejsza liczba, CisDate lub Timestamp spośród przesłanych parametrów.

Źródła błędów

Brak

Przykłady

min(-3, 1) zwraca -3.

min(MIN_DATE, MIN_DATE) zwraca 1000.01.01.

min(MIN_DATE, UNDEFINED_DATE) zwraca 1000.01.01.

Kontekst

ALL

Uwagi

 

Zobacz także

max

Przykład
Poniższy przykład z definicji działania help.min zwraca najmniejszą z dwóch liczb, dwóch czasów i dwóch CisDates:

function create()

{

  var p_number1 := parameters.NUMBER1;

  var p_number2 := parameters.NUMBER2;

  var p_timestamp1 := parameters.TIMESTAMP1;

  var p_timestamp2 := parameters.TIMESTAMP2;

  var p_cisDate1 as CisDate;

  var p_cisDate2 as CisDate;

  if (p_timestamp1 <> UNDEFINED_DATE)

    p_cisDate1 := createCisDate(year(p_timestamp1), month(p_timestamp1), day(p_timestamp1));

  if (p_timestamp2 <> UNDEFINED_DATE)

    p_cisDate2 := createCisDate(year(p_timestamp2), month(p_timestamp2), day(p_timestamp2));

  var r_min_liczba := min(p_liczba1, p_liczba2);

  var r_min_cisDate := min(p_cisDate1, p_cisDate2);

  var r_min_timestamp := min(p_timestamp1, p_timestamp2);

  result.VALUE_NUMBER := r_min_number;

  result.VALUE_TIMESTAMP := r_min_timestamp;

  result.VALUE_CISDATE := r_min_cisDate;

  result.IS_NULL := isNull(r_min_cisDate);

}

Aby określić najmniejszą liczbę z listy zawierającej więcej niż 9 liczb, można użyć na przykład następującej funkcji zdefiniowanej przez użytkownika:

function minOfList(numberList as Number[]) as Number {

  var smallest := 0;

  if (size(numberList) > 0)

    smallest := numberList[0];

  for (n as Number : numberList)

    if (n < najmniejszy)

      smallest := n;

  return smallest;

}

neg

Nazwa

neg

Opis

neg zwraca ujemną wartość liczby.

Podpisy

Number neg(Number value)

Parametry

value jest liczbą.

Wynik

Ujemna wartość value jako liczba.

Źródła błędów

Brak

Przykłady

neg(3.14159) zwraca -3.14159.

neg(-3.14159) zwraca 3.14159.

Kontekst

ALL

Uwagi

 

Zobacz także

abs

Przykład
Poniższy przykład z definicji działania help.neg neguje liczbę:

function create()

{

  var p_number := parameters.NUMBER;

  var r_neg := neg(p_number);

  result.VALUE := r_neg;

}

round

Nazwa

round

Opis

round zaokrągla liczbę.

Podpisy

Number round(Number value)

Number round(Number value, Number scale)

Parametry

value to liczba, która ma zostać zaokrąglona.

scale to liczba cyfr potomnych dla wyniku.

Wynik

Liczba value zaokrąglona do scale miejsc dziesiętnych. Jeśli wartość scale nie zostanie określona, przyjmowane jest 0 miejsc po przecinku. Jeśli scale jest liczbą ujemną lub nie jest liczbą całkowitą, używane jest round(abs(„scale”)).

Źródła błędów

Brak

Przykłady

round(3.14159) zwraca 3.

round(-3.1415) zwraca -3.

round(3.14159 4) zwraca 3.1416.

round(-3.14159 4) zwraca -3.1416.

Kontekst

ALL

Uwagi

 

Zobacz także

ceil, floor

Przykład
Poniższy przykład z definicji działania help.round zaokrągla liczbę do określonej liczby miejsc po przecinku:

function create()

{

  var p_number := parameters.NUMBER;

  var p_scale := parameters.SCALE;

  var r_round := round(p_number, p_scale);

  result.VALUE := r_round;

}

Funkcje logiczne (Logic functions)

Funkcja logiczna not może być użyta do odwrócenia wartości prawdy wyrażenia logicznego.

not

Nazwa

not

Opis

not odwraca wartość prawdy (Boolean).

Podpisy

Boolean not(Boolean value)

Parametry

value jest liczbą.

Wynik

Jeśli value ma wartość true, zwracana jest wartość false. Jeśli value nie jest wartością true, zwracana jest wartość true.

Źródła błędów

Brak

Przykłady

not(true) zwraca wartość prawdy false.

not(false) zwraca wartość prawdy true.

not(isEmpty(intersection(list(format(today(), „EEE”, „en”)), list(„Sat”, „Sun”)))) zwraca true, jeśli dzisiaj jest sobota lub niedziela, w przeciwnym razie false.

Kontekst

ALL

Uwagi

 

Zobacz także

 
Przykład
Poniższy przykład z definicji działania help.not odwraca wartość prawdy:

function create()

{

  var p_number := parameters.NUMBER;

  var r_not := not(p_number = 0);

  result.VALUE := r_not;

}

Funkcje dla ciągów znaków (String functions)

Ciągi znaków można edytować i wyszukiwać za pomocą funkcji dla ciągów znaków. Funkcje dla ciągów znaków obejmują:

  • char
  • charAt
  • decrypt
  • encrypt
  • endsWith
  • format
  • indexOf
  • lastIndexOf
  • lenght
  • startsWith
  • substring
  • toHtml
  • toLower
  • toUpper
  • trim
  • unzipText
char

Nazwa

char

Opis

char zwraca znak Unicode numerycznego punktu kodowego.

Podpisy

String char(Number codepoint)

Parametry

codepoint to punkt kodowy znaku Unicode.

Wynik

Znak Unicode punktu kodowego jako ciąg jednego znaku.

Źródła błędów

Brak

Przykłady

char(97) zwraca znak Unicode a.

Kontekst

ALL

Uwagi

Comarch ERP Enterprise wykorzystuje Unicode w całym systemie. Oznacza to, że wszystkie popularne znaki globalne mogą być używane i drukowane na formularzach.

Zobacz także

charAt

Przykład
Poniższy przykład z definicji działania help.char zwraca znak Unicode numerycznego punktu kodowego:

function create()

{

  var p_codepoint := parameters.CODEPOINT;

  var r_char := char(p_codepoint);

  result.VALUE := r_char;

}

charAt

Nazwa

charAt

Opis

charAt zwraca numeryczny punkt kodowy znaku Unicode.

Podpisy

Number charAt(String text, Number index)

Parametry

text to ciąg znaków zawierający znaki Unicode.

index to pozycja znaku Unicode w ciągu znaków.

Wynik

Punkt kodowy znaku Unicode na pozycji określonej przez index w łańcuchu znaków text.

Źródła błędów

Jeśli index nie jest prawidłową pozycją ciągu text, zwracana jest wartość zero.

Przykłady

charAt(„abc”, 1) zwraca wartość 98 dla znaku Unicode b.

Kontekst

ALL

Uwagi

Comarch ERP Enterprise wykorzystuje Unicode w całym systemie. Oznacza to, że wszystkie popularne znaki globalne mogą być używane i drukowane na formularzach.

Zobacz także

char

Przykład
Poniższy przykład z definicji działania help.charAt zwraca numeryczny punkt kodowy znaku Unicode:

function create()

{

  var p_text := parameters.TEXT;

  var p_index := parameters.INDEX;

  var r_charAt := charAt(p_text, p_index);

  result.IS_NULL := isNull(r_charAt);

  result.VALUE := r_charAt;

}

decrypt 

Nazwa

decrypt

Opis

decrypt używa klucza, aby zwrócić zaszyfrowany tekst w postaci niezaszyfrowanej.

Podpisy

String decrypt(String key, String encryptedText)

Parametry

key to 32-cyfrowy klucz, za pomocą którego tekst został zaszyfrowany.

encryptedText to zaszyfrowany tekst.

Wynik

Tekst encryptedText jako niezaszyfrowany ciąg znaków.

Źródła błędów

Jeśli klucz key nie ma długości 32 znaków, zwracana jest wartość zero.

Przykłady

decrypt(„u22Teu88mN/8hND92ch+hkDj84PlQMMWUE2Y4cnVuCk=”) odszyfrowuje zaszyfrowany tekst przy użyciu klucza standardowego i zwraca niezaszyfrowaną wartość jako ciąg znaków.

Kontekst

ALL

Uwagi

 

Zobacz także

encrypt

Przykład
Poniższy przykład z definicji działania help.decrypt zwraca zaszyfrowany tekst niezaszyfrowany przy użyciu klucza:

function create()

{

  var p_encrypted_text := parameters.ENCRYPTED_TEXT;

  var p_key := parameters.KEY;

  var r_decrypted_text as String;

  r_decrypted_text := decrypt(p_key, p_encrypted_text);

  result.IS_NULL := isNull(r_decrypted_text);

  result.DECRYPTED_TEXT := r_decrypted_text;

}

encrypt

Nazwa

encrypt

Opis

encrypt szyfruje tekst przy użyciu klucza i zwraca zaszyfrowany tekst jako ciąg znaków.

Podpisy

String encrypt(String plainText)

String encrypt(String key, String plainText)

Parametry

plainText to ciąg znaków, który ma zostać zaszyfrowany.

key jest kluczem. Jeśli nie określono klucza, plainText jest szyfrowany przy użyciu standardowego klucza.

Wynik

Tekst plainText jako zaszyfrowany ciąg znaków.

Źródła błędów

Jeśli klucz key nie jest znany systemowi, zwracana jest wartość zero.

Przykłady

encrypt(„abc”) szyfruje tekst abc przy użyciu standardowego klucza systemowego i zwraca zaszyfrowaną wartość jako ciąg znaków.

Kontekst

ALL

Uwagi

 

Zobacz także

decrypt

Przykład
Poniższy przykład z definicji działania help.encrypt szyfruje tekst przy użyciu klucza:

function create()

{

  var p_decrypted_text := parameters.DECRYPTED_TEXT;

  var p_key := parameters.KEY;

  var r_encrypted_text as String;

  if(p_key <> „”)

    r_encrypted_text := encrypt(p_key, p_decrypted_text);

  inny

    r_encrypted_text := encrypt(p_decrypted_text);

  result.IS_NULL := isNull(r_encrypted_text);

  result.ENCRYPTED_TEXT := r_encrypted_text;

}

endsWith

Nazwa

endsWith

Opis

endsWith sprawdza, czy ciąg znaków kończy się określonym sufiksem.

Podpisy

Boolean endsWith(String text, String suffix)

Parametry

text to ciąg znaków, który ma zostać sprawdzony.

suffix jest znakiem lub ciągiem znaków.

Wynik

Jeśli ciąg text kończy się na suffix, wynikiem jest true, w przeciwnym razie false.

Źródła błędów

Brak

Przykłady

endsWith(„ERP”, „P”) zwraca wartość true.

endsWith(„ERP”, „E”) zwraca wartość false.

endsWith(„Comarch”, „arch”) zwraca wartość true.

endsWith(„Enterprise”, „”) zwraca wartość true.

endsWith(„”, „CEE”) zwraca wartość false.

endsWith(„”,””) zwraca wartość true.

Kontekst

ALL

Uwagi

 

Zobacz także

startsWith

Przykład
Poniższy przykład z definicji działania help.endsWith sprawdza, czy ciąg znaków kończy się określonym sufiksem:

function create()

{

  var p_text := parameters.TEXT;

  var p_suffix := parameters.SUFFIX;

  var r_endsWith := endsWith(p_text, p_suffix);

  result.VALUE := r_endsWith;

}

format

Nazwa

format

Opis

format zwraca parametr jako sformatowany ciąg znaków. Parametr jest formatowany w różny sposób w zależności od typu danych.

Podpisy

String format(CisDate date)

String format(CisDate date, String pattern)

String format(CisDate date, String pattern, String language)

String format(Timestamp time)

String format(Timestamp time, String pattern)

String format(Timestamp time, String pattern, String language)

String format(Number number)

String format(Number number, String pattern)

String format(Number number, String pattern, String language)

String format(String text)

String format(String text, String p1)

String format(String text, String p1, String p2)

String format(String text, String p1, String p2, String p3,…,String p8)

String format(String text, String[] parameters)

Parametry

date jest CisDate.

time to punkt w czasie (znacznik czasu).

number jest liczbą.

pattern to ciąg znaków z instrukcjami formatowania CisDate, godziny lub liczby. Jeśli format nie zostanie określony, wyprowadzana jest liczba w formacie # oraz CisDate lub godzina w formacie rrrrMMddHHmmssSSS.

language to 2-literowy kod ISO służący do formatowania CisDate, godziny lub liczby zgodnie ze standardowym formatem krajowym.

text to ciąg znaków, który może zawierać symbole zastępcze {0}, {1}, {2},…, {n}.

p1 do p8 to ciągi do 8 znaków z określonymi wartościami dla symboli zastępczych w text.

parameters to lista z dowolną liczbą symboli zastępczych.

Wynik

Jeśli parametr jest ciągiem znaków, format zastępuje symbole zastępcze w ciągu znaków. Dla wszystkich innych typów danych, format zwraca parametr jako sformatowany ciąg znaków.

Źródła błędów

Jeśli nie istnieje odpowiedni format dla określonego języka, wynikiem jest zero.

Przykłady

Dla ciągów znaków:

format(„Hello {0}!”, „world”) zwraca Hello world!.

format(„Hello {0}!”, list(„world”)) zwraca Hello world!.

Dla CisDate:

format(MIN_DATE, „dd MMMM rrrr”, „pl”)) zwraca 01 styczeń 0002.

format(MIN_DATE)) zwraca 00020101000002.

Dla punktów czasowych:

Dla liczb:

format(3,1415926)) zwraca 3.

format(3,1415926, „###.##”, „de”)) zwraca 3,14.

format(3,1415926, „0000.0000”, „de”)) zwraca 0003,1416.

format(3,1415926, „#.00”, „en”)) zwraca 3.14.

format(3,1415926, „#%”)) zwraca 314%.

Kontekst

ALL

Uwagi

Jeśli w tekście ma zostać zastąpionych więcej niż 8 symboli zastępczych, wartości muszą zostać przesłane jako lista ciągów znaków.

Zobacz także

dateString, timeString, toHtml

Do formatowania liczb dostępne są następujące symbole:

Symbol

Wyjaśnienie

0

Liczba z zerem wiodącym

#

Liczba bez zera wiodącego

.

Separator dziesiętny w zależności od języka

Znak minus

,

Grupowanie znaków w zależności od języka

;

Oddziela formaty dodatnie i ujemne.

%

Mnoży liczbę przez 100 i wyświetla ją jako wartość procentową.

Charakteryzuje znaki specjalne.

Następujące symbole są dostępne do formatowania CisDate i czasu:

Symbol

Opis

G

Era, np. GG->AD

y

Rok, np. rrrr->2021, rrrr->21

M

Miesiąc, np. MM->08, MMM->sierpień, MMMM->sierpień, w zależności od języka.

w

tydzień w roku, np. ww->27

W

tydzień na miesiąc, np. W->2

D

dzień roku, np: DDD->183

d

Dzień miesiąca, np. dd->05, d->5

F

dzień tygodnia w miesiącu, np. F->2

E

Dzień tygodnia, np. EEE->Tue, EEEE-> Tuesday, w zależności od języka.

a

am/pm, np. aa -> PM

H

godzin dziennie (0-23), np. 13

k

Godzina na dzień (1-24), np. 24

K

Godzina w am/ppm (0-11), np. 0

h

Godzina w am/pm (1-12), np. 12

m

minut na godzinę, np. 53

s

Sekunda w minucie, np. 55

S

Milisekunda w sekundzie, np. 978

Funkcji formatu można używać na przykład do następujących zadań:

  • W opisie działania liczby całkowite powinny być zapisane bez miejsc dziesiętnych.
  • Jeśli użytkownik chce sformatować liczby, CisDates i godziny zgodnie z językiem korespondencji odbiorcy wiadomości e-mail. Należy upewnić się, że funkcja zwraca zero, jeśli nie ma odpowiedniego formatu dla określonego języka.
  • Do pliku eksportu, który ma zostać wygenerowany, należy przypisać unikatową nazwę z odniesieniem czasowym.
  • Jeśli użytkownik chce utworzyć plik importu, aby zaimportować go później. W takim przypadku można zapisać plik szablonu importu z symbolami zastępczymi w Knowledge Store i odczytać go za pomocą funkcji readTextFile. Następnie należy użyc formatu, aby wypełnić symbole zastępcze określonymi wartościami, a następnie zapisać gotowy plik importu w Knowledge Store do importu za pomocą funkcji writeFile.
  • W opisie działania należy użyć modułów tekstowych z symbolami zastępczymi, aby móc zarządzać opisami niezależnie od definicji działania.
Przykład
Poniższy przykład z definicji działania help.format pokazuje, jak formatowane są typy danych dla daty, daty i godziny oraz liczb. Przykład pokazuje również, jak używać funkcji format do zastępowania symboli zastępczych w ciągu znaków konkretnymi wartościami.

function create()

{

  var p_date as CisDate;

  var p_timestamp as Timestamp;

  var p_number := parameters.NUMBER;

  var p_pattern := parameters.PATTERN;

  var p_language := parameters.LANGUAGE;

  var p_parameters := parameters.PARAMETERS;

  var r_date as String;

  var r_timestamp as String;

  var r_number as String;

  p_date := today();

  p_timestamp := now();

  /* format CisDate, Timestamp i Number zgodnie z wzorcem */

  if (p_language = „”) {

    r_date:= format(today(), p_pattern);

    r_timestamp := format(p_timestamp, p_pattern);

    r_number := format(p_number, p_pattern);

  } else {

    r_date := format(today(), p_pattern, p_language);

    r_timestamp := format(p_timestamp, p_pattern, p_language);

    r_number := format(p_number, p_pattern, p_language);

  }

  /* return result if not null */

  if (not isNull(r_date)) result.VALUE_DATE := r_date;

  if (not isNull(r_date)) result.VALUE_TIMESTAMP := format(p_timestamp, p_pattern);

  if (not isNull(r_date)) result.VALUE_NUMBER := format(p_number, p_pattern);

  if (isNull(r_date)) result.VALUE_DATE := „null”;

  if (isNull(r_date)) result.VALUE_TIMESTAMP := „null”;

  if (isNull(r_date)) result.VALUE_NUMBER := „null”

  /* zastępuje parametry (symbole zastępcze) w łańcuchu */

  var p_text := „p0={0}, p1={1}, p2={2}, p3={3}, p4={4}, p5={5}, p6={6}, p7={7}, p8={8}, p9={9}”;

  var pList := split(p_parameters, ” „);

  if (size(pList) = 1)

    result.VALUE_STRING := format(p_text, p_parameters);

  else

    result.VALUE_STRING := format(p_text, pList);

}

/* Dzieli „p_text” na tablicę przy każdym wystąpieniu „p_separator” */

function split(p_text as String, p_separator as String) as String[]

{

  if (p_separator = „”)

    p_separator := ” „;

  var increment := length(p_separator);

  var sep as String;

  var word as String;

  var r_wordList as String[];

  var i := 0;

  var startPos := 0;

  while (i + increment – 1 < length(p_text)) {

    sep := substring(p_text, i, i + increment);

    if (sep = p_separator) {

      word := trim(substring(p_text, startPos, i));

      i := i + przyrost;

      startPos := i;

      if (word <> „” and word <> p_separator)

        add(r_wordList, word);

    } else {

      i := i + 1;

    }

  }

  word := substring(p_text, startPos);

  if (word <> „” and word <> p_separator)

    add(r_wordList, word);

  return r_wordList;

}[/example]

indexOf

Nazwa

indexOf

Opis

indexOf określa pierwszą pozycję znaku lub ciągu znaków w tekście.

Podpisy

Number indexOf(String text, String searchValue)

Number indexOf(String text, String searchValue, Number firstPos)

Parametry

text to tekst do przeszukania.

searchValue to znak lub ciąg znaków, który ma zostać wyszukany.

firstPos to pozycja w tekście, od której powinno rozpocząć się wyszukiwanie.

Wynik

Pozycja pierwszego wystąpienia searchValue w text od pozycji firstPos.

Jeśli wyszukiwanie nie powiodło się, zwracane jest -1.

Źródła błędów

Brak

Przykłady

indexOf(„abcabc”, „a”) zwraca 0.

indexOf(„abcabc”, „b”) zwraca 1.

indexOf(„abcabc”, „z”) zwraca -1.

indexOf(„abcabc”, „bc”) zwraca 1.

indexOf(„abcabc”, „”) zwraca 0.

indexOf(„”, „a”) zwraca -1.

indexOf(„”, „”) zwraca 0.

indexOf(„abcabc”, „c”, 2) zwraca 2.

indexOf(„abcabc”, „c”, 3) zwraca 5.

indexOf(„abcabc”, „c”, -10) zwraca 2.

indexOf(„abcabc”, „c”, 10) zwraca -1.

Kontekst

ALL

Uwagi

 

Zobacz także

lastIndexOf, substring

Przykład
Poniższy przykład z definicji działania help.indexOf zwraca pozycję pierwszego wystąpienia ciągu znaków w innym ciągu znaków:

function create()

{

  var p_text := parameters.TEXT;

  var p_searchValue := parameters.SEARCH_VALUE;

  var p_firstPos := parameters.FIRST_POS;

  var r_indexOf as Number;

  if (p_firstPos = 0)

    r_indexOf := indexOf(p_text, p_searchValue);

  inny

    r_indexOf := indexOf(p_text, p_searchValue, p_firstPos);

  result.VALUE := r_indexOf;

}

lastIndexOf

Nazwa

lastIndexOf

Opis

indexOf określa ostatnią pozycję znaku lub ciągu znaków w tekście.

Podpisy

Number lastIndexOf(String text, String searchValue)

Number lastIndexOf(String text, String searchValue, Number firstPos)

Parametry

text to tekst do przeszukania.

searchValue to znak lub ciąg znaków, który ma zostać wyszukany.

firstPos to pozycja w tekście, od której powinno rozpocząć się wyszukiwanie.

Wynik

Pozycja pierwszego wystąpienia searchValue w text od pozycji firstPos. W przeciwieństwie do funkcji indexOf, text jest przeszukiwany wstecz od firstPos.

Jeśli wyszukiwanie nie powiodło się, zwracane jest -1.

Źródła błędów

Brak

Przykłady

lastIndexOf(„abcabc”, „a”) zwraca 3.

lastIndexOf(„abcabc”, „b”) zwraca 4.

lastIndexOf(„abcabc”, „d”) zwraca -1.

lastIndexOf(„abcabc”, „bc”) zwraca 4.

lastIndexOf(„abcabc”, „”) zwraca 5.

lastIndexOf(„”, „a”) zwraca -1.

lastIndexOf(„”, „”) zwraca 0.

lastIindexOf(„abcabc” „a”, 2) zwraca 0.

lastIndexOf(„abcabc”, „a”, 3) zwraca 3.

lastIndexOf(„abcabc”, „a”, -10) zwraca -1.

lastIndexOf(„abcabc”, „a”, 10) zwraca 3.

substring(objectName(event.guid), lastIndexOf(objectName(event.guid), „.”)) zwraca nazwę jednostki biznesowej zdarzenia typu Jednostka biznesowa bez jej przestrzeni nazw.

Kontekst

ALL

Uwagi

 

Zobacz także

indexOf, substring

Przykład
Poniższy przykład z definicji działania help.indexOf zwraca pozycję ostatniego wystąpienia ciągu znaków w innym ciągu znaków:

function create()

{

  var p_text := parameters.TEXT;

  var p_searchValue := parameters.SEARCH_VALUE;

  var p_lastPos := parameters.LAST_POS;

  var r_lastIndexOf as Number;

  if (p_lastPos = 0)

    r_lastIndexOf := lastIndexOf(p_text, p_searchValue);

  inny

    r_lastIndexOf := lastIndexOf(p_text, p_searchValue, p_lastPos)

  result.VALUE := r_lastIndexOf;

}

lenght

Nazwa

lenght

Opis

length zwraca długość ciągu znaków.

Podpisy

Number (String text)

Parametry

text to ciąg znaków, którego długość ma zostać określona.

Wynik

Długość ciągu znaków text.

Źródła błędów

Brak

Przykłady

length(„abc”) zwraca 3.

length(„”) zwraca 0.

Kontekst

ALL

Uwagi

Długość to liczba znaków w ciągu znaków. Pierwszy znak ma pozycję 0. Dlatego ostatni znak niepustego ciągu text ma pozycję length(text)-1.

Liczba elementów na liście jest określana przez size.

Zobacz także

 
Przykład
Poniższy przykład z definicji działania help.length zwraca długość ciągu znaków:

function create()

{

  var p_text := parameters.TEXT;

  var r_length := length(p_text);

  result.VALUE := r_length;

}

startsWith

Nazwa

startsWith

Opis

startsWith sprawdza, czy ciąg znaków zaczyna się od określonego prefiksu.

Podpisy

Boolean startsWith(String text, String prefix)

Parametry

text to ciąg znaków, który ma zostać sprawdzony.

prefix to znak lub ciąg znaków.

Wynik

Jeśli ciąg text zaczyna się od prefix, wynikiem jest true, w przeciwnym razie false.

Źródła błędów

Brak

Przykłady

startsWith(„ERP”, „E”) zwraca wartość true.

startsWith(„ERP”, „e”) zwraca wartość false.

startsWith(„Comarch”, „Com”) zwraca wartość true.

startsWith(„Enterprise”, „”) zwraca wartość true.

startsWith(„”, „CEE”) zwraca wartość false.

startsWith(„”,””) zwraca wartość true.

Kontekst

ALL

Uwagi

 

Zobacz także

endsWith

Przykład
Poniższy przykład z definicji działania help.startsWith sprawdza, czy ciąg znaków zaczyna się od określonego prefiksu:

function create()

{

  var p_text := parameters.TEXT;

  var p_prefix := parameters.PREFIX;

  var r_startsWith := startsWith(p_text, p_prefix);

  result.IS_NULL := isNull(r_startsWith);

  result.VALUE := r_startsWith;

}

substring

Nazwa

substring

Opis

substring zwraca wszystkie znaki ciągu znaków od określonej pozycji.

Podpisy

String substring(String text, firstIncluded)

String substring(String text, firstIncluded, firstExcluded)

Parametry

text to ciąg znaków.

firstIncluded to pozycja pierwszego znaku w parametrze text, który ma zostać zwrócony.

firstExcluded to pozycja pierwszego znaku po firstIncluded, który nie powinien zostać zwrócony.

Wynik

Ciąg znaków zawierający wszystkie znaki w text od pozycji firstIncluded (włącznie) do pozycji firstExcluded (wyłącznie).

Źródła błędów

Jeśli wartość firstIncluded jest ujemna lub większa niż firstExcluded, zwracana jest wartość zero.

Przykłady

substring(„012345”, 2) zwraca 2345.

substring(„012345”, 2, 4) zwraca 23.

substring(„012345”, 2, 2) zwraca „”.

Kontekst

ALL

Uwagi

 

Zobacz także

indexOf, lastIndexOf

Przykład
Poniższy przykład z definicji działania help.substring zwraca wszystkie znaki ciągu znaków pomiędzy dwoma pozycjami:

function create()

{

  var p_text := parameters.TEXT;

  var p_firstIncluded := parameters.FIRST_INCLUDED;

  var p_firstExcluded := parameters.FIRST_EXCLUDED;

  var r_substring as String;

  if (p_firstExcluded = 0)

    r_substring := substring(p_text, p_firstIncluded);

  else

    r_substring := substring(p_text, p_firstIncluded, p_firstExcluded);

  result.IS_NULL := isNull(r_substring);

  result.VALUE := r_substring;

}

toHTML

Nazwa

toHtml

Opis

toHtml zwraca ciąg znaków ze znakami specjalnymi jako encje HTML.

Podpisy

String toHtml(String plainText)

Parametry

plainText to ciąg znaków.

Wynik

 

Źródła błędów

Brak

Przykłady

toHtml(„<p>text</p>”) zwraca ciąg znaków &lt;p&gt;text&lt;/p&gt;.

toHtml(„Pozdrowienia”) zwraca ciąg znaków Gr&uuml;&szlig;e.

Poniższy przykład dodaje link do artykułu 10010 do opisu działania:

formatDescriptionHTML(„company”, „<a href=\”” + getURL(getCustomizingValue(„com.cisag.app.General”)->Company) + „\”>” + toHtml(getCustomizingValue(„com.cisag.app.General”)->Company:searchString) + „</a>”) zastępuje parametr company w nazwie działania wyszukiwanym terminem partnera powiązanego z klientem i linkiem do otwarcia partnera.

Kontekst

ALL

Uwagi

 

Zobacz także

format

Przykład
Poniższy przykład z definicji działania help.toHtml zwraca ciąg znaków ze wszystkimi znakami specjalnymi zakodowanymi zgodnie z HTML:

function create()

{

  var p_text := parameters.TEXT;

  var var r_toHtml as String;

  r_toHtml := toHtml(p_text);

  result.VALUE := r_toHtml;

}

toLower

Nazwa

toLower

Opis

toLower konwertuje wszystkie wielkie litery w ciągu znaków na małe litery.

Podpisy

String (String text)

Parametry

text to ciąg znaków, którego wielkie litery mają zostać zamienione na małe.

Wynik

Ciąg znaków text ze wszystkimi dużymi literami zamienionymi na małe.

Źródła błędów

Brak

Przykłady

toLower(„Abc123”) zwraca abc123.

toLower(„ABC123”) zwraca abc123.

toLower(„”) zwraca „”.

Kontekst

ALL

Uwagi

 

Zobacz także

toUpper

Przykład
Poniższy przykład z definicji działania help.toLower konwertuje wszystkie wielkie litery w ciągu znaków na małe litery:

function create()

{

  var p_text := parameters.TEXT;

  var r_toLower := toLower(p_text);

  result.VALUE := r_toLower;

}

toUpper

Nazwa

toUpper

Opis

toUpper konwertuje wszystkie małe litery w ciągu znaków na wielkie litery.

Podpisy

String (String text)

Parametry

text to ciąg znaków, którego małe litery mają zostać zamienione na duże.

Wynik

Ciąg znaków text ze wszystkimi małymi literami zamienionymi na wielkie.

Źródła błędów

Brak

Przykłady

toUpper(„Abc123”) zwraca ABC123.

toUpper(„abc123”) zwraca ABC123.

toUpper(„”) zwraca „”.

Kontekst

ALL

Uwagi

 

Zobacz także

toLower

Przykład
Poniższy przykład z definicji działania help.toUpper konwertuje wszystkie małe litery w ciągu znaków na wielkie litery:

function create()

{

  var p_text := parameters.TEXT;

  var r_toUpper := toUpper(p_text);

  result.VALUE := r_toUpper;

}

trim

Nazwa

trim

Opis

trim usuwa spacje na początku i końcu ciągu znaków.

Podpisy

String (String text)

Parametry

string to ciąg znaków.

Wynik

Usunięto ciąg znaków text ze spacjami na początku i końcu.

Źródła błędów

Brak

Przykłady

trim(” JOB „) zwraca wartość JOB.

Kontekst

ALL

Uwagi

Spacje w ciągu znaków text nie są usuwane.

Zobacz także

 
Przykład
Poniższy przykład z definicji działania help.trim usuwa spacje na początku i końcu ciągu znaków:

function create()

{

  var p_text := parameters.TEXT;

  var r_trim as String;

  result.VALUE := trim(p_text);

}

unzipText

Nazwa

unzipText

Opis

unzipText rozpakowuje ciąg znaków z BLOB i zwraca go jako ciąg znaków.

Podpisy

String unzipText(Bytes blob)

Parametry

blob to ciąg znaków przechowywany jako BLOB.

Wynik

Rozpakowany ciąg znaków.

Źródła błędów

Jeśli BLOB nie zawiera żadnego spakowanego tekstu, wynikiem funkcji jest zero.

Przykłady

Jeśli parameters.object jest modułem tekstowym, wówczas unzipText(parameters.object:text) zwraca zawartość modułu tekstowego jako ciąg znaków.

Kontekst

ALL

Uwagi

W celu rozpakowania za pomocą funkcji unzipText, BLOB musi być spakowany zgodnie ze standardową procedurą. Nie dotyczy to wszystkich obiektów BLOB.

Zobacz także

 
Przykład
Poniższy przykład z definicji działania help.unzipText rozpakowuje ciąg znaków z modułu tekstowego i zwraca go jako ciąg znaków:

function create()

{

  var p_textModule := parameters.TEXT_MODULE;

  var var r_unzipText as String;

  var p_language := getByBusinessKey(CisObject(com.cisag.app.general.obj.Language), parameters.LANGUAGE);

  if (not isNull(p_language)) {

    var textModule := getByBusinessKey(CisObject(com.cisag.app.general.obj.Text), p_language:guid, ZERO_GUID, p_textModule);

    r_unzipText := unzipText(textModule:text);

    result.IS_NULL := isNull(r_unzipText);

    result.VALUE := r_unzipText;

  }

}

Funkcje daty i godziny (Date and time functions)

Funkcje daty i godziny mogą być używane do tworzenia i edytowania dat i godzin CisDates. Funkcje daty i godziny obejmują:

  • addDays
  • addHours
  • addMilliseconds
  • addMinutes
  • addSeconds
  • createCisDate
  • createTimestamp
  • day
  • days
  • dateString
  • endOfDay
  • hour
  • hours
  • isMaxDate
  • isMinDate
  • isUndefinedDate
  • milisecond
  • miliseconds
  • minute
  • minutes
  • month
  • months
  • now
  • second
  • seconds
  • startOfDay
  • timeString
  • timeZoneId
  • timeZoneString
  • today
  • toTimestamp
  • weeks
  • year
  • years
addDays

Nazwa

addDays

Opis

addDays dodaje dni do CisDate lub punktu w czasie.

Podpisy

CisDate addDays(CisDate date, Number offset)

Timestamp addDays(Timestamp time, Number offset)

Parametry

date jest CisDate.

time to punkt w czasie.

offset to liczba dni dodawana do parametru date lub time.

Wynik

CisDate lub Timestamp offset dni po parametrze date lub time.

Źródła błędów

Brak

Przykłady

addDays(today(), 7) zwraca CisDate za dokładnie jeden tydzień.

addDays(now(), 7) zwraca czas za dokładnie jeden tydzień.

addDays(startOfDay(now()), 1) zwraca czas jutro o godzinie 00:00:00.000.

Kontekst

ALL

Uwagi

Jeśli offset jest ujemny, wówczas addDays zwraca CisDate lub czas, który leży przed date lub time.

Zobacz także

addHours, addMilliseconds, addMinutes, addSeconds

Przykład
Poniższy przykład z definicji działania help.addDays dodaje dni do bieżącego dnia i bieżącej godziny:

function create()

{

  var p_offset := parameters.OFFSET;

  var r_addDaysDate as CisDate;

  var r_addDaysTime as Timestamp;

  r_addDaysDate := addDays(today(), p_offset);

  r_addDaysTime := addDays(now(), p_offset);

  result.VALUE_DATE := dateString(r_addDaysDate);

  result.VALUE_TIME := r_addDaysTime;

}

addHours

Nazwa

addHours

Opis

addHours dodaje godziny do CisDate lub godziny.

Podpisy

CisDate addHours(CisDate date, Number offset)

Timestamp addHours(Timestamp time, Number offset)

Parametry

date jest CisDate.

time to punkt w czasie.

offset to liczba godzin dodawana do parametru date lub time.

Wynik

CisDate lub Timestamp offset godzin po parametrze date lub time.

Źródła błędów

Brak

Przykłady

addHours(today(), 24) zwraca CisDate dokładnie za jeden dzień.

addHours(now(), 24) zwraca czas za dokładnie jeden dzień.

Kontekst

ALL

Uwagi

Jeśli offset jest ujemny, wówczas addHours zwraca CisDate lub czas, który jest przed date lub time.

Zobacz także

addDays, addMilliseconds, addMinutes, addSeconds

Przykład
Poniższy przykład z definicji działania help.addHours dodaje godziny do bieżącego dnia i bieżącego czasu:

function create()

{

  var p_offset := parameters.OFFSET;

  var r_addHoursDate as CisDate;

  var r_addHoursTime as Timestamp;

  r_addHoursDate := addHours(today(), p_offset);

  r_addHoursTime := addHours(now(), p_offset);

  result.VALUE_DATE := dateString(r_addHoursDate);

  result.VALUE_TIME := r_addHoursTime;

}

addMilliseconds

Nazwa

addMilliseconds

Opis

addMilliseconds dodaje milisekundy do CisDate lub punktu w czasie.

Podpisy

CisDate addMilliseconds(CisDate date, Number offset)

Timestamp addMilliseconds(Timestamp time, Number offset)

Parametry

date jest CisDate.

time to punkt w czasie.

offset to liczba milisekund dodawana do parametru date lub time.

Wynik

CisDate lub Timestamp offset milisekund po parametrze date lub time.

Źródła błędów

Brak

Przykłady

addMilliseconds(today(), 24*60*60*1000) zwraca CisDate dokładnie za jeden dzień.

addMilliseconds(now(),24*60*60*1000) zwraca czas za dokładnie jeden dzień.

addMilliseconds(endOfDay(now()), 1) zwraca jutrzejszą godzinę dokładnie jedną milisekundę po północy.

Kontekst

ALL

Uwagi

Jeśli offset jest ujemny, wówczas addMilliseconds zwraca CisDate lub czas, który leży przed date lub time.

Zobacz także

addDays, addHours, addMinutes, addSeconds

Przykład
Poniższy przykład z definicji działania help.addMilliseconds dodaje milisekundy do bieżącego dnia i godziny:

function create()

{

  var p_offset := parameters.OFFSET;

  var r_addMillisecondsDate as CisDate;

  var r_addMillisecondsTime as Timestamp;

  r_addMillisecondsDate := addMilliseconds(today(), p_offset);

  r_addMillisecondsTime := addMilliseconds(now(), p_offset);

  result.VALUE_DATE := dateString(r_addMillisecondsDate);

  result.VALUE_TIME := r_addMillisecondsTime;

}

addMinutes

Nazwa

addMinutes

Opis

addMinutes dodaje minuty do CisDate lub godziny.

Podpisy

CisDate addMinutes(CisDate date, Number offset)

Timestamp addMinutes(Timestamp time, Number offset)

Parametry

date jest CisDate.

time to punkt w czasie.

offset to liczba minut, która ma zostać dodana do parametru date lub time.

Wynik

CisDate lub Timestamp offset minut po parametrze date lub time.

Źródła błędów

Brak

Przykłady

addMinutes(today(), 24*60) zwraca CisDate za dokładnie jeden dzień.

addMinutes(now(),24*60) zwraca czas za dokładnie jeden dzień.

Kontekst

ALL

Uwagi

Jeśli offset jest ujemny, wówczas addMinutes zwraca CisDate lub czas, który leży przed date lub time.

Zobacz także

addDays, addHours, addMilliseconds, addSeconds

Przykład
Poniższy przykład z definicji działania help.addMinutes dodaje minuty do bieżącego dnia i aktualnej godziny:

function create()

{

  var p_offset := parameters.OFFSET;

  var r_addMinutesDate as CisDate;

  var r_addMinutesTime as Timestamp;

  r_addMinutesDate := addMinutes(today(), p_offset);

  r_addMinutesTime := addMinutes(now(), p_offset);

  result.VALUE_DATE := dateString(r_addMinutesDate);

  result.VALUE_TIME := r_addMinutesTime;

}

addSeconds

Nazwa

addSeconds

Opis

addSeconds dodaje sekundy do CisDate lub godziny.

Podpisy

CisDate addSeconds(CisDate date, Number offset)

Timestamp addSeconds(Timestamp time, Number offset)

Parametry

date jest CisDate.

time to punkt w czasie.

offset to liczba sekund dodawana do parametru date lub time.

Wynik

CisDate lub Timestamp offset sekund po parametrze date lub time.

Źródła błędów

Brak

Przykłady

addSeconds(today(), 24*60*60) zwraca CisDate dokładnie za jeden dzień.

addSeconds(now(),24*60*60) zwraca czas za dokładnie jeden dzień.

Kontekst

ALL

Uwagi

Jeśli offset jest ujemny, wówczas addSeconds zwraca CisDate lub czas, który leży przed date lub time.

Zobacz także

addDays, addHours, addMilliseconds, addMinutes

Przykład
Poniższy przykład z definicji działania help.addSeconds dodaje sekundy do bieżącego dnia i aktualnej godziny.

function create()

{

  var p_offset := parameters.OFFSET;

  var r_addSecondsDate as CisDate;

  var r_addSecondsTime as Timestamp;

  r_addSecondsDate := addSeconds(today(), p_offset);

  r_addSecondsTime := addSeconds(now(), p_offset);

  result.VALUE_DATE := dateString(r_addSecondsDate);

  result.VALUE_TIME := r_addSecondsTime;

}

createCisDate

Nazwa

createCisDate

Opis

createCisDate tworzy dowolną datę CisDate.

Podpisy

CisDate createCisDate(Number year)

CisDate createCisDate(Number year, Number month)

CisDate createCisDate(Number year, Number month, Number day)

CisDate createCisDate(Number year, Number month, Number day, Number hour)

CisDate createCisDate(Number year, Number month, Number day, Number hour, Number minute)

CisDate createCisDate(Number year, Number month, Number day, Number hour, Number minute, Number second)

CisDate createCisDate(Number year, Number month, Number day, Number hour, Number minute, Number second, Number millisecond)

CisDate createCisDate(String timeZoneId, Number year)

CisDate createCisDate(String timeZoneId, Number year, Number month)

CisDate createCisDate(String timeZoneId, Number year, Number month, Number day)

CisDate createCisDate(String timeZoneId, Number year, Number month, Number day, Number hour)

CisDate createCisDate(String timeZoneId, Number year, Number month, Number day, Number hour, Number minute)

CisDate createCisDate(String timeZoneId, Number year, Number month, Number day, Number hour, Number minute, Number second)

CisDate createCisDate(String timeZoneId, Number year, Number month, Number day, Number hour, Number minute, Number second, Number millisecond)

Parametry

year oznacza rok.

month oznacza miesiąc.

day to dzień.

hour oznacza godzinę.

minute oznacza minutę.

second to sekunda

millisecond oznacza milisekundę.

timeZoneId to strefa czasowa CisDate.

Wszystkie parametry z wyjątkiem year są opcjonalne. Brakujące cząstki czasu są wypełniane wartością 0. Brakujące cząstki daty są wypełniane wartością 1. Jeśli nie określono strefy czasowej, jest ona pobierana z bieżącego kontekstu uruchomieniowego.

Wynik

A CisDate.

Źródła błędów

Brak

Przykłady

createCisDate(year(today()), 1, 1) zwraca CisDate na początku bieżącego roku.

createCisDate(year(today()), 3, -4) zwraca CisDate 5 dni przed rozpoczęciem 3 miesiąca w bieżącym roku.

createCisDate(„GMT”, 1980) zwraca CisDate 1980-01-01 GMT.

createCisDate(„GMT”, 1980, 0, 0) zwraca CisDate 1979-11-30 GMT.

Kontekst

ALL

Uwagi

Dostępne identyfikatory stref czasowych można wyświetlić w kolumnie Identyfikacja w aplikacji Strefy czasowe.

Zobacz także

createTimestamp

Przykład
Poniższy przykład z definicji działania help.createCisDate tworzy dowolną datę CisDate w dowolnej strefie czasowej:

function create()

{

  var p_timezoneId := parameters.TIMEZONE_ID;

  var p_year := parameters.YEAR;

  var p_month := parameters.MONTH;

  var p_day := parameters.DAY;

  var p_hour := parameters.HOUR;

  var p_minute := parameters.MINUTE;

  var p_second := parameters.SECOND;

  var p_millisecond := parameters.MILLISECOND;

  var r_createCisDate as CisDate;

  if (p_timezoneId = „”)

    r_createCisDate := createCisDate(p_year, p_month, p_day, p_hour, p_minute, p_second, p_millisecond);

  else

    r_createCisDate := createCisDate(p_timezoneId, p_year, p_month, p_day, p_hour, p_minute, p_second, p_millisecond);

  result.VALUE_CISDATE := dateString(r_createCisDate);

  result.VALUE_TIMEZONE_ID := timeZoneId(r_createCisDate);

}

createTimestamp

Nazwa

createTimestamp

Opis

createTimestamp tworzy dowolny czas.

Podpisy

Timestamp createTimestamp(Number year)

Timestamp createTimestamp(Number year, Number month)

Timestamp createTimestamp(Number year, Number month, Number day)

Timestamp createTimestamp(Number year, Number month, Number day, Number hour)

Timestamp createTimestamp(Number year, Number month, Number day, Number hour, Number minute)

Timestamp createTimestamp(Number year, Number month, Number day, Number hour, Number minute, Number second)

Timestamp createTimestamp(Number year, Number month, Number day, Number hour, Number minute, Number second, Number millisecond)

Timestamp createTimestamp(String timeZoneId, Number year)

Timestamp createTimestamp(String timeZoneId, Number year, Number month)

Timestamp createTimestamp(String timeZoneId, Number year, Number month, Number day)

Timestamp createTimestamp(String timeZoneId, Number year, Number month, Number day, Number hour)

Timestamp createTimestamp(String timeZoneId, Number year, Number month, Number day, Number hour, Number minute)

Timestamp createTimestamp(String timeZoneId, Number year, Number month, Number day, Number hour, Number minute, Number second)

Timestamp createTimestamp(String timeZoneId, Number year, Number month, Number day, Number hour, Number minute, Number second, Number millisecond)

Parametry

year oznacza rok.

month oznacza miesiąc.

day to dzień.

hour oznacza godzinę.

minute oznacza minutę.

second oznacza sekundę

millisecond oznacza milisekundę.

timeZoneId to strefa czasowa, w której wyświetlane są cząsteczki czasu.

Wszystkie parametry z wyjątkiem year są opcjonalne. Brakujące cząstki czasu są wypełniane wartością 0. Brakujące cząstki daty są wypełniane wartością 1

Wynik

Znacznik czasu w strefie czasowej systemu.

Źródła błędów

Brak

Przykłady

createTimestamp(year(today()), 1, 1) zwraca czas na początku bieżącego roku.

createTimestamp(year(today()), 3, -4) zwraca czas 5 dni przed rozpoczęciem 3 miesiąca w bieżącym roku.

createTimestamp(„EST”, year(today()), 1, 1) zwraca czas na początku roku w określonej strefie czasowej. W zależności od strefy czasowej kontekstu uruchomieniowego i bieżącej daty, może to być na przykład 2019-12-31 14:00:00.000 w strefie czasowej CES.

createTimestamp(1980) zwraca 1980-01-01 00:00:00.000 w strefie czasowej bieżącego kontekstu uruchomieniowego.

Kontekst

ALL

Uwagi

 

Zobacz także

createCisDate

Przykład
Poniższy przykład z definicji działania help.createTimestamp tworzy dowolny czas w strefie czasowej systemu:

function create()

{

  var p_timezoneId := parameters.TIMEZONE_ID;

  var p_year := parameters.YEAR;

  var p_month := parameters.MONTH;

  var p_day := parameters.DAY;

  var p_hour := parameters.HOUR;

  var p_minute := parameters.MINUTE;

  var p_second := parameters.SECOND;

  var p_millisecond := parameters.MILLISECOND;

  var r_createTimestamp as Timestamp;

  if (p_timezoneId = „”)

    r_createTimestamp := createTimestamp(p_year, p_month, p_day, p_hour, p_minute, p_second, p_millisecond);

  inny

    r_createTimestamp := createTimestamp(p_timezoneId, p_year, p_month, p_day, p_hour, p_minute, p_second, p_millisecond);

  result.VALUE_TIMESTAMP := r_createTimestamp;

  result.VALUE_TIMEZONE_ID := timeZoneString(r_createTimestamp);

}

day

Nazwa

day

Opis

day zwraca dzień miesiąca jako liczbę dla CisDate lub punktu w czasie.

Podpisy

Number day(CisDate date)

Number day(Timestamp time)

Parametry

date jest CisDate, którego dzień miesiąca jest określony.

time to punkt w czasie, którego dzień miesiąca jest określony.

Wynik

Dzień miesiąca jako liczba.

Źródła błędów

Brak

Przykłady

day(createCisDate(1980, 1, 1) zwraca 1.

day(today()) zwraca dzisiejszy dzień miesiąca.

Kontekst

ALL

Uwagi

Poszczególne części CisDate są dostępne ze strefą czasową wskazaną w CisDate. Na przykład day(createCisDate(„EET”, 1980, 1, 1) zwraca liczbę 1 niezależnie od strefy czasowej bieżącego kontekstu uruchomieniowego.

Jeśli wygenerowana data CisDate zostanie przekonwertowana na punkt w czasie i zostanie określony jej rok, wynik zależy od strefy czasowej bieżącego kontekstu uruchomieniowego. Na przykład, day(toTimestamp(createCisDate(„EET”, 1980, 1, 1)) zwraca liczbę 31, jeśli bieżący kontekst runtime używa strefy czasowej, która jest na zachód od EET.

Zobacz także

hour, millisecond, minute, month, second, year

Przykład
Poniższy przykład z definicji działania help.day zwraca dzień w miesiącu jako liczbę dla bieżącej daty i godziny:

function create()

{

  var p_today := today();

  var p_now := now();

  result.VALUE_CISDATE := day(p_today);

  result.VALUE_TIMESTAMP := day(p_now);

}

days

Nazwa

days

Opis

days określa długość okresu między dwoma CisDates lub punktami w czasie w dniach.

Podpisy

Number days(CisDate from, CisDate to)

Number days(Timestamp from, Timestamp to)

Parametry

from to pierwsza CisDate lub punkt w czasie.

to jest drugą datą CisDate lub punktem w czasie.

Wynik

Funkcja zwraca długość okresu między from i to w dniach. Miejsca dziesiętne są obcinane w wyniku funkcji, tj. 1,9 dnia staje się 1 dniem. W przeciwieństwie do funkcji określających długość okresu w jednostkach czasu: godzina, minuta, sekunda i milisekunda, days zwraca wartość różną od 0, gdy tylko from i to przypadają na różne dni, nawet jeśli między nimi nie ma 24 godzin. Na przykład, days(addSeconds(today(), -1), today()) zwraca 1, a hours(addSeconds(today(), -1), today()) zwraca 0. Takie zachowanie wynika ze zmiennej długości miesięcy i przepisów dotyczących czasu letniego, roku przestępnego i sekundy przestępnej.

Źródła błędów

Brak

Przykłady

days(today(), addDays(today(), 7)) zwraca 7.

days(today(), addHours(today(), 20)) zwraca 0.

days(today(), addHours(today(), 36) zwraca 1.

days(addHours(today(), 36), today()) zwraca -1.

days(addHours(today(), -4), today()) zwraca 1.

days(now(), addDays(now(), 7)) zwraca 7.

days(createCisDate(year(today())), createCisDate(year(today()))) + 1)) > 365 jest prawdą, jeśli bieżący rok jest rokiem przestępnym.

Kontekst

ALL

Uwagi

Jeśli from i to są typu danych CisDate, są one konwertowane do strefy czasowej GMT+0 do obliczeń. days(createCisDate(„NST”, 1980), createCisDate(„NPT1”, 1980)) zwraca zatem -1, ponieważ strefa czasowa NST znajduje się na zachód, a strefa czasowa NPT1 na wschód od GMT+0. CisDate from przypada zatem na ostatni dzień 1979 roku ze strefy czasowej GMT+0.

Zobacz także

hours, milliseconds, minutes, months, seconds, weeks, years

Przykład
Poniższy przykład z definicji działania help.days określa dzień roku dla bieżącej daty:

function create()

{

  var p_today := today();

  var r_dayOfYear := days(createCisDate(year(p_today)), today()) + 1;

  result.VALUE := r_dayOfYear;

}

dateString

Nazwa

dateString

Opis

dateString zwraca część daty CisDate lub punkt w czasie jako ciąg znaków.

Podpisy

String dateString(CisDate date)

String dateString(Timestamp time)

Parametry

date to połączenie godziny i strefy czasowej.

time to punkt w czasie z dokładnością do milisekund.

Wynik

Część daty date lub time. Jeśli parametrem jest czas, część daty jest zwracana w strefie czasowej bieżącego kontekstu uruchomieniowego.

Źródła błędów

Brak

Przykłady

dateString(today()) i dateString(now()) zwracają część dzisiejszej daty jako ciąg znaków.

dateString(MIN_DATE) zwraca 1000-01-01 jako ciąg znaków zgodnie z formatowaniem w ustawieniach użytkownika.

dateString(MAX_DATE) zwraca 9999-12-31 jako ciąg znaków zgodnie z formatowaniem w ustawieniach użytkownika.

dateString(createCisDate(„NPT1”, 1980)) zwraca 1980-01-01.

dateString(createTimestamp(„NPT1”, 1980)) zwraca 1979-12-31, jeśli strefa czasowa bieżącego kontekstu uruchomieniowego jest na zachód od Katmandu.

Kontekst

ALL

Uwagi

 

Zobacz także

format, timeString, timeZoneString

Przykład
Poniższy przykład z definicji działania help.dateString zwraca część bieżącej daty i bieżący czas jako ciąg znaków:

function create()

{

  result.VALUE1 := dateString(today());

  result.VALUE2 := dateString(now());

}

endOfDay

Nazwa

endOfDay

Opis

endOfDay określa ostatni czas na koniec dnia.

Podpisy

Timestamp endOfDay(CisDate date)

Timestamp endOfDay(Timestamp time)

Parametry

date to CisDate, którego ostatni czas jest określany na koniec dnia.

time to czas, którego ostatni czas jest określany na koniec dnia.

Wynik

Ostatni moment pod koniec dnia

Źródła błędów

Brak

Przykłady

endOfDay(today()) i endOfDay(now()) zwracają godzinę 23:59:59.999 dnia dzisiejszego.

setActivityWorkDelay(seconds(activity:creationTime, endOfDay(today()))) + 1) ustawia czas rozpoczęcia działania na pierwszą sekundę po północy następnego dnia.

Kontekst

ALL

Uwagi

 

Zobacz także

startOfDay

Przykład
Poniższy przykład z definicji działania help.endOfDay określa ostatni czas na koniec bieżącej daty:

function create()

{

  var p_now := now();

  var r_endOfDay := endOfDay(p_now);

  result.VALUE := r_endOfDay;

}

hour

Nazwa

hour

Opis

hour zwraca godzinę w ciągu dnia jako liczbę dla CisDate lub punktu w czasie.

Podpisy

Number hour(CisDate date)

Number hour(Timestamp time)

Parametry

date to CisDate, którego godzina jest określona.

time to punkt w czasie, którego godzina jest określona.

Wynik

Godzina w ciągu dnia jako liczba.

Źródła błędów

Brak

Przykłady

hour(createCisDate(1980, 1, 1) zwraca 0.

hour(createCisDate(1980, 1, 1, 7) zwraca 7.

hour(now()) zwraca bieżącą godzinę dnia.

Kontekst

ALL

Uwagi

Poszczególne części CisDate są dostępne przy użyciu strefy czasowej określonej w CisDate. Na przykład hour(createCisDate(„EET”, 1980, 1, 1, 7) zwraca liczbę 7, niezależnie od strefy czasowej bieżącego kontekstu uruchomieniowego.

Jeśli wygenerowana data CisDate zostanie przekonwertowana na czas i zostanie określona jej godzina, wynik zależy od strefy czasowej bieżącego kontekstu uruchomieniowego. Na przykład hour(toTimestamp(createCisDate(„EET”, 1980, 1, 1)) zwraca liczbę 23, jeśli istnieje różnica jednej godziny między EET a strefą czasową bieżącego kontekstu uruchomieniowego.

Zobacz także

day, millisecond, minute, month, second, year

Przykład
Poniższy przykład z definicji działania help.hour zwraca bieżącą godzinę:

function create()

{

  var p_today := today();

  var p_now := now(); 

  result.VALUE_CISDATE := hour(p_today);

  result.VALUE_TIMESTAMP := hour(p_now);

}

hours

Nazwa

hours

Opis

hours określa długość okresu między dwoma CisDates lub punktami w czasie w godzinach.

Podpisy

Number hours(CisDate from, CisDate to)

Number hours(Timestamp from, Timestamp to)

Parametry

from jest pierwszą datą CisDate lub punktem w czasie.

to jest drugą datą CisDate lub punktem w czasie.

Wynik

Funkcja zwraca długość okresu między from i to w godzinach. Miejsca dziesiętne są obcinane w wyniku funkcji, tj. 1,9 godziny staje się 1 godziną.

Źródła błędów

Brak

Przykłady

hours(today(), addHours(today(), 7)) zwraca 7.

hours(today(), addMinutes(today(), 20)) zwraca 0.

hours(today(), addMinutes(today(), 80) zwraca 1.

hours(addMinutes(today(), 80), today()) zwraca -1.

hours(addMinutes(today(), -4), today()) zwraca 0.

hours(now(), addHours(now(), 7)) zwraca 7.

Kontekst

ALL

Uwagi

Jeśli from i to są typu danych CisDate, są one konwertowane do strefy czasowej GMT+0 do obliczeń. hours(createCisDate(„NPT1”, 1980), createCisDate(„NST”, 1980)) zwraca zatem 9, ponieważ istnieje różnica czasu wynosząca 9 godzin między strefami czasowymi NPT1 i NST.

Zobacz także

days, milliseconds, minutes, months, seconds, weeks, years

Przykład
Poniższy przykład z definicji działania help.hours zwraca bieżącą godzinę:

function create()

{

  var p_today := today();

  var r_hourOfDay := hours(startOfDay(p_today), p_now);

  result.VALUE := r_hourOfDay;

}

isMaxDate

Nazwa

isMaxDate

Opis

isMaxDate sprawdza, czy CisDate lub czas ma największą wyświetlaną wartość.

Podpisy

Boolean isMaxDate(CisDate date)

Boolean isMaxDate(Timestamp time)

Parametry

date jest CisDate.

time to punkt w czasie.

Wynik

Jeśli date lub time ma największą wyświetlaną wartość, wynikiem funkcji jest true.

Źródła błędów

Brak

Przykłady

isMaxDate(MAX_DATE) zwraca wartość true.

isMaxDate(MIN_DATE) zwraca wartość false.

Kontekst

ALL

Uwagi

Największa wyświetlana wartość CisDate lub czasu (znacznika czasu) może być używana na przykład dla zakresów ważności, które są otwarte u góry.

Zobacz także

isMinDate, isUndefinedDate

Przykład
Poniższy przykład z definicji działania help.isMaxDate sprawdza, czy stała MAX_DATE reprezentuje największą wyświetlaną wartość:

function create()

{

  var r_isMaxDate := isMaxDate(MAX_DATE);

  result.VALUE := r_isMaxDate;

}

isMinDate

Nazwa

isMinDate

Opis

isMinDate sprawdza, czy CisDate lub czas ma najmniejszą reprezentowalną wartość.

Podpisy

Boolean isMinDate(CisDate date)

Boolean isMinDate(Timestamp time)

Parametry

date jest CisDate.

time to punkt w czasie.

Wynik

Jeśli date lub time ma najmniejszą reprezentowalną wartość, wynikiem funkcji jest true.

Źródła błędów

Brak

Przykłady

isMinDate(MIN_DATE) zwraca wartość true.

isMinDate(MAX_DATE) zwraca wartość false.

Kontekst

ALL

Uwagi

Najmniejsza wyświetlana wartość CisDate lub czasu (znacznik czasu) może być używana na przykład dla zakresów ważności, które są otwarte na dole.

Zobacz także

isMaxDate, isUndefinedDate

Przykład
Poniższy przykład z definicji działania help.isMinDate sprawdza, czy stała MIN_DATE reprezentuje najmniejszą wartość, jaką można wyświetlić.

function create()

{

  var r_isMinDate := isMinDate(MIN_DATE);

  result.VALUE := r_isMinDate;

}

isUndefinedDate

Nazwa

isUndefinedDate

Opis

isUndefinedDate sprawdza, czy CisDate lub czas ma wartość, której nie można wyświetlić.

Podpisy

Boolean isUndefinedDate(CisDate date)

Boolean isUndefinedDate(Timestamp time)

Parametry

date jest CisDate.

time to punkt w czasie.

Wynik

Jeśli date lub time nie ma reprezentowalnej wartości, wynikiem funkcji jest true.

Źródła błędów

Brak

Przykłady

isUndefinedDate(UNEDFINED_DATE) zwraca wartość true.

isMinDate(MAX_DATE) zwraca wartość false.

isMinDate(MIN_DATE) zwraca wartość true.

Kontekst

ALL

Uwagi

Niezdefiniowana wartość jest używana dla CisDates i czasów przed przypisaniem konkretnej wartości, takiej jak czas ostatniej zmiany obiektu biznesowego (w atrybucie updateInfo.updateTime), który nie został zmieniony od czasu jego utworzenia.

Zobacz także

isMaxDate, isMinDate

Przykład
Poniższy przykład z definicji działania help.isUndefinedDate sprawdza, czy stała UNDEFINED_DATE ma wartość, której nie można wyświetlić.

function create()

{

  var r_isUndefinedDate := isUndefinedDate(UNDEFINED_DATE);

  result.VALUE := r_isUndefinedDate;

}

millisecond

Nazwa

milisecond

Opis

millisecond zwraca milisekundę jako liczbę dla CisDate lub punktu w czasie.

Podpisy

Number millisecond(CisDate date)

Number millisecond(Timestamp time)

Parametry

date jest CisDate, którego milisekunda jest określona.

time to punkt w czasie, którego milisekunda jest określona.

Wynik

Milisekunda jako liczba.

Źródła błędów

Brak

Przykłady

millisecond(createCisDate(1980, 1, 1) zwraca 0.

millisecond(createCisDate(1980, 12, 31, 23, 59, 59, 999) zwraca 999.

second(now()) zwraca bieżącą milisekundę.

Kontekst

ALL

Uwagi

Poszczególne części CisDate są dostępne w strefie czasowej określonej w CisDate.

Zobacz także

day, hour, minute, month, second, year

Przykład
Poniższy przykład z definicji działania help.millisecond zwraca milisekundy dla bieżącej daty i godziny:

function create()

{

  var p_today := today();

  var p_now := now();

  result.VALUE_CISDATE := millisecond(p_today);

  result.VALUE_TIMESTAMP := millisecond(p_now);

}

milliseconds

Nazwa

milliseconds

Opis

milliseconds określa długość okresu między dwoma CisDates lub punktami w czasie w milisekundach.

Podpisy

Number milliseconds(CisDate od, CisDate do)

Number milliseconds(Timestamp from, Timestamp to)

Parametry

from jest pierwszą datą CisDate lub punktem w czasie.

to jest drugą datą CisDate lub punktem w czasie.

Wynik

Funkcja zwraca długość okresu między from i to w milisekundach.

Źródła błędów

Brak

Przykłady

milliseconds(today(), addMilliseconds(today(), 7)) zwraca 7.

milliseconds(today(), addSeconds(today(), 7)) zwraca 7000.

milliseconds(addMilliseconds(today(), -1), today()) zwraca 1.

milliseconds(now(), addMilliseconds(now(), 7)) zwraca 7.

Kontekst

ALL

Uwagi

Jeśli from i to są typu danych CisDate, są one konwertowane do strefy czasowej GMT+0 na potrzeby obliczeń.

Zobacz także

days, hours, minutes, months, seconds, weeks, years

Przykład
Poniższy przykład z definicji działania help.milliseconds określa liczbę milisekund od początku dnia.

function create()

{

  var p_today := today();

  var p_now := now();

  var r_millisecondOfDay := milliseconds(startOfDay(p_today), p_now);

  result.VALUE := r_millisecondOfDay;

}

minute

Nazwa

minute

Opis

minute zwraca minutę jako liczbę dla CisDate lub punktu w czasie.

Podpisy

Number minute(CisDate date)

Number minute(Timestamp time)

Parametry

date to CisDate, którego minuta jest określona.

time to punkt w czasie, którego minuta jest określona.

Wynik

Minuta w godzinie jako liczba.

Źródła błędów

Brak

Przykłady

minute(createCisDate(1980, 1, 1) zwraca 0.

minute(createCisDate(1980, 1, 1, 0, 5) zwraca 5.

minute(now()) zwraca bieżącą minutę w godzinie.

Kontekst

ALL

Uwagi

Poszczególne części CisDate są dostępne ze strefą czasową wskazaną w CisDate. Na przykład, minute(createCisDate(„EET”, 1980, 1, 1, 0, 5) zwraca liczbę 5 niezależnie od strefy czasowej bieżącego kontekstu uruchomieniowego.

Jeśli wygenerowana data CisDate zostanie przekonwertowana na czas i zostanie określona jej godzina, wynik zależy od strefy czasowej bieżącego kontekstu uruchomieniowego. Na przykład, minute(toTimestamp(createCisDate(„NPT1”, 1980, 1, 1, 12)) zwraca liczbę 15, ponieważ strefa czasowa bieżącego kontekstu uruchomieniowego („CET”) jest 4 godziny i 45 minut po strefie czasowej Katmandu.

Zobacz także

day, hour, millisecond, month, second, year

Przykład
Poniższy przykład z definicji działania help.minute zwraca minuty dla bieżącej daty i godziny.

function create()

{

  var p_today := today();

  var p_now := now();

  result.VALUE_CISDATE := minute(p_today);

  result.VALUE_TIMESTAMP := minute(p_now);

}

minutes

Nazwa

minutes

Opis

minutes określa długość okresu między dwoma CisDates lub punktami w czasie w minutach.

Podpisy

Number minutes(CisDate from, CisDate to)

Number minutes(Timestamp from, Timestamp to)

Parametry

from jest pierwszą datą CisDate lub punktem w czasie.

to jest drugą datą CisDate lub punktem w czasie.

Wynik

Funkcja zwraca długość okresu między from i to w minutach. Miejsca dziesiętne są obcinane w wyniku funkcji, tj. 1,9 minuty staje się 1 minutą.

Źródła błędów

Brak

Przykłady

minutes(today(), addMinutes(today(), 7)) zwraca 7.

minutes(today(), addSeconds(today(), 20)) zwraca 0.

minutes(today(), addSeconds(today(), 80) zwraca 1.

minutes(addSeconds(today(), 80), today()) zwraca -1.

minutes(addSeconds(today(), -1), today()) zwraca 0.

minutes(now(), addMinutes(now(), 7)) zwraca 7.

Kontekst

ALL

Uwagi

Jeśli from i to są typu danych CisDate, są one konwertowane do strefy czasowej GMT+0 do obliczeń. minutes(createCisDate(„NPT1”, 1980), createCisDate(„NST”, 1980)) zwraca zatem 555, ponieważ istnieje różnica czasu 555 minut między strefami czasowymi NPT1 i NST.

Zobacz także

days, hours, milliseconds, months, seconds, weeks, years

Przykład
Poniższy przykład z definicji działania help.minutes określa liczbę minut od początku dnia:

function create()

{

  var p_today := today();

  var p_now := now();

  var r_minuteOfDay := minutes(startOfDay(p_today), p_now);

  result.VALUE := r_minuteOfDay;

}

month

Nazwa

month

Opis

month zwraca miesiąc w roku jako liczbę dla CisDate lub punktu w czasie.

Podpisy

Number month(CisDate date)

Number month(Timestamp time)

Parametry

date to CisDate, którego miesiąc jest określony w roku.

time to punkt w czasie, którego miesiąc w roku jest określony.

Wynik

Miesiąc w roku jako liczba.

Źródła błędów

Brak

Przykłady

month(createCisDate(1980, 1, 10) zwraca 1.

month(today()) zwraca dzisiejszy miesiąc w roku.

Kontekst

ALL

Uwagi

Poszczególne części CisDate są dostępne ze strefą czasową wskazaną w CisDate. Na przykład, month(createCisDate(„EET”, 1980, 1, 10) zwraca liczbę 1, niezależnie od strefy czasowej bieżącego kontekstu uruchomieniowego.

Jeśli wygenerowana data CisDate zostanie przekonwertowana na punkt w czasie i zostanie określony jej rok, wynik zależy od strefy czasowej bieżącego kontekstu uruchomieniowego. Na przykład, month(toTimestamp(createCisDate(„EET”, 1980, 1, 1)) zwraca liczbę 12, jeśli bieżący kontekst runtime używa strefy czasowej, która jest na zachód od EET.

Zobacz także

day, hour, millisecond, minute, second, year

Przykład
Poniższy przykład z definicji działania help.month zwraca miesiąc w roku dla bieżącej daty i czasu.

function create()

{

  var p_today := today();

  var p_now := now();

  result.VALUE_CISDATE := month(p_today);

  result.VALUE_TIMESTAMP := month(p_now);

}

months

Nazwa

months

Opis

months określa długość okresu między dwiema datami CisDate lub punktami w czasie w miesiącach.

Podpisy

Number months(CisDate od, CisDate do)

Number months(Timestamp from, Timestamp to)

Parametry

from to pierwsza CisDate lub punkt w czasie.

to jest drugą datą CisDate lub punktem w czasie.

Wynik

Funkcja zwraca długość okresu między from i to w miesiącach. Miejsca dziesiętne są obcinane w wyniku funkcji, tj. 1,9 miesiąca staje się 1 miesiącem. W przeciwieństwie do funkcji określających długość okresu czasu w jednostkach czasu godzina, minuta, sekunda i milisekunda, months zwraca wartość różną od 0, gdy tylko from i to przypadają na różne miesiące. Na przykład, months(addSeconds(createTimestamp(1980), -1), createTimestamp(1980)) zwraca 1, a hours(addSeconds(createTimestamp(1980), -1), createTimestamp(1980)) zwraca 0. Takie zachowanie wynika ze zmiennej długości miesięcy i przepisów dotyczących czasu letniego, roku przestępnego i sekundy przestępnej.

Źródła błędów

Brak

Przykłady

months(today(), addDays(today(), 20)) zwraca 0, jeśli do następnej zmiany miesiąca pozostało więcej niż 20 dni.

months(addDays(today(), -20), today()) zwraca 0, jeśli od początku miesiąca nie minęło jeszcze 20 dni.

Kontekst

ALL

Uwagi

Jeśli from i to są typu danych CisDate, są one konwertowane do strefy czasowej GMT+0 do obliczeń. months(createCisDate(„NST”, 1980), createCisDate(„NPT1”, 1980)) zwraca zatem -1, ponieważ strefa czasowa NST znajduje się na zachód, a strefa czasowa NPT1 na wschód od GMT+0. Oznacza to, że CisDate from przypada na ostatni dzień 1979 roku, patrząc ze strefy czasowej GMT+0.

Zobacz także

days, hours, milliseconds, minutes, seconds, weeks, years

Przykład
Poniższy przykład z definicji działania help.months określa miesiąc w roku:

function create()

{

  var p_today := today();

  var r_monthOfYear := months(createCisDate(year(p_today)), createCisDate(year(p_today), month(p_today))) + 1;

  result.VALUE := r_monthOfYear;

}

now

Nazwa

now

Opis

now zwraca bieżący czas.

Podpisy

Timestamp now()

Parametry

Brak

Wynik

Bieżący czas, tj. bieżąca data z dokładnością do milisekund.

Źródła błędów

Brak

Przykłady

now() zwraca aktualny czas systemu.

Kontekst

ALL

Uwagi

 

Zobacz także

today

Przykład
Poniższy przykład z definicji działania help.now zwraca aktualny czas:

function create()

{

  result.VALUE := now();

}

second

Nazwa

second

Opis

second zwraca sekundę jako liczbę dla CisDate lub punktu w czasie.

Podpisy

Number second(CisDate date)

Number second(Timestamp time)

Parametry

date to CisDate, którego druga wartość jest określona.

time to punkt w czasie, którego druga część jest określona.

Wynik

Sekunda w minucie jako liczba.

Źródła błędów

Brak

Przykłady

second(createCisDate(1980, 1, 1) zwraca 0.

second(createCisDate(1980, 1, 1, 0, 0, 5) zwraca 5.

second(now()) zwraca bieżącą sekundę w minucie.

Kontekst

ALL

Uwagi

Poszczególne części CisDate są dostępne w strefie czasowej określonej w CisDate.

Zobacz także

day, hour, millisecond, minute, month, year

Przykład
Poniższy przykład z definicji działania help.second zwraca sekundy dla bieżącej daty i godziny.

function create()

{

  var p_today := today();

  var p_now := now();

  result.VALUE_CISDATE := second(p_today);

  result.VALUE_TIMESTAMP := second(p_now);

}

seconds

Nazwa

seconds

Opis

seconds określa długość okresu między dwoma CisDates lub punktami w czasie w sekundach.

Podpisy

Number seconds(CisDate from, CisDate to)

Number seconds(Timestamp from, Timestamp to)

Parametry

from to pierwsza CisDate lub punkt w czasie.

to jest drugą datą CisDate lub punktem w czasie.

Wynik

Funkcja zwraca długość okresu między from i to w sekundach. Miejsca dziesiętne są obcinane w wyniku funkcji, tj. 1,9 sekundy staje się 1 sekundą.

Źródła błędów

Brak

Przykłady

seconds(today(), addSeconds(today(), 7)) zwraca 7.

seconds(today(), addMilliseconds(today(), 800)) zwraca 0.

seconds(today(), addMilliseconds(today(), 1000) zwraca 1.

seconds(addMilliseconds(today(), -1000), today()) zwraca -1.

seconds(addMilliseconds(today(), -1), today()) zwraca 0.

seconds(now(), addSeconds(now(), 7)) zwraca 7.

Kontekst

ALL

Uwagi

Jeśli from i to są typu danych CisDate, są one konwertowane do strefy czasowej GMT+0 na potrzeby obliczeń.

Zobacz także

days, hours, milliseconds, minutes, months, weeks, years

Przykład
Poniższy przykład z definicji działania help.seconds określa liczbę sekund od początku dnia.

function create()

{

  var p_today := today();

  var p_now := now();

  var r_secondOfDay := seconds(startOfDay(p_today), p_now);

  result.VALUE := r_secondOfDay;

}

startOfDay

Nazwa

startOfDay

Opis

startOfDay określa pierwszy raz na początku dnia.

Podpisy

Timestamp startOfDay(CisDate date)

Timestamp startOfDay(Timestamp time)

Parametry

date to CisDate, której pierwsza godzina jest określana na początku dnia.

time to czas, którego pierwsza godzina jest określana na początku dnia.

Wynik

Pierwszy raz na początku dnia

Źródła błędów

 

Przykłady

startOfDay(today()) i startOfDay(now()) zwracają czas o godzinie 00:00:00.000 dnia dzisiejszego.

setActivityWorkDelay(seconds(activity:creationTime, endOfDay(today()))) ustawia czas rozpoczęcia działania na ostatnią sekundę przed północą bieżącego dnia.

Kontekst

ALL

Uwagi

 

Zobacz także

endOfDay

Przykład
Poniższy przykład z definicji działania help.startOfDay określa pierwszą godzinę bieżącego dnia:

function create()

{

  var p_now := now();

  var r_startOfDay := startOfDay(p_now);

  result.VALUE := r_startOfDay;

}

timeString

Nazwa

timeString

Opis

timeString zwraca część czasową CisDate lub punkt w czasie jako ciąg znaków.

Podpisy

String timeString(CisDate date)

String timeString(Timestamp time)

Parametry

date to CisDate, czyli połączenie punktu w czasie ze strefą czasową.

time to punkt w czasie z dokładnością do milisekund.

Wynik

Część czasowa date lub time.

Źródła błędów

Brak

Przykłady

timeString(today()) zwraca część czasu na początku dnia dzisiejszego jako ciąg znaków.

timeString(now()) zwraca część czasu bieżącego punktu w czasie jako ciąg znaków.

timeString(createCisDate(„NPT1”, 1980)) zwraca 00:00.

timeString(createTimestamp(„NPT1”, 1980)) zwraca 21:15:00, jeśli różnica między strefą czasową bieżącego kontekstu uruchomieniowego a strefą czasową Katmandu wynosi 2:45 godziny.

Kontekst

ALL

Uwagi

 

Zobacz także

dateString, format, timeZoneId, timeZoneString

Przykład
Poniższy przykład z definicji działania help.timeString zwraca część czasową bieżącej daty i bieżącego czasu jako ciąg znaków:

function create()

{

  result.VALUE1 := timeString(today());

  result.VALUE2 := timeString(now());

}

timeZoneId

Nazwa

timeZoneId

Opis

timeZoneId zwraca identyfikator strefy czasowej CisDate lub punktu w czasie.

Podpisy

String timeZoneId(CisDate date)

String timeZoneId(Timestamp time)

Parametry

date to CisDate, którego strefa czasowa jest określona.

Wynik

Identyfikacja strefy czasowej date.

Źródła błędów

Brak

Przykłady

timeZoneId(today()) zwraca identyfikator strefy czasowej bieżącego kontekstu uruchomieniowego.

timeZoneId(createCisDate(„NPT1”, 1980)) zwraca NPT1.

timeZoneId(createTimestamp(„NPT1”, 1980)) zwraca identyfikator strefy czasowej bieżącego kontekstu uruchomieniowego.

Kontekst

ALL

Uwagi

Dostępne identyfikatory stref czasowych można wyświetlić w kolumnie Identyfikacja w aplikacji Strefy czasowe.

Zobacz także

dateString, timeString, timeZoneString

Przykład
Poniższy przykład z definicji działania help.timeZoneId zwraca identyfikację strefy czasowej bieżącej daty i godziny:

function create()

{

  var p_today := today();

  var r_timeZoneId := timeZoneId(p_today);

  result.VALUE := r_timeZoneId;

}

timeZoneString

Nazwa

timeZoneString

Opis

timeZoneString zwraca skrót strefy czasowej CisDate lub punktu w czasie.

Podpisy

String timeZoneString(CisDate date)

String timeZoneString(Timestamp time)

Parametry

date to CisDate, którego strefa czasowa jest określona.

time to punkt w czasie, którego strefa czasowa jest określona.

Wynik

Skrót strefy czasowej od date lub time.

Źródła błędów

Brak

Przykłady

timeZoneString(today()) zwraca skrót strefy czasowej bieżącego kontekstu uruchomieniowego.

timeZoneString(createCisDate(„NPT1”, 1980)) zwraca NPT.

timeZoneString(createTimestamp(„NPT1”, 1980)) zwraca skrót strefy czasowej bieżącego kontekstu uruchomieniowego.

Kontekst

ALL

Uwagi

Dostępne identyfikatory stref czasowych można wyświetlić w kolumnie Identyfikacja w aplikacji Strefy czasowe.

Zobacz także

dateString, timeString, timeZoneId

Przykład
Poniższy przykład z definicji działania help.timeZoneString zwraca skrót strefy czasowej bieżącej daty i godziny:

function create()

{

  result.VALUE1 := timeZoneString(today());

  result.VALUE2 := timeZoneString(now());

}

today

Nazwa

today

Opis

today zwraca bieżącą datę jako CisDate bez składnika czasu.

Podpisy

Timestamp today()

Timestamp (String timeZoneId)

Parametry

timeZoneId jest identyfikatorem strefy czasowej.

Wynik

Funkcja zwraca bieżącą datę systemu jako CisDate, tj. dokładny czas milisekundowy ze strefą czasową.

Jeśli określono identyfikację strefy czasowej, data jest generowana i wyprowadzana zgodnie z określoną strefą czasową. Jeśli nie podano identyfikacji strefy czasowej, strefa czasowa jest pobierana z bieżącego kontekstu wykonawczego.

Źródła błędów

Brak

Przykłady

today() zwraca bieżącą datę systemu.

Kontekst

ALL

Uwagi

Dostępne identyfikatory stref czasowych można wyświetlić w kolumnie Identyfikacja w aplikacji Strefy czasowe.

Zobacz także

now

Przykład
Poniższy przykład z definicji działania help.today zwraca bieżącą datę bez składnika czasu:

function create()

{

  var p_timeZoneId := parameters.TIMEZONE_ID;

  var r_today as CisDate;

  if (p_timeZoneId = „”)

    r_today := today();

  else

    r_today := today(p_timeZoneId);

  result.IS_NULL := isNull(r_today);

  result.VALUE := dateString(r_today) + ” ” + timeString(r_today);

}

toTimestamp

Nazwa

toTimestamp

Opis

toTimestamp konwertuje CisDate na czas.

Podpisy

Timestamp toTimestamp(CisDate date)

Parametry

date to CisDate, która ma zostać przekonwertowana na czas.

Wynik

Parametr date jako godzina

Źródła błędów

Brak

Przykłady

toTimestamp(today) zwraca pierwszą godzinę bieżącego dnia.

Kontekst

ALL

Uwagi

 

Zobacz także

cast, createTimestamp

Przykład
Poniższy przykład z definicji działania help.toTimestamp konwertuje CisDate dla bieżącej daty na czas:

function create()

{

  var p_today := today();

  var r_toTimestamp := toTimestamp(p_today);

  result.VALUE := toCisDate(„”, r_toTimestamp);

}

weeks

Nazwa

weeks

Opis

weeks określa długość okresu między dwiema datami CisDate lub punktami w czasie w tygodniach kalendarzowych.

Podpisy

Number weeks(CisDate od, CisDate do)

Number weeks(Timestamp from, Timestamp to)

Parametry

from to pierwsza CisDate lub punkt w czasie.

to jest drugą datą CisDate lub punktem w czasie.

Wynik

Funkcja zwraca długość okresu między from i to w tygodniach kalendarzowych. Miejsca dziesiętne są obcinane w wyniku funkcji, tj. 1,9 tygodnia staje się 1 tygodniem. W przeciwieństwie do funkcji określających długość okresu w jednostkach czasu: godzina, minuta, sekunda i milisekunda, weeks zwraca wartość inną niż 0, gdy tylko from i to przypadają na różne tygodnie. Na przykład funkcja weeks(addDays(createCisDate(2020), -1), createCisDate(2020)) zwraca 0, ponieważ 31 grudnia 2019 r. i 1 stycznia 2020 r. należą do tygodnia kalendarzowego 1 w 2020 r. Z drugiej strony funkcja weeks(addDays(createCisDate(2018), -1), createCisDate(2020)) zwraca 1, ponieważ 31 grudnia 2017 r. należy do tygodnia kalendarzowego 52 w 2017 r., a 1 stycznia 2018 r. należy do tygodnia kalendarzowego 1 w 2018 r.

Źródła błędów

Brak

Przykłady

weeks(createCisDate(year(today()))), today()) + 1 zwraca bieżący tydzień kalendarzowy.

weeks(today(), addDays(today(), 2)) zwraca 0, jeśli bieżący tydzień kalendarzowy nadal ma co najmniej 2 dni.

Kontekst

ALL

Uwagi

Jeśli from i to są typu danych CisDate, są one konwertowane do strefy czasowej GMT+0 na potrzeby obliczeń.

Uwaga
Jeśli from i to jest datą w ostatnim lub pierwszym tygodniu kalendarzowym roku, funkcja weeks może zwrócić nieprawidłowy wynik, jeśli ostatni dzień roku należy do tygodnia kalendarzowego 1 następnego roku lub pierwszy dzień roku należy do ostatniego tygodnia kalendarzowego poprzedniego roku.

Zobacz także

days, hours, milliseconds, minutes, months, seconds, years

Przykład
Poniższy przykład z definicji działania help.weeks określa liczbę tygodni kalendarzowych od początku roku:

function create()

{

  var p_today := today();

  var r_weekOfYear := weeks(createCisDate(year(p_today)), p_today) + 1;

  result.VALUE := r_weekOfYear;

}

year

Nazwa

year

Opis

year zwraca rok CisDate lub punkt w czasie jako liczbę.

Podpisy

Number year(CisDate date)

Number year(Timestamp time)

Parametry

date to CisDate, którego rok jest określony.

time to punkt w czasie, którego rok jest określony.

Wynik

Rok jako liczba.

Źródła błędów

Brak

Przykłady

year(createCisDate(1980, 1, 1) zwraca 1980.

year(today()) zwraca bieżący rok.

Kontekst

ALL

Uwagi

Poszczególne części CisDate są dostępne ze strefą czasową wskazaną w CisDate. Na przykład year(createCisDate(„EET”, 1980, 1, 1) zwraca liczbę 1980, niezależnie od strefy czasowej bieżącego kontekstu uruchomieniowego.

Jeśli wygenerowana data CisDate zostanie przekonwertowana na punkt w czasie i zostanie określony jej rok, wynik zależy od strefy czasowej bieżącego kontekstu uruchomieniowego. Na przykład, year(toTimestamp(createCisDate(„EET”, 1980, 1, 1)) zwraca liczbę 1979, jeśli bieżący kontekst runtime używa strefy czasowej, która jest na zachód od EET.

Zobacz także

day, hour, millisecond, minute, month, second

Przykład
Poniższy przykład z definicji dzialania help.year zwraca rok dla bieżącej daty i godziny:

function create()

{

  var p_today := today();

  var p_now := now();

  result.VALUE_CISDATE := year(p_today);

  result.VALUE_TIMESTAMP := year(p_now);

}

years

Nazwa

years

Opis

years określa długość okresu między dwoma CisDates lub punktami w czasie w latach.

Podpisy

Number years(CisDate od, CisDate do)

Number years(Timestamp from, Timestamp to)

Parametry

from jest pierwszą datą CisDate lub punktem w czasie.

to jest drugą datą CisDate lub punktem w czasie.

Wynik

Funkcja zwraca długość okresu między from i to w latach. Miejsca dziesiętne są obcinane w wyniku funkcji, tj. 1,9 roku staje się 1 rokiem. W przeciwieństwie do funkcji określających długość okresu w jednostkach czasu: godzina, minuta, sekunda i milisekunda, funkcja years zwraca wartość inną niż 0, gdy tylko from i to przypadają na różne lata. Tak więc, years(addSeconds(createTimestamp(1980), -1), createTimestamp(1980)) zwraca 1, a hours(addSeconds(createTimestamp(1980), -1), createTimestamp(1980)) zwraca 0. Takie zachowanie wynika ze zmiennej długości miesięcy i przepisów dotyczących czasu letniego, roku przestępnego i sekundy przestępnej.

Źródła błędów

Brak

Przykłady

years(today(), addDays(today(), 100)) zwraca 0, jeśli do następnego przełomu roku pozostało więcej niż sto dni.

years(addDays(today(), -100), today()) zwraca 0, jeśli od początku roku nie minęło jeszcze sto dni.

Kontekst

ALL

Uwagi

Jeśli from i to są typu danych CisDate, są one konwertowane do strefy czasowej GMT+0 do obliczeń. years(createCisDate(„NST”, 1980), createCisDate(„NPT1”, 1980)) zwraca zatem -1, ponieważ strefa czasowa NST znajduje się na zachód, a strefa czasowa NPT1 na wschód od GMT+0. CisDate from przypada zatem na ostatni dzień 1979 roku, patrząc ze strefy czasowej GMT+0.

Zobacz także

days, hours, milliseconds, minutes, months, seconds, weeks

Przykład
Poniższy przykład z definicji działania help.years wykorzystuje datę urodzenia do określenia wieku osoby w latach:

function create()

{

  var p_dateOfBirth := parameters.DATE_OF_BIRTH;

  var p_now := now();

  result.VALUE := years(p_dateOfBirth, p_now);

}

Funkcje dla list (List functions)

Listy można tworzyć i edytować za pomocą funkcji list. Funkcje dla list obejmują:

  • add
  • addAll
  • contains
  • intersection
  • isEmpty
  • list
  • minus
  • size
  • toCharList
  • union
add

Nazwa

add

Opis

add dodaje kolejny element do listy.

Podpisy

add(Unknown[] list, Unknown element)

Parametry

list jest listą.

element to element, który ma zostać dodany do listy list.

Wynik

Element element jest dodawany do listy list jako ostatni element. Typ danych elementu element zostaje zachowany.

Źródła błędów

Element element może zostać dodany do listy list tylko wtedy, gdy typ danych elementu jest zgodny z typem danych elementu listy lub może zostać do niego przekonwertowany. Na przykład, jeśli lista list1 ma typ danych Number[], wówczas wyrażenie add(list1, „1”) prowadzi do błędu składniowego, ponieważ ciąg znaków nie może zostać przekonwertowany na liczbę. Jeśli natomiast list1 jest zadeklarowana jako String[], wówczas wyrażenie add(list1, 1) jest poprawne składniowo, ponieważ liczba może zostać przekonwertowana na ciąg znaków.

Przykłady

add(list1, 3) dodaje element 3 do listy list1.

add(list1, now()) dodaje bieżący czas do listy list1 jako nowy element.

Kontekst

ALL

Uwagi

 

Zobacz także

addAll, list, union

Przykład
Poniższy przykład z definicji działania help.add tworzy listę danych typu String[] z jednym elementem dla każdego słowa w tekście parameters.TEXT:

function create()

{

  var p_text := trim(parameters.TEXT);

  var p_text := trim(parameters.TEXT);

  var r_wordList as String[];

  var word as String;

  var startPos := 0;

  var i := 0;

  while (i < length(p_text)) {

    if (substring(p_text, i, i + 1) = ” „) {

      word := trim(substring(p_text, startPos, i));

      startPos := i;

      if (word <> „”)

        add(r_wordList, word);

    }

    i := i + 1;

  }

  word := trim(substring(p_text, startPos));

  if (word <> „”)

    add(r_wordList, word);

  result.VALUE := r_wordList;

}

Przykład
Lista parametrów z różnymi typami danych

Jeśli lista ma typ danych Unknown[], można dodać elementy dowolnego typu danych, ponieważ wszystkie typy danych można przekonwertować na Unknown. Można zatem użyć funkcji add, na przykład, aby utworzyć listę parametrów dla funkcji getCisObjectList, jeśli zapytanie OQL ma parametry różnych typów danych, które nie mogą być automatycznie konwertowane na typ danych pierwszego parametru.

Poniższy przykład wykorzystuje listę parametrów typu danych Unknown[] do określenia pierwszych 100 osób wewnętrznych za pomocą funkcji getCisObjectList i wypisania ich na konsoli:

const PartnerType as valueSet(com.cisag.app.general.PartnerType);

const BlockSize := 100;

function create()

{

  var partnerList as CisObject(com.cisag.app.general.obj.Partner)[];

  var params as Unknown[];

  var OQL :=

    „SELECT FROM com.cisag.app.general.obj.Partner p ” +

    „WHERE p:type = ? AND p:human = ? ” +

    „ORDER BY p:number”;

  add(params, PartnerType.INTERNAL);

  add(params, true);

  var cisObjectList := getCisObjectList(OQL, params, BlockSize);

  for (p as CisObject(com.cisag.app.general.obj.Partner) : cisObjectList)

    echo(p:number);

}

addAll

Nazwa

addAll

Opis

addAll dodaje wszystkie elementy innej listy do listy.

Podpisy

addAll(Unknown[] list, Unknown[] listToAdd)

Parametry

list to lista, do której mają zostać dodane elementy innej listy.

listToAdd jest listą, której elementy mają zostać dodane do listy list.

Wynik

Lista list jest rozszerzana o wszystkie elementy listy listToAdd. Typy danych elementów na liście listToAdd zostają zachowane.

Źródła błędów

Element listy listToAdd może zostać dodany tylko wtedy, gdy typ danych elementu jest zgodny z typem danych elementu listy list lub może zostać do niego przekonwertowany. Na przykład, jeśli list ma typ danych Number[], a element listy listToAdd ma typ danych elementu String, wówczas element list nie może zostać dodany, ponieważ ciąg znaków nie może zostać przekonwertowany na liczbę. Jeśli jednak list ma typ danych String[], a element listy listToAdd ma typ danych Number, wówczas element list może zostać dodany, ponieważ liczba może zostać przekonwertowana na ciąg znaków.

Przykłady

addAll(list1, list2) dodaje wszystkie elementy listy list2 do listy list1. Typy danych elementów są zachowywane.

addAll(list1, list(now())) dodaje bieżący czas do listy list1 jako nowy element typu danych elementu Timestamp.

addAll(list1, minus(list2, list1)) dodaje do listy list1 wszystkie elementy listy list2, które nie znajdują się jeszcze na liście list1.

Kontekst

ALL

Uwagi

Funkcja union(list1, list2) zwraca połączenie list list1 i list2. Należy użyć funkcji union, aby wykluczyć zduplikowane wartości.

Zobacz także

add, list, union

Przykład
Poniższy przykład z definicji działania help.AddAll dodaje wszystkie elementy innej listy do listy:

function create()

{

  var p_list1 as Unknown[];

  var p_list2 as Unknown[];

  add(p_list1, „carpe”);

  add(p_list1, „diem”);

  add(p_list2, now());

  addAll(p_list1, p_list2);

  result.VALUE := p_list1;

}

contains

Nazwa

contains

Opis

contains sprawdza, czy lista zawiera określony element.

Podpisy

Boolean contains(Unknown[] list, Unknown element)

Parametry

list jest listą.

element jest elementem.

Wynik

Jeśli lista list zawiera element element, zwracana jest wartość prawdy true, w przeciwnym razie false.

Źródła błędów

Brak.

Przykłady

contains(list(1, 2, 3), 1) zwraca wartość true.

contains(list(1, 2, 3), 4) zwraca false.

contains(list(1, 2, 3), „1”) zwraca false.

Kontekst

ALL

Uwagi

 

Zobacz także

intersection

Przykład
Poniższy przykład z definicji działania help.contains sprawdza, czy znak występuje w ciągu znaków:

function create()

{

  var p_text := parameters.TEXT;

  var p_element := parameters.ELEMENT;

  var p_list := new(String[], length(p_text));

  var i := 0;

  while (i < size(p_list)) {

    p_list[i] := substring(p_text, i, i + 1);

    i := i + 1;

  }

  result.VALUE_LIST := p_list;

  result.VALUE := contains(p_list, p_element);

}

intersection

Nazwa

intersection

Opis

intersection zwraca przecięcie dwóch lub więcej list.

Podpisy

Unknown[] intersection(Unknown[] list1, Unknown[] list2)

Unknown[] intersection(Unknown[] list1, Unknown[] list2,…,Unknown[] listN)

Parametry

list1 to pierwsza lista.

list2 to druga lista.

listN jest ostatnią listą.

Wynik

Przecięcie przeniesionych list jako lista o tym samym typie danych co list1. Przecięcie składa się z elementów, które są zawarte we wszystkich przeniesionych listach list1, list2,…, listN i mają ten sam typ danych elementu.

Źródła błędów

Aby móc utworzyć zestaw różnic, typy danych elementów list list2, list3,…, listN muszą być w stanie zostać przekonwertowane na typ danych elementu listy list1. Jeśli na przykład list1 jest zadeklarowana jako Number[], a list2 jako String[], to intersection(list1, list2) spowoduje błąd składni, ale intersection(list2, list1) nie.

Przykłady

intersection(list(1, 2, 3), list(1, 2), list(2, 3)) zwraca listę typu danych Number[] z przecięciem 2 z elementem typu danych Number.

intersection(list(1), list(2)) zwraca pustą listę danych typu Number[].

intersection(list(„1”), list(1)) zwraca pustą listę danych typu String[].

Kontekst

ALL

Uwagi

 

Zobacz także

contains, minus, union

Przykład
Poniższy przykład z definicji działania help.intersection określa wszystkie znaki zawarte w obu łańcuchach parameters.TEXT1 i parameters.TEXT2:

function create()

{

  var p_text1 := parameters.TEXT1;

  var p_text2 := parameters.TEXT2;

  var p_list1 := new(String[], length(p_text1));

  var p_list2 := new(String[], length(p_text2));

  var i := 0;

  while (i < size(p_list1)) {

    p_list1[i] := substring(p_text1, i, i + 1);

    i := i + 1;

  }

  i := 0;

  while (i < size(p_list2)) {

    p_list2[i] := substring(p_text2, i, i + 1);

    i := i + 1;

  }

  result.VALUE := intersection(p_list1, p_list2);

}

Przykład
Określanie operatora działania workflow

Można użyć funkcji union, intersection i minus, aby określić operatorów działania workflow w kontekście, jak pokazano w poniższym przykładzie.

Operatorzy działania workflow dla zatwierdzania zamówienia należy określić za pomocą roli workflow PO_APPROVERS. W tym celu należy najpierw wybrać operatora Wyrażenie w definicji działania. Następnie nalezy wprowadzić pracowników w polu Wyrażenie dla operatora i zadeklarować zmienną globalną workers poza funkcjami.

var workers as Guid[];

W ramach funkcji tworzenia przypisuje się pracownikom identyfikatory użytkownika właściciela roli workflow.

function create()

{

  /* zatwierdzający zlecenia zakupu */

  workers := resolveRole(„PO_APPROVERS”);

}

Jeśli kwota brutto zamówienia przekracza 10 000,00 EUR (w pierwszej walucie wewnętrznej), odpowiedzialny pracownik odbiorcy faktury powinien również zatwierdzić zamówienie.

W tym celu w funkcji create należy użyć funkcji union. Aby zapobiec zwracaniu przez funkcję union wartości zero, jeśli dla odbiorcy faktury nie jest zapisany żaden odpowiedzialny pracownik, należy sprawdzić wynik funkcji loadResponsibleOfPartner za pomocą funkcji isNull.

  /* dodatkowa osoba zatwierdzająca duże zamówienia */

  if (parameters.object:totalValues.grossValueDomestic.amount1 > 10000) {

    var responsibleOfPartner := loadResponsibleOfPartner(parameters.object->InvoiceRecipientData:partner);

    if (not isNull(responsibleOfPartner))

      workers := union(workers, resolvePartner(responsibleOfPartner:guid));

  }

Jeśli wnioskodawca nie jest upoważniony do zatwierdzania własnego zamówienia, należy wykluczyć wyzwalacz zdarzenia i pracownika odpowiedzialnego za zamówienie z zestawu procesorów za pomocą funkcji minus.

  /* usunięcie żądającego */

  workers := minus(workers, list(parameters.userGuid));

  if (not isNull(parameters.object:responsible))

    workers := minus(workers, resolvePartner(parameters.object:responsible), list(parameters.userGuid));

Aby wykluczyć pracowników, którzy są aktualnie nieobecni jako redaktorzy, należy użyć funkcji minus.

  /* usunięcie nieobecnych pracowników */

  var absentees as Guid[];

  for (u as Guid : workers)

    if (userAbsent(u))

      add(absentees, u);

  workers := minus(workers, absentees);

Jeśli zestaw operatorów jest pusty, przełożony osoby, która wyzwoliła zdarzenie, powinien zatwierdzić zamówienie. Jeśli użytkownik korzysta z zadań, można użyć funkcji przełożonego, aby określić przełożonego.

  /* domyślnie użyj przełożonego użytkownika, który wywołał zdarzenie */

  if (isEmpty(workers))

    workers := superior(parameters.userGuid);

Gotowy przykład wygląda następująco:

var workers as Guid[];

 

function create()

{

  /* zatwierdzający zlecenia zakupu */

  workers := resolveRole(„PO_APPROVERS”);

 

  /* dodatkowa osoba zatwierdzająca duże zamówienia */

  if (parameters.object:totalValues.grossValueDomestic.amount1 > 10000) {

    var responsibleOfPartner := loadResponsibleOfPartner(parameters.object->InvoiceRecipientData:partner);

    if (not isNull(responsibleOfPartner))

      workers := union(workers, resolvePartner(responsibleOfPartner:guid));

  }

 

  /* usunięcie żądającego */

  workers := minus(workers, list(parameters.userGuid));

  if (not isNull(parameters.object:responsible))

    workers := minus(workers, resolvePartner(parameters.object:responsible), list(parameters.userGuid));

 

  /* usuwanie nieobecnych pracowników */

  var absentees as Guid[];

  for (u as Guid : workers)

    if (userAbsent(u))

      add(absentees, u);

  workers := minus(workers, absentees);

..

  /* domyślnie użyj przełożonego użytkownika, który wywołał zdarzenie */

  if (isEmpty(workers))

    workers := superior(parameters.userGuid);

}

Jeśli zestaw operatorów jest pusty i nie zdefiniowano relacji nadrzędnej dla wyzwalacza w aplikacji Stanowiska właściciele roli workflow OLTP dla administratorów zapisanej w funkcji konfiguracyjnej Workflow Management są używani jako operatorzy. Jeśli w funkcji konfiguracji nie zdefiniowano roli workflow lub nie ma ona prawidłowego właściciela, jako operator używany jest administrator.

isEmpty

Nazwa

isEmpty

Opis

isEmpty określa, czy lista jest pusta.

Podpisy

Boolean isEmpty(unknown[] list)

Parametry

list to lista, która ma zostać sprawdzona.

Wynik

Funkcja zwraca wartość true, jeśli list jest pusta. Jeśli list zawiera co najmniej jeden element, zwracana jest wartość false.

Źródła błędów

Brak

Przykłady

isEmpty(list()) zwraca wartość true.

isEmpty(list(3)) zwraca wartość false.

isEmpty(new(String[3])) zwraca wartość false.

Kontekst

ALL

Uwagi

 

Zobacz także

size

Przykład
Poniższy przykład z definicji działania help.isEmpty określa, czy lista jest pusta:

function create()

{

  var p_element := parameters.ELEMENT;

  var r_isEmpty as Boolean;

  var elementList as String[];

  if (p_element <> „”)

    add(elementList, p_element);

  result.VALUE := isEmpty(elementList);

  result.VALUE_LIST := elementList;

}

list

Nazwa

list

Opis

list tworzy nową listę z określonymi elementami.

Podpisy

List list(Unknown e1, Unknown e2,…,Unknown eN)

Parametry

e1, e2,…, eN to elementy listy, która ma zostać wygenerowana. Wszystkie parametry są opcjonalne.

Wynik

Funkcja list tworzy nową, wypełnioną listę z elementami e1, e2,…, eN. Typ danych pierwszego elementu e1 określa typ danych listy. Jeśli nie podano żadnego parametru, funkcja zwraca pustą listę typu danych Unknown[].

Jeśli użytkownik użyje list do przypisania wartości do istniejącej listy, typ danych listy jest już ustalony i nie można go zmienić. W takim przypadku można przypisać tylko elementy, których typy danych elementów można przekonwertować na typ danych listy. Elementy przyjmują wówczas typ danych elementu listy.

Jeśli użytkownik chce utworzyć listę z elementami o różnych typach danych elementów (np. jako listę parametrów dla aplikacji działającej w tle), musi wybrać pierwszy element, aby pozostałe elementy mogły zostać przekonwertowane na jego typ danych elementu. Na przykład liczby mogą być konwertowane na ciągi znaków, ale nie odwrotnie. Jeśli nie jest to możliwe, można zadeklarować listę jako Unknown[] i przypisać do niej elementy za pomocą funkcji add.

Źródła błędów

Jeśli elementy e2, e3,…, eN nie mają tego samego typu danych elementu co e1 i nie mogą zostać przekonwertowane na typ danych elementu e1, wówczas funkcja powoduje błąd składni.

Przykłady

list() zwraca pustą listę danych typu Unknown[].

list(1, 2, 3) zwraca listę typu danych Number[] z 3 elementami typu danych Number.

list(„now”, now()) zwraca listę danych typu String[] z 2 elementami typu String lub Timestamp.

list(1, 2, „three”) i list(1, 2, list(3)) powodują błąd składni, ponieważ typ danych String lub Number[] nie może zostać przekonwertowany na typ danych Number.

list(null, now(), 1, „two”, 3) tworzy listę typu danych Unknown[] z 5 elementami o różnych typach danych elementów. Typ danych elementu pierwszego elementu null to Unknown.

Kontekst

ALL

Uwagi

Podczas korzystania z elementów listy, najpierw przyjmują one typ danych listy. Jeśli lista zawiera elementy o różnych typach danych, może być konieczne rzutowanie elementów za pomocą funkcji cast przed ich użyciem.

Przykład
var list1 as Unknown[];

  list1 := list(null, now(), 1, „two”, 3);

  result.VALUE := cast(Number, list1[2]) + cast(Number, list1[4]); /* -> 4 */

Zobacz także

add, addAll

Przykład
Poniższy przykład z definicji działania help.list tworzy listę z dwoma elementami:

function create()

{

  var p_element1 := parameters.ELEMENT1;

  var p_element2 := parameters.ELEMENT2;

  var r_list as String[];

  r_list := list(p_element1, p_element2);

  result.VALUE := r_list;

}

minus

Nazwa

minus

Opis

minus zwraca różnicę między dwiema lub więcej listami.

Podpisy

Unknown[] minus(Unknown[] list1, Unknown[] list2)

Unknown[] minus(Unknown[] list1, Unknown[] list2,…,Unknown[] listN)

Parametry

list1 to pierwsza lista.

list2 to druga lista.

listN jest ostatnią listą.

Wynik

Zbiór różnic przeniesionych list jako lista o tym samym typie danych co list1. Zbiór różnic składa się ze wszystkich elementów listy list1, które nie są zawarte w żadnej z list list2, list3,…, listN o tym samym typie danych elementu.

Źródła błędów

Aby utworzyć zestaw różnic, typy danych elementów list list2, list3,…, listN muszą być w stanie zostać przekonwertowane na typ danych elementu listy list1. Jeśli na przykład list1 jest zadeklarowana jako Number[], a list2 jako String[], to minus(list1, list2) spowoduje błąd składni, ale minus(list2, list1) nie.

Przykłady

minus(list(1, 2, 3), list(1), list(2)) zwraca listę typu danych Number[] z przecięciem 3 i elementem typu danych Number.

minus(list(1), list(2)) zwraca pustą listę danych typu Number[].

minus(list(„1”), list(1)) zwraca pustą listę danych typu String[].

Kontekst

ALL

Uwagi

 

Zobacz także

intersection, union

Przykład
Poniższy przykład z definicji działania help.minus określa wszystkie znaki, które są zawarte w pierwszych parametrach ciągu znaków parameters.TEXT1, ale nie w drugich parametrach ciągu znaków parameters.TEXT2:

function create()

{

  var p_text1 := parameters.TEXT1;

  var p_text2 := parameters.TEXT2;

  var p_list1 := new(String[], length(p_text1));

  var p_list2 := new(String[], length(p_text2));

  var i := 0;

  while (i < size(p_list1)) {

    p_list1[i] := substring(p_text1, i, i + 1);

    i := i + 1;

  }

  i := 0;

  while (i < size(p_list2)) {

    p_list2[i] := substring(p_text2, i, i + 1);

    i := i + 1;

  }

  result.VALUE_LIST1 := p_list1;

  result.VALUE_LIST2 := p_list2;

  result.VALUE := minus(p_list1, p_list2);

}

size

Nazwa

size

Opis

size określa liczbę elementów na liście lub w HashMap.

Podpisy

Number size(Unknown[] list)

Number size(HashMap hashMap)

Parametry

list jest listą.

hashMap to tablica skrótów (HashMap).

Wynik

Liczba elementów na liście list lub w tablicy hash hashMap.

Źródła błędów

Brak

Przykłady

size(list(1, 2, 3)) zwraca 3.

size(new(String[10])) zwraca 10.

size(new(HashMap)) zwraca 0.

Kontekst

ALL

Uwagi

Dwa wyrażenia size(list1) = 0 i isEmpty(list1) sprawdzają, czy lista list1 jest pusta.

Zobacz także

isEmpty

Przykład
Poniższy przykład z definicji działania help.size określa liczbę słów w tekście, dodając każde słowo do listy, a następnie używając funkcji size do określenia długości listy:

function create()

{

  var p_text := trim(parameters.TEXT);

  var r_wordList as String[];

  var word as String;

  var startPos := 0;

  var i := 0;

  while (i < length(p_text)) {

    if (substring(p_text, i, i + 1) = ” „) {

      word := trim(substring(p_text, startPos, i));

      startPos := i;

      if (word <> „”)

        add(r_wordList, word);

    }

    i := i + 1;

  }

  word := trim(substring(p_text, startPos));

  if (word <> „”)

    add(r_wordList, word);

  result.VALUE_WORD_LIST := r_wordList;

  result.VALUE := size(r_wordList);

}

toCharList

Nazwa

toCharList

Opis

toCharList konwertuje ciąg znaków na listę znaków.

Podpisy

String[] toCharList(String text)

Parametry

text to ciąg znaków.

Wynik

Lista z jednym elementem dla każdego znaku w łańcuchu.

Źródła błędów

Brak

Przykłady

toCharList(„ABC”) zwraca listę zawierającą elementy [„A”], [„B”] i [„C”].

Kontekst

ALL

Uwagi

 

Zobacz także

 
Przykład
Poniższy przykład z definicji działania help.toCharList konwertuje ciąg znaków na listę znaków:

function create()

{

  var p_text := parameters.TEXT;

  var r_toCharList := „”;

  var charList := new(String[]);

  var lenText := length(p_text);

  var i := 0;

  while (i < lenText) {

    add(charList, substring(p_text, i, i + 1));

    i := i + 1;

  }

  for (char : charList)

    r_toCharList := r_toCharList + ” [” + char + „]”;

  result.IS_EMPTY := isEmpty(charList);

  result.VALUE := trim(r_toCharList);

}

union

Nazwa

union

Opis

union zwraca połączenie dwóch lub więcej list.

Podpisy

Unknown[] union(Unknown[] list1, Unknown[] list2)

Unknown[] union(Unknown[] list1, Unknown[] list2,…,Unknown[] listN)

Parametry

list1 to pierwsza lista.

list2 to druga lista.

listN jest ostatnią listą.

Wynik

Związek przekazanych list jako lista o tym samym typie danych co list1. Zbiór unii składa się ze wszystkich elementów, które są zawarte w jednej z list list1, list2,…, listN i mają ten sam typ danych elementu.

Źródła błędów

Aby utworzyć zbiór unii, typy danych elementów list list2, list3,…, listN muszą być w stanie zostać przekonwertowane na typ danych elementu listy list1. Jeśli na przykład list1 jest zadeklarowana jako Number[], a list2 jako String[], to union(list1, list2) spowoduje błąd składni, ale union(list2, list1) nie.

Przykłady

union(list(1, 2, 3), list(1), list(2)) zwraca listę typu danych Number[] z elementami 1, 2, 3 typu danych Number.

union(list(1), list(2)) zwraca listę typu danych Number[] z elementami 1, 2 typu danych Number.

union(list(„1”), list(1)) zwraca listę typu danych String[] z elementami 1 i 1 odpowiednio typu danych String i Number.

Kontekst

ALL

Uwagi

 

Zobacz także

add, intersection, minus

Przykład
Poniższy przykład z definicji działania help.minus określa wszystkie znaki, które są zawarte w pierwszym parametrze ciągu znaków parameters.TEXT1 lub drugim parametrze ciągu znaków parameters.TEXT2:

function create()

{

  var p_text1 := parameters.TEXT1;

  var p_text2 := parameters.TEXT2;

  var p_list1 := new(String[], length(p_text1));

  var p_list2 := new(String[], length(p_text2));

  var i := 0;

  while (i < size(p_list1)) {

    p_list1[i] := substring(p_text1, i, i + 1);

    i := i + 1;

  }

  i := 0;

  while (i < size(p_list2)) {

    p_list2[i] := substring(p_text2, i, i + 1);

    i := i + 1;

  }

  result.VALUE_LIST1 := p_list1;

  result.VALUE_LIST2 := p_list2;

  result.VALUE := union(p_list1, p_list2);

}

Funkcje GUID (GUID functions)

Identyfikatory można tworzyć i edytować za pomocą funkcji dla identyfikatorów. Funkcje dla identyfikatorów obejmują

  • guidToString
  • newGuid
guidToString

Nazwa

guidToString

Opis

guidToString konwertuje identyfikator GUID na ciąg znaków w 37-znakowym formacie Microsoft. Format ten jest używany na przykład przez BIS.

Podpisy

String (Guid guid)

Parametry

guid jest identyfikatorem GUID.

Wynik

Ciąg znaków dla guid w 37-znakowym formacie Microsoft.

Źródła błędów

Brak

Przykłady

guidToString(ZERO_GUID) zwraca 00000000-0000-00-00-00-00-000000000000 jako ciąg znaków.

guidToString(INVALID_GUID) zwraca 00000000-0000-00-00-00-f000000000 jako ciąg znaków.

guidToString(„0040509F68492E10926FAE1BAABC0000“ zwraca 9f504000-4968-102e-92-6f-0000bcaa1bae jako ciąg znaków.

Kontekst

ALL

Uwagi

guidToString należy wykorzystywać tylko wtedy, gdy użytkownik chce przekonwertować guid na 37-cyfrowy format Microsoft.

Aby przekonwertować identyfikator Guid na ciąg znaków, należy użyć funkcji cast. Dla porównania, cast(String, ZERO_GUID) zwraca ciąg znaków z 32 zerami („00000000000000000000000000000000”).

Zobacz także

cast

Przykład
Poniższy przykład z definicji działania help.guidToString tworzy nowy unikalny identyfikator Guid i konwertuje go na ciąg znaków w 37-znakowym formacie Microsoft:

function create()

{

  var p_guid := newGuid();

  var r_guidToString := guidToString(p_guid);

  result.VALUE_INTERNAL := p_guid;

  result.VALUE_MS := r_guidToString;

}

newGuid

Nazwa

newGuid

Opis

newGuid tworzy nowy unikalny identyfikator Guid.

Podpisy

Guid newGuid()

Parametry

Brak

Wynik

Nowy, przejrzysty identyfikator

Źródła błędów

Brak

Przykłady

newGuid() zwraca nowy unikalny identyfikator Guid.

Kontekst

ALL

Uwagi

Funkcji newGuid można użyć na przykład do przypisania unikalnej nazwy do pliku, który ma zostać utworzony za pomocą funkcji writeFile.

Zobacz także

 
Przykład
Poniższy przykład z definicji działania help.newGuid tworzy nowy unikalny identyfikator Guid:

function create()

{

  result.VALUE := newGuid();

}

Funkcje dla zestawów wartości (ValueSet functions)

Funkcje ValueSets ułatwiają korzystanie z ValueSets w skryptach, np. w wynikach działania pola typu Pole wyboru. Funkcje ValueSets obejmują:

  • valueSet
  • valueSetDescription
  • valueSetName
valueSet

Nazwa

valueSet

Opis

valueSet tworzy zmienną typu Class z wpisami ze zbioru wartości.

Podpisy

<variableName> valueSet(valueSet)

Parametry

valueSet to w pełni kwalifikowana nazwa ValueSet bez cudzysłowów.

Wynik

Zmienna typu Class i stała z nazwą techniczną wpisu i jego numerycznym identyfikatorem dla każdego wpisu zestawu wartości.

Źródła błędów

Brak

Przykłady

const State as valueSet(com.cisag.sys.workflow.ActivityState);

 

function close(state as Number)

{

  if (state = State.DONE) {

  } else {

  }

}

Kontekst

ALL

Uwagi

valueSet może być używane tylko podczas deklarowania stałych.

Zobacz także

valueSetDescription, valueSetName

valueSetDescription

Nazwa

valueSetDescription

Opis

valueSetDescription zwraca opis wpisu ValueSet.

Podpisy

String valueSetDescription(Hashmap valueSet, Number id)

String valueSetDescription(String valueSetName, Number id)

Parametry

valueSet to nazwa stałej zadeklarowanej jako ValueSet lub HashMap z wpisami dla ValuseSet.

id to numeryczny identyfikator wpisu w ValueSet.

Wynik

Przetłumaczalny opis wpisu ValueSet jako ciąg znaków.

Źródła błędów

Jeśli ValueSet nie zawiera wpisu o identyfikatorze id, zwracana jest wartość zero.

Przykłady

ValueSet może być przekazany jako wyrażenie po deklaracji z const:

const State as valueSet(com.cisag.sys.workflow.ActivityState);

formatDescription(„state”, valueSetDescription(State, activity:state);

Zestaw ValueSet można jednak również przesłać przy użyciu pełnej nazwy technicznej:

formatDescription(„state”, valueSetDescription(„com.cisag.sys.workflow.ActivityState”, activity:state);

Kontekst

ALL

Uwagi

Opisu można użyć na przykład do wyświetlenia użytkownikowi wartości atrybutu ValueSet w jego języku treści.

Zobacz także

valueSet, valueSetName

Przykład
Poniższy przykład z definicji działania help.valueSetDescription pokazuje nazwę i opis wpisu ValueSet com.cisag.sys.workflow.ActivityState:

const State as valueSet(com.cisag.sys.workflow.ActivityState);

function create()

{

  var p_id := parameters.ID;

  var r_name := „”;

  var r_description := „”;

  var name := valueSetName(State, p_id);

  var description := valueSetDescription(State, p_id);

  if (not isNull(name)) {

    r_name := name;

    r_description := description;

  }

  result.IS_NULL := isNull(name);

  result.NAME := r_name;

  result.DESCRIPTION := description; 

}

valueSetName

Nazwa

valueSetName

Opis

valueSetName zwraca nazwę wpisu ValueSet.

Podpisy

String valueSetName(Hashmap valueSet, Number id)

String valueSetName(String valueSetName, Number id)

Parametry

valueSet to nazwa stałej zadeklarowanej jako ValueSet lub HashMap z wpisami dla ValuseSet.

id to numeryczny identyfikator wpisu w ValueSet.

Wynik

Nazwa wpisu ValueSet jako ciąg znaków.

Źródła błędów

Jeśli ValueSet nie zawiera wpisu o identyfikatorze id, zwracana jest wartość zero.

Przykłady

ValueSet może być przekazany jako wyrażenie po deklaracji z const:

const State as valueSet(com.cisag.sys.workflow.ActivityState);

formatDescription(„state”, valueSetName(State, activity:state);

Zestaw ValueSet można jednak również przesłać przy użyciu pełnej nazwy technicznej:

formatDescription(„state”, valueSetName(„com.cisag.sys.workflow.ActivityState”, activity:state);

Kontekst

ALL

Uwagi

Nazwy tej można użyć na przykład do wyraźnego wyświetlenia użytkownikowi wartości atrybutu ValueSet.

Zobacz także

valueSet, valueSetDescription

Przykład
Poniższy przykład z definicji działania help.valueSetDescription pokazuje nazwę i opis wpisu ValueSet com.cisag.sys.workflow.ActivityState:

const State as valueSet(com.cisag.sys.workflow.ActivityState);

function create()

{

  var p_id := parameters.ID;

  var r_name := „”;

  var r_description := „”;

  var name := valueSetName(State, p_id);

  var description := valueSetDescription(State, p_id);

  if (not isNull(name)) {

    r_name := name;

    r_description := description;

  }

  result.IS_NULL := isNull(name);

  result.NAME := r_name;

  result.DESCRIPTION := description; 

}

Funkcje dla obiektów biznesowych (Business object functions)

Funkcje dla obiektów biznesowych mogą być używane do otwierania i analizowania dowolnych obiektów biznesowych z bazy danych. Funkcje dla obiektów biznesowych obejmują:

  • getAttribute
  • getByBusinessKey
  • getByPrimaryKey
  • getCisObjectList
  • getURL
getAttribute

Nazwa

getAttribute

Opis

getAttribute zwraca wartość atrybutu obiektu biznesowego lub widoku obiektu.

Podpisy

Unknown getAttribute(CisObject object, String path)

Unknown getAttribute(DataView view, String path)

Parametry

obiect jest obiektem biznesowym.

view jest widokiem obiektu.

attribute to nazwa atrybutu.

Wynik

Funkcja zwraca wartość atrybutu obiektu biznesowego lub widoku obiektu z typem danych Unknown.

Źródła błędów

Jeśli atrybut ze ścieżką path nie istnieje, wystąpi błąd wykonania.

Przykłady

loadCurrency(getCorporateCurrency(cast(Guid, getAttribute(parameters.object, „_organisation”)))):isoCode zwraca kod ISO kluczowej waluty organizacji, w której kontekście zarejestrowano obiekt biznesowy, do którego odwołuje się parameters.object.

Kontekst

ALL

Uwagi

Funkcja ta służy do oceny atrybutów zaczynających się od podkreślenia.

Przed użyciem atrybutu należy przekonwertować go na typ danych zgodny z atrybutem.

Zobacz także

 
Przykład
Poniższy przykład z definicji działania help.getAttribute pokazuje wartości wewnętrznych atrybutów obiektu biznesowego dla wartości pozycji (com.cisag.app.inventory.obj.ItemValuationData):

  • Strefa czasowa – atrybut _timeZoneGuid
  • Organizacja – atrybut _organisation
  • Data kursu wymiany – atrybut _conversionDate
  • Kombinacja walut wewnętrznych – atrybut _currencyCombo

function create()

{

  var p_organisation := parameters.ORGANIZATION;

  var p_item := parameters.ORGANIZATION;

  var r_timeZoneId := „”;

  var r_organisation := „”;

  var r_conversionDate := „”;

  var r_currencyCombination := „”;

  var itemValuationData := getByPrimaryKey(CisObject(com.cisag.app.inventory.obj.ItemValuationData), loadOrganisation(p_organization):guid, loadItem(p_item):guid, ZERO_GUID, ZERO_GUID, ZERO_GUID);

  if (not isNull(itemValuationData)) {

    r_timeZoneId := getByPrimaryKey(„REPOSITORY”, CisObject(com.cisag.sys.kernel.obj.TimeZone), (cast(Guid, getAttribute(itemValuationData, „_timeZoneGuid”)))):id;

    r_organisation := loadOrganisation(cast(Guid, getAttribute(itemValuationData, „_organisation”)):code;

    r_conversionDate := cast(Timestamp, getAttribute(itemValuationData, „_conversionDate”));

    var currencyCombination := getByPrimaryKey(CisObject(com.cisag.app.multiorg.obj.DomesticCurrencyCombination), cast(Number, getAttribute(itemValuationData, „_currencyCombo”)));

    r_currencyCombination := loadCurrency(currencyCombination:currency1):isoCode;

    if (not isNull(currencyCombination:currency2))

      r_currencyCombination := r_currencyCombination + ” ” + loadCurrency(currencyCombination:currency2):isoCode;

    if (not isNull(currencyCombination:currency3))

      r_currencyCombination := r_currencyCombination + ” ” + loadCurrency(currencyCombination:currency3):isoCode;

  }

  result.VALUE1 := r_timeZoneId;

  result.VALUE2 := r_organisation;

  result.VALUE3 := r_conversionDate;

  result.VALUE4 := r_currencyCombination;

}

getByBusinessKey

Nazwa

getByBusinessKey

Opis

getByBusinessKey otwiera obiekt biznesowy poprzez jego klucz biznesowy.

Podpisy

CisObject(X) getByBusinessKey(CisObject(X), A1, A2, … , An)

CisObject(X) getByBusinessKey(String database, CisObject(X), A1, A2, … , An)

Parametry

X to w pełni kwalifikowana nazwa techniczna obiektu biznesowego.

A1, A2, …, An to wartości atrybutów w kluczu biznesowym obiektu biznesowego.

database to nazwa bazy danych, w której znajduje się obiekt biznesowy. Jeśli obiekt biznesowy nie znajduje się w bazie danych, w której przechowywane jest działanie, należy również określić bazę danych. Możliwe wartości to: OLTP, OLAP, REPOSITORY, CONFIGURATION. Alternatywnie można również podać nazwę bazy danych w systemie, np. QAS60010.

Wynik

Funkcja zwraca obiekt biznesowy jako typowany CisObject.

Źródła błędów

Jeśli nie istnieje żaden obiekt biznesowy z określonymi wartościami atrybutów, zwracana jest wartość zero.

Należy upewnić się również, że wprowadzane są wartości atrybutów we właściwej kolejności klucza biznesowego.

Przykłady

getByBusinessKey(CisObject(com.cisag.app.general.obj.Partner), „10010”) daje taki sam wynik jak loadPartner(„10010”).

getByBusinessKey(CisObject(com.cisag.app.sales.obj.SalesOrder), getByBusinessKey(CisObject(com.cisag.app.sales.obj.SalesOrderType), „100”):guid, „01234”) zwraca zamówienie sprzedaży 100-01234.

Kontekst

ALL

Uwagi

Ponieważ obiekt biznesowy jest otwierany za pośrednictwem usługi trwałości, funkcja ta nie może powodować żadnego dostępu do bazy danych. Dlatego funkcja getByBusinessKey jest lepsza od funkcji getCisObjectList, jeśli ma zostać otwarta tylko jedna instancja obiektu biznesowego.

W przypadku wersjonowanych obiektów biznesowych można otworzyć tylko aktualnie obowiązującą wersję za pomocą funkcji getByBusinessKey. Jeśli użytkownik chce otworzyć przeszłą lub przyszłą wersję, może użyć funkcji getCisObjectList, na przykład określając atrybuty validFrom i validUntil.

Atrybuty klucza biznesowego obiektu biznesowego są wyświetlane w aplikacji Obiekty deweloperskie.

Zobacz także

getByPrimaryKey

Przykład
Poniższy przykład z definicji działania help.getByBusinessKey otwiera zamówienie sprzedaży poprzez jego rodzaj i numer oraz określa klienta:

function create()

{

  var p_type := parameters.TYPE;

  var p_number := parameters.NUMBER;

  var r_customer := „”;

  var salesOrder := getByBusinessKey(CisObject(com.cisag.app.sales.obj.SalesOrder), getByBusinessKey(CisObject(com.cisag.app.sales.obj.SalesOrderType), p_type):guid, p_number);

  if (not isNull(salesOrder)) {

    r_customer := salesOrder->CustomerData->CustomerPartner:number + ” ” + salesOrder->CustomerData->CustomerPartner:searchString;

  }

  result.IS_NULL := isNull(salesOrder);

  result.CUSTOMER := r_customer;

}

getByPrimaryKey

Nazwa

getByPrimaryKey

Opis

getByPrimaryKey otwiera obiekt biznesowy poprzez jego klucz podstawowy.

Podpisy

CisObject(X) getByPrimaryKey(CisObject(X), A1, A2, … , An)

CisObject(X) getByPrimaryKey(String database, CisObject(X), A1, A2, … , An)

Parametry

X to w pełni kwalifikowana nazwa techniczna obiektu biznesowego.

A1, A2, …, An to wartości atrybutów w kluczu podstawowym obiektu biznesowego.

database to nazwa bazy danych, w której znajduje się obiekt biznesowy. Jeśli obiekt biznesowy nie znajduje się w bazie danych, w której przechowywane jest działanie, należy również określić bazę danych. Możliwe wartości to: OLTP, OLAP, REPOSITORY, CONFIGURATION. Alternatywnie można również podać nazwę bazy danych w systemie, np. QAS60010.

Wynik

Funkcja zwraca obiekt biznesowy jako typowany CisObject.

Źródła błędów

Jeśli nie istnieje żaden obiekt biznesowy z określonymi wartościami atrybutów, zwracana jest wartość zero.

Należy upewnić się również, że wprowadzane są wartości atrybutów we właściwej kolejności klucza głównego.

Przykłady

getByPrimaryKey(CisObject(com.cisag.app.general.obj.Employee), loadPartner(„70010”):guid) otwiera dane pracownika partnera 70010.

getByPrimaryKey(„CONFIGURATION”, CisObject(com.cisag.sys.configuration.obj.User), parameters.userGuid):emailAddress zwraca adres e-mail zapisany w danych systemowych użytkownika, który wywołał zdarzenie typu Jednostka biznesowa.

Kontekst

ALL

Uwagi

Ponieważ obiekt biznesowy jest otwierany za pośrednictwem usługi trwałości, funkcja ta nie może powodować żadnego dostępu do bazy danych. Dlatego funkcja getByPrimaryKey jest lepsza od funkcji getCisObjectList, jeśli ma zostać otwarta tylko jedna instancja obiektu biznesowego.

W przypadku wersjonowanych obiektów biznesowych można otworzyć tylko aktualnie obowiązującą wersję za pomocą funkcji getByPrimaryKey. Jeśli użytkownik chce otworzyć przeszłą lub przyszłą wersję, może użyć funkcji getCisObjectList, na przykład określając atrybuty validFrom i validUntil.

Atrybuty klucza głównego obiektu biznesowego są wyświetlane w aplikacji Obiekty deweloperskie.

Zobacz także

getByBusinessKey

Przykład
Poniższy przykład z definicji działania help.getByPrimaryKey otwiera dane pracownika partnera i zwraca numer personalny:

function create()

{

  var p_partner := parameters.PARTNER;

  var r_employeeNumber := „”;

  var employee := getByPrimaryKey(CisObject(com.cisag.app.general.obj.Employee), loadPartner(p_partner):guid);

  if (not isNull(employee)) {

    r_employeeNumber := employee:employeeNumber;

  }

  result.IS_NULL := isNull(employee);

  result.EMPLOYEE_NUMBER := r_employeeNumber;

}

getCisObjectList

Nazwa

getCisObjectList

Opis

getCisObjectList zwraca listę instancji obiektów biznesowych, które zostały określone za pomocą instrukcji OQL.

Podpisy

CisObject[] getCisObjectList(String oql, Unknown[] parameters)

CisObject[] getCisObjectList(String database, String oql, Unknown[] parameters)

CisObject[] getCisObjectList(String oql, Unknown[] parameters, Number count)

CisObject[] getCisObjectList(String database, String oql, Unknown[] parameters, Number count)

Parametry

oql jest instrukcją OQL. Musi być ona wprowadzona zgodnie ze wzorcem SELECT FROM…. Więcej informacji można znaleźć w artykule Składnia OQL.

database to nazwa bazy danych, w której znajduje się obiekt biznesowy. Jeśli obiekt biznesowy nie znajduje się w bazie danych, w której przechowywane jest działanie, należy również określić bazę danych. Możliwe wartości to: OLTP, OLAP, REPOSITORY, CONFIGURATION. Alternatywnie można również podać nazwę bazy danych w systemie, np. QAS60010.

parameters to lista wartości parametrów dla instrukcji OQL. Obsługiwane są typy danych Boolean, String, Number, Guid, Timestamp, CisDate i Bytes. Liczby i CisDate są traktowane specjalnie. Jeśli liczba jest przekazywana bez miejsc dziesiętnych, parametr jest traktowany jako liczba całkowita (int), w przeciwnym razie jako liczba dziesiętna (CisDecimal). Należy upewnić się, że nie przekazywane są żadne liczby z miejscami dziesiętnymi jako parametry dla atrybutów typów danych Java byte, short, int lub long. CisDate jest zazwyczaj konwertowana na znacznik czasu.

count to maksymalna liczba zwracanych instancji obiektów biznesowych. Jeśli wartość count nie zostanie określona, zwracana jest maksymalnie jedna instancja CisObject. Należy określić jak najmniejszą wartość, ponieważ zbyt duża wartość może mieć negatywny wpływ na wydajność systemu. Maksymalna wartość jest ograniczona. Więcej informacji można znaleźć w rozdziale Ograniczanie złożoności wyrażeń w artykule Wprowadzenie: Język skryptowy systemu.

Wynik

Funkcja zwraca listę CisObjects, jeśli została wykonana bez błędów. Jeśli nie znaleziono żadnych rekordów danych, zwracana jest pusta lista.

Źródła błędów

Jeśli wystąpi błąd, zwracana jest wartość zero.

Przykłady

cast(CisObject(com.cisag.app.general.obj.Partner), getCisObjectList(„SELECT FROM com.cisag.app.general.obj.Partner p ORDER BY p:updateInfo.createTime ASC”, list(), 1)[0]):number zwraca identyfikator pierwszego zarejestrowanego partnera.

cast(CisObject(com.cisag.app.general.obj.UserAssignment), getCisObjectList(„SELECT FROM com.cisag.app.general.obj.UserAssignment o WHERE o:user = ?”, list(userGuid(parameters.userGuid)), 1)[0]) zwraca partnera powiązanego z użytkownikiem, który wywołał zdarzenie typu Jednostka biznesowa.

for (salesOrder as CisObject(com.cisag.app.sales.obj.SalesOrder) : getCisObjectList(„SELECT FROM com.cisag.app.sales.obj.SalesOrder so WHERE so:type IN (SELECT t:guid FROM com.cisag.app.sales.obj.SalesOrderType t WHERE (t:code = ? or t:code = ?) AND so:status = ? ORDER BY so:date DESC”, list(„100”, „200”, OrderStatus.ORDER_HELD), 10)) iteruje po dziesięciu zablokowanych zamówieniach sprzedaży typu 100 lub 200 z największą datą dokumentu.

isEmpty(getCisObjectList(„SELECT FROM com.cisag.sys.workflow.obj.Process o WHERE o:code like ? AND o:processDefinition = ? AND (o:state = ? OR o:state = ?)”, list(„%”, definition->ProcessDefinition:guid, ProcessState.IN_PROCESS, ProcessState.OVERDUE), 1)) sprawdza w warunku przejścia węzła początkowego, czy istnieje otwarta instancja procesu z tej samej definicji procesu. Ten warunek przejścia gwarantuje, że proces nie zostanie uruchomiony więcej niż jeden raz. Należy pamiętać, że pierwszy element listy parametrów nie ma znaczenia funkcjonalnego. Został dodany tylko dlatego, że typy danych Guid i Number nie mogą być konwertowane na siebie nawzajem. Alternatywnie, wartości ValueSet można zakodować bezpośrednio w instrukcji OQL (choć może to negatywnie wpłynąć na wydajność) lub listę parametrów można utworzyć za pomocą funkcji add i sprawdzić warunek w funkcji create. Jeśli istnieje już otwarta instancja procesu, generowanie działania można anulować za pomocą polecenia abort lub abortProcess.

Kontekst

ALL

Uwagi

Parametry dla instrukcji OQL nie powinny być predefiniowane w instrukcji OQL, ale powinny być przekazywane do funkcji jako symbole zastępcze przy użyciu parametrów z ?. Jeśli parametry w instrukcji OQL są zakodowane jako stałe zamiast symboli zastępczych, może to mieć negatywny wpływ na wydajność systemu.

Podczas tworzenia listy za pomocą funkcji list, elementy listy przyjmują typ danych pierwszego elementu. Jeśli instrukcja OQL ma parametry typów danych, które nie mogą być konwertowane na siebie nawzajem, można zadeklarować pustą listę typu danych Unknown[] i dodać elementy różnych typów danych za pomocą funkcji add, przykładowo

  var parameterList := new(Unknown[]);

  add(parameterList, now());

  add(parameterList, 10);

  add(parameterList, „100”);

Ponieważ funkcja zwraca nieoznaczoną listę CisObject, należy wpisać elementy listy przed ich użyciem.

Ponieważ funkcja getCisObjectList powoduje dostęp do bazy danych, funkcja getByBusinessKey jest preferowana, jeśli ma zostać otwarta tylko jedna instancja obiektu biznesowego.

Zobacz także

getResultList

Przykład
Poniższy przykład z definicji działanai help.getCisObjectList zwraca 10 ostatnio zarejestrowanych zamówień sprzedaży klienta:

function create()

{

  var p_customer := parameters.CUSTOMER;

  var r_salesOrders := „”;

  var customer := loadPartner(p_customer);

  if (not isNull(customer)) {

    var oql :=

      „SELECT FROM com.cisag.app.sales.obj.SalesOrder so ” +

      „WHERE so:customerData IN ” +

      ” (SELECT ocdi:guid ” +

      ” FROM com.cisag.app.sales.obj.OrderCustomerDataInfo ocdi ” +

      ” WHERE ocdi:customer = ?) ” +

      „ORDER BY so:date DESC”;

    var soList := getCisObjectList(oql, list(customer:guid), 10);

    for (so as CisObject(com.cisag.app.sales.obj.SalesOrder) : soList) {

      r_salesOrders := r_salesOrders + ” ” + so->Type:code + „-” + so:number;

    }

  }

  result.SALES_ORDERS := trim(r_salesOrders);

}

Przykład
Zapytanie o osoby wewnętrzne

Poniższy przykład określa wszystkie wewnętrzne osoby w bazie danych. Ponieważ funkcja getCisObjectList nie może zwrócić dowolnej liczby instancji, osoby są odpytywane blok po bloku zgodnie z indeksowanym atrybutem number i dodawane do listy partnerList. Dopiero gdy zapytanie zwróci mniej instancji niż rozmiar bloku, zakończone zostanie określanie wszystkich osób wewnętrznych.

const PartnerType as valueSet(com.cisag.app.general.PartnerType);

const BlockSize := 100;

function create()

{

  var partnerList as CisObject(com.cisag.app.general.obj.Partner)[];

  var lastPartnerNumber := „”;

  var allPartnersSearched := false;

  var params as Unknown[];

  while (not allPartnersSearched) {

    var OQL :=

      „SELECT FROM com.cisag.app.general.obj.Partner p ” +

      ” WHERE p:type = ? AND p:human = ? AND p:number > ? ” +

      ” ORDER BY p:number”;

    params := new(Unknown[]);

    add(params, PartnerType.INTERNAL);

    add(params, true);

    add(params, lastPartnerNumber);

    var cisObjectList := getCisObjectList(OQL, params, BlockSize);

    for (p as CisObject(com.cisag.app.general.obj.Partner) : cisObjectList)

      add(partnerList, p);

    lastPartnerNumber := partnerList[size(partnerList)-1]:number;

    allPartnersSearched := size(cisObjectList) < BlockSize;

  }

}

Przykład
Dynamiczna instrukcja OQL

Poniższy przykład tworzy dynamiczną instrukcję OQL dla eksportu partnerów, którzy zostali wprowadzeni lub zmienieni wczoraj. Ponieważ definicja działania wykonuje aplikację w tle com.cisag.pgm.bi.Export, zmienna dynSQL musi zostać zadeklarowana poza funkcją create, a wartość musi zostać przekazana do aplikacji w tle za pośrednictwem parametru SearchName.

var dynOQL as String;

function create()

{

  /* Pobierz czas rozpoczęcia i zakończenia dla dynamicznego OQL*/

  var endTime := startOfDay(now());

  var beginTime := addDays(endTime, -1);

  /* Tworzenie cząstek czasu dla dynamicznego OQL */

  var beginYear := format(year(beginTime), „0000”);

  var beginMonth := format(month(beginTime), „00”);

  var beginDay := format(day(beginTime), „00”);

  var endYear := format(year(endTime), „0000”);

  var endMonth := format(month(endTime), „00”);

  var endDay := format(day(endTime), „00”);

  /* Uzyskaj domyślny identyfikator strefy czasowej systemu */

  var timeZoneId := timeZoneId(today());

  /* Tworzenie dynamicznego OQL */

  var dynOQL :=

    „DynOQL:SELECT DISTINCT o:guid, o:number ” +

    „FROM com.cisag.app.general.obj.Partner o ” +

    „WHERE (o:updateInfo.updateTime >= ” +

    „toTimestamp(„” + timeZoneId + „”, ” +

    beginYear + „, ” + beginMonth + „, ” + beginDay +

    „, 00, 00, 00, 000) ” +

    „AND o:updateInfo.updateTime < ” +

    „toTimestamp(„” + timeZoneId + „”, ” +

    endYear + „, ” + endMonth + „, ” + endDay +

    „, 00, 00, 00, 000)) ” +

    „OR (o:updateInfo.createTime >= ” +

    „toTimestamp(„” + timeZoneId + „”, ” +

    beginYear + „, ” + beginMonth + „, ” + beginDay +

    „, 00, 00, 00, 000) ” +

    „AND o:updateInfo.createTime < ” +

    „toTimestamp(„” + timeZoneId + „”, ” +

    endYear + „, ” + endMonth + „, ” + endDay +

    „, 00, 00, 00, 000) ” +

    „AND o:updateInfo.updateTime = UNDEFINED_TIME_STAMP) ” +

    „ORDER BY o:number”;

}

getURL

Nazwa

getURL

Opis

getURL generuje adres URL dla obiektu biznesowego.

Podpisy

String getURL(CisObject object)

String getURL(String serverName, CisObject object)

String getURL(Guid databaseGuid, CisObject object)

String getURL(String serverName, Guid databaseGuid, CisObject object)

Parametry

object to obiekt biznesowy, dla którego ma zostać wygenerowany adres URL.

serverName to nazwa serwera aplikacji, na który powinien wskazywać adres URL. Jeśli nazwa serwera nie zostanie określona, używany jest bieżący serwer aplikacji.

databaseGuid to baza danych, na którą powinien wskazywać adres URL. Jeśli nie określono identyfikatora bazy danych, bieżąca baza danych OLTP jest używana dla adresu URL dla działań OLTP i bazy danych repozytorium dla działań repozytorium.

Wynik

Adres URL obiektu biznesowego jako ciąg znaków.

Źródła błędów

Brak.

Przykłady

getURL(loadPartner(„10010”)) zwraca adres URL dla partnera 10010.

formatDescriptionHTML(„process”, „<a href=\”” + getURL(getByBusinessKey(CisObject(com.cisag.sys.workflow.obj.Process), process.Code)) + „\”>” + toHtml(process.Code) + „</a>”) zastępuje symbol zastępczy {process} w opisie działania klikalnym linkiem do procesu.

Kontekst

ALL

Uwagi

Adresu URL można użyć na przykład w tagach HTML w opisie działania.

Zobacz także

 
Przykład
Poniższy przykład z definicji działania help.getURL generuje adres URL dla partnera:

function create()

{

  var p_partner := parameters.PARTNER;

  var p_server := parameters.SERVER;

  var p_database := parameters.DATABASE;

  var r_URL := „”;

  var partner := loadPartner(p_partner);

  if (not isNull(partner)) {

    if (p_server = „” and p_database = „”)

      r_URL := getURL(partner);

    else if (p_server = „” and p_database <> „”)

      r_URL := getURL(cast(Guid, p_database), partner);

    else if (p_server <> „” and p_database = „”)

      r_URL := getURL(p_server, partner);

    inny

      r_URL := getURL(p_server, cast(Guid, p_database), partner);

  }

  result.URL := r_URL;

}

Funkcje dla instrukcji OQL (Result list functions)

Z pomocą funkcji getResultList można odpytać bazę danych za pomocą instrukcji OQL. Funkcja zwraca wynik w postaci dwuwymiarowej listy wierszy i kolumn.

getResultList

Nazwa

getResultList

Opis

getResultList otwiera dowolne dane z bazy danych za pomocą instrukcji OQL.

Podpisy

Unknown[][] getResultList(String oql, Unknown[] parameters)

Unknown[][] getResultList(String database, String oql, Unknown[] parameters)

Unknown[][] getResultList(String oql, Unknown[] parameters, Number count)

Unknown[][] getResultList(String database, String oql, Unknown[] parameters, Number count)

Parametry

oql jest instrukcją OQL. Więcej informacji można znaleźć w dokumencie Składnia OQL.

database to nazwa bazy danych, w której przechowywane są dane. Jeśli dane nie znajdują się w bazie danych, w której przechowywane jest działanie, należy również określić bazę danych. Możliwe wartości to: OLTP, OLAP, REPOSITORY, CONFIGURATION. Alternatywnie można również podać nazwę bazy danych w systemie, np. QAS60010.

parameters to lista wartości parametrów dla instrukcji OQL. Obsługiwane są typy danych Boolean, String, Number, Guid, Timestamp, CisDate i Bytes. Liczby i CisDate są traktowane specjalnie. Jeśli liczba jest przekazywana bez miejsc dziesiętnych, parametr jest traktowany jako liczba całkowita (int), w przeciwnym razie jako liczba dziesiętna (CisDecimal). Należy upewnić się, że nie przekazuje się żadnych liczb z miejscami dziesiętnymi jako parametrów dla atrybutów typów danych Java byte, short, int lub long. CisDate jest zazwyczaj konwertowana na znacznik czasu.

count to maksymalna liczba zwracanych rekordów danych. Jeśli wartość count nie zostanie określona, zwracany jest maksymalnie jeden rekord danych. Należy określić jak najmniejszą wartość, ponieważ zbyt duża wartość może mieć negatywny wpływ na wydajność systemu. Maksymalna wartość jest ograniczona. Więcej informacji można znaleźć w rozdziale Ograniczanie złożoności wyrażeń w artykule Wprowadzenie: Język skryptowy systemu.

Wynik

Jeśli funkcja zostanie wykonana bez błędów, zwraca listę wierszy wyników. Każdy wiersz wyników jest z kolei reprezentowany przez listę poszczególnych wartości. Jeśli nie znaleziono żadnych rekordów danych, zwracana jest pusta lista.

Źródła błędów

Jeśli wystąpi błąd, zwracana jest wartość zero.

Przykłady

cast(String, getResultList(„SELECT p:number FROM com.cisag.app.general.obj.Partner p ORDER BY p:updateInfo.createTime ASC”, list(), 1)[0][0]) zwraca identyfikator pierwszego zarejestrowanego partnera jako ciąg znaków.

cast(Number, getResultList(„SELECT COUNT(*) FROM com.cisag.app.general.obj.Partner p WHERE p:human = ?”, list(true), 1)[0][0]) zwraca liczbę osób wprowadzonych jako partnerzy jako liczbę.

for (soGuid as Guid[] : getResultList(„SELECT so:guid FROM com.cisag.app.sales.obj.SalesOrder so JOIN com.cisag.app.sales.obj.SalesOrderType t ON so:type = t:guid WHERE (t:code = ? or t:code = ?) AND so:status = ? ORDER BY so:date DESC”, list(„100”, „200”, OrderStatus.ORDER_HELD), 10)) iteruje po liście zawierającej guidy dziesięciu zablokowanych zamówień sprzedaży rodzaju 100 lub 200 z największą datą dokumentu.

cast(Number, (getResultList(„SELECT COUNT(*) FROM com.cisag.sys.workflow.obj.Activity o WHERE o:code like ? AND o:definitionGuid = ? AND (o:state <> ? AND o:state <> ?)”, list(„%”, definition:guid, State.DONE, State.CANCELED), 1))) = 0 sprawdza w warunku przejścia definicji działania, czy istnieje otwarta instancja działania z tej samej definicji działania. Ten warunek przejścia zapewnia, że istnieje co najwyżej jedno otwarte działanie. Należy pamiętać, że pierwszy element listy parametrów nie ma znaczenia funkcjonalnego. Został dodany tylko dlatego, że typy danych Guid i Number nie mogą być konwertowane na siebie nawzajem. Alternatywnie, wartości ValueSet można zakodować bezpośrednio w instrukcji OQL (choć może to mieć negatywny wpływ na wydajność) lub listę parametrów można utworzyć za pomocą funkcji add i sprawdzić warunek w funkcji create. Jeśli istnieje już otwarta instancja procesu, generowanie działania można anulować za pomocą polecenia abort.

Kontekst

ALL

Uwagi

Parametry dla instrukcji OQL nie powinny być stałe w instrukcji OQL, ale powinny być przekazywane do funkcji jako symbole zastępcze przy użyciu parametrów z ?. Jeśli parametry w instrukcji OQL są zakodowane jako stałe zamiast symboli zastępczych, może to mieć negatywny wpływ na wydajność systemu.

Podczas tworzenia listy za pomocą funkcji list, elementy listy przyjmują typ danych pierwszego elementu. Jeśli instrukcja OQL ma parametry typów danych, które nie mogą być konwertowane na siebie nawzajem, można zadeklarować pustą listę typu danych Unknown[] i dodać elementy różnych typów danych za pomocą funkcji add, przykładowo:

  var parameterList := new(Unknown[]);

  add(parameterList, now());

  add(parameterList, 10);

  add(parameterList, „100”);

Ponieważ określone rekordy danych są zwracane jako dwuwymiarowa lista danych typu Unknown[][], przed ich użyciem należy rzutować elementy listy.

Ponieważ getResultList powoduje dostęp do bazy danych, funkcja getByBusinessKey jest preferowana, jeśli ma zostać otwarta tylko jedna instancja obiektu biznesowego.

Zobacz także

getCisObjectList

Przykład
Poniższy przykład z definicji działania help.getResultList zwraca 10 ostatnio zarejestrowanych zamówień sprzedaży klienta:

function create()

{

  var p_customer := parameters.CUSTOMER;

  var r_salesOrders := „”;

  var customer := loadPartner(p_customer);

  if (not isNull(customer)) {

    var so as CisObject(com.cisag.app.sales.obj.SalesOrder);

    var oql :=

      „SELECT o:guid FROM com.cisag.app.sales.obj.SalesOrder o ” +

      „JOIN com.cisag.app.sales.obj.OrderCustomerDataInfo ocdi ” +

      „ON o:customerData = ocdi:guid ” +

      „WHERE ocdi:customer = ? ” +

      „ORDER BY o:date DESC”;

    var resultList := getResultList(oql, list(customer:guid), 10);

    for (row as Guid[] : resultList) {

      so := getByPrimaryKey(CisObject(com.cisag.app.sales.obj.SalesOrder), row[0]);

      r_salesOrders := r_salesOrders + ” ” + so->Type:code + „-” + so:number;

    }

  }

  result.SALES_ORDERS := trim(r_salesOrders);

}

Przykład
Zapytanie o dodatkowe pola

Poniższy przykład z definicji działania typu Wywołanie funkcji zwraca wartości kilku innych pól partnera. Nazwy innych pól zaczynają się od przedrostka ft_, po którym następuje nazwa używanego typu pola.

function create()

{

  var partner := loadPartner(parameters.PARTNER);

  var ft_text as String;

  var ft_URL as String;

  var ft_eMail as String; 

  var ft_decimal as Number;

  var ft_date as Timestamp;

  var ft_dateTimeZone as Guid;

  var ft_dateAndTime as Timestamp;

  var ft_domesticAmount as Number;

  var ft_foreignAmount as Number;

  var ft_foreignAmountCurrency as Guid;

  var ft_domesticPrice as Number;

  var ft_foreignPrice as Number;

  var ft_foreignPriceCurrency as Guid;

  var ft_quantity as Number;

  var ft_quantityUom as Guid;

  var ft_classification as Guid;

  var ft_valueSet as Number;

  var ft_longText as Guid;

  if (not isNull(partner))

  {

    var oql := „SELECT dbo:FT_TEXT, dbo:FT_URL, dbo:FT_EMAIL, dbo:FT_DECIMAL, dbo:FT_DATE.date, dbo:FT_DATE.timeZoneGuid, dbo:FT_DATE_AND_TIME.date, dbo:FT_DOMESTIC_AMOUNT.amount1, dbo:FT_FOREIGN_AMOUNT.amount, dbo:FT_FOREIGN_AMOUNT.currency, dbo:FT_DOMESTIC_PRICE.amount1, dbo:FT_FOREIGN_PRICE.amount, dbo:FT_FOREIGN_PRICE.currency, dbo:FT_QUANTITY.amount, dbo:FT_QUANTITY.uom, eeh:path, dbo:FT_VALUESET, dbo:FT_LONG_TEXT FROM com.cisag.app.general.obj.Partner p DYNAMIC_OBJECT JOIN EXTPartner dbo ON dbo = p WHERE p:guid = ?”;

    var rList := getResultList(oql, list(partner:guid));

    if (size(rList) > 0)

    {

      ft_text := cast(String, rList[0][0]);

      ft_URL := cast(String, rList[0][1]);

      ft_eMail := cast(String, rList[0][2]); 

      ft_decimal := cast(Number, rList[0][3]);

      ft_date := cast(Timestamp, rList[0][4]);

      ft_dateTimeZone := cast(Guid, rList[0][5]);

      ft_dateAndTime := cast(Timestamp, rList[0][6]);

      ft_domesticAmount := cast(Number, rList[0][7]);

      ft_foreignAmount := cast(Number, rList[0][8]);

      ft_foreignAmountCurrency := cast(Guid, rList[0][9]);

      ft_domesticPrice := cast(Number, rList[0][10]);

      ft_foreignPrice := cast(Number, rList[0][11]);

      ft_foreignPriceCurrency := cast(Guid, rList[0][12]);

      ft_quantity := cast(Number, rList[0][13]);

      ft_quantityUom := cast(Guid, rList[0][14]);

      ft_classification := cast(Guid, rList[0][15]);

      ft_valueSet := cast(Number, rList[0][16]);

      ft_longText := cast(Guid, rList[0][17]);

      result.FT_TEXT := ft_text;

      result.FT_DECIMAL := ft_decimal;

      result.FT_EMAIL := ft_eMail; 

      result.FT_URL := ft_URL;

      if (ft_date <> UNDEFINED_DATE) {

        result.FT_DATE := ft_date;

        result.FT_DATE_TIME_ZONE := getByPrimaryKey(„REPOSITORY”, CisObject(com.cisag.sys.kernel.obj.TimeZone), ft_dateTimeZone):id;

      result.FT_DATE_AND_TIME := ft_dateAndTime;

      }

      result.FT_DOMESTIC_AMOUNT := ft_domesticAmount;

      if (not isNull (ft_foreignAmountCurrency)) {

        result.FT_FOREIGN_AMOUNT := ft_foreignAmount;

        result.FT_FOREIGN_AMOUNT_CURRENCY := loadCurrency(ft_foreignAmountCurrency):isoCode;

      }

      result.FT_DOMESTIC_PRICE := ft_domesticPrice;

      if (not isNull (ft_foreignPriceCurrency)) {

        result.FT_FOREIGN_PRICE := ft_foreignPrice;

        result.FT_FOREIGN_PRICE_CURRENCY := loadCurrency(ft_foreignPriceCurrency):isoCode;

      }

      if (ft_quantityUom <> ZERO_GUID) {

        result.FT_QUANTITY := ft_quantity;

        result.FT_QUANTITY_UOM := loadUom(ft_quantityUom):code;

      }

      if (not isNull(ft_classification))

        result.FT_CLASSIFICATION_PATH := getByPrimaryKey(CisObject(com.cisag.app.general.extension.obj.EntityExtensionHierarchy), ft_classification):path;

      result.FT_VALUE_SET := ft_valueSet;

      if (not isNull(ft_longText))

        result.FT_LONG_TEXT := unzipText(getByPrimaryKey(CisObject(com.cisag.app.general.obj.Text), ft_longText, getByBusinessKey(CisObject(com.cisag.app.general.obj.Language), getNLSContentLanguage()):guid):text);

    }

  }

}

Inne pole może być również odpytywane przy użyciu tak zwanej funkcji dbo. Ponieważ każda funkcja dbo powoduje dostęp do bazy danych, można użyć zapytania OQL z DYNAMIC_OBJECT JOIN, aby zapytać o wszystkie inne pola instancji obiektu biznesowego za pomocą jednego dostępu do bazy danych. Jeśli obiekt biznesowy ma wiele innych pól, można zmniejszyć liczbę dostępów do bazy danych. Zapytanie OQL może być również używane w kontekstach, w których funkcje dbo nie są dostępne, np. w indywidualnych kontrolach.

Należy pamiętać, że można wyszukiwać tylko pojedyncze wartości, a nie listy wartości. Inne pola typu Jednostka biznesowa również nie mogą być odpytywane za pomocą OQL.

Przykład
Wskaźnik liczby otwartych prowizji

Poniższy przykład definicji dzialania typu Wywołanie funkcji wykorzystuje funkcję getResultList do określenia liczby zleceń dostawy, które zostały odebrane, ale nie zostały jeszcze dostarczone. Wynik jest przypisywany do zmiennej wynikowej VALUE, dzięki czemu definicja działania może być używana w dynamicznym wskaźniku w aplikacji Dashboard.

const OrderStatus as valueSet(com.cisag.app.general.OrderStatus);

function create()

{

  var oql :=

    „SELECT COUNT(*) FROM com.cisag.app.sales.obj.ShippingOrder o WHERE o:pickingStatus = ? AND o:status = ?”;

  var pickedShippingOrders := cast(Number, getResultList(oql, list(3, 10), 1)[0][0]);

  result.VALUE := pickedShippingOrders;

}

Więcej informacji na temat wskaźników dynamicznych i ich wykorzystania na pulpicie nawigacyjnym można znaleźć w artykule Wskaźniki dynamiczne.

Funkcje NLS (NLS functions)

Funkcje NLS mogą być używane do otwierania obiektów Jednostka biznesowa w innych językach treści. Funkcje NLS obejmują:

  • getNLSContentLanguage
  • getNLSDisplayLanguage
  • setNLSContentLanguage
  • setNLSDisplayLanguage
  • setNLSLanguages
getNLSContentLanguage

Nazwa

getNLSContentLanguage

Opis

getNLSContentLanguage zwraca kod ISO bieżącego języka treści.

Podpisy

String getNLSContentLanguage()

Parametry

Brak

Wynik

Kod ISO bieżącego języka treści jako ciąg znaków.

Źródła błędów

Brak

Przykłady

getNLSContentLanguage() zwraca bieżący język treści.

Kontekst

ALL

Uwagi

Język treści określa między innymi język, w którym wielojęzyczne atrybuty obiektów są otwierane w bazie danych OLTP.

Zobacz także

getNLSDisplayLanguage

Przykład
Poniższy przykład z definicji działania help.getNLSContentLanguage pokazuje kod ISO bieżącego języka treści:

function create()

{

  var r_contentLanguage := getNLSContentLanguage();

  result.CONTENT_LANGUAGE := r_contentLanguage;

}

getNLSDisplayLanguage

Nazwa

getNLSDisplayLanguage

Opis

getNLSDisplayLanguage zwraca kod ISO bieżącego języka wyświetlania.

Podpisy

String getNLSDisplayLanguage()

Parametry

Brak

Wynik

Kod ISO bieżącego języka wyświetlania jako ciąg znaków.

Źródła błędów

Brak

Przykłady

getNLSDisplayLanguage() zwraca bieżący język wyświetlania.

Kontekst

ALL

Uwagi

Język wyświetlania określa między innymi język, w którym otwierane są wielojęzyczne atrybuty obiektów w bazie danych repozytorium.

Zobacz także

getNLSContentLanguage

Przykład
Poniższy przykład z definicji działania help.getNLSDisplayLanguage pokazuje kod ISO bieżącego języka wyświetlania:

function create()

{

  var r_displayLanguage := getNLSDisplayLanguage();

  result.DISPLAY_LANGUAGE := r_displayLanguage;

}

setNLSContentLanguage

Nazwa

setNLSContentLanguage

Opis

setNLSContentLanguage ustawia bieżący język treści.

Podpisy

setNLSContentLanguage(String language)

Parametry

language to kod ISO nowego języka treści.

Wynik

Po wywołaniu zmieniany jest język treści. Wielojęzyczne atrybuty wszystkich obiektów z bazy danych OLTP są następnie otwierane w zmienionym języku treści. Obiekty, które zostały otwarte przed wywołaniem funkcji, nie są zmieniane.

Źródła błędów

Brak

Przykłady

setNLSContentLanguage(„en”) ustawia bieżący język treści na angielski.

Kontekst

ALL

Uwagi

Gdy użytkownik uruchamia proces, jest on wykonywany w kontekście treści i języków wyświetlania zapisanych w ustawieniach użytkownika.

Zobacz także

setNLSDisplayLanguage, setNLSLanguages

Przykład
Poniższy przykład z definicji działania help.setNLSContentLanguage pokazuje opis artykułu we wszystkich aktywnych językach treści:

function create()

{

  var p_item := parameters.ITEM;

  var r_descriptions := „”;

  var item := loadItem(p_item);

  if (not isNull(item)) {

    /* pobierz nazwy systemu i bazy danych */

    var systemName := cast(String, call(„help.js.getSystemName”, hashMap()).NAME);

    var databaseName := cast(String, call(„help.js.getDatabaseName”, hashMap()).NAME);

    /* pobierz Guid systemu i bazy danych */

    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);

    /* zapytanie do bazy danych konfiguracji o aktywne języki treści */

    var params as Unknown[];

    add(params, database:guid);

    add(params, 1); /* aktywna wersja */

    var activeLanguages := getCisObjectList(„CONFIGURATION”, „SELECT FROM com.cisag.sys.configuration.obj.DatabaseLanguage o WHERE o:databaseGuid = ? AND o:version = ?”, params, 99);

    /* pobierz opis przedmiotu we wszystkich aktywnych językach treści */

    for (l as CisObject(com.cisag.sys.configuration.obj.DatabaseLanguage) : activeLanguages) {

      r_descriptions := r_descriptions + ” [” + l:language + „] „;

      setNLSContentLanguage(l:language);

      item := loadItem(p_item);

      r_descriptions := r_descriptions + item:description;

    }

  }

  result.DESCRIPTIONS := trim(r_descriptions);

}

setNLSDisplayLanguage

Nazwa

setNLSDisplayLanguage

Opis

setNLSDisplayLanguage ustawia bieżący język wyświetlania.

Podpisy

setNLSDisplayLanguage(String language)

Parametry

language to kod ISO nowego języka wyświetlania.

Wynik

Po wywołaniu, język wyświetlania zostanie zmieniony. Wielojęzyczne atrybuty wszystkich obiektów z bazy danych repozytorium są następnie otwierane w zmienionym języku wyświetlania. Obiekty, które zostały otwarte przed wywołaniem funkcji, nie są zmieniane.

Źródła błędów

Brak

Przykłady

setNLSDisplayLanguage(„en”) ustawia bieżący język wyświetlania na angielski.

Kontekst

ALL

Uwagi

Gdy użytkownik uruchamia proces, jest on wykonywany w kontekście treści i języków wyświetlania zapisanych w ustawieniach użytkownika.

Zobacz także

setNLSContentLanguage, setNLSLanguages

Przykład
Poniższy przykład z definicji działania help.setNLSDisplayLanguage ustawia język wyświetlania na język korespondencyjny partnera i wyświetla nazwę ValueSet:

const State as valueSet(com.cisag.sys.workflow.ActivityState);

function create()

{

  var p_partner := parameters.PARTNER;

  var r_description := „”;

  var partner := loadPartner(p_partner);

  if (not isNull(partner)) {

    setNLSDisplayLanguage(cast(String, first(partner->Language:isoCode, getNLSDisplayLanguage())));

    r_description := valueSetDescription(State, 10);

  }

  result.DESCRIPTION := r_description;

}

setNLSLanguage

Nazwa

setNLSLanguages

Opis

setNLSLanguages ustawia zarówno bieżący język treści, jak i bieżący język wyświetlania.

Podpisy

setNLSLanguages(String language)

Parametry

language to kod ISO nowego języka treści i wyświetlania.

Wynik

Po wywołaniu zmieniane są języki zawartości i wyświetlania. Wielojęzyczne atrybuty wszystkich obiektów z repozytorium i bazy danych OLTP są następnie otwierane w zmienionym języku. Obiekty, które zostały otwarte przed wywołaniem funkcji, nie są zmieniane.

Źródła błędów

Brak

Przykłady

setNLSLanguages(„en”) ustawia bieżącą zawartość i język wyświetlania na angielski.

setNLSLanguages(getCustomizingValue(„com.cisag.app.General”)->InternationalLanguge:isoCode) ustawia język treści i wyświetlania na język międzynarodowy przechowywany w funkcji konfiguracji Podstawowe dla klienta.

setNLSLanguages(getCustomizingValue(„com.cisag.app.General”)->Company->AddressData->Country-> Language:isoCode) ustawia język treści i wyświetlania na język narodowy klienta.

setNLSLanguages(parameters.object-> DeliveryCustomerData->CustomerPartner-> Language:isoCode) ustawia treść i język wyświetlania na język korespondencyjny odbiorcy dostawy zamówienia sprzedaży, do którego odwołuje się parameters.object.

Kontekst

ALL

Uwagi

Gdy użytkownik uruchamia proces, jest on wykonywany w kontekście treści i języków wyświetlania zapisanych w ustawieniach użytkownika.

Zobacz także

setNLSContentLanguage, setNLSDisplayLanguage

Przykład
Poniższy przykład z definicji działania help.setNLSLanguages ustawia język treści i wyświetlania na język korespondencyjny pracodawcy użytkownika i wyświetla nazwę wpisu ValueSet w tym języku:

function create()

{

  var p_partner := parameters.PARTNER;

  var r_description := „”;

  var partner := loadPartner(p_partner);

  if (not isNull(partner)) {

    var company := getCustomizingValue(„com.cisag.app.General”):company;

    var employers := loadTargetsOfPartnerRelations(partner:guid, company, „Employee”);

    setNLSDisplayLanguage(cast(String, first(employers[0]->Language:isoCode, getNLSDisplayLanguage())));

    r_description := valueSetDescription(„com.cisag.sys.workflow.ActivityState”, 10);

  }

  result.DESCRIPTION := r_description;

}

Funkcje dla plików

Polecenia i funkcje dla plików mogą być używane do odczytu i zapisu plików w Knowledge Store:

  • readFile
  • readTextFile
  • writeFile
readFile

Nazwa

readFile

Opis

readFile zwraca zawartość pliku jako strumień bajtów.

Podpisy

Bytes readFile(String path)

Parametry

path jest bezwzględną ścieżką do pliku.

Plik można otworzyć z różnych źródeł:

  • System plików – pliki można otwierać, określając ścieżkę z systemu plików. W przypadku ścieżki odwrotne ukośniki („\”, backslash) muszą być oznaczone jako znaki sterujące przy użyciu innego odwrotnego ukośnika, np: „C:\\Windows\\Test.txt”. Nie jest to konieczne w przypadku ukośników („/”, ukośnik do przodu), np: „C:/Windows/Test.txt”.
  • Knowledge Store – jeśli plik znajduje się w Knowledge Store, ścieżka musi zaczynać się od kstore://, np: kstore://ADV62010/Documents/Workflow/Test.txt.
  • http – jeśli plik ma być otwierany przez http z serwera WWW, ścieżka musi zaczynać się od http://.
  • https – jeśli plik ma być otwierany przez https (Hypertext Transfer Protocol Secure) z serwera WWW, ścieżka musi zaczynać się od https://.

Wynik

Funkcja readFile zwraca zawartość pliku jako strumień bajtów.

Źródła błędów

Funkcja zwraca wartość zero, jeśli plik nie istnieje lub wystąpił błąd podczas odczytu.

Przykłady

readFile(„kstore:// + getDatabaseName() + „/Documents/Workflow/Mailtemplate_en.html”) zwraca zawartość pliku Test.txt jako bytestream (bajty).

Kontekst

ALL

Uwagi

Funkcję readFile można połączyć z poleceniem addMailAttachment, dzięki czemu funkcja readFile zwraca zawartość załącznika:

addMailAttachment(„Anhang.txt”, readFile(„kstore://” + getDatabaseName() + „/Documents/Workflow/Mailtemplate_en.html „))

Na przykład, węzeł e-mail może wysłać do odbiorcy dokument już przechowywany w Knowledge Store.

Zobacz także

readTextFile, writeFile

Przykład
Poniższy przykład z definicji działania help.readFile odczytuje obrazy artykułu z Knowledge Store i dołącza je do wiadomości e-mail:

function create()

{

  var p_item := parameters.ITEM;

  var r_imageFiles as String;

  var r_total_bytes as Number;

  var imageFileName as String;

  var imageFile as Bytes;

  var item := loadItem(p_item);

  if (not isNull(item)) {

    /* pobierz obrazy przedmiotów */

    var params as Unknown[];

    add(params, 4);

    add(params, item:number);

    add(params, 1);

    var entityImages := getCisObjectList(„SELECT FROM com.cisag.app.general.docman.obj.Document doc WHERE doc:status = ? AND doc:guid IN (SELECT ref:document FROM com.cisag.app.general.docman.obj.DocumentReference ref JOIN com.cisag.app.general.docman.obj.DocumentReferenceType typ ON ref:type = typ:guid JOIN com.cisag.app.general.obj.Item i ON ref:instance = i:guid WHERE i:number = ? and typ:type = ? and typ:code = „ENTITY_IMAGE”)”, params, 100);

    for (document as CisObject(com.cisag.app.general.docman.obj.Document) : entityImages) {

      imageFileName := document:folder + document:document;

      imageFile := readFile(„kstore://” + databaseName() + „/Documents/” + imageFileName);

      /* użyj addMailAttachment, aby dołączyć plik obrazu do wiadomości e-mail */

      /*

      addMailAttachment(document:document, imageFile);

      */

      r_imageFiles := r_imageFiles + imageFileName + ” „;

    }

  result.ENTITY_IMAGES := trim(r_imageFiles);

  }

}

readTextFile

Nazwa

readTextFile

Opis

readTextFile zwraca zawartość pliku jako ciąg znaków.

Podpisy

Bytes readTextFile(String path)

Parametry

path jest bezwzględną ścieżką do pliku.

Plik można otworzyć z różnych źródeł:

  • System plików – pliki można otwierać, określając ścieżkę z systemu plików. W przypadku ścieżki odwrotne ukośniki (\, backslash) muszą być oznaczone jako znaki sterujące przy użyciu innego odwrotnego ukośnika, np: C:\\Windows\\Test.txt. Nie jest to konieczne w przypadku ukośników (/, ukośnik do przodu), np: C:/Windows/Test.txt.
  • Kstore – jeśli plik znajduje się w Knowledge Store, ścieżka musi zaczynać się od kstore://, np: kstore://ADV62010/Documents/Workflow/Test.txt.
  • http – jeśli plik ma być otwierany przez http z serwera WWW, ścieżka musi zaczynać się od http://.
  • https – jeśli plik ma być otwierany przez https (Hypertext Transfer Protocol Secure) z serwera WWW, ścieżka musi zaczynać się od https://.

Wynik

Funkcja readTextFile zwraca zawartość pliku jako ciąg znaków.

Źródła błędów

Funkcja zwraca wartość zero, jeśli plik nie istnieje lub wystąpił błąd podczas odczytu.

Przykłady

readFile(„kstore:// + getDatabaseName() + „/Documents/Workflow/Mailtemplate_en.html”) zwraca zawartość pliku Test.txt jako ciąg znaków.

readFile(„http://www.zoll.de/SiteGlobals/Functions/Kurse/KursExport.xml?view=xmlexportkursesearchresultZOLLWeb&kursart=1&iso2code2=AU&startdatum_tag2=01&

startdatum_monat2=01&startdatum_jahr2=2018&enddatum_tag2=31&enddatum_monat2

=12&enddatum_jahr2=2018&sort=asc&spalte=gueltigkeit”) zwraca kursy wymiany zgodnie z parametrami z Generalnej Dyrekcji Celnej w Bonn.

readTextFile(„https://www.newyorkfed.org/medialibrary/media/xml/data/fx/EUR10.xml”) zwraca historyczne kursy wymiany Federalnej Rezerwy wymiany w Nowym Jorku

Uwaga
Comarch nie ponosi odpowiedzialności za linki zewnętrzne.

Kontekst

ALL

Uwagi

 

Zobacz także

readFile, writeFile

Przykład
Poniższy przykład z definicji działania help.readTextFile odczytuje szablon wiadomości e-mail Mailtemplate_en.html z Knowledge Store:

function create()

{

  var r_mailTemplate as String;

  r_mailTemplate := readTextFile(„kstore://” + databaseName() + „/Documents/Workflow/” + „Mailtemplate_en.html”);

  result.MAIL_TEMPLATE := r_mailTemplate;

}

writeFile

Nazwa

writeFile

Opis

writeFile tworzy nowy plik z określoną zawartością w Knowledge Store.

Podpisy

writeFile(String path, Bytes content)

writeFile(String path, String text)

writeFile(String path, String text, String encoding)

Parametry

path jest bezwzględną ścieżką w Knowledge Store pliku, który ma zostać utworzony. Ścieżka musi zaczynać się od kstore://, np: kstore://ADV62010/Documents/Workflow/Test.txt.

content to zawartość pliku, który ma zostać wygenerowany jako strumień bajtów,

text to zawartość pliku, który ma zostać utworzony jako ciąg znaków.

Kodowanie to kodowanie znaków text. Przykładami kodowania znaków są

  • US-ASCII
  • ISO-8859-1
  • UTF-8
  • UTF-16BE
  • UTF-16

Pełną dokumentację możliwych kodowań można znaleźć w dokumencie Java dla java.nio.charset.Charset.

Wynik

Polecenie writeFile tworzy nowy plik z określoną zawartością w Knowledge Store. Ścieżka do pliku jest określana w taki sam sposób, jak w przypadku funkcji readFile. Zawartość pliku może być binarna z typem danych Bytes lub ciąg znaków z typem danych String. Jeśli do pliku ma zostać zapisany ciąg znaków, opcjonalnie można określić kodowanie znaków. Jeśli kodowanie znaków nie jest określone, kodowanie znaków zależy od komputera, na którym działa serwer aplikacji.

Źródła błędów

Funkcja zwraca wartość zero, jeśli podczas zapisu wystąpi błąd.

Przykłady

writeFile(„kstore:// + getDatabaseName() + „/Documents/Workflow/Test.txt”, „Hello world!”, „UTF-8”) tworzy plik tekstowy w Knowledge Store.

Kontekst

ALL

Uwagi

Polecenie writeFile może być używane razem z funkcjami readTextFile i format, aby odczytać plik szablonu z symbolami zastępczymi, wypełnić je i zapisać gotowy plik w Knowledge Store.

Zobacz także

readFile, readTextFile

Przykład
Poniższy przykład z definicji działania help.writeFile zapisuje plik tekstowy do katalogu tmp w Knowledge Store. Następnie definicja działania odpytuje wygenerowany obiekt biznesowy typu com.cisag.sys.kstore.obj.KnowledgeDocument i zwraca ścieżkę i nazwę wygenerowanego pliku, a także czas utworzenia i użytkownika, który utworzył obiekt biznesowy.

function create()

{

  var p_content := parameters.CONTENT;

  var r_file as String;

  var r_creator as String;

  var r_creationDate as Timestamp;

  var folder := „tmp/”;

  var fileName := cast(String, newGuid()) + „.txt”;

  writeFile(„kstore://” + databaseName() + „/” + folder + fileName, p_content, „UTF-8”);

  var docs := getCisObjectList(„SELECT FROM com.cisag.sys.kstore.obj.KnowledgeDocument o WHERE o:pathName = ? ORDER BY o:creationDate DESC”, list(folder + fileName), 1);

  for (doc as CisObject(com.cisag.sys.kstore.obj.KnowledgeDocument) : docs) {

    r_creator := userName(doc:creator);

    r_creationDate := doc:creationDate;

  }

  result.FILE_NAME := folder + fileName;

  result.CREATOR := r_creator;

  result.CREATION_DATE := r_creationDate;

}

Przykład
Importowanie potwierdzenia inwentaryzacji dla pustego miejsca magazynowego

Poniższy przykład pochodzi z definicji procesu dla tak zwanej inwentaryzacji zerowej, która importuje potwierdzenie inwentaryzacji dla pustego pojemnika magazynowego podczas kompletacji po tym, jak osoba kompletująca potwierdziła za pomocą zadania workflow, że pojemnik magazynowy był pusty po kompletacji.

Najpierw węzeł usługi odczytuje plik szablonu z Knowledge Store i dodaje do niego informacje specyficzne dla procesu. Plik jest następnie przechowywany w Knowledge Store pod inną nazwą, aby służyć jako plik importu dla potwierdzenia inwentaryzacji. Informacje wymagane do potwierdzenia spisu inwentarza z natury, takie jak identyfikacja spisu inwentarza z natury i lista zliczania zapasów, są przechowywane w zmiennych procesu.

var importFile as String;

function create()

{

  /* pobierz partnera inicjatora procesu */

  var userPartner := getByPrimaryKey(CisObject(com.cisag.app.general.obj.UserAssignment), userGuid(process.Initiator))->Partner:number;

  /* odczyt pliku szablonu i zamiana parametrów */

  var templateFile := „kstore://” + getDatabaseName() + „/” + „Documents/Workflow/EmptyStorageLocationsTemplate_Create.xml”;

  var importFileContent := readTextFile(templateFile);

  importFileContent :=

    format(importFileContent,

           list(userPartner, process.inventoryCountList:number, process.inventoryCount:number, process.inventoryCount->Type:code, process.warehouse:code, process.zone:code, process.location));

  /* zapis pliku importu do folderu importu */

  importFile := „kstore://” + getDatabaseName() + „/Documents/Workflow/EmptyStorageLocations/EmptyStorageLocation_” + + format(now(), „yyyyMMddHHmmssSSS”) + „_” + process.warehouse:code + „-” + process.zone:code + „-” + process.location + „.xml”;

  writeFile(importFile, importFileContent, „UTF-8”);

}

W definicji działania węzła usługi aplikacja działająca w tle com.cisag.pgm.bi.Import jest przechowywana z następującymi wartościami parametrów aplikacji:

  • ContentType – text/xml; charset=utf-8
  • CorrectionMode – 1
  • Baza danych – getDatabaseName()
  • ErrorFileMode – 1
  • FilterName – EMPTY_STORAGE_LOCATIONS
  • ImportFile – importFile
  • ImportFileMode – 1
  • ObjectType – cisag.app.inventory.physical.obj.PhysicalInventoryCountList
  • WarningsMode – 2

Opis parametrów aplikacji można znaleźć w rozdziale Import aplikacji dokumentu pomocy Interfejsy programowania wymiany danych.

W tym przykładzie użyto następującego pliku szablonu:

<?xml version=”1.0″ encoding=”UTF-8″?><semiramis xmlns=”com.cisag.app.inventory.physical.obj.PhysicalInventoryCountList” locale=”en-US-XMLSchemaCompliant” xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance”>.

  <PhysicalInventoryCountList xmlns=”com.cisag.app.inventory.physical.obj.PhysicalInventoryCountList”>.

    <ResponsibleEmployee>.

      <numer>{0}</numer> <!– Numer partnera –>

    </ResponsibleEmployee>.

    <liczba>{1}</liczba> <!– Numer listy zliczania –>

    <PhysicalInventory>

      <liczba>{2}</liczba> <!– Liczba zapasów –>

      <Typ>

        <code>{3}</code> <!– Kod typu zliczania zapasów –>

      </Type>

    </PhysicalInventory>

    <CountListReporting mode=”create”> <!– Tryb: create –>

      <Przechowywanie>

        <magazyn>{4}</magazyn> <!– Magazyn –>.

        <strefa>{5}</strefa> <!– Strefa –>

        <lokalizacja>{6}</lokalizacja> <!– Miejsce przechowywania –>

      </storage>

    </CountListReporting>.

  </PhysicalInventoryCountList>.

</semiramis>

Przykład
Tworzenie nowych pracowników za pomocą importu

W poniższym przykładzie należy utworzyć definicję procesu, za pomocą której tworzone są podstawowe dane nowych pracowników wewnętrznych. Identyfikacja partnera ma być określona na podstawie schematu numeracji dla partnerów przechowywanych w konfiguracji.

Najpierw tworzona jest definicja procesu z węzłem skryptu do przechowywania pliku importu w Knowledge Store i węzłem usługi do importowania przechowywanego pliku przy użyciu aplikacji działającej w tle com.cisag.pgm.bi.Import.

W definicji działania dla węzła startowego należy wprowadzić pola wyników dla danych, które użytkownik musi lub może wprowadzić podczas uruchamiania procesu, np:

  • Nazwisko i imię
  • Adres wraz z kodem pocztowym i krajem
  • Pracodawca i działalność
  • Odpowiedzialny pracownik lub przełożony (poprzez relacje partnerskie)

Pola identyfikacyjne i obowiązkowe partnera można znaleźć w artykule Import partnerów.

W węźle początkowym generowany jest nowy numer na podstawie schematu numeracji partnerów zapisanych dla klienta w ustawieniach.

var company := getCustomizingValue(„com.cisag.app.General”):company;

var numberRange := getCustomizingValue(„com.cisag.app.general.Partners”, company):customerNumberRange;

var newNumber := nextNumberRangeNumber(numberRange);

Jeśli w konfiguracji nie zdefiniowano schematu numeracji, nowa liczba ma wartość zero. W takim przypadku należy wysłać komunikat o błędzie w funkcji walidacji za pomocą funkcji sendMessage, aby zapobiec rozpoczęciu procesu. Jeśli wprowadzono również pole wyniku dla numeru partnera, można wyświetlić komunikat o błędzie w zależności od jego wartości.

if (isNull(newNumber) and not validatePartner(results.partnerNumber))

  sendMessage(results.partnerNumber_id, „EDU-00001”, list());

Użytkownik definiuje warunki dla numeru partnera wprowadzonego w funkcji validatePartner.

Funkcja zamykania umożliwia zapisanie wprowadzonych wyników w zmiennych procesu, które zostały wcześniej wprowadzone w definicji procesu. Na przykład, jeśli zarówno wynik, jak i zmienna procesu mają nazwę employeeFirstName, należy przenieść wartość w następujący sposób:

process.employeeFirstName := result.employeeFirstName;

Następnie utworzyć plik importu dla nowego pracownika w węźle skryptu. Najpierw użyć funkcji readTextFile, aby odczytać plik szablonu importu z Knowledge Store. Następnie użyć funkcji format, aby zastąpić symbole zastępcze w pliku szablonu wartościami do zaimportowania. Na koniec zapisać ukończony plik pod inną nazwą w Knowledge Store. Szczegółowy opis tych kroków można znaleźć w poprzednim przykładzie. Następnie zapisać pełną ścieżkę i nazwę pliku importu w zmiennej procesu.

W kolejnym węźle usługi zaimportować plik importu za pomocą aplikacji działającej w tle com.cisag.pgm.bi.Import.

Pomiędzy węzłem początkowym a węzłami skryptu i usługi dla importu można dodać kolejne węzły użytkownika w celu skompilowania informacji o nowym pracowniku. Do procesu można również dodać kolejne węzły działania w celu sprawdzenia i zatwierdzenia informacji przed ich zaimportowaniem.

Funkcje dla użytkowników (User functions)

Dane opisowe podstawowych obiektów, takich jak użytkownicy, bazy danych i serwery, są przechowywane w konfiguracyjnej bazie danych. Obiekty te są używane w całym systemie. Poniższe funkcje służą do rozwiązywania tych zastosowań:

  • resolveRole
  • userAbsent
  • userFullName
  • userGuid
  • userMailAddress
  • userName
resolveRole

Nazwa

resolveRole

Opis

resolveRole zwraca identyfikatory użytkowników właścicieli roli workflow.

Podpisy

Guid[] resolveRole(Guid roleName)

Guid[] resolveRole(String roleName)

Parametry

roleName to identyfikator roli workflow.

Wynik

Funkcja zwraca listę z identyfikatorami użytkowników właścicieli roli workflow roleName w bazie danych, w której funkcja jest wykonywana.

Źródła błędów

Właściciel roli workflow w bazie danych repozytorium nie może być określony w bazie danych OLTP i odwrotnie. Jeśli roleName nie jest prawidłową rolą workflow, zwracana jest wartość zero.

Przykłady

resolveRole(„SALES”) zwraca właścicieli roli workflow jako listę identyfikatorów.

contains(resolveRole(„APPROVERS”), list(environment.userGuid)) zwraca wartość true w indywidualnym sprawdzeniu, czy użytkownik jest właścicielem roli workflow APPROVERS. Wyrażenia tego można użyć na przykład w celu zezwolenia na zmiany w dokumencie tylko dla określonych grup użytkowników lub posiadaczy zadań.

Wyrażenie dla operatorów w definicji działania minus(resolveRole(„SALES”, list(parameters.userGuid)) tworzy zadanie dla właściciela roli workflow SALES. Funkcja minus oznacza, że żadne zadanie nie zostanie utworzone dla wyzwalacza przechowywanego w parameters.userGuid.

Wyrażenie dla operatorów w definicji działania union(resolveRole(„SALES”, resolveRole(„SALESREPS”)) tworzy zadanie dla właścicieli obu ról workflow. Funkcja union oznacza, że tylko jedno zadanie jest tworzone dla użytkownika, który jest właścicielem obu ról workflow.

Kontekst

ALL

Uwagi

 

Zobacz także

 
Przykład
Poniższy przykład z definicji działania help.resolveRole zwraca nazwy wszystkich użytkowników, którzy są przypisani jako właściciele roli workflow:

function create()

{

  var p_role := parameters.ROLE;

  var r_users := „”;

  var users := resolveRole(p_role);

  if (not isNull(users)) {

    for (u : users)

      r_users := r_users + ” ” + userName(u);

  }

  result.IS_NULL := isNull(users);

  result.USERS := substring(r_users, 1);

}

userAbsent

Nazwa

userAbsent

Opis

userAbsent sprawdza, czy użytkownik jest nieobecny.

Podpisy

Boolean userAbsent(Guid user)

Boolean userAbsent(Guid user, Timestamp time)

Boolean userAbsent(Guid user, Timestamp from, Timestamp until)

Parametry

user to Guid lub nazwa użytkownika.

time to punkt w czasie obserwacji.

from oznacza początek analizowanego okresu.

to oznacza koniec okresu obserwacji.

Wynik

Jeśli użytkownik jest nieobecny, funkcja zwraca wartość prawdy true, w przeciwnym razie false. Jeśli za pomocą parametru time zostanie przekazany czas obserwacji, ocena zostanie przeprowadzona dla tego czasu. Jeśli okres obserwacji jest przekazywany za pomocą parametrów from i until, użytkownik jest uważany za nieobecnego, jeśli jest nieobecny w dowolnym momencie w okresie obserwacji.

Jeśli user nie jest prawidłowym użytkownikiem, zwracana jest wartość false.

Źródła błędów

Brak.

Przykłady

userAbsent(userGuid(„JOB”)) zwraca wartość prawdy true, jeśli użytkownik JOB jest nieobecny w bieżącym czasie.

userAbsent(userGuid(„JOB”), addDays(now(), 7)) zwraca wartość true, jeśli użytkownik jest nieobecny dokładnie za siedem dni.

userAbsent(userGuid(„JOB”), now(), addDays(endOfDay(now()), 13)) zwraca wartość true, jeśli użytkownik jest nieobecny w dowolnym momencie w ciągu następnych 14 dni kalendarzowych.

Wyrażenie dla operatorów cast(Guid, if(not(userAbsent(parameters.userGuid)), list(parameters.userGuid), substitute(parameters.userGuid))) przypisuje działaniu dla zdarzenia typu Jednostka biznesowa do wyzwalacza. Jeśli wyzwalacz jest nieobecny, działanie jest przypisywane do zamiennika.

Kontekst

ALL

Uwagi

 

Zobacz także

 
Przykład
Poniższy przykład z definicji działania help.userAbsent usuwa wszystkich nieobecnych użytkowników z listy właścicieli ról workflow:

function create()

{

  var p_workflowRole := parameters.WORKFLOW_ROLE;

  var p_time := parameters.TIME;

  var p_from := parameters.FROM;

  var p_until := parameters.UNTIL;

  var r_nonAbsentUsers := „”;

  var holders := resolveRole(p_workflowRole);

  if (not isNull(holders)) {

    holders := removeAbsentUsers(holders, p_time, p_from, p_until);

    for (user : holders) {

      r_nonAbsentUsers := r_nonAbsentUsers + ” ” + userName(user);

    }

  }

  result.NON_ABSENT_USERS := trim(r_nonAbsentUsers);

}

function removeAbsentUsers(p_users as Guid[], p_time as Timestamp, p_from as Timestamp, p_until as Timestamp) as Guid[]

{

  var nonAbsentUsers as Guid[];

  for (user : p_users) {

    if (p_time <> UNDEFINED_DATE) {

      if (not userAbsent(user, p_time))

        add(nonAbsentUsers, user);

    } else if (p_from <> UNDEFINED_DATE and p_until <> UNDEFINED_DATE) {

      if (not userAbsent(user, p_from, p_until))

        add(nonAbsentUsers, user);

    } else {

      if (not userAbsent(user))

        add(nonAbsentUsers, user);

    }

  }

  return nonAbsentUsers;

}

userFullName

Nazwa

userFullName

Opis

userFullName zwraca pełną nazwę użytkownika.

Podpisy

String userFullName(Guid user)

Parametry

user to identyfikator użytkownika.

Wynik

Pełna nazwa użytkownika przechowywana w aplikacji Panel System. Jeśli user nie jest prawidłowym użytkownikiem, zwracany jest pusty ciąg znaków.

Źródła błędów

Brak.

Przykłady

userFullName(userGuid(„JOB”)) zwraca pełną nazwę użytkownika.

userFullName(parameters.userGuid) zwraca pełną nazwę użytkownika, który wywołał zdarzenie typu Jednostka biznesowa lub Działanie użytkownika lub rozpoczął proces bez definicji zdarzenia.

Kontekst

ALL

Uwagi

 

Zobacz także

userName

Przykład
Poniższy przykład z definicji działania help.userFullName zwraca pełną nazwę użytkownika:

function create()

{

  var p_userName := parameters.USER_NAME;

  var r_userFullName := „”;

  var userGuid := userGuid(p_userName);

  if (userGuid <> INVALID_GUID)

    r_userFullName := userFullName(userGuid);

  result.USER_FULL_NAME := r_userFullName;

}

userGuid

Nazwa

userGuid

Opis

userGuid zwraca identyfikator Guid użytkownika.

Podpisy

String userGuid(String user)

Parametry

user to nazwa użytkownika.

Wynik

Identyfikator Guid użytkownika. Jeśli user nie jest prawidłowym użytkownikiem, zwracana jest wartość INVALID_GUID.

Źródła błędów

Brak.

Przykłady

userGuid(„JOB”) zwraca identyfikator Guid użytkownika.

Kontekst

ALL

Uwagi

 

Zobacz także

userName

Przykład
Poniższy przykład z definicji działania help.userGuid zwraca identyfikator Guid użytkownika:

function create()

{

  var p_userName := parameters.USER_NAME;

  var r_userGuid := „”;

  var userGuid := userGuid(p_userName);

  if (userGuid <> INVALID_GUID)

    r_userGuid := cast(String, userGuid);

  result.USER_GUID := r_userGuid;

}

Przykład
Usuwanie nieaktywnych użytkowników

Poniższy przykład z definicji działania help.userDeactivated usuwa wszystkich nieaktywnych użytkowników z listy właścicieli ról workflow:

function create()

{

  var p_workflowRole := parameters.WORKFLOW_ROLE;

  var r_deactivatedUsers := „”;

  var holders := resolveRole(p_workflowRole);

  if (not isNull(holders)) {

    holders := removeDeactivatedUsers(holders);

    for (user : holders) {

      r_deactivatedUsers := r_deactivatedUsers + ” ” + userName(user);

    }

  }

  result.DEACTIVATED_USERS := trim(r_deactivatedUsers);

}

function userDeactivated(p_user as Guid) as Boolean

{

  var r_userDeactivated := false;

  var user := getByPrimaryKey(„CONFIGURATION”, CisObject(com.cisag.sys.configuration.obj.User), p_user);

  if (not isNull(user)) {

    r_userDeactivated := user:deactivated;

  }

  return r_userDeactivated;

}

 

function removeDeactivatedUsers(p_users as Guid[]) as Guid[]

{

  var activatedUsers as Guid[];

  for (user : p_users) {

    if (not userDeactivated(user))

      add(activatedUsers, user);

  }

  return activatedUsers;

}

Przykład
Usuwanie nieinteraktywnych użytkowników

Poniższy przykład z definicji działania help.userInteractive usuwa wszystkich nieinteraktywnych użytkowników z listy właścicieli ról workflow:

const UserType as valueSet(com.cisag.sys.configuration.UserType);

function create()

{

  var p_workflowRole := parameters.WORKFLOW_ROLE;

  var r_nonInteractiveUsers := „”;

  var holders := resolveRole(p_workflowRole);

  if (not isNull(holders)) {

    holders := removeNonInteractiveUsers(holders);

    for (user : holders) {

      r_nonInteractiveUsers := r_nonInteractiveUsers + ” ” + userName(user);

    }

  }

  result.NON_INTERACTIVE_USERS := trim(r_nonInteractiveUsers);

}

function userInteractive(p_user as Guid) as Boolean

{

  var r_userInteractive := false;

  var user := getByPrimaryKey(„CONFIGURATION”, CisObject(com.cisag.sys.configuration.obj.User), p_user);

  if (not isNull(user)) {

    r_userInteractive := user:type = UserType.INTERACTIVE;

  }

  return r_userInteractive;

}

function removeNonInteractiveUsers(p_users as Guid[]) as Guid[]

{

  var interactiveUsers as Guid[];

  for (user : p_users) {

    if (userInteractive(user))

      add(interactiveUsers, user);

  }

  return interactiveUsers;

}

userMailAddress

Nazwa

userMailAddress

Opis

userMailAddress zwraca adres e-mail użytkownika.

Podpisy

String userMailAddress(Guid user)

Parametry

user to identyfikator użytkownika.

Wynik

Adres e-mail użytkownika wprowadzony w aplikacji Panel System. Jeśli dla użytkownika wprowadzono więcej niż jeden adres e-mail, wszystkie adresy e-mail są zwracane z takim samym separatorem (średnikiem) jak w dialogu systemowym. Separator ten jest również akceptowany przez funkcje wysyłania wiadomości e-mail, takie jak setMailRecipientsTo i setMailReplyTo. Jeśli w dialogu systemu nie zapisano adresu e-mail użytkownika, zwracany jest pusty ciąg znaków.

Jeśli user nie jest prawidłowym użytkownikiem, zwracany jest pusty ciąg znaków.

Źródła błędów

Brak.

Przykłady

userMailAddress(userGuid(„JOB”)) zwraca adres e-mail użytkownika.

userMailAddress(parameters.userGuid) zwraca adres e-mail użytkownika, który wywołał zdarzenie typu Jednostka biznesowa lub Działanie użytkownika lub rozpoczął proces bez definicji zdarzenia.

setMailRecipientsTo(userMailAddress(parameters.userGuid)) w definicji działania typu Wiadomość e-mail, wysyła wiadomość e-mail na adres e-mail użytkownika, który wywołał zdarzenie lub rozpoczął proces.

setMailRecipientsCC(userMailAddress(superior(parameters.userGuid)[0])) wysyła kopię wiadomości e-mail do przełożonego użytkownika, który wywołał zdarzenie lub rozpoczął proces.

Kontekst

ALL

Uwagi

Workflow używa adresu e-mail przechowywanego w aplikacji Panel System do wysyłania powiadomień do operatorów i właścicieli procesów. Wiadomość e-mail może zostać wysłana na adres e-mail zapisany w danych podstawowych partnera tylko wtedy, gdy używana jest definicja działania typu Wiadomość e-mail, Węzeł e-mail lub Interaktywny węzeł e-mail, a adres e-mail jest jawnie określony za pomocą funkcji setMailRecipientsTo.

Zobacz także

 
Przykład
Poniższy przykład z definicji działania help.userMailAddress zwraca adres e-mail użytkownika:

function create()

{

  var p_userName := parameters.USER_NAME;

  var r_userMailAddress := „”;

  var userGuid := userGuid(p_userName);

  if (userGuid <> INVALID_GUID)

    r_userMailAddress := userMailAddress(userGuid);

  result.USER_MAIL_ADDRESS := r_userMailAddress;

}

userName

Nazwa

userName

Opis

userName zwraca nazwę użytkownika.

Podpisy

String userName(Guid user)

Parametry

user to identyfikator użytkownika.

Wynik

Nazwa użytkownika z aplikacji Panel System. Jeśli user nie jest prawidłowym użytkownikiem, zwracany jest pusty ciąg znaków.

Źródła błędów

Brak.

Przykłady

userName(userGuid(„JOB”)) zwraca JOB.

userName(parameters.userGuid) zwraca nazwę użytkownika, który wywołał zdarzenie lub rozpoczął proces.

userName(environment.userGuid) zwraca nazwę użytkownika, dla którego przeprowadzana jest kontrola indywidualna.

Kontekst

ALL

Uwagi

 

Zobacz także

userFullName, userGuid

Przykład
Poniższy przykład z definicji działania help.userName określa nazwę użytkownika, który wszedł do partnera klienta:

function create()

{

  var r_userName := „”;

  var company := loadOrganisation(getCustomizingValue(„com.cisag.app.General”):company);

  r_userName := userName(company:updateInfo.createUser);

  result.USER_NAME := r_userName;

}

Polecenia wyzwalania zdarzeń (Workflow events functions)

Zdarzenia workflow mogą być wyzwalane w aktywnej bazie danych lub w bazie danych repozytorium przy użyciu funkcji wyzwalania zdarzeń. Funkcje wyzwalania zdarzeń obejmują

  • fireEvent
  • fireRepositoryEvent
fireEvent

Nazwa

fireEvent

Opis

fireEvent wywołuje ogólne zdarzenie w bieżącej bazie danych.

Podpisy

boolean fireEvent(String name, HashMap parameters)

boolean fireEvent(String database, String name, HashMap parameters)

boolean fireEvent(Number subtype, String name, HashMap parameters)

boolean fireEvent(String database, Number subtype, String name, HashMap parameters)

Parametry

database to nazwa bazy danych podłączonej do systemu, w którym ma zostać wyzwolone zdarzenie ogólne. Jeśli database nie zostanie określone, zdarzenie generyczne zostanie wywołane w bieżącej bazie danych.

subtype to podtyp zdarzenia ogólnego. Jeśli subtype nie jest dozwolonym podtypem, używany jest podtyp 0. Podtyp 0 jest również używany w przypadku wywołania funkcji bez parametru subtype.

name to dowolnie wybierana identyfikacja zdarzenia, której można użyć do rozróżnienia różnych zdarzeń. Jeśli użytkownik tworzy definicję działania, która reaguje na zdarzenie ogólne, może zapytać o nazwę w warunku przejścia, aby sprawdzić znaczenie zdarzenia. Aby zsynchronizować ze sobą dwa procesy, należy wybrać unikalną nazwę, taką jak Guid działania, która wyzwala zdarzenie lub Guid utworzony za pomocą funkcji newGuid. Kolejny krok procesu typu zdarzenie pośrednie czeka, aż wywołane działanie lub proces wyzwoli zdarzenie ogólne, tym razem z przekazanym identyfikatorem Guid (Promise) jako nową nazwą.

parameters to tablica mieszająca, która może zawierać dowolne wartości parametrów dla wywoływanego działania lub procesu.

Wynik

Funkcja fireEvent wywołuje zdarzenie com.cisag.pgm.workflow.GenericOLTPEvent dla działania w bazie danych OLTP oraz zdarzenie com.cisag.pgm.workflow.GenericRepositoryEvent dla działania w bazie danych repozytorium.

Źródła błędów

database musi być prawidłową bazą danych OLTP podłączoną do systemu. Aby wywołać zdarzenie w bazie danych repozytorium, należy użyć funkcji fireRepositoryEvent.

Przykłady

fireEvent(activity:code, hashMap(user:=userName(parameters.userGuid), order:=parameters.object:guid)) wyzwala zdarzenie generyczne w definicji działania z definicją zdarzenia typu Jednostka biznesowa i przekazuje identyfikację działania jako nazwę oraz nazwę wyzwalającego użytkownika, a także klucz główny zmienionego obiektu biznesowego jako parametry.

fireEvent(7, „”, hashMap()) wywołuje zdarzenie ogólne z podtypem 7 i bez identyfikacji i parametrów.

fireEvent(db, 7, „”, hashMap()) wywołuje zdarzenie generyczne o podtypie 7 w bazie danych o nazwie przechowywanej w zmiennej db.

fireEvent(„NotifyByMail”, hashMap(recipient:=process.Initiator, textModule:=”PROCDONE”, process:=process.Code) wyzwala zdarzenie ogólne w celu wysłania wiadomości e-mail do wyzwalacza procesu. Identyfikacja definicji działania jest przekazywana jako nazwa. Wywołana definicja działania wykorzystuje parametry warunku przejścia transition.name = definition:code.

Kontekst

ALL

Uwagi

Można także użyć fireEvent w poszczególnych kontrolach, np. aby wysłać powiadomienie w przypadku określonych konstelacji danych lub rozpocząć proces zatwierdzania w przypadku próby zwolnienia bez autoryzacji.

Jeśli określono podtyp, warunek przejścia jest oceniany tylko wtedy, gdy ten sam podtyp został wybrany w definicji działania. Należy użyć podtypów, aby zmniejszyć liczbę warunków przejścia, które mają zostać ocenione. Jeśli na przykład dziesięć definicji działania jest zarejestrowanych dla zdarzenia ogólnego, ale tylko jedna z nich ma wygenerować działanie, gdy zdarzenie zostanie rozwiązane, wówczas użycie podtypów może zmniejszyć liczbę ocenianych warunków przejścia o 90%.

Zobacz także

fireRepositoryEvent

Przykład
Poniższy przykład z definicji działania help.fireEvent wywołuje zdarzenie generyczne com.cisag.pgm.workflow.GenericOLTPEvent w bieżącej bazie danych.

function create()

{

  var p_message := parameters.MESSAGE;

  if (p_message = „”)

    p_message := „Czy ktoś tam jest?”;

  var params := new(HashMap);

  params.sender := „SETI”; /* Wyszukiwanie przechwytywaczy wyzwalaczy zdarzeń */

  params.message := p_message;

  fireEvent(definition:code, params);

}

Przykład
Ocena zdarzenia ogólnego

Poniższy przykład z definicji działania help.fireEvent.catch opisuje, w jaki sposób definicja działania może przechwycić i ocenić ogólne zdarzenie z poprzedniego przykładu. Nazwa zdarzenia jest sprawdzana w warunku przejścia. Tylko jeśli identyfikacja definicji działania (tutaj: help.fireEvent.catch) zaczyna się od nazwy zdarzenia (tutaj: help.fireEvent), generowane jest działanie.

startsWith(definition:code, parameters.name)

Pozostałe parametry zdarzenia są oceniane w deklaracjach, a temat działania jest formatowany:

function create()

{

  var p_params := parameters.parameters;

  formatSubject(„sender”, cast(String, p_params.sender));

  formatSubject(„message”, cast(String, p_params.message));

}

Przykład
Rozpoczęcie podprocesu

Poniższy przykład z definicji procesu wyzwala zdarzenie generyczne com.cisag.pgm.workflow.GenericOLTPEvent w bieżącej bazie danych w celu uruchomienia podprocesu ApproveGenericRequest. Identyfikacja definicji działania, dla której zdarzenie jest wyzwalane, jest używana jako nazwa zdarzenia. Identyfikacja działania jest również przekazywana jako parametr zdarzenia, dzięki czemu wywołany podproces może użyć identyfikacji jako nazwy zdarzenia podczas zwracania wyników. Ponieważ identyfikacja działania nie jest dostępna w funkcji create(), proces wyższego poziomu wyzwala zdarzenie tylko w funkcji close().

function close(state as Number)

{

  /* Zapisanie kodu działania do przetworzenia (niedostępne podczas tworzenia) */

  process.activityCode := activity:code;

  /* Zbuduj parametr HashMap */

  var params := new(HashMap);

  params.caller := activity:code;

  params.requester := process.Initiator;

  params.beneficiary := process.employee->Partner:number;

  params.superior := process.superior->Partner:number;

  params.resourceType := process.resourceType;

  params.requestedResources := process.requestedResources;

  params.comment := process.comment;

  params.notificationRecipients := list(process.Initiator);

  params.activityWorkDuration := 3600 * 24 * 7;

  params.activityPriority := 5;

  /* Rozpoczęcie podprocesu */

  fireEvent(„ApproveGenericRequest”, params);

}

Po wywołaniu zdarzenie pośrednie w procesie nadrzędnym oczekuje na zwrócenie wyników z procesu podrzędnego przy użyciu zdarzenia generycznego com.cisag.pgm.workflow.GenericOLTPEvent. Warunek przejścia w węźle pośrednim sprawdza, czy zdarzenie używa wcześniej przekazanego parametru caller jako nazwy:

parameters.name = process.activityCode

Podprocesy mają nie tylko tę zaletę, że ogólne kroki procesu, które występują w kilku procesach, można podsumować w celu uproszczenia wdrażania i konserwacji. Podproces może również mieć ustawienia autoryzacji, które różnią się od definicji procesu wyższego poziomu. Oznacza to, że na przykład proces onboardingu dla nowych pracowników może być lepiej chroniony przed nieautoryzowanym dostępem. Działania w działach HR i IT, które często obejmują dane osobowe i poufne, mogą być mapowane jako podprocesy, aby zachować je w tajemnicy przed innymi pracownikami w procesie wdrażania. Aby zwiększyć bezpieczeństwo, oba procesy mogą szyfrować wymieniane dane za pomocą funkcji szyfrowania i odszyfrowywania.

Przykład
Ocena zmiennych procesowych innego procesu

Używając następującej definicji działania JavaScript help.js.getProcessParameter typu Wywołanie funkcji, wywołujący proces wyższego poziomu może ocenić dowolne zmienne procesowe wywołanego procesu podrzędnego.

/* Zwraca wartość zmiennej procesu

 * Parametry:

 * PROCESS: Guid lub kod instancji procesu

 * PARAMETER: nazwa zmiennej procesu

* Wyniki:

 * DATATYPE: typ danych wyniku:

 * 1 = String (użyj result.STRING)

 * 2 = Liczba (użyj result.NUMBER)

 * 3 = Boolean (użyj result.STRING lub result.NUMBER)

 * 4 = Guid, Bajty (użyj result.STRING)

 * 5 = CisObject, CisObjectReference (użyj instancji

  * string in result.STRING)

 * 7 = Lista, (użyj result.STRING)

 * 8 = Znacznik czasu (użyj result.TIMESTAMP)

 * 9 = HashMap (użyj result.STRING)

 * 10 = CisObjectReference (nieużywane)

 * 11 = CisDate (użyj result.TIMESTAMP)

 * 103 = Nieznany

 * STRING: wynik dla typów danych:

 * String, Guid, Bytes, CisObject, CisObjectReference,

 * Lista, HashMap

 * NUMBER: wynik dla typów danych: Number, Boolean

 * TIMESTAMP: wynik dla typów danych: Timestamp, CisDate

 */

 

function create() {

  var p_process = parameters.PROCESS; /* Guid procesu lub kod */

  var p_parameter = parameters.PARAMETER; /* nazwa parametru */

  var env = Java.type(„com.cisag.pgm.appserver.CisEnvironment”).getInstance();

  var om = env.getObjectManager();

  var processGuid = p_process.length() == 32 ? Java.type(„com.cisag.pgm.datatype.Guid”).fromHexString(p_process) : null;

  var Process = Java.type(„com.cisag.sys.workflow.obj.Process”);

  if (processGuid == null) {

    var oProcess = om.getObject(Process.buildByCodeKey(p_process));

    if (oProcess != null)

      processGuid = oProcess.getGuid();

  }

  if (processGuid == null)

    powrót;

  var proc = om.getObject(Process.buildPrimaryKey(processGuid));

  var parserLogic = Java.type(„com.cisag.pgm.util.ParserLogic”).getInstance(10, 1);

  var parserEnvironment = parserLogic.deserialzeEnvironment(proc.getParameters().getBinaryStream());

  var data = parserEnvironment.get(„process”).getHashMap();

  var obj = data.get(p_parameter);

  if (obj != null) {

    result.DATATYPE = obj.getDatatype();

    result.STRING = obj.getString();

    result.TIMESTAMP = obj.getTimestamp();

    result.NUMBER = obj.getNumber();

    if (obj.getDatatype() == 5 || obj.getDatatype() == 10) /* BO lub BO-REFERENCE */

      result.STRING = obj.getCisObject().get_instanceString();

    if (obj.getDatatype() == 3) /* Boolean */

      result.NUMBER = obj.getString() == „true” ? 1 : 0;

  }

}

Przykład
Asynchroniczne podprocesy

Możliwe są również asynchroniczne podprocesy. W funkcji close() węzła startowego, podproces zwraca guid lub identyfikator (tzw. Promise) do procesu nadrzędnego synchronicznie. Oba procesy mogą następnie kontynuować działanie asynchronicznie. Proces nadrzędny sprawdza status procesu podrzędnego. Jeśli proces podrzędny jest ukończony, proces nadrzędny wysyła zapytanie o jego wyniki.

Poniższa definicja działania help.js.getProcessParameter.call zapisana w języku skryptowym systemu stanowi przykład tego, jak można wywołać definicję działania help.js.getProcessParameter zapisaną w JavaScript:

function create()

{

  var p_process := parameters.PROCESS;

  var p_parameter := parameters.PARAMETER;

  var r_datatype := 0;

  var r_string := „”;

  var r_number := 0;

  var r_timestamp := UNDEFINED_DATE;

  var params := new(HashMap);

  params.PROCESS := p_process;

  params.PARAMETER := p_parameter;

  var parameterValue := call(„help.js.getProcessParameter”, params);

  result.DATATYPE := cast(Number, parameterValue.DATATYPE);

  result.STRING := cast(String, parameterValue.STRING);

  result.NUMBER := cast(Number, parameterValue.NUMBER);

  result.TIMESTAMP := cast(Timestamp, parameterValue.TIMESTAMP);

}

fireRepositoryEvent

Nazwa

fireRepositoryEvent

Opis

fireRepositoryEvent wywołuje ogólne zdarzenie w bazie danych repozytorium.

Podpisy

boolean fireRepositoryEvent(String name, HashMap parameters)

boolean fireRepositoryEvent(Number subtype, String name, HashMap parameters)

Parametry

subtype to podtyp zdarzenia ogólnego. Jeśli subtype nie jest dozwolonym podtypem, używany jest podtyp 0. Podtyp 0 jest również używany w przypadku wywołania funkcji bez parametru subtype.

name to dowolnie wybierana identyfikacja zdarzenia, której można użyć do rozróżnienia różnych zdarzeń. Jeśli użytkownik tworzy definicję działania, która reaguje na zdarzenie ogólne, może zapytać o nazwę w warunku przejścia, aby sprawdzić znaczenie zdarzenia.

parameters to tablica hash, która może zawierać dowolne wartości parametrów.

Wynik

Funkcja fireRepositoryEvent wyzwala zdarzenie com.cisag.pgm.workflow.GenericRepositoryEvent w bazie danych repozytorium, gdy działanie występuje zarówno w bazie danych repozytorium, jak i w bazie danych OLTP.

Źródła błędów

Brak.

Przykłady

fireRepositoryEvent(„NotifyTrainer”, hashMap(student:=userName(parameters.userGuid), exercise:=results.EXERCISE, status:=”DONE”, comment:=results.COMMENT) uruchamia ogólne zdarzenie informujące trenera w CEE Academy, że uczestnik szkolenia ukończył ćwiczenie.

fireRepositoryEvent(7, „”, hashMap()) wywołuje zdarzenie generyczne z podtypem 7 i bez identyfikacji i parametrów.

Kontekst

ALL

Uwagi

Jeśli określono podtyp, warunek przejścia jest oceniany tylko wtedy, gdy ten sam podtyp został wybrany w definicji działania. Nalezy użyć podtypów, aby zmniejszyć liczbę warunków przejścia, które mają zostać ocenione. Jeśli na przykład dziesięć definicji działania jest zarejestrowanych dla zdarzenia ogólnego, ale tylko jedna z nich ma wygenerować działanie, gdy zdarzenie zostanie rozwiązane, wówczas użycie podtypów może zmniejszyć liczbę ocenianych warunków przejścia o 90%.

Zobacz także

fireEvent

Przykład
Poniższy przykład z definicji działania help.fireRepositoryEvent wywołuje zdarzenie generyczne com.cisag.pgm.workflow.GenericRepositoryEvent w bazie danych repozytorium:

function create()

{

  var p_message := parameters.MESSAGE;

  if (p_message = „”)

    p_message := „Czy ktoś tam jest?”;

  var params := new(HashMap);

  params.sender := „SETI”; /* Wyszukiwanie przechwytywaczy wyzwalaczy zdarzeń */

  params.message := p_message;

  fireRepositoryEvent(definition:code, params);

}

Funkcje systemowe i konfiguracyjne (System and Configuration functions)

Funkcje systemowe i konfiguracyjne zwracają status systemu i właściwości bazy danych konfiguracji. Funkcje systemowe i konfiguracyjne obejmują:

  • databaseName
  • memoryLevel
  • objectName
  • serverLinkTarget
  • serverName
  • systemName
  • versionString
databaseName

Nazwa

databaseName

Opis

databaseName zwraca nazwę bazy danych.

Podpisy

String databaseName(Guid database)

Parametry

database to identyfikator bazy danych.

Wynik

Nazwa bazy danych w czytelnej formie jako ciąg znaków.

Źródła błędów

Brak.

Przykłady

databaseName(event.database) zwraca nazwę bazy danych, w której zdarzenie zostało wywołane.

Kontekst

ALL

Uwagi

Na przykład, identyfikator bazy danych jest przekazywany w parametrze zdarzenia event.database dla zdarzeń typu Jednostka biznesowa i Zaprogramowane zdarzenie.

Zobacz także

 
Przykład
Poniższy przykład z definicji działania help.databaseName zwraca nazwę bazy danych:

function create()

{

  var p_guid := parameters.GUID;

  var r_databaseName := „”;

  var databaseGuid := cast(Guid, p_guid);

  if (not isNull(databaseGuid))

    r_databaseName := databaseName(databaseGuid);

  result.DATABASE_NAME := r_databaseName;

}

Przykład
Zapytanie o nazwę bazy danych w JavaScript

Poniższy przykład z definicji działania JavaScript help.js.getDatabaseGuid określa identyfikator bazy danych i zwraca jej nazwę:

function create()

{

  var cisEnvironment = Java.type(„com.cisag.pgm.appserver.CisEnvironment”).getInstance();

  result.NAME = functions.databaseName(cisEnvironment.getDatabaseGuid());

}

memoryLevel

Nazwa

memoryLevel

Opis

memoryLevel zwraca bieżący poziom ostrzegawczy pamięci serwera aplikacji.

Podpisy

Number memoryLevel()

Number memoryLevel(Guid svmGuid)

Parametry

svmGuid to identyfikator serwera aplikacji.

Wynik

Bieżący poziom ostrzeżenia pamięci jako liczba całkowita. Możliwe poziomy ostrzeżeń pamięci są zdefiniowane w ValueSet com.cisag.sys.kernel.MemoryLevel:

1.     W porządku

2.     Ostrzeżenie

3.     Niski

4.     Krytyczny

Źródła błędów

Brak

Przykłady

valueSetDescription(„com.cisag.sys.kernel.MemoryLevel”, memoryLevel()) zwraca poziom ostrzeżenia o pamięci bieżącego serwera aplikacji.

Kontekst

ALL

Uwagi

Poziom ostrzeżenia o przechowywaniu jest również wyświetlany w aplikacji Panel System.

Zobacz także

 
Przykład
Poniższy przykład z definicji działania help.memoryLevel zwraca poziom ostrzegawczy pamięci serwera aplikacji.

function create()

{

  var p_svmGuid := parameters.SVM_GUID;

  var r_memoryLevel := „”;

  if (p_svmGuid = „”)

    r_memoryLevel := valueSetDescription(„com.cisag.sys.kernel.MemoryLevel”, memoryLevel());

  else

    r_memoryLevel := valueSetDescription(„com.cisag.sys.kernel.MemoryLevel”, memoryLevel(cast(Guid, p_svmGuid)));

  result.MEMORY_LEVEL := r_memoryLevel;

}

objectName

Nazwa

objectName

Opis

objectName zwraca pełną nazwę techniczną obiektu deweloperskiego.

Podpisy

String objectName(Guid objectGuid)

Parametry

objectGuid to identyfikator obiektu deweloperskiego.

Wynik

Pełna nazwa techniczna obiektu deweloperskiego, w tym jego ścieżka nazwy w postaci ciągu znaków.

Źródła błędów

Brak

Przykłady

objectName(event.Guid) zwraca pełną nazwę techniczną zaprogramowanego zdarzenia lub jednostki biznesowej.

substring(objectName(event.guid), lastIndexOf(objectName(event.guid), „.”) + 1) zwraca nazwę techniczną zaprogramowanego zdarzenia lub jednostki biznesowej bez jej obszaru nazw.

Kontekst

ALL

Uwagi

Dane opisowe wszystkich obiektów deweloperskich są przechowywane w bazie danych repozytorium.

Zobacz także

 
Przykład
Poniższy przykład z definicji działania help.objectName zwraca pełną nazwę techniczną obiektu deweloperskiego:

function create()

{

  var p_guid := parameters.GUID;

  var r_objectName := „”;

  var objectGuid := cast(Guid, p_guid);

  if (not isNull(objectGuid))

    r_objectName := objectName(objectGuid);

  result.OBJECT_NAME := r_objectName;

}

serverLinkTarget

Nazwa

serverLinkTarget

Opis

Zwraca nazwę serwera docelowego dla atrybutów linków.

Podpisy

serverLinkTarget()

serverLinkTarget(Guid user)

Parametry

user to identyfikator użytkownika, dla którego ma zostać określony serwer docelowy. Serwer docelowy może zależeć od użytkownika.

Wynik

Funkcja zwraca nazwę serwera docelowego dla atrybutów linków (links) jako ciąg znaków. Serwer docelowy zależy od serwera aplikacji, na którym wykonywana jest funkcja.

Źródła błędów

Brak.

Przykłady

serverLinkTarget() zwraca nazwę serwera aplikacji, na którym wykonywana jest funkcja.

serverLinkTarget(parameters.userGuid) zwraca nazwę serwera aplikacji, który jest używany dla atrybutów linków dla użytkownika, który wywołał zdarzenie dla definicji działania z definicją zdarzenia typu Jednostka biznesowa lub Działanie użytkownika.

Kontekst

ALL

Uwagi

W systemach z tylko jednym serwerem aplikacji dalsza konfiguracja nie jest konieczna. 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.

Zobacz także

 
Przykład
Poniższy przykład z definicji działania help.serverLinkTarget zwraca nazwę serwera docelowego dla atrybutów linków. Opcjonalnie jako parametr można określić identyfikator użytkownika.

function create()

{

  var p_user := parameters.USER;

  var r_serverLinkTarget := „”;

  var u := userGuid(p_user);

  if (not isNull(u))

    r_serverLinkTarget := serverLinkTarget(u);

  else

    r_serverLinkTarget := serverLinkTarget();

  result.SERVER_LINK_TARGET := r_serverLinkTarget;

}

serverName

Nazwa

serverName

Opis

serverName zwraca nazwę serwera aplikacji.

Podpisy

String serverName(Guid server)

Parametry

server to identyfikator Guid serwera.

Wynik

Nazwa serwera w czytelnej formie jako ciąg znaków.

Źródła błędów

Brak.

Przykłady

serverName(cast(Guid, „01200477BA652A10B51EAD1BAA7C0000”) zwraca ADV600.

Kontekst

ALL

Uwagi

Guid serwera jest wyświetlany w aplikacji Panel System.

Można również użyć funkcji serverLinkTarget, aby określić nazwę serwera aplikacji, na którym działa silnik workflow.

Zobacz także

 

Przykład
Poniższy przykład z definicji działania help.serverName zwraca nazwę serwera aplikacji:

function create()

{

  var p_guid := parameters.GUID;

  var r_serverName := „”;

  var serverGuid := cast(Guid, p_guid);

  if (not isNull(serverGuid))

    r_serverName := serverName(serverGuid);

  result.SERVER_NAME := r_serverName;

}

Przykład
Zapytanie o nazwę serwera w JavaScript

Poniższy przykład z definicji działania help.js.getServerName zapisanej w JavaScript określa nazwę serwera aplikacji:

function create()

{

  var serverInfo = Java.type(„com.cisag.pgm.util.ServerInfo”);

  result.NAME = serverInfo.getSVMName();

}

systemName

Nazwa

systemName

Opis

systemName zwraca nazwę systemu.

Podpisy

String systemName(Guid system)

Parametry

system to identyfikator systemu.

Wynik

Nazwa systemu w czytelnej formie jako ciąg znaków.

Źródła błędów

Brak.

Przykłady

systemName(cast(Guid, „4200C7558F652A1096A3AD1BA8550000”)) zwraca ADV600.

Kontekst

ALL

Uwagi

Identyfikator Guid systemu jest wyświetlany w aplikacji Panel System.

Zobacz także

 
Przykład
Poniższy przykład z definicji działania help.systemName zwraca nazwę systemu:

function create()

{

  var p_guid := parameters.GUID;

  var r_systemName := „”;

  var systemGuid := cast(Guid, p_guid);

  if (not isNull(systemGuid))

    r_systemName := systemName(systemGuid);

  result.SYSTEM_NAME := r_systemName;

}

Przykład
Zapytanie o nazwę systemu w JavaScript

Poniższy przykład z definicji działania help.js.getSystemName utworzonej w JavaScript określa nazwę bieżącego systemu:

function create()

{

  var serverInfo = Java.type(„com.cisag.pgm.util.ServerInfo”);

  result.NAME = serverInfo.getSystemName();

}

Przykład
Prefiks tworzenia zapytań w JavaScript

Poniższy przykład z definicji działania help.js.getSystemDevelopmentPrefix zapisanej w JavaScript określa prefiks rozwoju bieżącego systemu:

function create()

{

  var serverInfo = Java.type(„com.cisag.pgm.util.ServerInfo”);

  result.PREFIX = serverInfo.getSystemDevelopmentPrefix();

}

versionString

Nazwa

versionString

Opis

versionString zwraca wersję obiektu deweloperskiego.

Podpisy

String versionString(Guid versionGuid)

Parametry

versionGuid to identyfikator wersji obiektu deweloperskiego.

Wynik

Wersja obiektu deweloperskiego w czytelnej formie jako ciąg znaków.

Źródła błędów

Brak

Przykłady

versionString(versionGuid) zwraca wersję obiektu deweloperskiego z identyfikatorem wersji versionGuid.

Kontekst

ALL

Uwagi

Dane opisowe wszystkich obiektów deweloperskich są przechowywane w bazie danych repozytorium.

Zobacz także

 
Przykład
Poniższy przykład z definicji działania help.versionString zwraca wersję obiektu deweloperskiego:

function create()

{

  var p_guid := parameters.GUID;

  var r_versionString := „”;

  var versionGuid := cast(Guid, p_guid);

  if (not isNull(versionGuid))

    r_versionString := versionString(versionGuid);

  result.VERSION_STRING := r_versionString;

}

Funkcje wiadomości (Message functions)

Funkcje komunikatów mogą być używane do informowania użytkownika o określonych zdarzeniach lub statusach w aplikacji dialogowej. Dostępne są następujące funkcje komunikatów:

  • popProgramMessagePath
  • pushProgramMessagePath
  • sendMessage
  • setProgramMessageGroup
  • setProgramMessageId

Komunikaty są wyświetlane na pasku stanu i w zakładce Informacje. Możliwe jest wskazanie odniesienia komunikatu do elementu GUI (np. pola wejściowego) poprzez oznaczenie elementu GUI odpowiednim rogiem komunikatu. Kolejka komunikatów, która jest dostarczana przez menedżera komunikatów, służy do zarządzania komunikatami wysyłanymi przez aplikację.

Wiadomość może zawierać identyfikatory, za pomocą których można ją powiązać z określonym polem lub określonym obiektem. Te identyfikatory to:

  • Grupa wiadomości – zazwyczaj jest to obiekt i często odpowiada wierszowi w listach, tabelach lub edytorach pozycji.
  • Ścieżka komunikatu – zazwyczaj jest to kategoria lub widok.
  • Identyfikator wiadomości – zazwyczaj jest to pole.

Komunikat jest dodawany do kolejki komunikatów tylko wtedy, gdy nie zawiera już komunikatu o tej samej klasie komunikatów, numerze komunikatu itp. Umożliwia to na przykład potwierdzanie komunikatów typu ostrzeżenie. Służy to na przykład do potwierdzania komunikatów typu sstrzeżenie. Mogą one zostać potwierdzone przez użytkownika za pomocą pola wyboru i pozostać w kolejce wiadomości. Jeśli ostrzeżenie o tym samym identyfikatorze zostanie wysłane ponownie (tj. niepotwierdzone), nie będzie już uwzględniane w kolejce wiadomości.

Znaki zastępcze mogą być używane do dostosowywania wiadomości lub długiego tekstu. Symbol zastępczy jest reprezentowany przez liczbę w nawiasach klamrowych. Wiadomość może zawierać maksymalnie dziesięć różnych symboli zastępczych.

Podczas korzystania z symboli zastępczych należy upewnić się, że są one przeznaczone wyłącznie do danych takich jak identyfikacja partnera. Rzeczywisty tekst wiadomości jest zapisywany w bazie danych. Gwarantuje to, że teksty komunikatów pozostaną przetłumaczone i będą wyświetlane w języku wybranym przez użytkownika. W związku z tym należy zarejestrować kilka komunikatów, nawet jeśli występują niewielkie odchylenia w tekście komunikatu. Ponieważ dostępna przestrzeń jest ograniczona, tekst komunikatu nie powinien być zbyt długi. Długi tekst jest dostępny do dalszych wyjaśnień lub notatek.

popProgramMessagePath

Nazwa

popProgramMessagePath

Opis

popProgramMessagePath usuwa najnowszą ścieżkę ze ścieżki wiadomości programu.

Podpisy

popProgramMessagePath()

Parametry

Brak.

Wynik

Usuwa najnowszą ścieżkę ze ścieżki wiadomości programu.

Źródła błędów

Brak.

Przykłady

popProgramMessagePath()

Kontekst

ALL

Uwagi

Ścieżka komunikatów programu jest używana podczas ponownego użycia komponentów GUI w aplikacji interaktywnej w celu jednoznacznej identyfikacji elementów GUI komponentów w różnych zastosowaniach. Ścieżka komunikatów programu składa się z kilku elementów analogicznych do stosu.

Więcej informacji na temat komunikatów można znaleźć w Podręczniku programowania.

Zobacz także

pushProgramMessagePath

pushProgramMessagePath

Nazwa

pushProgramMessagePath

Opis

pushProgramMessagePath dodaje nową ścieżkę do ścieżki wiadomości programu.

Podpisy

pushProgramMessagePath(String path)

Parametry

path to ścieżka, która ma zostać dodana do ścieżki komunikatu programu.

Wynik

Dodaje ścieżkę path do ścieżki wiadomości programu.

Źródła błędów

Brak.

Przykłady

pushProgramMessagePath(„PATH”) dodaje ścieżkę PATH do ścieżki komunikatu programu.

Kontekst

ALL

Uwagi

Ścieżka komunikatów programu jest używana podczas ponownego użycia komponentów GUI w aplikacji interaktywnej w celu jednoznacznej identyfikacji elementów GUI komponentów w różnych zastosowaniach. Ścieżka komunikatów programu składa się z kilku elementów analogicznych do zestawu.

Więcej informacji na temat komunikatów można znaleźć w artykule Podręcznik programowania.

Zobacz także

popProgramMessagePath

sendMessage

Nazwa

sendMessage

Opis

sendMessage wysyła wiadomość do kolejki wiadomości.

Podpisy

sendMessage(Unknown path, String message)

sendMessage(Unknown path, String message, String p1)

sendMessage(Unknown path, String message, String p1, String p2)

sendMessage(Unknown path, String message, String p1, String p2, String p3)

sendMessage(Unknown path, String message, String[] parameterList)

Parametry

path to ścieżka dostępu do atrybutu widoku obiektu.

message jest identyfikatorem pojedynczego komunikatu. Jeśli nie ma indywidualnego komunikatu z identyfikatorem message, komunikat jest wysyłany z klasą komunikatu i numerem komunikatu zgodnie z message.

p1, p2 i p3 to maksymalnie trzy parametry, które zastępują wszelkie symbole zastępcze w wiadomości konkretnymi wartościami.

parameterList to lista z dowolną liczbą parametrów dla symboli zastępczych wiadomości.

Wynik

Wyświetla komunikat message.

Jeśli komunikat jest wysyłany w indywidualnej kontroli w funkcjach validate i validatePostcondition lub gdy proces jest uruchamiany ręcznie, komunikat może być wyświetlany na określonym elemencie GUI. Element GUI jest identyfikowany za pomocą następujących właściwości:

  • Ścieżka widoku obiektu (parametr path)
  • Identyfikator komunikatu programu (parametr path lub funkcja setProgrammMessageId)
  • Grupa komunikatów programu (przy użyciu funkcji setProgrammMessageGroup)
  • Ścieżka komunikatu programu (przy użyciu funkcji pushProgrammMessagePath)

Jeśli path ma wartość zero, komunikat jest wysyłany bez odniesienia do elementu GUI.

Jeśli wiadomość zostanie wysłana w ramach działania workflow, zostanie ona zapisana w dzienniku wiadomości odpowiedniej bazy danych.

Źródła błędów

Nieprawidłowy komunikat w indywidualnej kontroli lub definicji działania może oznaczać, że obiekt biznesowy nie może zostać zmieniony lub działanie nie może zostać zakończone.

Przykłady

sendMessage(null, „ERROR”, „Permission denied.”) wysyła indywidualny komunikat WARNING z nieprzetłumaczalnym tekstem jako parametrem i bez wyświetlania komunikatu na atrybucie.

sendMessage(null, „WFL-00024”, list()) wysyła indywidualny komunikat WFL-00024 bez parametrów i bez wyświetlania komunikatu dla atrybutu. Jeśli indywidualny komunikat nie istnieje, wysyłany jest komunikat systemowy com.cisag.sys.workflow.00024.

sendMessage(persistent:number, „SAL-X0001”, list(valueSetDescription(„com.cisag.app.general.OrderStatus”, current:status)) wyświetla indywidualną wiadomość dla atrybutu status” widoku obiektu current pojedynczej kontroli. Opis przyszłego statusu sprawdzanego obiektu biznesowego w bieżącym języku wyświetlania jest przekazywany jako parametr.

sendMessage(results.RESULT_id, „WFL-0001”, list(results.RESULT)) wyświetla indywidualną wiadomość w polu dla wyniku działania o nazwie RESULT w działaniu. Wartość pola jest przekazywana jako parametr.

sendMessage(extension.RESULT_id, „GEN-0001”, extension.RESULT_val) wyświetla indywidualną wiadomość w indywidualnym sprawdzeniu dla dodatkowego pola RESULT jednostki biznesowej.

sendMessage(new(DataView(com.cisag.app.general.partner.model.Partner)):searchString, „GEN-X00001”, list()) wyświetla indywidualną wiadomość dotyczącą wyszukiwanego terminu partnera w działaniu, które jest powiązane z aplikacją com.cisag.app.general.partner.ui.PartnerMaintenance.

sendMessage(new(DataView(com.cisag.app.general.partner.model.Partner))->AddressData:country, „GEN-X00001”, list()) wyświetla indywidualną wiadomość w kraju danych adresowych partnera w działaniu powiązanym z aplikacją com.cisag.app.general.partner.ui.PartnerMaintenance.

Kontekst

ALL

Uwagi

Poszczególne wiadomości można wprowadzać w aplikacji Indywidualne komunikaty.

Więcej informacji na temat komunikatów można znaleźć w artykule Podręcznik programowania.

Zobacz także

 
setProgramMessageGroup

Nazwa

setProgramMessageGroup

Opis

setProgramMessageGroup ustawia grupę komunikatów programu.

Podpisy

setProgramMessageGroup(String group)

Parametry

group to grupa wiadomości programu.

Wynik

Ustawia grupę komunikatów programu na group.

Źródła błędów

Brak.

Przykłady

setProgramMessageGroup(objectGuid) ustawia grupę komunikatów programu w indywidualnej kontroli aplikacji tabeli na Guid obiektu biznesowego przechowywanego w zmiennej objectGuid.

Kontekst

ALL

Uwagi

W przypadku tabel ustawienie odpowiednich narożników dla komunikatów w polach tabeli jest nieco bardziej złożone. Jeśli komunikat ma zostać wysłany dla określonego pola w tabeli, menedżer komunikatów musi zostać poinformowany o polu, dla którego ma zostać wyświetlony narożnik komunikatu. W tym celu używana jest funkcja setProgramMessageGroup(), która przekazuje do menedżera komunikatów ciąg znaków identyfikujący wiersz tabeli. Odpowiedni identyfikator komunikatu jest następnie ustawiany w menedżerze komunikatów za pomocą funkcji setProgramMessageId(). Guid obiektu biznesowego wyświetlanego na przykład w wierszu tabeli, który jest konwertowany na ciąg znaków, jest odpowiedni do utworzenia unikalnego ciągu znaków dla funkcji setProgramMessageGroup().

Więcej informacji na temat komunikatów można znaleźć w artykule Podręcznik programowania.

Zobacz także

setProgramMessageId

setProgramMessageId

Nazwa

setProgramMessageId

Opis

setProgramMessageId ustawia identyfikator komunikatu programu.

Podpisy

setProgramMessageId(String id)

Parametry

id to identyfikator komunikatu programu.

Wynik

Ustawia identyfikator komunikatu programu na id.

Źródła błędów

Brak.

Przykłady

setProgramMessageId(„CODE”) ustawia identyfikator komunikatu programu na CODE.

Kontekst

ALL

Uwagi

W przypadku tabel ustawienie odpowiednich narożników dla komunikatów w polach tabeli jest nieco bardziej złożone. Jeśli komunikat ma zostać wysłany dla określonego pola w tabeli, menedżer komunikatów musi zostać poinformowany o polu, dla którego ma zostać wyświetlony narożnik komunikatu. Aby to zrobić, funkcja setProgramMessageGroup() jest używana do przekazania łańcucha znaków identyfikującego wiersz do menedżera komunikatów. Odpowiedni identyfikator komunikatu jest następnie ustawiany w menedżerze komunikatów za pomocą funkcji setProgramMessageId().

Identyfikatory komunikatów są rejestrowane w przykładowych polach GUI tabeli. Pola w kolumnie są kopiami pola szablonu GUI przypisanego do kolumny. Oznacza to, że odpowiedni identyfikator komunikatu jest również przypisany do tych pól GUI.

Więcej informacji na temat komunikatów można znaleźć w artykule Podręcznik programowania.

Zobacz także

setProgramMessageGroup

Funkcje dla wartości zerowych (Null functions)

Funkcje dla wartości null mogą być używane do sprawdzania, czy wyrażenie lub zmienna ma wartość null. Funkcje dla wartości null obejmują:

  • first
  • isNull
first

Nazwa

first

Opis

first zwraca wartość pierwszego parametru, który nie jest zerem.

Podpisy

Unknown first(Unknown p1, Unknown p2,…,Unknown pN)

Parametry

p1, p2,…, p3 to wyrażenia, które mają być sprawdzane pod kątem wartości zero.

Wynik

Funkcja zwraca wynik pierwszego wyrażenia, które nie jest null.

Źródła błędów

Jeśli wszystkie parametry mają wartość null, zwracana jest wartość null.

Przykłady

first(null, 1) zwraca 1 z typem danych Unknown.

cast(Number, first(null, 1)) zwraca liczbę 1.

first(parameters.object:updateInfo.updateUser, parameters.object:updateInfo.createUser) zwraca użytkownika, który ostatnio zmienił odwołany obiekt biznesowy. Jeśli obiekt biznesowy nigdy nie został zmieniony, zwracany jest jego twórca.

Kontekst

ALL

Uwagi

Wartość zero odpowiada wartości niezdefiniowanej. Wartość może być niezdefiniowana, na przykład, jeśli w funkcji wystąpił błąd. Prawie wszystkie funkcje zwracają null jako wynik, jeśli jednym z parametrów wejściowych jest null. Często jednak konieczna jest oddzielna obsługa stanów błędów. Z tego powodu funkcje specjalne first i isNull mogą być również używane do oceny wartości null.

Ponieważ wynik funkcji first jest typu danych Unknown, zwykle trzeba przekonwertować go na inny typ danych za pomocą funkcji cast, zanim będzie można go użyć.

Zobacz także

isNull

Przykład
Poniższy przykład z definicji działania help.isNull określa pracownika odpowiedzialnego za partnera. Jeśli żaden odpowiedzialny pracownik nie został zdefiniowany dla partnera, użytkownik, który ostatnio zmienił partnera, jest uważany za odpowiedzialnego. Jeśli partner nigdy nie został zmieniony, osoba, która utworzyła partnera, jest uważana za odpowiedzialną.

function create()

{

  var p_partner := loadPartner(parameters.PARTNER);

  var r_responsible as Unknown;

  if (not isNull(p_partner))

    r_responsible :=

      first(loadResponsibleOfPartner(p_partner:guid):number,

            userName(p_partner:updateInfo.updateUser),

            userName(p_partner:updateInfo.createUser));

  result.IS_NULL := isNull(r_responsible);

  result.VALUE := cast(String, r_responsible);

}

Funkcji first należy używać na przykład w następujących przypadkach:

  • Jeśli funkcja języka skryptowego systemu może zwracać wartość zero, tak jak w przypadku funkcji loadResponsibleOfPartner.
  • Jeśli istnieje wartość zastępcza dla wyrażenia, które może przyjąć wartość zero, np. dla atrybutów updateUser i updateInfo.createUser obiektu biznesowego.
Uwaga
Aby określić czas ostatniej zmiany obiektu biznesowego, można użyć max(p:updateInfo.updateTime, p:updateInfo.createTime), ponieważ UNDEFINED_DATE jest mniejsza niż wszystkie inne czasy.
  • Aby ustawić wartości domyślne dla opcjonalnych danych wprowadzanych przez użytkownika w wynikach działania.
isNull

Nazwa

isNull

Opis

isNull sprawdza, czy wartość jest null.

Podpisy

Boolean isNull(Unknown p)

Parametry

p to wyrażenie, które może mieć wartość zero.

Wynik

true, jeśli p ma wartość zero, w przeciwnym razie false.

Źródła błędów

Brak

Przykłady

isNull(null) zwraca wartość true.

isNull(3) zwraca wartość false.

isNull(loadResponsibleOfPartner(parameters.object:guid)) zwraca true, jeśli odpowiedzialny pracownik jest przechowywany dla partnera, do którego się odwołuje, w przeciwnym razie false.

Kontekst

ALL

Uwagi

Funkcji isNull należy używać na przykład w następujących przypadkach:

·       Jeśli funkcja języka skryptowego systemu może zwracać wartość zero, tak jak w przypadku funkcji loadPartner.

·       Jeśli atrybut obiektu biznesowego może mieć wartość zero, np. ponieważ specyfikacja jest opcjonalna, np. atrybut osoby odpowiedzialnej zamówienia sprzedaży lub zamówienia.

Uwaga
Jeśli Guid nie może mieć wartości zero, ale nadal jest niezdefiniowany, używana jest wartość ZERO_GUID. Dzieje się tak na przykład, gdy Guid jest częścią klucza głównego.

Zobacz także

first

Przykład
Poniższy przykład z definicji działania help.isNull sprawdza, czy partner o parametrach parameters.PARTNER istnieje.

function create()

{

  var p_partner := loadPartner(parameters.PARTNER);

  var r_value := isNull(p_partner);

  result.VALUE := r_value;

}

Inne funkcje (Miscellaneous functions)

Pozostałe funkcje dotyczą przede wszystkim elementów języka skryptowego systemu i wykonywania skryptów. Pozostałe funkcje obejmują

  • call
  • cast
  • echo
  • hashMap
  • import
  • if
  • load
  • sendMail
  • new
call

Nazwa

call

Opis

call wywołuje definicję działania typu Wywołanie funkcji.

Podpisy

HashMap call(String activityDefinition, HashMap parameters)

Parametry

activityDefinition to nazwa definicji działania typu Wywołanie funkcji

parameters to tablica skrótów z wpisem dla każdego parametru definicji działania. Parametry są posortowane alfabetycznie.

Wynik

HashMap z wpisem dla każdego parametru zwrotnego wywołanej definicji działania.

Źródła błędów

Podczas wywołania, wartość musi być przypisana do każdego parametru wywoływanej definicji działania.

Przykłady

cast(String, call(„help.encrypt”, hashMap(PLAIN_TEXT:=”Hello world”, KEY:=””)).VALUE) szyfruje tekst Hello world przy użyciu standardowego klucza.

cast(Number, call(„convertToFahrenheit”, hashMap(CELSIUS:=100)).FAHRENHEIT) wywołuje definicję działania z parametrem o wartości 100 i konwertuje wynik typu danych Unknown na liczbę.

@convertToFahrenheit(CELSIUS:=100).FAHRENHEIT jest alternatywną składnią dla wywołania w poprzednim przykładzie.

call(„getTopTenItems”, hashMap(CUSTOMER:=loadPartner(„10010”):number)) zwraca HashMap z numerami artykułów dziesięciu najczęściej kupowanych artykułów od klienta 10010.

Kontekst

ALL

Uwagi

Maksymalna głębokość rekurencji jest ograniczona. Więcej informacji można znaleźć w rozdziale Ograniczanie złożoności wyrażeń dokumentu Język skryptowy systemu.

Zobacz także

Więcej informacji na temat alternatywnej składni z @ można znaleźć w rozdziale Wywoływanie definicji działań dokumentu pomocy Język skryptowy systemu.

Przykład
Poniższy przykład z definicji działania help.call wywołuje definicję działania help.encrypt w celu zaszyfrowania tekstu. Definicja działania help.decrypt jest następnie wywoływana w celu ponownego odszyfrowania zaszyfrowanego tekstu.

function create()

{

  var p_plainText := parameters.PLAIN_TEXT;

  var key := cast(String, newGuid());

  var params as HashMap;

  params[„PLAIN_TEXT”] := p_plainText;

  params[„KEY”] := key;

  var encryptedText := cast(String, call(„help.encrypt”, params).VALUE);

  params := new(HashMap);

  params[„ENCRYPTED_TEXT”] := cast(String, encryptedText);

  params[„KEY”] := key;

  var decryptedText := cast(String, call(„help.decrypt”, params).VALUE);

  result.DECRYPTED_TEXT := decryptedText;

}

cast

Nazwa

cast

Opis

cast konwertuje wyrażenie na inny typ danych.

Podpisy

String cast(<datatype>, Unknown p)

String[] cast(<datatype>, Unknown p)

Number cast(<datatype>, Unknown p)

itp.

Parametry

p to wyrażenie, które ma zostać przekonwertowane na inny typ danych.

Wynik

Wyrażenie jest konwertowane na typ danych <datatype>.

Źródła błędów

Nie wszystkie typy danych mogą być konwertowane na siebie nawzajem. W takim przypadku wystąpi błąd składniowy.

Zasadniczo wszystkie typy danych można przekonwertować na typ danych Unknown. Odwrotna ścieżka od Unknown do dowolnego typu danych jest również możliwa.

Następujące typy danych mogą być konwertowane na ciąg znaków: Boolean, Bytes, CisDate, Guid, Number, Timestamp.

Ponadto ciąg znaków można przekonwertować na identyfikator Guid. Obiekt CisObject można również przekonwertować na CisObjectReference i odwrotnie.

Następujące konwersje nie są możliwe: Timestamp to Number, Boolean to and from Number, CisDate to Timestamp.

Przykłady

cast(String, ZERO_GUID) zwraca ciąg znaków z 32 zerami.

cast(Guid, cast(String, ZERO_GUID)) ponownie daje wynik ZERO_GUID.

Kontekst

ALL

Uwagi

Funkcji cast można użyć na przykład w następujących przypadkach:

  • Jeśli wyrażenie lub funkcja zwraca typ danych Unknown jak w przypadku funkcji first lub if.
  • Do oceny parametrów przekazywanych przez zaprogramowane zdarzenie com.cisag.pgm.workflow.GenericOLTPEvent.
  • Podczas wywoływania definicji działania typu Wywołanie funkcji, która zwraca wartość typu danych innego niż String, Number lub Timestamp.
  • Ocena wyników zlecenia przetwarzania w węźle usługi.

Funkcja toTimestamp jest dostępna do konwersji CisDate na Timestamp.

Konwersja list nie jest sprawdzana składniowo.

Zobacz także

guidToString, toChartList, toTimestamp

Przykład
Poniższy przykład z definicji działania help.cast konwertuje CisDate i czas na ciągi znaków:

function create()

{

  var p_today := today();

  var p_timestamp := now();

  var r_cisDateToString := cast(String, p_today);

  var r_timestampToString := cast(String, p_timestamp);

  result.VALUE_CISDATE := r_cisDateToString;

  result.VALUE_TIMESTAMP := r_timestampToString;

}

echo

Nazwa

echo

Opis

echo wyświetla swój parametr na konsoli powłoki narzędziowej i zwraca wartość true.

Podpisy

Boolean echo(Unknown expression)

Parametry

expression to termin lub wyrażenie.

Wynik

Funkcja echo wyświetla wartość expression na konsoli powłoki narzędzi. Funkcja ta może być używana na przykład do monitorowania warunków w definicjach działania. Zwracana wartość jest zawsze prawdziwa, nawet jeśli parametr ma wartość null.

Źródła błędów

 

Przykłady

echo(„A”) wyświetla ECHO: A na konsoli.

echo(list(„A”, „B”, „C”, 1, 2, 3)) wyświetla ECHO: [[S=A], [S=B], [S=C], [N=1], [N=2], [N=3]] na konsoli.

echo(hashMap(A:=1, B:=null, C:=day(today()), D:=new(Unknown[3])))) wypisuje ECHO: {A=[N=1], B=[103=null], C=[N=13], D=[L=[[103=null], [103=null], [103=null]]} na konsoli. Wartość klucza 103 oznacza typ danych Unknown.

echo(loadPartner(„10010”)) wyświetla ECHO: Partner[10010] na konsoli.

echo(definition:name) wyświetla nazwę definicji działania na konsoli.

echo(activity:code) wyświetla identyfikator (numer) działania na konsoli.

echo(activity->Process:code) i echo(process.Code) wyświetlają identyfikator (numer) procesu na konsoli.

echo(„parameters.object:status=” + parameters.object:status) wyświetla na konsoli wartość atrybutu status obiektu biznesowego, do którego odwołuje się wyrażenie parameters.object. W warunku wyrażenie to ma wartość true.

echo(„Activity definition ” + definition:code + ” evaluated event ” + valueSetName(EventType, event.type) + ” with subtype ” + valueSetName(ObjectChangeType, event.subtype) + ” for ” + objectName(event.guid) + ” ” + parameters.object:number + ” triggered by user ” + userName (parameters.userGuid) + ” in database ” + databaseName(event.database)) + „.” w warunku przejścia definicji działania z definicją zdarzenia typu Jednostka biznesowa powoduje wyświetlenie komunikatu ECHO: Activity definition exampleEcho|Start evaluated event TRANSACTION with subtype UPDATE for com.cisag.app.general.obj.Partner 10010 triggered by user JOB in database ADV60010.” w konsoli.

Kontekst

ALL

Uwagi

Dane wyjściowe są również zapisywane w dzienniku serwera aplikacji, na którym wykonywana jest funkcja echo. Dane wyjściowe w warunku przejścia są zapisywane w dzienniku serwera aplikacji, który przetwarza zdarzenie. Dane wyjściowe w warunku wstępnym są zapisywane w dzienniku serwera aplikacji, na którym działa silnik workflow lub harmonogram. Zazwyczaj jest to serwer komunikatów.

Zobacz także

 
Przykład
Poniższy przykład z definicji działania help.echo wyświetla tekst na konsoli powłoki narzędziowej:

function create()

{

  echo(parameters.TEXT);

}

hashMap

Nazwa

hashMap

Opis

hashMap tworzy tablicę i zwraca ją.

Podpisy

hashMap(key1:=value1, key2:=value2,…,keyN:=valueN)

Parametry

value1, value2,…, valueN to terminy określające wartości kluczy key1, key2,…, keyN generowanej tablicy. Wszystkie parametry są opcjonalne.

Wynik

Tablica hash z określonymi parami klucz-wartość.

Źródła błędów

Brak.

Przykłady

hashMap() zwraca pustą tablicę.

hashMap(one:=1, two:=2, three:=3) zwraca tablicę hash {one=[N=1], two=[N=2], three=[N=3]}.

Kontekst

ALL

Uwagi

 

Zobacz także

new

Przykład
Poniższy przykład z definicji działania help.hashMap wyświetla tablicę hash {one=[N=1], two=[N=2], three=[N=3]} na konsoli powłoki narzędziowej:

function create()

{

  var r_hashMap := hashMap(one:=1, two:=2, three:=3);

  echo(r_hashMap);

}

import

Nazwa

import

Opis

import importuje obiekt skryptu lub bibliotekę do deklaracji wprowadzonej w języku skryptowym systemu.

Podpisy

import systemScript

Parametry

systemScript to techniczna nazwa obiektu deweloperskiego typu Script lub nazwa biblioteki zarejestrowanej w bazie danych OLTP.

Wynik

Jeśli określony obiekt skryptu lub biblioteka istnieją, są one zawarte w deklaracji. Zmienne, stałe, klasy i funkcje zawarte w obiekcie skryptu lub bibliotece są dostępne w deklaracjach.

Źródła błędów

Polecenie import musi znajdować się na pierwszym miejscu w deklaracjach.

Zarówno zintegrowany obiekt skryptu lub biblioteka, jak i deklaracje muszą być wprowadzone w tym samym języku skryptowym. Ponieważ obiekt skryptu lub biblioteka są zintegrowane z deklaracją tekstowo, obiekt skryptu lub biblioteka nie mogą być sprzeczne z deklaracją. Może to mieć miejsce na przykład wtedy, gdy zarówno obiekt skryptu, jak i deklaracja zawierają funkcję o tej samej nazwie.

Przykłady

import com.pt.app.HelloWorld importuje obiekt skryptu o tej samej nazwie utworzony w produkcyjnym systemie testowym w języku skryptowym systemu.

import help.stringUtilityFunctions importuje bibliotekę o tej samej nazwie.

Kontekst

ALL

Uwagi

Funkcja import jest dostępna tylko w języku skryptowym systemu. Obiekty skryptów wprowadza się w aplikacji Obiekty deweloperskie. Biblioteki są wprowadzane w aplikacji o tej samej nazwie. Jeśli istnieje zarówno obiekt skryptu, jak i biblioteka o określonej nazwie, biblioteka jest importowana jako pierwsza.

Zarówno obiekt skryptu, jak i biblioteka są dostępne we wszystkich bazach danych systemu. Jako tzw. obiekt rozwojowy systemu produkcyjnego, obiekt skryptu może być transportowany z produkcyjnego systemu testowego do systemu produkcyjnego za pomocą aplikacji Lista: Obiekty deweloperskie systemu produkcyjnego. Jest to jeden z powodów, dla których zaleca się korzystanie z obiektów skryptów.

Zobacz także

load

Przykład
Poniższy przykład z definicji działania help.import importuje deklaracje z biblioteki help.stringUtilityFunctions.

import help.stringUtilityFunctions;

function create()

{

  var p_text := parameters.TEXT;

  var p_separator := parameters.SEPARATOR;

  var r_wordList := splitString(p_text, p_separator);

  result.SPLIT_TEXT := r_wordList;

  result.JOINED_TEXT := joinString(r_wordList, p_separator);

}

Dwie funkcje split i join muszą być zadeklarowane w bibliotece help.stringUtilityFunctions w języku skryptowym systemu, na przykład w następujący sposób:

function split(p_text as String, p_separator as String) as String[]

{

  if (p_separator = „”)

    p_separator := ” „;

  var increment := length(p_separator);

  var sep as String;

  var word as String;

  var r_wordList as String[];

  var i := 0;

  var startPos := 0;

  while (i + increment – 1 < length(p_text)) {

    sep := substring(p_text, i, i + increment);

    if (sep = p_separator) {

      word := trim(substring(p_text, startPos, i));

      i := i + przyrost;

      startPos := i;

      if (word <> „” and word <> p_separator)

        add(r_wordList, word);

    } else {

      i := i + 1;

    }

  }

  word := substring(p_text, startPos);

  if (word <> „” and word <> p_separator)

    add(r_wordList, word);

  return r_wordList;

}

function join(p_textList as String[], p_separator as String) as String

{

  var r_text as String;

  for (word as String : p_textList)

    r_text := r_text + p_separator + word;

  if (r_text <> „”)

    r_text := substring(r_text, length(p_separator));

  return r_text;

}

if

Nazwa

if

Opis

if warunkowo ocenia jeden z dwóch wydruków.

Podpisy

Unknown if(Boolean condition, Unknown a, Unknown b)

Parametry

condition jest warunkiem typu danych Boolean.

a to wyrażenie, którego wartość jest zwracana, jeśli warunek condition jest prawdziwy.

b to wyrażenie, którego wartość jest zwracana, jeśli warunek condition jest fałszywy.

Wynik

Jeśli condition ma wartość true, obliczane jest wyrażenie a i zwracana jest jego wartość. Jeśli condition ma wartość false, obliczane jest wyrażenie b i zwracana jest jego wartość.

Źródła błędów

Brak

Przykłady

if(a > b, a, b)) zwraca większą z liczb a i b jako Unknown.

cast(Number, if(a > b, a, b)) zwraca większą z liczb a i b jako liczbę.

if(null, 1, 2) zwraca wartość null.

if(true, i, i / 0) zawsze zwraca i jako Unknown. Ponieważ true jest zawsze prawdziwe, i / 0 nigdy nie jest obliczane, a wyrażenie nie powoduje błędu wykonania.

Kontekst

ALL

Uwagi

Funkcji if można użyć do mapowania warunku w polu wyrażenia (np. w warunku przejścia lub w wyrażeniu dla operatorow definicji działań).

Ponieważ wynik funkcji if jest typu danych Unknown, zwykle trzeba przekonwertować go na inny typ danych za pomocą funkcji cast, zanim będzie można go użyć.

Zobacz także

Więcej informacji na temat poleceń warunkowych można znaleźć w artykule Język skryptowy systemu.

Przykład
Poniższy przykład pochodzi z definicji działania help.if.

function create()

{

  var p_number1 := parameters.NUMBER1;

  var p_number2 := parameters.NUMBER2;

  var r_comparator := cast(String,

    if(p_liczba1 > p_liczba2,”>”,

      if(p_liczba1 < p_liczba2, „<„, „=”));

  result.VALUE :=

    cast(String, p_liczba1) + r_comparator + cast(String, p_liczba2);

}

load

Nazwa

load

Opis

load integruje obiekt skryptu z deklaracją wprowadzoną w JavaScript.

Podpisy

load (scriptObject)

Parametry

scriptObject to techniczna nazwa obiektu deweloperskiego typu Script.

Wynik

Jeśli określony obiekt skryptu istnieje, jest on uwzględniany w deklaracji. Zmienne, stałe, klasy i funkcje zawarte w obiekcie skryptu są dostępne w deklaracjach.

Źródła błędów

Zarówno zintegrowany obiekt skryptu, jak i deklaracje muszą być wprowadzone w tym samym języku skryptowym. Ponieważ obiekt skryptu jest zintegrowany z deklaracją tekstowo, obiekt skryptu nie może być sprzeczny z deklaracją. Może to mieć miejsce na przykład wtedy, gdy zarówno obiekt skryptu, jak i deklaracja zawierają funkcję o tej samej nazwie.

Przykłady

load (com.pt.app.HelloWorld) importuje obiekt skryptu o tej samej nazwie utworzony w produkcyjnym systemie testowym w JavaScript.

Kontekst

ALL

Uwagi

Funkcja load jest dostępna tylko w JavaScript, więc obiekt skryptu zintegrowany z funkcją load musi być również wprowadzony w JavaScript. Obiekty skryptów tworzy się w aplikacji Obiekty deweloperskie.

Obiekt skryptu jest dostępny we wszystkich bazach danych systemu. Jako tak zwany obiekt rozwojowy systemu produkcyjnego, obiekt skryptu może być transportowany z produkcyjnego systemu testowego do systemu produkcyjnego za pomocą aplikacji Lista: Obiekty deweloperskie systemu produkcyjnego. Jest to jeden z powodów, dla których zaleca się korzystanie z obiektów skryptów.

Zobacz także

import

Przykład
Poniższy przykład z definicji działania help.load zapisanej w JavaScript otwiera obiekt skryptu com.pt.app.HelloWorld zapisany w JavaScript.

load(com.pt.app.HelloWorld);

function create()

{

  var r_hello = hello();

  result.VALUE = r_hello;

}

Funkcja „hello” musi być zadeklarowana w obiekcie skryptu o nazwie „com.pt.app.HelloWorld” w JavaScript, na przykład w następujący sposób:

function hello()

{

  return „Hello world!”;

}

sendMail

Nazwa

sendMail

Opis

sendMail wysyła wiadomość e-mail do jednego lub więcej odbiorców.

Podpisy

Boolean sendMail(String recipientTo, String subject, String descriptionHtml)

Boolean sendMail(Guid recipientToUserGuid, String subject, String descriptionHtml)

Boolean sendMail(Guid[] recipientToUserGuids, String subject, String descriptionHtml)

Parametry

recipientTo to adres e-mail odbiorcy. Jeśli wiadomość e-mail ma wielu odbiorców, należy oddzielić każdy adres e-mail przecinkiem.

subject to temat wiadomości e-mail.

descriptionHtml to opis wiadomości e-mail zakodowany jako ciąg znaków HTML.

recipientToUserGuid to identyfikator użytkownika odbiorcy.

recipientToUserGuids to lista identyfikatorów użytkowników odbiorcy.

Wynik

Wysyła wiadomość e-mail do odbiorcy (odbiorców). Nadawcą jest nadawca zdefiniowany w funkcji konfiguracji Ustawienia użytkownika dla systemu.

Źródła błędów

Błędy mogą być spowodowane między innymi nieautoryzowanymi adresami e-mail lub niepełną lub nieprawidłową konfiguracją funkcji e-mail.

Przykłady

sendMail(parameters.userGuid, „Test”, „<em>Hello World!</em>”) wysyła wiadomość e-mail do użytkownika, który wywołał zdarzenie.

Kontekst

ALL

Uwagi

Dla lepszej dokumentacji i identyfikowalności zaleca się wysyłanie wiadomości e-mail za pomocą węzłów e-mail.

Zobacz także

Więcej informacji na temat funkcji dla węzłów e-mail można znaleźć w artykule Język skryptowy systemu: Funkcje workflow.

Przykład
Poniższy przykład z definicji dzialania help.sendMail wysyła wiadomość e-mail do użytkownika w systemie.

function create()

{

  var p_user := parameters.USER;

  var p_subject := parameters.SUBJECT;

  var p_description := parameters.DESCRIPTION;

  var r_sendMail := sendMail(userMailAddress(userGuid(p_user)), p_subject, toHtml(p_description));

  result.SEND_MAIL := r_sendMail;

}

new

Nazwa

new

Opis

new tworzy nową instancję typu danych.

Podpisy

new(Unknown type)

new(Unknown listType, Number size)

Parametry

type to typ danych nowej instancji.

size to rozmiar listy.

Wynik

Tworzona jest nowa instancja z określonym typem danych.

Jeśli typem danych jest lista, funkcja new ma rozszerzoną funkcjonalność. W przypadku list o nieokreślonej długości można określić długość n dla new. Jeśli typ listy ma długość n lub długość n jest określona, tworzona jest lista z n pustymi elementami. Jeśli typ danych jest klasą, tworzona jest nowa instancja tej klasy.

Wszystkie atrybuty nowej instancji są wypełniane wartościami domyślnymi.

Źródła błędów

Brak

Przykłady

new(HashMap) zwraca nową instancję typu danych HashMap.

new(Number[]) zwraca nową pustą listę typu danych Number[].

new(Number[10]) zwraca nową listę typu danych Number[] z 10 elementami typu danych elementu Number z wartością domyślną 0.

new(Number[], index) zwraca nową listę typu danych Number[] z elementami typu danych elementu Number określonymi w index.

new(Number[index]) powoduje błąd składni.

Kontekst

ALL

Uwagi

 

Zobacz także

hashMap, newGuid

Przykład
Poniższy przykład pochodzi z definicji działania help.new.

function create()

{

  var p_size := parameters.SIZE;

  var r_stringArray := new(String[], max(min(p_size, 10), 0));

  /* alternatywny zapis: new(String[10]) */

  result.VALUE := r_stringArray;

  result.VALUE := new(Number[]);

}

Czy ten artykuł był pomocny?