Zum Inhalt springen

Workaround - Einzeln verarbeitbare Einträge aus der Wiederholungsgruppe


Tino Jenke

Empfohlene Beiträge

Hallo zusammen,

ich hatte bei den Feature-Wünschen schonmal geäußert, dass ich es sehr gut fände, wenn man einzelne Einträge aus einer Wiederholungsgruppe außerhalb selbiger verwenden könnte.

Da ich nun kurzfristig und zumindest übergangsweise eine Lösung benötigt habe, habe ich mir eine Möglichkeit überlegt mit der es klappen könnte. Ich habe dann versucht diese umzusetzen und Tada 🎉 hat funktioniert. Deswegen dachte ich, ich teile das mal mit euch, für den Fall jemand steht vor einem Ähnlichen Thema.

VORAB: Das ist keine Lösung für Wiederholungsgruppen mit 100 Einträgen, sie sollte recht kurz sein, da das ganze sehr schnell unübersichtlich wird.

Da das ganze recht komplex ist, ist hier der Link zum importieren der Smap. Da ist einiges vermutlich verständlicher:

https://platform.smapone.com/portal/Creator/Apps/Import?smapVersionId=652030b4-6eb6-4cf4-bcb5-9997535eaf07&secId=f87896c4e73d6253e09bf3977ad0dfadb246a9eb&lang=de

Mein Szenario war folgendes:

Wir wollen eine Stundenerfassung mit dynamischer Mitarbeiterauswahl erzeugen, DSAB wird per REST-API bei Eintreten oder Austreten eines Mitarbeiters aktualisiert. Der Mitarbeiter soll nun seinen Namen und die Namen der anderen Kollegen auswählen und Dinge wie Personalnummer, Mail etc. sind damit automatisch mit abrufbar. Nun soll außerhalb der Wiederholungsgruppe festgelegt, dass z.B. nur der erste angegebene Mitarbeiter außerhalb der Gruppe angegeben werden kann (z.B. als aktuell Arbeitsverantwortlicher/Kolonnenführer etc.). Ich habe die Gruppe auf 8 Einträge beschränkt.

Die Wiederholungsgruppe sieht im Designer wie folgt aus:

1.jpg.85b4ce23f4393b1424efb3bb880ea891.jpg

Relevant für das Thema sind die Bausteine "NameWorker", "ResultNameWorker" und "Counter".

Die Bausteine "NameWorker" Sowie "ResultNameWorker" enthalten die gleiche Formel -                                                                       "CONCAT({SelectWorker[Name]})" - ist mir leider erst danach aufgefallen 🫠.

Der Baustein Counter enthält die Formel - "IF(NOTEMPTY({NameWorker}),1,0)" - Damit wird die Zahl 1 jedem erzeugten Eintrag hinzugefügt.

Außerhalb der Wdh.Gruppe habe ich dann folgenden Aufbau (logischerweise bis zum 8. Mitarbeiter):

 

2.thumb.jpg.5aeea8e112b31865b2b0bea96b2a71d7.jpg

Der Baustein "SumWorker" zählt die Anzahl der Einträge über den "Counter".

3.thumb.jpg.6c71390155ba9f29d53a26e250b1c9f6.jpg

So wird immer die korrekte Summe der ausgewählten Einträge erzeugt. Darunter befindet sich der Baustein "AllNamesWorker". Dieser soll alle Namen die in der Gruppe ausgewählt wurden zusammenfassen und sie mit einem Semikolon trennen. Dafür folgende Formel:

4.thumb.jpg.73f54f6188d84cf9aba63d4d14d085b4.jpg

Das Ergebnis sieht dann etwa so aus:  "Name Mitarbeiter;Name Mitarbeiter 2;usw."

Im späteren Verlauf wollen wir diesen Baustein Stück für Stück auftrennen. Damit das unabhängig von der Position der jeweiligen Semikolons funktioniert habe ich je einen Zahlenergebnis Baustein pro möglichem Semikolon erzeugt (in meinem Fall bei 8 Einträgen, 7 maxmial mögliche Semikolons).

Diesen Bausteinen musste ich dann per Formel die Position der Semikolons zuweisen. Beim 1. Semikolons passiert das mit dieser Formel:5.thumb.jpg.18c9848e8efd3dffab593b4abf28252d.jpg

Darüber wird die Position als Zahl ausgegeben. Die TEXTPOS Formel sucht, wenn nicht konkreter angegeben, immer nach der Ersten Übereinstimmung mit der Sucheingabe. Damit also beim zweiten Baustein dieser Art nicht das selbe Ergebnis ausgespuckt wird, brauchen wir nachfolgende Formel:

6.thumb.jpg.fe1906f35c0151b511c48fe50e562264.jpg

Damit beginnt die "Zählung" ab dem Zeichen nach der Postionsnummer des ersten Semikolons. Diese Formel muss dann bei allen nachfolgenden entsprechend angepasst werden. (Beim 2. Bezug auf den 1., beim 3. Bezug auf den 2. usw.)

Dann folgen die Namensbausteine (_1stWorker ff.) mit den Formeln um den jeweiligen Namen des Mitarbeiters zu extrahieren. Beim 1. ist das auch wieder gar nicht so kompliziert.

7.thumb.jpg.0ee06c6fae87929a8b8ca4cfb1fb1706.jpg

Die Formel prüft per IF Abfrage folgendes:

Wenn "SumWorker" ist GENAU gleich 1 - Dann Nimm dir "AllNamesWorker" ab Zeichen 1 - Zeichen 999. Wenn das nicht der Fall ist beginnt eine neue Prüfung die überprüft: Wenn "SumWorker" ist GENAU gleich 0 - Dann zeige "Kein Mitarbeiter ausgewählt" an. Ist auch das nicht der Fall Nimm dir Den Baustein "AllNamesWorker" ab Zeichen 1 bis Zum Ergebnis von "Position 1. Semikolon" - Minus 1.

Die Bausteine danach prüfen auf ähnliche Weise:

8.thumb.jpg.e4ee700b596ee2e35824813babe4acb1.jpg

Ab diesem zweiten Baustein muss per Formel nur der Text zwischen 1. und 2. Semikolon ausgegeben werden. Folgender Prüfverlauf ist darin enthalten:

Wenn "SumWorker" ist Kleiner Oder Gleich 2 - Dann Nimm dir "AllNamesWorker" -  Ab "Position von Semikolon 1" Plus 1 (sonst kommt das Semikolon mit) bis Zeichen 999. Wenn "SumWorker" nicht kleiner oder gleich ist, dann prüfe: Wenn "SumWorker" ist Größer oder Gleich 3, Dann nimm dir "AllNamesWorker" - Ab "Position von Semikolon 1" Plus 1 - Bis "Position von Semikolon 2" Minus 1 (Sonst kommt auch hier wieder das Semikolon mit). Damit wird jetzt der Text zwischen Semikolon 1 und 2 ausgegeben und kann außerhalb der Gruppe verwendet werden.

Das selbe wird dann für die anderen Bausteine fortlaufend bearbeitet. Beim letzten Baustein muss natürlich dann nicht mehr alles geprüft werden sondern nur folgendermaßen: IF(EQUALS({SumWorker},8),SUBTEXT({AllNamesWorker},ADD({SemiPos7},1),999)).

Ich weiß das ganze ist sehr komplex und eignet sich nur für bestimmte Anwendungsfälle. Aber so funktioniert es für mich auf jeden Fall in diesem Szenario erstmal. Ich hoffe das ganze ist nicht zu unverständlich geworden und ich kann irgendjemandem damit ein wenig Kopfschmerzen ersparen. 😅

 

Viele Grüße

  • Zustimmung 1
  • Danke 6
Link zu diesem Kommentar
Auf anderen Seiten teilen

Danke für dieses Beispiel,

ich scanne einen QR_Code, der mit Semikolon getrennte Auftragsdaten enthält. Hiermit kann ich die dann in der smap "zerlegen". Der Charme dabei ist, dass ich nicht alles einzeln scannen muss - also Kd-Nr, Auftrags-Nr, Einsatzadresse usw

Hat mir viel Arbeit erspart. ;o)

  • Like 1
Link zu diesem Kommentar
Auf anderen Seiten teilen

Bitte melde Dich an, um einen Kommentar zu hinterlassen

Du kannst nach der Anmeldung einen Kommentar hinterlassen



Jetzt anmelden
×
×
  • Neu erstellen...