To implement a feature for an Enterprise Architect (EA) Add-In I needed to show a dialog to the user, which allows him to select a package. The repository class provides a method called InvokeConstructPicker
to do so. It seemed to be pretty simple. It was, but you have to consider a small detail, which I did not do in the beginning.
InvokeConstructPicker (string ElementFilter)
takes an element filter as argument and returns an int. To filter for packages only you have to pass IncludedTypes=Package
as argument. As I do so, I expected to get the Id of the selected package as return value and tried to load the package as follows.
var result = repository.InvokeConstructPicker("IncludedTypes=Package");
var package = repository.GetPackageByID(result);
GetPackageByID
with the result of the InvokeConstructPicker
method failed. After a quick debugging session I recognized, that the Id that gets returned by the InvokeConstructPicker
method is the Id of the element which is not the same as the Id of the package. Having realized that, I fixed the code as follows.
var result = repository.InvokeConstructPicker("IncludedTypes=Package");
var element = repository.GetElementByID(result);
var package = repository.GetPackageByGuid(element.ElementGUID);