CurrentRecord

Beschreibung:

Liefert den aktuellen Datensatz als Objekt vom Typ Record zurück. Wenn z. B. keine Datensätze im RecordSet enthalten sind, liefert diese Methode kein Record Objekt zurück.

Wichtig: Im Gegensatz zur Methode CurrentRecordBuffered aktualisiert sich ein so erzeugter Record immer automatisch, wenn anschließend Move...-Befehle für den zugehörigen RecordSet aufgerufen werden.

Da das komplette Puffern der Feldinhalte entfällt, ist diese Methode deutlich performanter als CurrentRecordBuffered und stellt den empfohlenen Weg dar, um auf Feldinhalte von Datensätzen zuzugreifen.

Mit CurrentRecord erzeugte Record-Objekte können dadurch jedoch nicht als Variablen für unterschiedliche Datensätze benutzt werden (vgl. Beispiel zu CurrentRecordBuffered)! Ist dies erforderlich, so muss anstattdessen CurrentRecordBuffered benutzt werden.

 

Wichtiger Hinweis zu geändertem Verhalten: CurrentRecord verhält sich ab der Version 8 von combit CRM wie ein CurrentRecordSynchronized. (Aus Kompatibilitätsgründen vorher wie ein CurrentRecordBuffered). Wir empfehlen die eingesetzten Scripte sorgfältig auf die Verwendung von CurrentRecord zur prüfen. Ein typisches Beispiel für die Verwendung ist ein Record-Objekt, welches per CurrentRecord geholt wird und danach im zugehörigen RecordSet eine Goto.../SetFilter... Methode aufgerufen wird und danach trotzdem auf den zuvor geholten (d. h. gewollt absichtlich "alten") Record zugegriffen wird:

RecordSet.GotoFirst

Set oRecord = RecordSet.CurrentRecord

oRecord.GetContentsByName "Company" 'liefert Firmenname von Firmendatensatz #1

RecordSet.GotoNext

oRecord.GetContentsByName "Company" 'cRM7: Firmenname (weiterhin) von Firmendatensatz #1 / cRM8: Firmenname von Firmendatensatz #2

Wenn das cRM7 Verhalten der letzten Code-Zeile oben ZWINGEND erforderlich sein sollte, dann schafft Abhilfe entweder die Verwendung eines explizit gepufferten Records, d. h.

Set oRecord = RecordSet.CurrentRecordBuffered

oder das Setzen eines Kompatibilitätsschalters in der Solution Projekt-Datei (wirkt sich global auf alle CurrentRecord Stellen innerhalb der Solution aus). Erstellen Sie dazu in der Solution Projekt-Datei eine Untersektion namens "ExtendedSettings" und setzen darin die Option "COMCurrentRecordAlwaysAsBuffered" auf 1:

 …

<!–DATA -->

<profile>

<list name="">

  <list name="ExtendedSettings">

   <item name="COMCurrentRecordAlwaysAsBuffered">1</item>

  </list>

...

Beachten Sie dabei aber, dass die letztere Variante nur als Notlösung eingesetzt wird, da die problematische Codestelle z. B. in einem verschlüsselten Script liegt und daher nicht selbst angepasst werden kann. Wir empfehlen grundsätzlich möglichst ohne gepufferte Records auszukommen!

Rückgabewert:

Record

Beispiel VBScript:

Dim oRecord : Set oRecord = cRM.CurrentProject.ActiveViews.ActiveView.CurrentRecordSet.CurrentRecord

' ...

Set oRecord = Nothing

Beispiel C#-Script:

Record record = cRM.CurrentProject.ActiveViews.ActiveView.CurrentRecordSet.CurrentRecord;

// ...

record.Dispose();