Při programování rozšíření pro EA jsem narazil na další chybu. Funkce Repository.GetContextItemType() nevrací správnou hodnotu, pokud máte vybraný model v Project Browseru. Namísto hodnoty otModel dostanete otNone, což není úplně zdravé. Chybu jsem poslal do Sparxu, ale údajně o ní již dlouho vědí, ovšem do opravy se jim zřejmě nechce. Než se tak stane, můžete použít následující funkci, které problém řeší:
protected EA.ObjectType temporaryGetContextItemType(EA.Repository Repository) {
EA.ObjectType vOT = Repository.GetContextItemType();
if (vOT == EA.ObjectType.otNone)
//try it to retype to Package and check if it is a model...
//if anything gets wrong, forget it
try {
if (((EA.Package)(Repository.GetContextObject())).ParentID == 0)
return EA.ObjectType.otModel;
} catch { }
return vOT;
}
Funkce v případě, že GetContextItemType vrátí otNone, tak zkusí vybraný objekt přetypovat na balík a zjistit jeho ParentID. Pokud se to povede a hodnota je rovna nule, jde o model, jinak je to cokoliv jiného, chybné přetypování odchytím v sítu výjimek a navrátím původní hodnotu.
Pokud budete dále pracovat s balíkem, který je vlastně modelem, tak také dejte pozor na to, že jeho vlastnost Element je null (což se v dokumentaci nedozvíte). Není to od autorů hezké.
A drobnost na závěr: funkce očekává, že máte otevřený nějaký projekt. Že tomu tak opravdu je, byste si měli zajistit sami např. vhodným povolením či zakázáním jejího volání v EA_GetMenuState.