Skip to main content

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 danychrunassystem() zmienia uprawnienia wykonania, natomiast forcase() wybiera sprawę, na której działa blok.
  • Sprawa docelowa kopiowania a bieżąca sprawatargetCaseId wskazuje cel CopyTableData(), ale nie zmienia automatycznie sprawy używanej przez późniejsze instrukcje.
  • Bieżąca sprawa a bieżący wierszforcase() ustawia sprawę, a foreachrow() ustawia kolejne wiersze jej tabeli.
  • Kopiowanie a dalsze przetwarzanieCopyTableData() przenosi dane, natomiast operacje wykonywane na skopiowanych wierszach wymagają właściwego kontekstu dla foreachrow().

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.