Własna kontrolka SSIS, część 4 – Początki projektu (wreszcie)

Jednym z dużych plusów konkursu Daj Się Poznać jest możliwość czytania tekstów osób, które też uczą się nowych rzeczy. Git-a znam, jednak dość słabo bo na co dzień nie muszę korzystać (prędzej SVN czy TFS) – dlatego fajnie czytało się tekst Justyny o podstawach Git-a. Tyle darmowej i zasłużonej reklamy i do rzeczy.

Kontrolka SSIS powstanie w Visual Studio 2015 Community. W wersji Express też się da, ale skoro jest możliwość użycia bardziej zaawansowanej darmowej wersji, to czemu nie? Żeby korzystać z Git-a w VS potrzebna jest wtyczka. W menu wybieramy Tools > Extensions and Updates... i wybieramy/szukamy wtyczki GitHub Extension for Visual Studio. Potem w ramach Team Explorer łączymy się przez Connect ze swoim kontem na GitHub-ie, wybieramy Clone żeby pobrać repozytorium i gotowe. O ile oczywiście repozytorium już mamy utworzone. Jeśli nie mamy, to jak najbardziej możemy utworzyć z poziomu wtyczki.

Mamy własną kopię repozytorium, to pora utworzyć projekt. Żeby zbudować własną kontrolkę tworzymy projekt biblioteki – Class Library. Ponieważ jeśli piszę coś w .NET to korzystam z C# to tak samo będzie i teraz – wybieram z szablonów projektów Visual C# > Windows > Class Library i gotowe – mamy projekt i całe rozwiązanie (solution).

Pierwsze co zrobimy to przegląd referencji. Po utworzeniu projektu widzę listę poniżej (ale nie ma co się do niej przyzwyczajać):

Microsoft.CSharp
System
System.Core
System.Data
System.Data.DataSetExtensions
System.Net.Html
System.Xml
System.Xml.Linq

W tym momencie cofamy się najpierw w czasie do mojego ostatniego użycia Visual Studio do czegoś innego niż pakiet SSIS. Dawno dawno temu, w odległej galaktyce w poprzedniej pracy pisałem kod C# wykorzystując Visual Studio 2008 Express. Piękny rok 2014, ograniczenia licencyjne i standardy firmowe, w kinach „Jak wytresować smoka 2”, w radio Prayer In C. Genialni bracia Ylvisåker pokazują jak wykonać Trucker’s Hitch. I może wystarczy.

Pierwsze, co się rzuca w oczy to referencja do Microsoft.CSharp, która podobno jest dodawana domyślnie od wersji 2010 do większości szablonów projektów (choć widziałem, że przynajmniej dla VS Express 2012 wcale niekoniecznie, ale może nie wszystko pokazywali). W internetach piszą, że może być mniej potrzebna niż bardziej i można usunąć. To usuwam. Jak będzie coś nie tak, to przywrócę i napiszę, że usuwanie było błędem.

Następne do usunięcia – System.Data.DataSetExtensions, System.Net.Http i System.Xml.Linq. Jeszcze nie wiem jak będzie z System.Data i System.Xml, ale te dwie mogę usunąć potem.

Co dodać? Będziemy pracować z SSIS i WinSCP, to dołączamy ich biblioteki. W przypadku WinSCP sprawa jest prosta – ze strony winscp.net ściągamy instalkę biblioteki .NET i podłączamy WinSCPnet.dll. Z SSIS jest większa sprawa, bo chyba powinniśmy mieć zainstalowane SQL Server Integration Services na maszynie, na której piszemy kod. Tyle że nie. Możemy ściągnąć SQL Server Data Tools (w momencie pisania – w wersji Preview dla Visual Studio 2015) i po instalacji możemy znaleźć odpowiednie biblioteki w katalogu C:\Windows\Microsoft.NET\assembly\GAC_MSIL. Niestety – tej, która najbardziej mnie interesuje nie widać, kiedy klikniemy prawym przyciskiem myszy na References i wybierzemy Add Reference… a potem poszukamy na liście menu Assemblies > Extensions. Inne są, tej nie ma. Taka sytuacja. Ale – w końcu to wersja Preview i może się poprawi.

Interesuje nas biblioteka Microsoft.SqlServer.ManagedDTS.dll. Zgodnie z powyższym zaglądamy do katalogu C:\Windows\Microsoft.NET\assembly\GAC_MSI\Microsoft.SqlServer.ManagedDTS.dll i widzimy kolejne podkatalogi. W moim przypadku – trzy:
v4.0_11.0.0.0__9845dcd8080cc91
v4.0_12.0.0.0__9845dcd8080cc91
v4.0_13.0.0.0__9845dcd8080cc91

Szybkie google-fu nie pozwala na znalezienie zadowalającej odpowiedzi co wybrać, to zdajemy się na intuicję. SQL Server Data Tools 2016 mają rozwiązać problem wstecznej kompatybilności projektów SSIS (np. wersja Data Tools dla SQL Server 2014 nie obsłuży projektów dla wersji 2012) – zatem numery 11, 12 i 13 podpowiadają, że to prawdopodobnie kolejne wersje SQL Server: 11.0 to SQL Server 2012, 12.0 to wersja 2014, a 13.0 to pewnie SQL Server 2016. Zrobimy test i podłączymy wersję dla SQL Server 2012, czyli zakładamy że v4.0_11.0.0.0__9845dcd8080cc91 będzie poprawna. A czy tak się stanie wyjdzie w praniu. Zawsze można podmienić referencję. Chyba.

Przechodzimy do pisania kodu. Prawie.

Na początku mamy wygenerowany z automatu plik Class1.cs z namespace zgodnym z nazwą projektu. Nazwa dobra jak każda inna, ale złamię się i dam coś bardziej znaczącego. Niech będzie WinSCPTask – zarówno w nazwie pliku jak i klasy. So far so good. Popatrzmy wyżej na listę using:

using System;
using System.Collection.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

Trochę ich za dużo. Zostawiam System, a do tego System.Collection.Generic (a nuż się przyda). Choć zastanawiam się czy potrzebuję teraz obu – ale na razie zostają. Do tego dopisuję jedną – dość przydatną – zawierającą interesujące nas później obiekty:

using Microsoft.SqlServer.Dts.Runtime;

Z Wielkiej Księgi Hogwartu MSDN wiadomo, że skoro robimy Custom Task, to musimy dziedziczyć po Task. To dziedziczymy. Dodatkowo klasa dziedzicząca musi implementować metodę Execute. To implementujemy! Ale co to za parametry? VariableDispenser, IDTSLogging, IDTSComponentEvents, Connections – o, to brzmi znajomo. I tylko to. Odwołania do obiektów, które widzę pierwszy raz na oczy – jakie pytanie się narzuca na początek (poza „w co ja się władowałem” i „po co mi to było”)? Zgadza się – prawidłowe pytanie to „ale jak ja to przetestuję?”.

WinSCPClass_Start

Do testowania powrócimy swoją drogą (być może okrężną, pod górę, nieco na siłę i wbrew swojej woli). Na razie cieszmy się utworzonym projektem (pierwszy kod trafi na GitHub już w następnym tygodniu), ustawionymi referencjami i odwołaniami. I nazwą. W końcu jak powiedział Phil Carlton:

„There are only two hard things in Computer Science: cache invalidation and naming things.”

W kolejnym poście Execute już nie będzie tak straszny, a być może tak jak fiordy – będzie jadło nam z ręki.

Advertisements

Skomentuj

Wprowadź swoje dane lub kliknij jedną z tych ikon, aby się zalogować:

Logo WordPress.com

Komentujesz korzystając z konta WordPress.com. Log Out / Zmień )

Zdjęcie z Twittera

Komentujesz korzystając z konta Twitter. Log Out / Zmień )

Facebook photo

Komentujesz korzystając z konta Facebook. Log Out / Zmień )

Google+ photo

Komentujesz korzystając z konta Google+. Log Out / Zmień )

Connecting to %s