Page 1 of 1

Master/Detail Einschränkung

PostPosted: Fri Nov 16, 2012 6:31 pm
by johnit
Kann die Liste der Master-Details auf jene Detail-Sätze eingeschränkt werden, die noch nicht dem Master-Satz zugeordnet sind?

Beispiel:

Der Master Satz "Komponente" enthält 0 bis n zugeordnete Entwickler. Die möglichen Entwickler stammen aus einer eigenen Stammdaten Tabelle. Beim Hinzufügen eines neuen Entwicklers sollten die bereits zugeordneten Entwickler nicht mehr angeboten werden weil es ansonsten zu einer "unique constraint" Exception kommt.

Ein ähnliches Problem tritt in der Showcase-Anwendung auf, wenn man zu einem Staat nochmals ein Bundesland hinzufügt, das bereits zugeordnet ist.

Re: Master/Detail Einschränkung

PostPosted: Fri Nov 16, 2012 7:09 pm
by Support@SIB
Der einfachste Weg ist über eine View wie z.B.:

Code: Select all
create or replace view v_komp_user_notassigned as
select e.id
      ,e.name
      ,k.id komp_id
  from komponenten k,
       entwickler e
 where not exists (select *
                     from komp_entwickler ke
                    where ke.entw_id = e.id and ke.komp_id = k.id)

Diese View dann im Life-cycle Objekt des Screens für Ihre DBStorage verwenden.

Am Client z.B.:

Code: Select all
private void initializeModel() throws Throwable
{
  …
  // Lookup für die noch nicht zugewiesenen Benutzer anlegen
  UILinkedCellEditor lceUserNotAssigned = new UILinkedCellEditor(
    new ReferenceDefinition(new String[] {"ENTW_ID", "ENTW_NAME"},
                            rdbKompUserNotassigned,
                            new String[] {"ID", "NAME"}));

  // Die KOMP_ID der aktuellen Zeile als Suche mit der KOMP_ID im Lookup verknüpfen
  lceUserNotAssigned.setSearchColumnMapping(new ColumnMapping(new String[] {"KOMP_ID"}))

  // Lookup als Editor auf die richtige Spalte hängen.
  rdbKompEntwickler.getRowDefinition().getColumnDefinition("ENTW_NAME").
     getDataType().setCellEditor(lceUserNotAssigned);

Re: Master/Detail Einschränkung

PostPosted: Fri Nov 16, 2012 7:27 pm
by johnit
Die vorgeschlagene Weg funktioniert bestens.