Zum Inhalt

Scripting-API in einem Modell verwenden

Verwende datamimic_ee.scripting innerhalb von Funktionen, die ein DSL-Ausdruck script= aufruft. Die API ist schreibgeschützt: Containerwerte werden an der Grenze kopiert. Eine Änderung am zurückgegebenen Dictionary verändert deshalb nie das aktive Modell.

Die Snapshot-Helfer liefern None, ein leeres Mapping oder den angegebenen Standardwert, wenn kein passender Wert vorhanden ist. load_memstore() und load_memstore_page() sind strenger: Sie erfordern einen aktiven Auswertungskontext und einen nicht leeren Produktnamen; für Paging gelten zusätzlich skip >= 0 und limit > 0.

Projekt-Script

script/scripting_api.scr.py
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
from datamimic_ee.scripting import (
    get_context_info,
    get_current_product,
    get_property,
    get_record_position,
    get_variable,
    load_memstore,
    load_memstore_page,
)


def current_name():
    return get_context_info().get("current_name")


def current_key_count():
    return len(get_current_product() or {})


def memstore_count(product_name):
    return len(load_memstore(product_name))


def first_memstore_id(product_name):
    return load_memstore_page(product_name, 0, 1)[0]["id"]

Descriptor

datamimic.xml
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
<setup>
    <execute uri="script/scripting_api.scr.py"/>
    <generate name="seed" count="2" target="mem">
        <key name="id" generator="IncrementGenerator"/>
    </generate>
    <generate name="scripting_snapshot" count="1" target="LogExporter">
        <variable name="marker" constant="ready"/>
        <key name="current_name" script="current_name()"/>
        <key name="record_position" script="get_record_position()"/>
        <key name="marker" script="get_variable('marker', 'missing')"/>
        <key name="region" script="get_property('region', 'not-configured')"/>
        <key name="current_key_count" script="current_key_count()"/>
        <key name="stored_count" script="memstore_count('seed')"/>
        <key name="first_id" script="first_memstore_id('seed')"/>
    </generate>
</setup>

Das Element <execute> lädt vertrauenswürdigen Projektcode. Halte den eigentlichen Aufruf innerhalb von script=, damit der Auswertungskontext existiert. Für Feldzugriffe in verschachtelten Produkten verwende den separaten Scope-Guide.

Die generierte Scripting-API-Referenz listet die exakten Funktionen und Signaturen der aktuellen EE-Version.