Langsame Scripte

Hallo,

wir arbeiten auf der Grundlage des Vorgabeprojektes und bei den Projekten habe ich ein Script angelegt, dass alle Personen die im aktuellen Filter sind eine Verknüpfung mit dem Projekt bekommen. Also werden neue Einträge in die Tabelle Projektzuordnung eingetragen.
Das Problem dabei ist, dass die Ausführung des Scripts extrem langsam ist. Bedeutet bei ca. 20 Personen dauert es bis zu 1 Minute. Da aber teilweise 100 oder mehr Personen zu einem Projekt zugeordet werden, ist das nicht gerade toll. Gibt es eine Möglichkeit die Verarbeitung signifkant zu beschleunigen?

Script Informationen:

  • Durchlauf der Personendaten mit Do … While
  • Auslesen der Daten bei Personen mit GetContentsByName
  • Schreiben in die Tabelle Projektverknüpfung mit SetContentsByName

Falls noch mehr Infos gebraucht werden einfach Bescheid sagen.

Zweites Problem im selben Script:
Ich starte vor der Schleife WaitDialog mit Call WScript.StartWaitDlg. In der Schleife berechne ich wieviel Prozent bereits ausgeführt wurden. Jedes mal wenn mehr als 5 Prozent dazu gekommen sind, soll ein update des WaitDialogs mittes Call WScript.SetWaitDlgText gemacht werden und die aktuelle Prozentzahl angezeigt werden.
Jedes mal wenn ich Call WScript.SetWaitDlgText ausführe stürzt allerdings Combit komplett ab, ohne das ich nachvollziehen kann warum. Gibt es ein Workaround oder Lösung zu diesem Problem?

Vielen Dank schon mal im Vorraus
Martin

  1. Um ein solches Script, was Datensätze itteriert zu beschleunigen, müssten man den betreffenden RecordSet über das ViewConfig-Objekt instanzieren. Dadurch werden die Datensätze in der Schleife nicht visuell durchlaufen; soll heissen, dass man das skippen der Datensätze während das Script läuft in der Ansicht selbst nicht sieht. Zusätzlich kann man ggf. die Schleife durch die Datensätze auch mit CurrentRecordSynchronized versehen, was deutlich schneller ist. Mehr Infos dazu gibt es aber in der Doku dazu.

  2. Ein Absturz ist sicher nicht toll ;-(. Aber vielleicht mal das Problem/Script so weit wie möglich reduzieren und hier posten… vielleicht ist es ja nur ein „Sytnaxfehler“?

Hallo Martin,

wie Friedemann schon geschrieben hat: unbedingt CurrentRecordSynchronized verwenden!

Dann wenn möglich die Ermittlung der Gesamtdatensazanzahl besser vermeiden oder auf jeden Fall nur einmal am Anfang machen (evtl. machst du das ja in der Schleife jedesmal)

Ansonsten schau mal in der Standard Solution in „Personen“ wie die Schaltfläche „Alle aktuell gefilterten Personen einer Kampagne zuweisen“ (oder so ähnlich) funktioniert, die arbeitet extrem schnell und verwendet meiner Erinnerung nach einen ganz anderen Ansatz. Deine Aufgabenstellung klingt für mich aber genau analog.

Gruß

Alex

Hallo,

war leider eine Zeit lang krank, deswegen schreibe ich erst heute.
Danke für eure Tips.

Das habe ich mir mal genauer angeschaut und siehe da … ein bisschen Anpassung hier und da und schon läuft mein Script schön schnell. Bei 1000 Daten nur noch 1:20 Minuten. Schneller gehts denke ich nicht. Danke Alex für den guten Tip. wäre sonst nicht drauf gekommen, dass über direktes relationales Anhängen zu machen.

Bei dem zweiten Problem bin ich leider noch nicht weiter. Ich habe in der Schleife eine eigene Zählvariable die ich hoch zähle. Greife also nicht immer auf die „Count“ vom RecordSet-Objekt zu. Der Absturz passiert aber auch direkt beim Aufruf „Call WScript.SetWaitDlgText()“.

Viele Grüße
Martin