Container verschachteln?

Ich würde gerne in einem Container Datensätze anzeigen lassen die nicht direkt verknüft sind sondern Relationen zu verknüpften Datensätzen haben. Die erste Relation ist dabei 1:N verknüft und die zweite auch, deshalb kann man die Felder nicht direkt beim konfigurieren der Ansicht anzeigen lassen.

Gibt es die Möglichkeit zwi Container miteinander zu verschachteln und das so zu lösen?

Herzlich Willkommen!

Das könnte theoretisch über einen Zwischenweg gehen: Sie könnten eine Datenbanksicht definieren, die ein JOIN aus dem „Ober-Container“ und dem „Unter-Container“ erzeugt. Sie sollten dabei jedes Feld in der Datenbanksicht-Definition unbedingt prefixen, damit Sie später erkennen können, ob ein Feld urspr. aus dem Ober- oder dem Unter-Container stammt (und eindeutig müssen sie sowieso sein).

Auf diese Datenbanksicht stülpen Sie dann eine neue Ansicht. Und diese Ansicht verknüpfen Sie dann 1:N genau analog wie den Ober-Container. Wenn Sie dann diesen „Join-Container“ platzieren, könnten Sie dort noch nach einem Feld aus dem Ober-Container gruppieren, dann hat die Darstellung auch ihre Ordnung.

Über Doppelklick-Verhalten und „Neu“/„Ändern“/„Löschen“-Funktionsweise müsste man sich dann nochmal separate Gedanken machen. (Worauf soll sich Doppelklick/Neu/Ändern/Löschen denn beziehen bzw. wohin umgeleitet werden: auf den Ober-Container-Ansicht oder die Unter-Container-Ansicht?) - Ich will jetzt aber nicht zu viele Unbekannte in den Raum werfen, es aber dennoch schonmal angesprochen haben. :slight_smile:

1 „Gefällt mir“

Hier ein kleines Beispiel, es handelt sich um die „Adressen“-Ansicht, welche exakt solch ein JOIN von „Companies“ mit „Contacts“ darstellt:

CREATE VIEW [dbo].[AddressesTEST]
AS
SELECT (CASE WHEN dbo.Contacts.ID IS NULL THEN dbo.Companies.ID ELSE dbo.Contacts.ID END) AS AddressID -- fungiert als DatensatzID
, dbo.Contacts.ID AS Contact_ID
, dbo.Contacts.Salutation AS Contact_Salutation
, dbo.Contacts.Title AS Contact_Title
, dbo.Contacts.Name AS Contact_Name
, dbo.Contacts.Firstname AS Contact_Firstname
, dbo.Contacts.SalutationLetter AS Contact_SalutationLetter
, dbo.Contacts.RecycleBinID AS Contact_RecycleBinID
-- ...
, dbo.Companies.ID
, dbo.Companies.Company
, dbo.Companies.Company2
, dbo.Companies.Company3
, dbo.Companies.RecycleBinID
-- ...
FROM dbo.Contacts FULL OUTER JOIN dbo.Companies 
            ON dbo.Contacts.CompanyID = dbo.Companies.ID
WHERE (dbo.Companies.RecycleBinID IS NULL) AND (dbo.Contacts.RecycleBinID IS NULL) -- Papierkorbdatensätze ausblenden
1 „Gefällt mir“

Vielen Dank für die schnelle Antwort! Ich schau mal ob ich das umgesetzt bekomme.
neu/ändern/löschen soll erstmal sowieso nicht möglich sein, aus der container ansicht, aber über das doppelklick verhalten denk ich dann nochmal nach :thinking:

Das können Sie folgendermaßen handhaben:

Legen Sie ein Scriptereignis „Menübefehl wird ausgeführt“ in der Ansicht an, die den Container enthält. Der Menübefehl, der Sie interessiert, ist 33577 (Container-Doppelklick).

Wenn der auslösende Container in der Ansicht „Ihr Spezialcontainer“ ist, dann machen Sie selbst etwas, z. B. die Ansicht des Ober-Containers öffnen und darin auf den doppelgeklickten Containerdatensatz filtern, und sagen der Anwendung, dass Sie den Doppelklick geregelt haben und es nichts (anderes) mehr zu tun gibt.

Beispiel für den Doppelklick auf den „Ansprechpartner“-Container der Ansicht „Firmen“ (Large-Solution):

 <!--#pragma keepeditmode-->

dataItems = Split(WScript.Event.Data, "|", -1, 1) 

If dataItems(1) = "ID.Kontakte.CompanyID#{268F4F25-E27E-4632-B68A-2F5E20CAA466}" Then
	
	MsgBox "Do your own stuff here! :-)"
	
	' we have handled this event by ourselves, do not propagate it to the application:
	WScript.Event.Cancel = true

End If

Analog* können Sie auch Neu/Ändern/Löschen verhindern u. v. m. :nerd_face:

*) SDK Doku combit CRM12 - Kontextmenüs