1. Konektor pro Sparx Enterprise Architect

    Článek: AN0002474Aktualizováno:: 16.05.2022

    Pomocí konektoru můžete přenášet data mezi ObjectGears a Sparx Enterprise Architect. To vám umožní dostat např. informace o procesech namodelovaných v EA do konfigurační databáze CMDB a provést Business Impact Analýzu nebo naopak do EA dostat konfigurační položky (aplikace, servery) a ty v EA propojit s procesy do map zahrnujících, jak procesní, tak aplikační, datovou a technologickou vrstvu.

    Konektor představuje program Com.ObjectGears.EnterpriseArchitect.exe. Konfigurace konektoru se provádí v souboru Com.ObjectGears.EnterpriseArchitect.exe.config (nastavení mj. Connection stringu do databáze). Konektor se spouští s parametrem kód_modelu.kód_třídy. K tomu můžete použít bat soubor, který se bude spouštět.

    Příklad bat souboru:

    "C:\OG\OG.EA\Com.ObjectGears.EnterpriseArchitect.exe" "ea.ea_scripts"
    pause

    Výše uvedený cmd příkaz (bat soubor) spustí konektor, který provede skripty uložené ve třídě ea_scripts modelu ea. Spuštění musí probíhat na počítači s přihlášeným uživatelem, protože Enterprise Architect vyžaduje kontext uživatele. Konektor tedy nemůže spouštět například winservice ObjectGears ani web ObjectGears, ale může běžet například jako Naplánovaná úloha (Scheduld task) Windows. 

    Vlastní logika je tak uložena ve třídě ObjectGears, kde ji můžete jednoduše editovat.

    Povinné sloupce třídy pro EA skripty:

    Kód sloupce Typ sloupce Popis
    name Text Název skriptu
    script Text Vlastní skript
    active Ano/Ne Informace, zda se skript má provádět
    order Celé číslo Pořadí, ve kterém má být skript spuštěn.

    Příklad skriptu pro přenos dat z Enterprise Architect do ObjectGears:

    OGEA.Open('C:\\EA\\Archimate\\Devices.eap');
    var pac = OGEA.FindPackage('Model\\Technology layer\\Source elements');


    var cl = OGModel.ClassDefs['ea_data'];
    var f = OG.DataRow.GetDataRowFilter(cl.Id);
    f.Datas_OnlyActiveRows = true;
    var drl = OG.DataRow.GetDataByFilter(f);

    var map = OGEA.CreateDataRowMapping();
    map.ElementName = 'name';

    //vytvori nove polozky do ea a "smaze" z ea ty co nejsou v drl
    var mres = pac.Merge(drl, map);

    //vytvorit záznamy v OG
    for( var i = 0; i < mres.NotMappingElements.Count; ++i)
    {
      var el = mres.NotMappingElements[i];
      var ndr = OG.DataRow. CreateNew(cl.Id);
      ndr['name'] = el.Name;
      ndr['stereotype'] = el.Stereotype;
      OG.DataRow.SaveData(ndr);
    }

    //smazat nenaparovane DR
    for( var i = 0; i < mres.NotMappingDataRows.Count; ++i)
    {
      var dr = mres.NotMappingDataRows[i];
      OG.DataRow.DeleteData(dr.Id, cl.Id);
    }

    //aktualizovat DR pokud byla změna
    for( var i = 0; i < mres.CurrentDataRows.Count; ++i)
    {
      var dr = mres.CurrentDataRows[i];
      var el = dr.GetColumnData(-1);

      if (dr['stereotype'] != el.Stereotype)
      {
        dr['stereotype'] = el.Stereotype;
        OG.DataRow.SaveData(dr);
      }
    }

    OGEA.Close();

    Skript načte z Enterprise Architect elementy ve složce Source elements...

    ...a uloží je do třídy EA data.

     

    Příklad skriptu pro přenos dat z ObjectGears do Enterprise Architect:

    OGEA.Open('C:\\EA\\Archimate\\Devices.eap');
    var pac = OGEA.FindPackage('Model\\Technology layer\\Imported elements');


    var cl = OGModel.ClassDefs['ea_data'];
    var f = OG.DataRow.GetDataRowFilter(cl.Id);
    f.Datas_OnlyActiveRows = true;
    var drl = OG.DataRow.GetDataByFilter(f);

    var map = OGEA.CreateDataRowMapping();
    map.ElementName = 'name';

    //vytvori nove polozky do ea a "smaze" z ea ty co nejsou v drl
    var mres = pac.Merge(drl, map);

    for( var i = 0; i < mres.NotMappingDataRows.Count; ++i)
    {
      var dr = mres.NotMappingDataRows[i];
      var el = pac.CreateElement(dr['name'], 'Class');
      el.Stereotype = dr['stereotype'];
      el.Update();
    }

    //smazat nenaparovane elementy v EA
    for( var i = 0; i < mres.NotMappingElements.Count; ++i)
    {
      var el = mres.NotMappingElements[i];
      pac.DeleteElement(el);
    }

    //nahrat zmeny v dr do el
    for( var i = 0; i < mres.CurrentDataRows.Count; ++i)
    {
      var dr = mres.CurrentDataRows[i];
      var el = dr.GetColumnData(-1);

      if (dr['stereotype'] != el.Stereotype)
      {
        el.Stereotype = dr['stereotype'];
        el.Update();
      }
    }

    pac.Update();

    OGEA.Close();

    Skript načte data z výše uvedené třídy EA data a uloží je do složky Imported elements.

×