Script für FakturaAbonnement

Hallo,
ich versuche momentan ein Script zu schreiben mit Vbs und komme einfach nicht weiter.


Mein Ziel ist es wenn, ich auf Kündigung drücke und das Datum geringer ist als das heutige dann Leere die Felder Lauf_Beginn und Lauf_Ende.

Dim iKuend
iKuend = ShowInputBox("Enddatum des Abonnements eingeben:",Date)

Const sView = "FakturaAbonnement"  

Dim oProject, oListViewConfigs 
Set oProject = cRM.CurrentProject 
Set oListViewConfigs = oProject.ViewConfigs 
 
Dim oViewConfig 
Set oViewConfig = oListViewConfigs.ItemByName(CStr(sView)) 
 
Dim oRecordSet 
Set oRecordSet = oViewConfig.CreateRecordSet

Dim oRecord 
Set oRecord = oRecordSet.NewRecord 

Dim datum
datum = date

If cDate(iKuend) < cDate(datum) Then
   oRecord.SetContentsByName "Lauf_Beginn", " "
   oRecord.SetContentsByName "Lauf_Ende", " "
 End If

'Ansicht aktualisieren
cRM.CurrentProject.ActiveViews.ActiveView.Update

Ich kenne einfach die ganzen Befehle nicht auswendig von Vbs und bin mir eigentlich sicher das es daran liegt das ich die Felder nicht „finde“.
Ich habe es zwar geschafft das keine Fehlermeldung kommt, aber es passiert nichts.
Der Code ist nicht vollständig. Ich hoffe das ist nicht schlimm.

Ich bin dankbar für jede Hilfe.
Mfg

Herzlich Willkommen! :slight_smile:

Wenn ich den Screenshot richtig interpretiere, benutzen Sie die cosmolink Business Solution. Angesichts des Nutzens (Zeitersparnis und Fehlervermeidung), den Ihnen Ihr Script bescheren wird, möchte ich Ihnen empfehlen, sich an @Frank_Wietzel von cosmolink zu wenden, ob sie Ihnen das erforderliche Script kurz bauen.

Ich denke das ist wirtschaftlich sinnvoller, als sich selber bei so einem speziellen Bereich warmzuturnen. Denn es könnte vor allem es ja auch sein, dass es noch mehr Businesslogik braucht, um ein Abonnement korrekt zu „kündigen“, als nur die beiden „Lauf_…“ Felder zu löschen.

Zu Ihrer eigentlichen Frage mit dem Fokus auf das Script (und nicht die Businesslogik, die es für das eigentliche Ziel noch braucht): in Ihrem Script ist der Knackpunkt, dass Sie nicht auf dem aktuell sichtbaren Record arbeiten, sondern ein neuen anlegen (NewRecord) - außerdem Speichern Sie die gemachten Änderungen nicht (.Save), sondern aktualisieren lediglich die Ansicht.

Die Abfolge müsste GROB sein:

Set oRecord = cRM.CurrentProject.ActiveViews.ActiveView.CurrentRecordSet.CurrentRecord
oRecord.Lock
oRecord.SetContentsByNameToNull "Field1"
oRecord.SetContentsByNameToNull "Field2"
oRecord.Save
oRecord.Unlock
cRM.CurrentProject.ActiveViews.ActiveView.Update
Set oRecord = nothing

Bei den Feldnamen muss es sich übrigens um die physikalischen Feldnamen handeln, nicht um die visuellen Aliasnamen. Die ganzen physikalischen Feldnamen finden Sie im Ansichteneigenschaft-Dialog der Ansicht auf der Lasche „Felder“.

Außerdem müssen hier unbedingt noch Fehlerabfragen jeweils eingebaut werden: Klappte Lock? (kann fehlschlagen bei mangelnden Datensatzrechten oder anderen fehlenden Benutzerrechten) Klappte SetContents…? (kann fehlschlagen bei fehlenden Feldrechten) Klappte Save? etc.