freie SQL Abfrage und Werte aus Sichten

Hallo, mal eine konzeptionelle Frage:

Ich baue gerade an einer Sicht, die eine aus einer n:m Verknüpfung resultierenden intersection-table entspricht. Hierzu gibt es Datensätze A und B aus der gleichen Tabelle.
Nun möchte ich gern das wenn ich DS A auswähle dieser nicht mehr bei auswahlmöglichkeit b angezeigt wird. Dafür gibt es ja die Filter. Da die ganze Sache komplexer wird habe ich mich für den freien SQL Filter entschieden. Ich habe nun mit dem SQL Server folgendes SQL Statement erstellt, das genau das tut was ich will:

SELECT *
FROM Kunde
WHERE id IN
(
SELECT „Kunde“.„id“
FROM „Kunde“
WHERE „Kunde“.„FirmenID“ <> [FirmenID] OR „Kunde“.„FirmenID“ IS NULL
EXCEPT
SELECT „Kunde“.„id“
FROM „KUNDE“ JOIN „cRM_User“.„Lead_Firma“ ON „Kunde“.„id“ = „cRM_User“.„Lead_Firma“.„Partner_kund_ID“
WHERE („cRM_User“.„Lead_Firma“.„Partner_fir_ID“ <> [FirmenID] AND „cRM_User“.„Lead_Firma“.„Partner_kund_ID“ <> [Partner_kund_ID])
OR („cRM_User“.„Lead_Firma“.„Partner_fir_ID“ IS NULL AND „cRM_User“.„Lead_Firma“.„Partner_kund_ID“ <> [Partner_kund_ID])
)

Mein Problem besteht nun darin das diese Abfrage auf inhalte der Sicht zugreifen soll (in eckigen Klammern stehen die Feldnamen der Sicht). Ich kriege das aber einfach nicht zum Laufen. Es scheint so als könnte man nicht auf die Sichtinhalte zugreifen, die aber vorhanden sind. Hat jemand eine Idee woran das liegen könnte, bzw. wie ich drumherumbauen könnte?
Solche Filter werde ich noch sehr oft setzen müssen…

Grüße
André

Hi Andre

vielleicht verstehe ich es nicht richtig, aber reden wir jetzt von einer
cRM Ansicht, wo du bei einer Datensatzauswahl auf einen bestimmten
Feldwert zugreifen musst? Dann schau dir in der Referenz-Solution den
Datensatz-Auswahlfilter für Branche2 an, der benutzt das „Branche1“ Feld
für eine weiter einschränkende Auswahl. Kurzfassung: du kannst Felder
der aktuellen Ansicht in den doppelt-spitzen Klammern einfügen (bei der
Funktion ‚Wähle Relationalen Datensatz‘, macht aber ja auch nur dort Sinn)

Falls das ganz in einem Srcipt stattfinden soll, musst du im Script den
SQL-Code generieren und die Platzhalter selbst mit den per
GetContentsByName ermittelten Inhalten ersetzen.

HTH

Alex.


CRM-Leitsatz: „Das einzige, was wirklich stört, ist der Kunde!“ :wink:

Hallo Alex,

ich habe einen Auswahl relationaler Datensatz Knopf in meiner Ansicht. Auf diesen habe ich eine freie SQL Abfrage gelegt. Diese hat die Form, die ich im ersten Posting gechrieben habe. Mein Problem ist das ich zur Ausführung dieser SQL Abfrage einige Werte aus der Sicht benötige, die die Ergebnisse der SQL Abfrage restriktiv eingrenzen. Das funktioniert aber nicht, weil mir das cRM lustige Fehler bringt und das komischerweise immer an den doppelt-spitzen Klammern, also wenn ich versuche auf Inhalte der Sicht zuzugreifen. Meine Frage bezog sich nun auf die Form meiner SQL Abfrage, ob sich irgendwelche Fehler eingeschlichen haben. Wenn ich anstatt der <> zum Beispiel ‚[irgend eine valide id]‘ eingebe funktioniert es… Daher meine Vermutung das Freie SQL Abfragen gekoppelt mit Werten aus der derzeitigen Sicht nicht funktionieren…

Hi Andre

vielleicht verstehe ich es nicht richtig, aber reden wir jetzt von einer
cRM Ansicht, wo du bei einer Datensatzauswahl auf einen bestimmten
Feldwert zugreifen musst? Dann schau dir in der Referenz-Solution den
Datensatz-Auswahlfilter für Branche2 an, der benutzt das „Branche1“ Feld
für eine weiter einschränkende Auswahl. Kurzfassung: du kannst Felder
der aktuellen Ansicht in den doppelt-spitzen Klammern einfügen (bei der
Funktion ‚Wähle Relationalen Datensatz‘, macht aber ja auch nur dort Sinn)

Falls das ganz in einem Srcipt stattfinden soll, musst du im Script den
SQL-Code generieren und die Platzhalter selbst mit den per
GetContentsByName ermittelten Inhalten ersetzen.

HTH

Alex.


CRM-Leitsatz: „Das einzige, was wirklich stört, ist der Kunde!“ :wink:

Hi Andre,

die musst bei MSSQL und unique-identifier Feldern (wovon ich bei deinen
Feldern namens „…ID“ jetzt einfach mal ausgehe) ein „0x“ davorpacken
(ohne Anführungszeichen). MSSQL versucht aus dem vom cRM stupide an der
entsprechenden Stelle eingefügten Feldinhalt für den Vergleich erstmal
eine UUID zu machen, dazu stimmt das Format aber nicht, daher vmtl. auch
die Fehlermeldung.

In deinem Fall sieht das also so aus (ersetze die << und >> durch die
„echten“ doppelt-spitzen Klammern)

SELECT *
FROM Kunde
WHERE id IN
(
SELECT „Kunde“.„id“
FROM „Kunde“
WHERE „Kunde“.„FirmenID“ <> 0x<> OR „Kunde“.„FirmenID“ IS NULL
EXCEPT
SELECT „Kunde“.„id“
FROM „KUNDE“ JOIN „cRM_User“.„Lead_Firma“ ON „Kunde“.„id“ =
„cRM_User“.„Lead_Firma“.„Partner_kund_ID“
WHERE („cRM_User“.„Lead_Firma“.„Partner_fir_ID“ <> 0x<> AND
„cRM_User“.„Lead_Firma“.„Partner_kund_ID“ <> 0x<<Partner_kund_ID>>)
OR („cRM_User“.„Lead_Firma“.„Partner_fir_ID“ IS NULL AND
„cRM_User“.„Lead_Firma“.„Partner_kund_ID“ <> 0x<<Partner_kund_ID>>)
)

HTH,

Alex.

PS: bei Textfeldern müssten entsprechend anstattdessen explizit noch
einfache Anführungszeichen drumherum, also bspw. ‚<>‘.


CRM-Leitsatz: „Das einzige, was wirklich stört, ist der Kunde!“ :wink:

Hi,
genau das wollte ich wissen. Ich probiers gleich mal aus.
Danke, hast mir wirklich sehr weiter geholfen, da ich auf entsprechende Probleme noch an vielen anderen Stellen treffen werde!

Grüße
André

Hi Andre,

die musst bei MSSQL und unique-identifier Feldern (wovon ich bei deinen
Feldern namens „…ID“ jetzt einfach mal ausgehe) ein „0x“ davorpacken
(ohne Anführungszeichen). MSSQL versucht aus dem vom cRM stupide an der
entsprechenden Stelle eingefügten Feldinhalt für den Vergleich erstmal
eine UUID zu machen, dazu stimmt das Format aber nicht, daher vmtl. auch
die Fehlermeldung.

In deinem Fall sieht das also so aus (ersetze die << und >> durch die
„echten“ doppelt-spitzen Klammern)

SELECT *
FROM Kunde
WHERE id IN
(
SELECT „Kunde“.„id“
FROM „Kunde“
WHERE „Kunde“.„FirmenID“ <> 0x<> OR „Kunde“.„FirmenID“ IS NULL
EXCEPT
SELECT „Kunde“.„id“
FROM „KUNDE“ JOIN „cRM_User“.„Lead_Firma“ ON „Kunde“.„id“ =
„cRM_User“.„Lead_Firma“.„Partner_kund_ID“
WHERE („cRM_User“.„Lead_Firma“.„Partner_fir_ID“ <> 0x<> AND
„cRM_User“.„Lead_Firma“.„Partner_kund_ID“ <> 0x<<Partner_kund_ID>>)
OR („cRM_User“.„Lead_Firma“.„Partner_fir_ID“ IS NULL AND
„cRM_User“.„Lead_Firma“.„Partner_kund_ID“ <> 0x<<Partner_kund_ID>>)
)

HTH,

Alex.

PS: bei Textfeldern müssten entsprechend anstattdessen explizit noch
einfache Anführungszeichen drumherum, also bspw. ‚<>‘.


CRM-Leitsatz: „Das einzige, was wirklich stört, ist der Kunde!“ :wink:

Auch ich bin über dieses Problem fast verrückt geworden und dann gottseitdank auf diesen Beitrag gestoßen, der mir letztlich, trotz seiner typografischen Schwächen zur Lösung weitergeholfen hat. Leider hatte sich Andre ja nicht mehr gemeldet, ob es funktioniert hat. Ich kann nur sagen: JAAAAA, es funktioniert!!!
Vielen Dank Alexander!

Meine freie SQL-Abfrage mit dem Wert des Feldes ID der aktuellen Ansicht lautet:

select „Persons“.„ID“
from „Persons“
where exists (select „ID“ from „ProjectAssignment“ where „Persons“.„ID“ = „ProjectAssignment“.„PersonID“
and „ProjectAssignment“.„ProjectID“ = 0x«ID»)

falls das Chevron-Zeichen nicht kommt, hier ein typografischer „Ersatz“

select „Persons“.„ID“
from „Persons“
where exists (select „ID“ from „ProjectAssignment“ where „Persons“.„ID“ = „ProjectAssignment“.„PersonID“
and „ProjectAssignment“.„ProjectID“ = 0x<>)