Vyhledávání diagramů v Aktivních diagramech

Našel jsem si v sobotu chvilku pro sebe a do Aktivních diagramů dodělal možnost vyhledávat diagram při vkládání nového diagramu. Záložka „Find a Diagram“ tedy konečně něco dělá:

VyhledavaniDiagramuZadat můžete přesný název nebo jeho část, rozlišovat nebo potlačit rozlišování velkých a malých písmen, a pokud i to je vám málo, jsou k dispozici regulární výrazy.

A to je vlastně vše. Drobnost, ale snad potěší.

Rozšíření si jako obvykle můžete stáhnout, případně si o něm přečíst jako o celku.

Vývoj Aktivních diagramů není pasivní

I přes vánoční svátky se mi podařilo občas spustit Visual Studio, a tak mohu představit další novinku v Aktivních diagramech, kterou uživatelé chtěli.

Nečastějším požadavkem byla potřeba znát, zda diagram v dokumentu je či není vložen pomocí rozšíření Active Diagrams. Nyní není nic jednoduššího, než si zobrazit panel s informacemi o diagramu:

ActiveDiagramsTaskPanePokud je obrázek (diagram) v dokumentu označen a je vložen pomocí Active Diagrams, uvidíte základní data nejen o diagramu jako takovém, ale zvíte i datum vložení do dokumentu a poslední aktualizaci.

Okno s těmito informacemi se vyvolává na již známém místě – na záložce s doplňky. Ty jsou rozšířeny kromě jiného o zaškrtávací pole, které zobrazí nebo schová požadované informace.

AddonRibbonVer1_6Další dvě nová tlačítka pak slouží k:

  1. Spuštění Sparx Enterprise Architecta s repository připřazenou k dokumentu.
  2. Spuštění výchozího prohlížeče se stránkou produktu.

Rozšíření si jako obvykle můžete stáhnout, případně si o něm přečíst jako o celku.

 

Aktivní diagramy vybírají diagram aktivněji

Tři týdne stačily k tomu, abych udělal novou verzi rozšíření Active Diagram. Dnes není sice novinek tolik, vlastně je jen jedna, ale o to zásadnější.

Pokud chcete vložit nový diagram, již nemusíte kopírovat GUID diagramu ze spuštěného Enterprise Architectu, ale Active Diagram zobrazí stromovou strukturu odpovídající Project Browseru.

Z připravované verze Active Diagrams

Nová verze Active Diagrams

V ní jsou pak vidět jednotlivé balíky (packages) a diagramy. Jakmile diagram vyberete, vloží se do dokumentu. Stará možnost zůstala zachována, najdete ji na třetí záložce daného dialogu (viz obrázek).

S tím souvisí i to, že bylo třeba aktualizovat i návodné video, takže pokud chcete vše vidět, pusťte si jej.

Rozšíření si jako obvykle můžete stáhnout, případně si o něm přečíst jako o celku.

První aktualizace aktivních diagramů

Po čtrnácti dnech přichází první aktualizace rozšíření Active Diagrams. Co přináší?

LinkWithEAPSince1.1

  • Nové: V dialogu pro zadání repository EA je v rozbalovacím seznamu možno vybrat až z deseti naposledy použitých repository, které jste za poslední dobu otevřeli v EA.
  • Nové: V dialogu pro zadání repository EA je tlačítko na procházení disků s možností vybrat souborovou repository (přípona .EAP).
  • Nové: Pokud uživatel již má v dokumentu nějaký diagram a snaží se změnit repository, je dotázán, zda to myslí vážně (typicky může přijít o možnost aktualizace již vložených diagramů).
  • Opraveno: Návodný text je u všech tlačítek na záložce s rozšířeními (stačí na ně najet myší).
  • Opraveno: Pokud uživatel vložil nějaký diagram a poté změnil repository, rozšíření se snažilo načítat diagramy z původního místa.

Jestliže jsou tyto změny přímo pro vás, můžete začít stahovat instalační soubor.

Chcete mít aktivní UML diagramy i ve Wordu?

Občas chvíli trvá, než se z myšlenky stane hmatatelný výsledek. Mně se po mnoha letech podařilo dát dohromady vcelku jednoduchou věc: diagramy, které kopíruji z Enterprise Architecta do wordového dokumentu, tak se na stisk jednoho tlačítka v daném dokumentu samy aktualizují.

WordAddinEn

Toto přání jsem měl několik let, ovšem teprve minulý a tento měsíc jsem jej dokázal realizovat do podoby rozšíření pro Microsoft Word nazvané Active Diagrams.

To, jak to uživatelsky funguje, můžete vidět na videu níže. A pokud vás to zaujalo, tak můžete rovnou přejít na stránku, které je tomuto produktu věnována a to včetně možnosti stažení.

Budu rád, pokud vás zaujme a přijdete s dalšími možnostmi na vylepšení.

Přenos požadavků z Wordu do Enterprise Architectu

V minulém povídání jsem ukázal, jak relativně jednoduše přenést požadavky z Excelu do Enterprise Architectu. Dnes předvedu, jak toho lze dosáhnout z Wordu. Mnohé společnosti totiž své požadavky píší právě v něm.

Postup tentokrát bude trochu složitější, ale většinu jsem pro vás připravil. Jak tedy na to? Především se podívejme na to, jak se požadavky ve Wordu zaznamenávají. Já jsem vycházel z jednoduché tabulky (ne, nebudu zapírat, že v praxi „mí“ zadavatelé používají právě ji) ve Wordu, kde první sloupec je identifikace (jedinečný název) požadavku, text požadavku, priorita a vlastník. Identifikace je povinná, ostatní je volitelné (soubor si můžete stáhnout):

Uvedená tabulka musí splňovat ještě některé další podmínky:

  • Žádný řádek ve sloupcích nesmí začínat rovnítkem (níže řeknu proč).
  • Text v tabulce nesmí být formátovaný (pokud přesto je, je toto formátování při převodu ignorováno).
  • V tabulce nesmí být použity obrázky, vložené dokumenty a další netextové prvky (nebudou přeneseny).

Všimněte si také, že identifikace začíná zkratkou BR (Business Requirement) a dále číslem. Jednoduše v nich poznáte hierarchickou strukturu. Důležité je oddělovat jednotlivé úrovně tečkou, přičemž tyto úrovně musí být uvedeny na konci celé identifikace požadavku. Na začátku může být cokoliv. Tedy např. BR_1 a pak BR_1.1, nebo místo podtržítka mezera, místo BR slovo Požadavek nebo to může být úplně bez textu, jen s čísly. Ve Wordu lze navíc použít automatické číslování.

Vlastní převod bude probíhat s mezikrokem, který už dobře známe. Ano, přeneseme požadavky do Excelu. Ve Wordu označte celou tabulku (najeďte na ni myší, v levém horním rohu tabulky se objeví křížové šipky, na ně klikněte). Zkopírujte celou tabulku do schránky (pravé tlačítko myši nad křížovými šipkami a v kontextovém menu zvolit Kopírovat/Copy).

Nyní je třeba otevřít si Excel, ale pozor, nepůjde o libovolný sešit, ale je třeba si stáhnout speciální soubor s makrem (hned se k němu dostaneme), takže při otvírání je třeba makra povolit. Na záložce BR z Wordu pak označte pole A1 a vložte tabulku z Wordu. Výsledek bude vypadat přibližně takto:

Všimněte si jedné věci: u požadavku BR 1.3 jsem porušil pravidlo zákazu formátování textu. Tím jsem dostal nepříjemné rozdělení, ale zrovna s tímhle se skript popere se ctí.

V Excelu ze záložky View zvolte Macros a spusťte makro nazvané SpojPožadavky (jiné tam v seznamu stejně není).

Nyní se přepněte na záložku Požadavky pro EA. Uvidíte známou strukturu požadavků, jak jsme si ji ukazovali v předchozím článku.

Nyní tedy již zbývá jen uložit tento list jako CSV soubor a importovat do Enterprise Architectu. Definice importu je zřejmá:

Po importu se v Project Browseru objeví následující struktura:

Je vidět, že tentokráte nejsou použity balíky (Packages), ale vnořuji požadavky přímo do sebe (což ale lze ovlivnit úpravou makra).

Proč je to celé složitější a jak to funguje?

Postup je složitější z prostého důvodu: Enterprise Architect neumí přímý import z wordového dokumentu (abych byl upřímný, šlo by to pomocí OLE Automation např. přímo z Wordu, ale do toho se pouštět nechci). Proto bylo nutné udělat tento mezikrok s Excelem, který navíc použijeme pro přeformátování tabulky, která je sice příjemná zadavatelům, ale pro nás není úplně dostačující.

Klíčovým prvkem je skript v Excelu, který vykoná dost práce. Nejprve si jej můžete prostudovat:

    'maximální počet řádků, které ve vstupním sheetu zpracuju
    Const aMaxLinesToProcess As Integer = 5000
    
    'Konstanty listu Vstup
    Const cVstupSheet As String = "BR z Wordu"
  
    'Konstanty listu Výstup
    Const cVystupSheet = "Požadavky pro EA"


    'Globální proměnné
    Dim lVystupRow As Integer
    Dim shtVstup  As Worksheet  'list, kde najdu vstupní BR
    Dim shtVystup As Worksheet  'list, kam davam naformatované BR

Sub ClearSheet(ws As Worksheet)
    'vyčistí prvních 30 sloupců kromě prvního řádku
    'asi existuje elegantnější řešení, ale nemá cenu se jím trápit
    
    Dim lindex As Integer
        
    For lindex = 1 To 30
        lchar = Chr(lindex + 64) 'převedu si na znak "A" a vyšší
        
        If ws.Cells(ws.Rows.Count, lindex).End(xlUp).Row > 1 Then
            ws.Range(lchar & "2", ws.Cells(ws.Rows.Count, lindex).End(xlUp)).Clear
        End If
    
    Next lindex
End Sub

Sub WriteRequirement(aBR As String, aNotes As String, aPriority As String, aAuthor As String, aCSVKey As String, aCSVParentKey As String)
'zapíše jeden požadavek dle znění daného parametry na řádek dle globální proměné lVystupRow, kterou následně ještě navýší
    shtVystup.Cells(lVystupRow, 1).Value = aBR
    shtVystup.Cells(lVystupRow, 2).Value = aNotes
    shtVystup.Cells(lVystupRow, 3).Value = aPriority
    shtVystup.Cells(lVystupRow, 4).Value = aAuthor
    shtVystup.Cells(lVystupRow, 5).Value = "Requirement"
    shtVystup.Cells(lVystupRow, 6).Value = aCSVKey
    shtVystup.Cells(lVystupRow, 7).Value = aCSVParentKey
    lVystupRow = lVystupRow + 1
End Sub

Sub AppendTextToPreviousRequirement(aText As String)
'přidá text požadavku k předchozímu
    If lVystupRow > 2 Then
        shtVystup.Cells(lVystupRow - 1, 2).Value = shtVystup.Cells(lVystupRow - 1, 2).Value & Chr(10) & aText
    End If
End Sub

Function GetCSVKey(aText As String) As String
'z textu udělá klíč pro označení daného BR tak, že ořeže bílé znaky na začátku a na konci řetězce
    Dim znak As String
    Dim ascc As Integer
    
    'nejprve na konci (prostě proto, že mám na výběr a tedy chci) - ve skutečnosti to můžeme považovat za optimalisaci
    znak = Right(aText, 1)
    While (znak = ".") Or (znak = " ") Or (znak = Chr(9)) Or (znak = Chr(7)) Or (znak = Chr(160))
        aText = Left(aText, Len(aText) - 1)
        znak = Right(aText, 1)
    Wend
    
    'a pak na začátku
    znak = Left(aText, 1)
    While (znak = ".") Or (znak = " ") Or (znak = Chr(9)) Or (znak = Chr(7)) Or (znak = Chr(160))
        aText = Right(aText, Len(aText) - 1)
        znak = Left(aText, 1)
    Wend
        
    GetCSVKey = aText
    Exit Function
End Function

Function GetCSVParentKey(aText As String) As String
'rodič je určen odebráním posledního místa s tečkou
    If aText = "" Then
        GetCSVParentKey = ""
        Exit Function
    End If

    Dim lPointPos As Integer
    lPointPos = InStrRev(aText, ".")
    If lPointPos > 0 Then
        GetCSVParentKey = Mid(aText, 1, lPointPos - 1)
    Else
        GetCSVParentKey = ""
    End If

End Function


Sub SpojPožadavky()
    ' projedu celej sheet a pokud v prvním sloupci nic není, pak obsah toho druhého vložím k předchozímu, zbytek ignoruju.
    
    'nastavím proměnné pro listy
    Set shtVstup = Worksheets(cVstupSheet)
    Set shtVystup = Worksheets(cVystupSheet)
    
    ClearSheet shtVystup

    lVystupRow = 2

    Dim lVstupRow As Integer
    Dim lCSVKey As String
  
    For lVstupRow = 2 To aMaxLinesToProcess
        If shtVstup.Cells(lVstupRow, 1) = "" Then
            If shtVstup.Cells(lVstupRow, 2) <> "" Then
                AppendTextToPreviousRequirement shtVstup.Cells(lVstupRow, 2)
            End If
        Else
            lCSVKey = GetCSVKey(Trim(shtVstup.Cells(lVstupRow, 1)))
            WriteRequirement lCSVKey, shtVstup.Cells(lVstupRow, 2), shtVstup.Cells(lVstupRow, 3), shtVstup.Cells(lVstupRow, 4), lCSVKey, GetCSVParentKey(lCSVKey)
        End If
    Next lVstupRow

End Sub

Co vlastně dělá? Jeho úkolem je projít zdrojový list s požadavky překopírovanými z Wordu a připravit je pro export do CSV souboru. V případě, že narazí na řádek, který nemá zadanou identifikaci požadavku, ale má jeho text, přidá jej k tomu předchozímu. To nám vlastně vyřeší onen příklad s výčtem barev: sice se nepřenese formát výčtu, ale odrážky nám to alespoň provizorně zachová a přechod na nový řádek také, byť jde stále o jeden požadavek. Dále se snaží z identifikace požadavku vyčíst hierarchii a tu ve výsledku zohlednit.

Z uvedeného také plyne ono omezení, že požadavek (resp. nový řádek požadavku) nesmí začínat rovnítkem, neboť Excel by to pochopil jako vzorec (pokud ale chcete, můžete si skript zdokonalit).

Připouštím, že skript obsahuje pár nevzdělaných míst (např. mazání výsledkového listu nebo to, že standardně pracuje s prvními 5000 řádky zdrojového listu). Je jen na vás, abyste si jej případně upravili. Stejně tak můžete vložit vytváření balíků namísto vnořování požadavků nebo jinak pojmenovávat požadavky. Vše je na vaší vůli. Pokud se budete chtít podělit s vaším výsledkem, klidně to v komentáři udělejte.