niedziela, 21 października 2012

Import wymagań z MS Excel

W artykule Import wymagań z MS Word opisałem prostą metodę usprawniającą kopiowanie treści z edytora tekstu. Zasugerowałem, że można to wykorzystać do importu wymagań. Zaznaczyłem, że ta metoda jest przydatna, gdy dysponujemy bardzo ograniczonym czasem na wykonanie zadania. Jeśli jednak stać nas na solidne przygotowanie warsztatu pracy, spróbujmy wykorzystać VBA (Visual Basic for Applications) w MS Excel i opracujmy swój własny importer wymagań.
Zacznijmy jednak od początku...

Dlaczego mowa o imporcie wymagań?

Dlaczego mechanizmy importu zawężam tylko do wymagań, podczas gdy mechanizmy te są uniwersalne i umożliwiają importowanie elementów dowolnego typu?
Rzeczywiście można importować rozmaitego rodzaju treść do Enterprise Architect. Ja sam importowałem np. przypadki testowe, procesy biznesowe, komponenty aplikacyjne czy też urządzenia. Z punktu widzenia swojej praktyki w wielu projektach zauważam, że najczęściej potrzebny jest jednak właśnie import wymagań.
Wynika to z tego, że zanim wymagania zostaną udokumentowane, konieczne jest ustalenie ich zakresu. Treść wymagań ustala się wraz z klientem podczas spotkań lub poprzez wymianę uwag i odpowiadanie na uwagi w formie pisemnej.
Nie wyobrażam sobie, aby użytkownik z działu merytorycznego korzystał z repozytorium w narzędziu Enterprise Architect do przeglądania i czytania propozycji wymagań. Podobnie nie wyobrażam sobie edycji treści wymagań na spotkaniu bezpośrednio w Enterprise Architect.
Uważam, że do wymiany informacji z klientem, zwłaszcza z użytkownikiem merytorycznym powinny służyć dokumenty w formacie MS Word i MS Excel, gdyż są osoby merytoryczne czują się swobodnie korzystając z tych programów. W takim układzie potrzebne są mechanizmy zarówno do importu treści do modelu Enterprise Architect, jak i mechanizmy eksportu (np. raportowanie), dzięki którym będziemy w stanie "przerzucić" treści w drugą stronę.



Dlaczego MS Excel?

Po co opracowywać własny importer wymagań w VBA w sytuacji, gdy możemy wykorzystać istniejący w Enterprise Architect importer plikow CSV? Od wersji Enterprise Architect 9.1 możliwe jest nawet importowanie wartości Tagged Value. Ta cecha jest istotna w przypadku wymagań, gdyż do opisu wymagań często są wykorzystywane dodatkowe, niestandardowe atrybuty, takie jak źródło wymagania, właściciel, kategoria itp.
Owszem, funkcja importu z plików w formacie CSV może okazać się przydatna, ale ma swoje wady. Są to:
  • konieczność wykonania dodatkowego kroku - eksport plik XLS do CSV, a potem import pliku CSV;
  • umieszczenie w treści opisu znaku podziału (np. średnik) skutkuje błędami;
  • znaki podziału wiersza umieszczone w komórce MS Excel (znak LF zamiast CR/LF) nie są poprawnie interpretowane.
Import bezpośrednio z pliku MS Excel jest szybszy, zawartością komórki mogą być dowolne znaki, możemy wykorzystać rozmaite formuły w języku Visual Basic do przeprowadzenia wstępnej walidacji danych oraz przekształcenia ich do pożądanej postaci.
Istniejące już wcześniej w modelu elementy (wymagania) mogą być synchronizowane z plikiem MS Excel, to znaczy, że jeśli importer napotka w modelu wymaganie o określonej nazwie, to nie utworzy kopii, tylko zaktualizuje treść tego istniejącego wymagania. 
A co najważniejsze uzyskanie dostępu do API Enterprise Architect sprawia, że zastanawiamy się nad dalszą automatyzacją zadań już po imporcie. Możemy w skrypcie VB utworzyć automatycznie nowy diagram a zaimportowane elementy umieścić automatycznie na tym diagramie, możemy stworzyć automatycznie powiązania pomiędzy elementami itd.

Jak stworzyć własny importer wymagań?

Na szczęście nie musimy zaczynać pisać wszystkiego od początku. W społeczności użytkowników programu Sparx Enterprise Architect (Enterprise Architect Community) aktywnie udziela się Geert Bellekens, który opracował bardzo przydatne narzędzie "Simple VBA Excel to EA importer" dostępny do pobrania po zarejestrowaniu się pod adresem: community.sparxsystems.com/resources/scripts/simple-vba-excel-ea-importer.
Skrypt działa w sposób bardzo intuicyjny i co ważne nie wymaga żadnej wcześniejszej konfiguracji.
  1. Otwórz w programie EA model, do którego chcesz przeprowadzić import (sprawdź, czy uruchomiona jest tylko jedna instancja programu EA, inaczej dane mogą trafić tam, gdzie się nie spodziewasz).
  2. W modelu EA w oknie Project Browser zaznacz pakiet, do którego chcesz przeprowadzić import.
  3. Otwórz plik MS Excel, który zawiera właściwą treść oraz skrypt importera.
  4. Otwórz w pliku MS Excel zakładkę z danymi, które chcesz wyeksportować.
  5. Wybierz z menu programu MS Excel: Add-ins->Import lub naciśnij przycisk Run w oknie Microsoft VBA.
Czyil import odbywa się w kontekście otwartego arkusza danych oraz w kontekście zaznaczonego pakietu w EA. Nie ma potrzeby wskazywania ścieżek do plików, edytowania plików konfiguracyjnych itp. Generalnie wszystko działa od pierwszego przycisku...
Latem 2012 roku autor opublikował drugą wersję tego narzędzia. W przypadku, gdy potrzebujemy zaimportować tylko nazwę wymagania, stereotyp i treść wymagania wystarczy, że wprowadzimy te dane i naciśniemy przycisk Import, a model zostanie wzbogacony o nowe elementy nawet bez potrzeby zaglądania w kod Visual Basic. Jest to według mnie duży ukłon w stronę analityków, którzy nie muszą znać się na pisaniu kodu.

Jak działa importer?

Jeśli jednak ktoś nabierze ochoty, żeby pogrzebać w kodzie zamieszczam kilka wskazówek.
Aby w ogóle importer zadziałał, po otwarciu pliku musimy zgodzić się na uaktywnienie makr. Potem otwieramy okno Microsoft Visual Basic for Application poprzez naciśnięcie Alt+F11 (aby dostęp do tego okna był możliwy z menu należy uaktywnić narzędzia developerskie w opcjach MS Excel).
Naszym oczom ukaże się takie okno:
Skrypt składa się z jednego modułu o nazwie ExcelImporter oraz dwóch zestawów funkcji: EAConnector, który zawiera funkcje dotyczące integracji z Enterprise Architect oraz ExcelConnector, który służy do wczytania  całej zawartości aktywnego arkusza do pamięci.

Geert, autor skryptu, dzieli się z innymi efektami swojej pracy i zachęca wręcz do dostosowywania go do własnych potrzeb. Jeśli będziemy chcieli wykorzystać go w istniejącym pliku Excela, wówczas warto pamiętać o tym, że aby zadziałał, musimy aktywować dostęp z poziomu programu MS Excel do API programu Sparx Enterprise Architect. Aby to zrobić należy w oknie Microsoft VBA korzystając z menu otworzyć okno: Tools->References...

Reference to Enterprise Architect Object Model

Podstawowe wskazówki do zmian

Początek danych w MS Excel

Set excelData = excelConn.getValues(2, 1)
wskazuje miejsce, od którego ma się rozpocząć import. Domyślnie jest to drugi wiersz (2) i pierwsza kolumna (1).

Zamiana znaku końca wiersza

classDescription = Replace (row.Item(4), vbLf, vbCrLF)



Opisy wymagań mogą być podzielone na wiersze. Jest to istotne zwłaszcza, gdy mamy w treści są wypunktowania lub wyliczenia. Powyższa linia pozwala zamienić w treści czwartej kolumny (4) znaki końca wiersza na właściwy format.

Unikalny identyfikator wymagań

req_lp = Format(row.Item(2), "000")


Jeśli decydujemy się na import wymagań z MS Excel, to dlaczego by nie wykorzystać funkcji tego programu do wygenerowania unikalnych identyfikatorów wymagań. W tym przypadku w kolumnie drugiej (2) utworzono serię liczb poprzez przeciągnięcie myszą w dół arkusza. Dzięki temu każde wymaganie (czyli każdy kolejny wiersz) ma przypisaną kolejną liczbę. Powyższa linia pozwala na przypisanie do zmiennej req_lp zer wiodących. W tym przykładzie identyfikatorem będzie liczba trzycyfrowa, np. 001, 002, itd.


Dodanie tagged values

funkcja addOrUpdateClassTag

Powyżej zamieszczony kod to przykład funkcji, która umożliwia zapisanie wartości określonej kolumny jako tagged value w kontekście dodawanego elementu. W przypadku, gdy dany element posiada już tagged value o wskazanej nazwie, wówczas jest tylko aktualizowana jego wartość.


Inne wskazówki

Możemy swój skrypt rozwijać dalej np. zakładać podpakiety i importowane wymagania rozdzielać do nich wg ich kategorii. Możemy w każdym pakiecie tworzyć nowe diagramy o nazwie pakietu, a wszystkie dodawane wymagania umieszczać na takim diagramie, a potem wykonać funkcję, która spowoduje automatyczne rozmieszczenie zawartości diagramu. Można się pokusić również o zwrotne umieszczanie w pliku MS Excel GUIDów zaimportowanych elementów, dzięki czemu można uzyskać dwustronną synchronizację wymagań.
Możliwości jest sporo. Więcej informacji na temat funkcji API Sparx Enterprise Architect można znaleźć w Pliku Pomocy do programu.

Jest jeszcze alternatywa w postaci programu Tormigo firmy Modesto. Dzięki temu narzędziu jesteśmy w stanie importować wymagania z dokumentów Open Office i MS Word oraz zapewnić dwustronną synchronizację treści wymagań z arkuszem kalkulacyjnym Google Docs.


1 komentarz:

  1. Obecnie Simple VBA Excel to EA importer jest dostępny w wersji 3.
    W stosunku do poprzedniej wersji dodano możliwość importowania definicji do słownika (Glossary).

    OdpowiedzUsuń