Auslesen Datensatz ID

Hallo an Alle,

ich Programiere (was man so programieren nennt) uns gerade eine Lizenzverwaltung.

Ausgangssituation:
Ich Stehe in der Tabelle 1 und erzeuge einen neuen Datensätz in einer zweiten Tabelle (Tabelle2). Diesen neuen Datensatz muss ich relational mit dem Datensatz in der Tabelle1 verknüpfen.

Mein Script arbeitet soweit gut, nur das auslesen der der DatensatzID in der Tabelle2
nicht sauber funktioniert!!

Frage 1:
Ich lese die Datensatz-ID in der Tabelle2 nach einem umschalten zwischen Listen- und Eingabemastkenansicht aus.
Sehr unschön!!!
Wie kann ich das verbessern???
Die Datensatz-ID muss doch auch schon früher existieren.

Frage 2:
Ich habe die Befürchtung, dass ich nicht mehr auf dem „Mutterdatensatz“ in der Tabele1 stehe. Wie kann ich diesen Datensatz geziehlt anspringen?
„Gehe zu Datendatz mit ID…“

Vielen Dank


Option Explicit

'Auslesen der Benutzerinformationen
Dim sErfuser
sErfuser = Crm.CurrentProject.CurrentUser

'Auslesen der FirmenRecordid
Dim sFirmenRecordid
sFirmenRecordid = Crm.CurrentProject.ActiveViews.ActiveView.CurrentRecordSet.CurrentRecordSynchronized.GetContentsByName(„CompanyID“)

'Auslesen der Person
Dim sPersonRecordid
sPersonRecordid = Crm.CurrentProject.ActiveViews.ActiveView.CurrentRecordSet.CurrentRecordSynchronized.GetContentsByName(„ContactID“)

'Auslesen der LizenzID
Dim sLizenzID
sLizenzID = Crm.CurrentProject.ActiveViews.ActiveView.CurrentRecordSet.CurrentRecordSynchronized.GetContentsByName(„ID“)

’ Name der konfigurierten Ansicht
Const sView = „MSA_Lizenzen“

’ Aktives cRM Projekt
Dim oProject, oListViewConfigs,oListView
Set oProject = cRM.CurrentProject
Set oListViewConfigs = oProject.ViewConfigs
Set oListView = oProject.ActiveViews

Dim oView
Set oView = oListViewConfigs.ItemByName(CStr(sView))

'MsgBox (sPersonRecordid)
'MsgBox (sFirmenRecordid)
'MsgBox (sLizenzID)

’ Prüfung Ansicht MSA_Lizenzen geöffnet
if CRM.CurrentProject.ActiveViews.ItemByName(„MSA_Lizenzen“) is nothing then
'Ansicht neu öffnen
cRM.CurrentProject.OpenNewViewByName(„MSA_Lizenzen“)
End if

’ Ansicht MSA_Lizenzen öffen
CRM.CurrentProject.ActiveViews.ItemByName(„MSA_Lizenzen“).Activate

’ Eingabemasken-Ansich öffen
CRM.CurrentProject.ActiveViews.ActiveView.ViewMode(1)

Dim oRecordSet
Set oRecordSet = oView.CreateRecordSet

’ Neuen Datensatz anlegen
Dim oRecord
Set oRecord = oRecordSet.NewRecord

cRM.CurrentProject.ActiveViews.ActiveView.Update

’ Datensatz sperren
oRecord.Lock

’ Firmen schreiben
oRecord.SetContentsByName CStr(„CompanyID“), CStr(sFirmenRecordid)

’ Kontakt schreiben
oRecord.SetContentsByName CStr(„ContactID“), CStr(sPersonRecordid)

’ Lizenz schreiben
oRecord.SetContentsByName CStr(„LizenzID“), CStr(sLizenzID)

’ Datensatz speichern und Schreibvorgang prüfen
If oRecord.Save = True Then

MsgBox CStr("Datensatz wurde geschrieben."), vbInformation, CStr("combit Relationship Manager")

Else

MsgBox CStr("Datensatz konnte nicht geschrieben werden!"), vbExclamation, CStr("combit Relationship Manager")

End If

’ Datensatz entsperren
oRecord.Unlock

’ Eingabemasken-Ansich öffen
CRM.CurrentProject.ActiveViews.ActiveView.ViewMode(2)
CRM.CurrentProject.ActiveViews.ActiveView.ViewMode(1)

’ Aktive Ansicht aktualisieren
cRM.CurrentProject.ActiveViews.ActiveView.Update

Hallo Ronald,

zu Frage 1:
Ich kann nicht erkennen, wo Du in dem Script die Datensatz-ID ausliest. Grundsätzlich steht die ID aber bereits nach dem Anlegen eines Datensatzes zur Verfügung. So etwas funktioniert also beispielsweise:

Dim oRecord, sID Set oRecord = cRM.CurrentProject.ActiveViews.ActiveView.CurrentRecordset.NewRecord sID = oRecord.GetContentsByName("ID") MsgBox sID oRecord.Save

zu Frage 2:
Einen Datensatz ‚Anspringen‘ geht über einen Filter:

. . . Dim bFilter bFilter = oRecordset.SetFilter("ID = 0x" & sID) If bFilter = True Then If oRecordset.MoveFirst Then Set oRecord = oRecordset.CurrentRecordSynchronized . . .

Gruß

Walter

Vielen Dank an Walter.

Leider funzt da was nicht.
Ich sende mal das ganze Testscript.
Aufgabe:
Öffne eine Ansicht
Wähle einen Datensatz aus
Ergebnis: Kein Filter, aber aktueller Datensatz ist der mit der übergebenen Datensatz-ID

Zustand des Skript: Alles funktioniert, nur dergewünschte Datensatz ist nicht angewählt!!!
Keine Fehlermeldungen!

/code

’ Faktura-Software Scriptdatei
’ Funktion: Neuen Beleg zur Person anlegen
’ Ansicht: Lizenzen
’ Script: V4D_08_MSA_Neuer_MSA_zu_Lizenz_anlegen.vbs
’ Produkt: combit Relationship Manager 6
’ Autor : Ronald Kissling
'--------------------------------------------------------------------------------------------------------------

Option Explicit

'--------------------------------------------------------------------------------------------------------------

’ Aktives cRM Projekt
Dim oProject
Set oProject = cRM.CurrentProject

Dim oListViewConfigs
Set oListViewConfigs = oProject.ViewConfigs

Dim oListView
Set oListView = oProject.ActiveViews

Dim oActiveViews
Set oActiveViews = oProject.ActiveViews

Dim oActiveView
Set oActiveView = oActiveViews.ActiveView

’ Name der konfigurierten Ansicht
Dim oView
Const sView = „MSA_Lizenzen“
Set oView = oListViewConfigs.ItemByName(CStr(sView))

’ Aktiven Filter in der aktiven Ansicht verwenden
Dim oRecordSet
Set oRecordSet = oActiveView.CurrentRecordSet

'Festlegen Datensatz-ID
Const sMSALizenzID = „ca0c6a756a9440bb9b09eeed510903b0“

MsgBox (sMSALizenzID)
'-------------------------
’ Prüfung Ansicht MSA_Lizenzen geöffnet
if CRM.CurrentProject.ActiveViews.ItemByName(„MSA_Lizenzen“) is nothing then
'Ansicht neu öffnen
cRM.CurrentProject.OpenNewViewByName(„MSA_Lizenzen“)
End if

’ Eingabemasken-Ansich öffen
CRM.CurrentProject.ActiveViews.ActiveView.ViewMode(1)
MsgBox „Test2“

Dim bFilter
bFilter = oRecordset.SetFilter(„ID = 0x“ & sMSALizenzID)
MsgBox bFilter
If bFilter = True Then
’ Überhaupt Treffer vorhanden?
If oRecordset.MoveFirst Then
MsgBox „Movefirst“
Set oRecord = oRecordset.CurrentRecordSynchronized
Else
MsgBox „Nicht Movefirst“
End If
End If

’ Aktive Ansicht aktualisieren
cRM.CurrentProject.ActiveViews.ActiveView.Update
MsgBox „Test5“

'-------------------------

’ Objekte freigeben
Set oRecordSet = Nothing
Set oActiveView = Nothing
Set oView = Nothing
Set oListViewConfigs = Nothing
Set oProject = Nothing

/code

Hallo Ronald,

als Erstes kannst Du diesen Teil weglassen, da die Variablen im Weiteren nicht aufgerufen werden:

' Name der konfigurierten Ansicht Dim oView Const sView = "MSA_Lizenzen" Set oView = oListViewConfigs.ItemByName(CStr(sView))

Und dann meine ich, dass Du da einen Ablauf- oder Reihenfolge-Fehler hast:
Mit diesem Teil erzeugst Du ein Recordset in der aktuellen Ansicht (oActiveView), also der Ansicht, die beim Start des Scripts aktiv ist:

Dim oRecordSet Set oRecordSet = oActiveView.CurrentRecordSet

Dann öffnest Du die Ansicht ‚MSA_Lizenzen‘ und machst sie dadurch zur aktiven Ansicht.

Und jetzt filterst Du in dem Recordset, dass Du auf der ehemals aktiven Ansicht erstellt hast:

bFilter = oRecordset.SetFilter("ID = 0x" & sMSALizenzID)

Das funktioniert zwar, hat allerdings natürlich keine Auswirkung auf die jetzt aktuelle Ansicht.

Falls ich Dein Ansinnen richtig verstanden habe, könnte folgende Änderung helfen:

Dim bFilter Set oRecordset = cRM.CurrentProject.ActiveViews.ActiveView.CurrentRecordset bFilter = oRecordset.SetFilter("ID = 0x" & sMSALizenzID) MsgBox bFilter If bFilter = True Then . . .

Gruß

Walter

Und weiter gehts:

Ich habe festgestellt, dass ich nicht auf der richtigen Tabelle (Ansicht) stehe!!!
Nur warum???

Ich springe doch auf das Fenster mit:


’ Prüfung Ansicht MSA_Lizenzen geöffnet
if CRM.CurrentProject.ActiveViews.ItemByName(„MSA_Lizenzen“) is nothing then
'Ansicht neu öffnen
cRM.CurrentProject.OpenNewViewByName(„MSA_Lizenzen“)
End if

’ Eingabemasken-Ansich öffen
CRM.CurrentProject.ActiveViews.ActiveView.ViewMode(1)
MsgBox „Test2“


Das müsste doch reichen! Oder???

Hallo Ronald,

das reicht nur dann, wenn die ‚neue‘ Ansicht noch nicht geöffnet ist. Ansonsten muss sie aktiviert werden:

If cRM.CurrentProject.ActiveViews.ItemByName("MSA_Lizenzen") Is Nothing Then 'Ansicht neu öffnen cRM.CurrentProject.OpenNewViewByName("MSA_Lizenzen") Else 'Bestehende Ansicht aktivieren cRM.CurrentProject.OpenActiveViewByName("MSA_Lizenzen").Activate End If

Gruß

Walter