Liebes Tomedo Team,

ich möchte, dass automatisch Marker gesetzt werden, wenn ein bestimmter Begriff oder auch eine definierte Begriffkombination in einem oder mehreren definiertem Karteieintragstexten vorkommen. Zum Beispiel: wenn im Karteieintagstyp CAT der Begriff RA UND Phako erscheint, soll der Marker RA Pseudophakie gesetzt werden. Mit folgendem Skript funktioniert dies schon sehr gut, herzlichen Dank hier nochmals an Frau Nowak am Tomedoanwendertreffen.

typ = 'CAT'
text = 'RA • Phako, HKL'
returnvalue = 0
array = select(karteieintraege)
for e in array:
  if e['typ'] == typ and text in e['eintrag']:
    returnvalue = 1
    break

 

Um die Marker nun etwas differenzierter und flexibler zu setzen fehlt mir jetzt eine UND Verknüpfung, denn der Syntax der Einträge ist über die Jahre nicht immer gleich geblieben. Wie kann ich nun obiges Skript anpassen?

 

Herzliche Grüsse

Andreas Fischle
Gefragt in Frage von (170 Punkte)
0 Punkte

1 Antwort

Beste Antwort

Hallo Herr Fischle,

im Namen von Frau Nowak schicke ich Ihnen folgenden Codesequenz zu und hoffe, dass diese Ihre Fragestellung löst:

typ = 'CAT'
text1 = 'RA'
text2 = 'Phako'
returnvalue = 0for e in karteieintraege:
  if e['typ'] == typ and text1 in e['eintrag'] and text2 in e['eintrag']:
    returnvalue = 1
    break

Bei weiteren Fragen, geben Sie gerne noch einmal Bescheid!

Mit freundlichen Grüßen,
Moritz Albert

Beantwortet von (360 Punkte)
ausgewählt von
0 Punkte
Ist es nicht einfacher mit einer Aktionsketten-Auslöser zu machen und einer Aktionskettenbedingung.

Alle

$[x CAT 1 _ 0 JJ NNJN NNNN _ U 0]$ enthält RA

$[x CAT 1 _ 0 JJ NNJN NNNN _ U 0]$ enthält Phako

Marker schalten können Aktionsketten ja. Was ist der Vorteil von einem Skript? Ich meine Auslöser kolidieren mit Fehler mit den Aktionsketten aber sonst sind sie ganz gut.
Hallo Herr Albert,

vielen Dank für das Skript. Genau dies habe ich benötigt.

Ein Tippfehler hatte sich allerdings in Ihr Skript eingeschlichen, daher stelle ich hier für das Forum noch das Skript ein, wie ich es jetzt verwende:

typ = 'CAT'
text1 = 'RA'
text2 = 'Phako'
returnvalue = 0
array = select(karteieintraege)
for e in array:
  if e['typ'] == typ and text1 in e['eintrag'] and text2 in e['eintrag']:
    returnvalue = 1
    break

Nun ergibt sich natürlich weitere Fragen, wie müsste das Skript aussehen mit mehrern Kategorien, die mit einer ODER Bedingung verknüpft werden? Zum Beispiel wenn in der Kategorie DA der Begriff 'Datenschutz' ODER in der Kategorie DA_HA der Begriff 'Datenschutz' erfasst werden soll?

@mkgpch: vielen Dank für die Anregung, werde ich auch einmal ausprobieren, derzeit bin ich allerdings mit den Aktionsketten noch nicht sehr vertraut.

Grüsse aus Aschaffenburg

Andreas Fischle

Hallo Herr Fischle,

stellvertretend für meine Kollegin (Frau Nowak) schicke ich Ihnen noch folgenden Code-Vorschlag zu, der Ihre Frage hoffentlich beantwortet:

typ1 = ‘DA’
typ2 = ‘DA_HA’
text = ‘Datenschutz’

# i.d.R. werden Datenschutzabfragen alle 2 Jahre abgefragt
intervall = 2
# Marker soll grundsätzlich erst mal gesetzt sein
returnvalue = 1

# Karteieinträge des Intervalles sollen berücksichtigt werden
array = select(karteieintraege,startQuartal=heuteQuartal-intervall,endQuartal=heuteQuartal)
for e in array:
  if (e[‘typ’] == typ1 or e[‘typ’] == typ2) and text in e[‘eintrag’]:
    # entferne den Marker, wenn Bedingungen erfüllt sind
    returnvalue = 0
    break

 

Mit freundlichen Grüßen
Moritz Albert

Hallo Herr Moritz,

vielen Dank für Ihre bisherige Hilfe. Ich wollte das Skript zunächst ohne Intervall verwenden, da zwischenzeitlich verschiedene Versionen unterschiedlicher Karteieintragstypen zum Datenschutz existieren. Das Zeitintervall würde ich gerne zu einem späteren Zeitpunkt einführen.  

Aktuell soll der Marker also gesetzt werden, wenn das Datenschutzformular auf dem IPad unterschrieben wurde. Ich habe es nun wie folgt erstellt:

typ1 = 'DA'
typ2 = 'DA_HA'
text = 'Datenschutz'
returnvalue = 0
array = select(karteieintraege)
for e in array:
  if (e[‘typ’] == typ1 or e[‘typ’] == typ2) and text in e[‘eintrag’]:
    returnvalue = 1
    break

Leider funktioniert es nicht und ich kann den fehler leider nicht finden....

Grüsse aus Aschaffenburg

Andreas Fischle
Hallo Herr Fischle,

vielen Dank für Ihre Rückmeldung! In Absprache mit Frau Nowak haben wir beschlossen, dass sie sich gerne noch einmal mit dem Thema beschäftigen wird und anschließend direkt mit Ihnen Kontakt aufnimmt. Sehr wahrscheinlich wird dies aber erst in der nächsten Woche der Fall sein.

Mit freundlichen Grüßen
Moritz Albert
8,806 Beiträge
14,523 Antworten
21,586 Kommentare
3,824 Nutzer