+49 (0)7531 906010| service@combit.net

Filter per Script auf andere Ansicht anwenden

Hallo zusammen,

mit nachfolgendem (untenstehend) Beispielscript habe ich mir viele Filter und Abfragen auf Button legen können, die einwandfrei funktionieren. Das Script bezieht sich hier ja immer auf die aktuelle Ansicht.
Jetzt aber möchte ich das/ein Script aus der Ansicht „A“ aufrufen, welches dann einen Filter über die Ansicht „B“ ausführt. Der Grund dafür ist, dass ich beim Aufruf aus der Ansicht „A“ einen Parameter (hier ObjID) auslese und mitgebe, der für den Filterausdruck in der Ansicht „B“ verwendet werden muss.


Dim sParameter
sParameter = cRM.CurrentProject.ActiveViews.ActiveView.CurrentRecordSet.CurrentRecordSynchronized.GetContentsByName(„ObjID“)


Wie wechsle ich nun die Ansicht für die Ausführung des Filters per Script? Gibt es hier Beispiele? Dachte ich hätte schon mal irgendwo so etwas gesehen, aber auch nach stundenlangen suchen jetzt nichts gefunden.
Vielen Dank im Voraus!

Robert

Option Explicit
’ combit Relationship Manager Variablen
Dim oProject, oActiveView, oCurrentRecordSet, bFilter

’ combit Relationship Manager Objekte
Set oProject = cRM.CurrentProject
Set oActiveView = oProject.ActiveViews.ActiveView
Set oCurrentRecordSet = oActiveView.CurrentRecordSet

’ Filter erstellen:
bFilter = oCurrentRecordSet.SetFilter(„upper(“„ObjektnachweisID“") = upper(‚sParameter‘)

If bFilter = True Then
Msgbox „Es befinden sich " & oActiveView.FilterRecCount & " Datensätze im Filter.“
Else
Msgbox „Es konnte kein Filter erstellt werden!“
End If

Set oCurrentRecordSet = Nothing
Set oActiveView = Nothing
Set oProject = Nothing

Hi Robert,

guck mal in der SDK Doku unter OpenActiveViewByName. Darüber kommst du an das View-Objekt einer anderen Ansicht (wenn es die noch nicht offen gibt (is Nothing), dann muss sie per OpenNewViewByName erst geöffnet werden). Mit diesem View-Objekt arbeitest du in deinem Script (anstatt wie bei dir oben „ActiveView“) dann weiter.

Über View.Activate bringst du die Ansicht dann in den Vordergrund.

Gruß Alex

Hallo Alex,

danke für die schnelle Antwort. Hab mir untenstehende Lösung zusammengestellt, die auch einwandfrei funktioniert.

  • Rufe von Ansicht „Objekte“ per Button das Script auf
  • der Button übergibt die Variablen sParameter und sObjID
  • das Script öffnet oder wechselt auf die Ansicht „Objektnachweis“
  • filtert dann dort entsprechend.

Jetzt habe ich leider das nächste Problem.

Mein Testfilter funktioniert einwandfrei wie folgt:
bFilter = oCurrentRecordSet.SetFilter(„upper(“„Verantwortlich“") = upper(N’" & sParameter & „’)“)
Das Feld Verantwortlich ist hier auch als echtes Feld in der Ansicht/Tabelle „Objektnachweis“ vorhanden.

Was nicht funktioniert ist der Filter mit einem relational gebundenen Feld, das bei mir in der Ansicht „Objektnachweis“ nur angezeigt wird. In dem Fall die ObjektID. Hier wirft mir die Datenbank dann einen Fehler aus „Das Feld „Objekte.ObjektID“ kann nicht gebunden werden“. (Die Schreibweise hab ich vom Filterausdruck übernommen.)

Als Beispiel:
bFilter = oCurrentRecordSet.SetFilter(„upper(“„Objekte.ObjektID“") = upper(N’" & sObjID & „’)“)

Mein Denkansatz ist, dass dort nicht die ObjektID passt, sondern die SQL Datensatz ID.
Ist das richtig und wenn ja, wie löse ist das am Besten bzw. wie komme ich da dran?

Vielen Dank

Robert

Dim oProject, oActiveView, oCurrentRecordSet, bFilter, sHinweis
Set oProject = cRM.CurrentProject

If cRM.CurrentProject.ActiveViews.ItemByName(„Objektnachweis“) Is Nothing Then
cRM.CurrentProject.OpenNewViewByName(„Objektnachweis“)
Else
cRM.CurrentProject.OpenActiveViewByName(„Objektnachweis“).Activate
End If

Set oActiveView = oProject.ActiveViews.ActiveView
Set oCurrentRecordSet = oActiveView.CurrentRecordset

bFilter = oCurrentRecordSet.SetFilter(„upper(“„Verantwortlich“") = upper(N’" & sParameter & „’)“)

cRM.InvokeMenu 32782, True

Vor dem Schreiben von Programm Posts Gehirn einschalten :wink:

… oder mal an die frische Luft gehen. Dann ist der Durchblick besser.

bFilter = oCurrentRecordSet.SetFilter(„ObjektID = 0x“ & sObjID & „“)

Danke und viele Grüße

Robert

© combit GmbH