2017-09-26 2 views

Antwort

1

Alle Teile, die aus dem Deskriptor erstellt wurden, haben die gleiche ID, daher liegt es an Ihnen, zusätzliche identifizierende Informationen hinzuzufügen.

Eine Möglichkeit, dies zu tun ist, um Ihre eigene einzigartige Daten seitens des transienten Daten hinzufügen, wenn Sie die Rolle zu erstellen:

Object uniqueId = ..... 

part.getTransientData().put("part id key", uniqueId); 

Und lesen Sie die ID mit:

part.getTransientData().get("part id key"); 

zu Finden Sie das Teil, das Sie verwenden können eine der findElements Methoden von EModelService. Mit der Version Selector können Sie eine Übereinstimmung für die ID und die Daten codieren. Zum Beispiel, wenn alles in einem Teilstapel:

MPartStack partStack = .... get part stack 

List<MPart> parts = modelService.findElements(partStack, MPart.class, EModelService.ANYWHERE, new FindPartSelector(id, data)); 

wo FindPartSelector ein Selektor sind Sie schreiben. Dies hat nur eine Methode:

@Override 
public boolean select(final MApplicationElement element) 
{ 
    // TODO match id and transient data 
} 

Beachten Sie, dass die transienten Daten verloren gehen, wenn Sie Ihren RCP verlassen. Wenn diese Teile zwischen Sitzungen beibehalten werden, können Sie getPersistedState statt getTransientData verwenden.

+0

ok Ich werde immer alle Teile durchlaufen müssen, die durch 'partService.getParts()' kommen und dann meinen Teil finden. ist das richtig ? – ssdimmanuel

+1

Sie können eine 'EModelService'' findElements' Methode verwenden, um die Suche durchzuführen - siehe aktualisierte Antwort. –

+1

Beachten Sie, dass die temporären Daten gelöscht werden, wenn das Workbench-Modell beibehalten wird (Parameter -clearPersistedData nicht festgelegt). Wenn nun das Workbench-Modell beim nächsten Start wiederhergestellt wird, haben die Teile diese "sekundäre ID" nicht. –

Verwandte Themen