Spójny kontekst danych podczas wykonywania reguł na sprawach i tabelach
Zachowanie opisane w artykule jest dostępne od buildów 251231.107, 260331.67 i 260630.45.
Po co istnieje spójny kontekst danych
Gdy reguła kopiuje tabelę i od razu przetwarza jej wiersze, kolejne instrukcje muszą pracować
na właściwej sprawie. Jawny kontekst pozwala sekwencji forcase() → CopyTableData() →
foreachrow() korzystać ze skopiowanych danych w tym samym przebiegu.
Jak to działa
Podczas wykonywania reguły AMODIT utrzymuje roboczy stan bieżącej sprawy. System może korzystać z pamięci podręcznej, ale dla opisanej sekwencji najważniejszy jest kontrakt: po poprawnym skopiowaniu danych dalsza pętla pracująca w kontekście sprawy docelowej widzi skopiowane wiersze.
runassystem() wykonuje blok z uprawnieniami użytkownika systemowego. Nie wybiera innej sprawy
ani tabeli. Do jawnego wskazania sprawy służy forcase(), który ustawia ją jako bieżącą na czas
swojego bloku, a następnie przywraca wcześniejszy kontekst.
CopyTableData() pobiera tabelę źródłową z bieżącej sprawy i zapisuje dane do sprawy wskazanej
przez targetCaseId. Ten argument nie wybiera sprawy dla instrukcji zapisanych po wywołaniu.
foreachrow() rozpoczyna wyszukiwanie tabeli od bieżącej sprawy i ustawia kolejno jej wiersze
jako bieżące. Jeśli nie znajdzie tam tabeli, może wyszukać ją również w sprawie głównej bieżącego
kontekstu.
Dlatego dalsze przetwarzanie skopiowanych wierszy powinno odbywać się w kontekście sprawy zawierającej tabelę docelową.
Kluczowe rozróżnienia
- Uprawnienia a kontekst danych —
runassystem()zmienia uprawnienia wykonania, natomiastforcase()wybiera sprawę, na której działa blok. - Sprawa docelowa kopiowania a bieżąca sprawa —
targetCaseIdwskazuje celCopyTableData(), ale nie zmienia automatycznie sprawy używanej przez późniejsze instrukcje. - Bieżąca sprawa a bieżący wiersz —
forcase()ustawia sprawę, aforeachrow()ustawia kolejne wiersze jej tabeli. - Kopiowanie a dalsze przetwarzanie —
CopyTableData()przenosi dane, natomiast operacje wykonywane na skopiowanych wierszach wymagają właściwego kontekstu dlaforeachrow().
Przykłady
Źródło w innej sprawie, cel w bieżącej sprawie
Identyfikator bieżącej sprawy trzeba zachować przed przejściem do sprawy źródłowej. Po zakończeniu
forcase() reguła wraca do sprawy docelowej i może przejść po skopiowanych wierszach.
runassystem()
{
targetCaseId = [CaseId];
copyResult = "Kopiowanie nie zostało wykonane";
forcase([Sprawa źródłowa])
{
copyResult = CopyTableData(
"Pozycje źródłowe",
targetCaseId,
"Pozycje docelowe",
true
);
}
if (copyResult == "")
{
foreachrow("Pozycje docelowe")
{
[Status] = "Do weryfikacji";
}
}
}
Cel w innej sprawie
Jeżeli tabela docelowa znajduje się w innej sprawie, dalszą pętlę należy wykonać w jawnym
forcase() tej sprawy.
runassystem()
{
targetCaseId = [Sprawa docelowa];
copyResult = CopyTableData(
"Pozycje źródłowe",
targetCaseId,
"Pozycje docelowe",
true
);
if (copyResult == "")
{
forcase(targetCaseId)
{
foreachrow("Pozycje docelowe")
{
[Status] = "Do weryfikacji";
}
}
}
}
Pusty wynik CopyTableData() potwierdza poprawne kopiowanie. Każdy niepusty wynik należy obsłużyć
zgodnie z procesem i nie wykonywać operacji zależnych od poprawnie skopiowanych danych.
W obu przykładach runassystem() jest potrzebne tylko wtedy, gdy bieżący użytkownik nie ma
uprawnień wymaganych do wykonania operacji.
Kiedy stosować, kiedy nie
Stosuj, gdy:
- reguła kopiuje dane między sprawami i od razu przetwarza tabelę docelową;
- kolejne operacje mają działać na sprawie innej niż ta, od której rozpoczęto regułę;
- operacja wymaga uprawnień użytkownika systemowego i dalsze przetwarzanie jest uzależnione od potwierdzonego sukcesu kopiowania.
Nie stosuj, gdy:
runassystem()ma jedynie zastąpić jawne wskazanie sprawy — ta konstrukcja nie wybiera danych;- wystarcza kontekst bieżącej sprawy i uprawnienia bieżącego użytkownika;
- potrzebujesz wyłącznie składni lub pełnego opisu argumentów pojedynczej funkcji — skorzystaj z jej referencji.
Powiązane artykuły
- CopyTableData — składnia i argumenty kopiowania danych między tabelami.
- foreachrow — składnia pętli przetwarzającej wiersze tabeli.
- forcase — składnia bloku wykonywanego w kontekście wskazanej sprawy.
- Konto SYSTEM USER w AMODIT — rola konta systemowego i uprzywilejowanego wykonania.
