Projekt zestawienia COM rozpoczynamy od utworzenia nowej biblioteki klas. Wybieramy docelową strukturę jako .NET Framework 2.0 i tworzymy nowy projekt.

Po utworzeniu projektu wchodzimy w jego właściwości i na zakładce Aplikacja > Informacje o zestawie i zaznaczamy opcję Ustaw zestaw jako widoczny dla modelu COM. Następnie na zakładce Kompilacja zaznaczamy opcję Rejestruj w usłudze międzyoperacyjnej modelu COM. Zmiany zapisujemy i przechodzimy do dodawania odwołań.
Do odwołań projektu dodajemy dwie biblioteki:
- ADODB – biblioteka COM o nazwie: Microsoft ActiveX Data Objects 6.0 BackCompat Library
- ZestManLib – biblioteka COM o nazwie: InsERT GT ZestMan 1.0 Type Library

Główna klasa naszego zestawienia COM implementuje metody interfejsu IZestawienieWlasne. Do naszej klasy dodajemy metody Wykonaj, Nazwa, Opis oraz Programy. Metoda Wykonaj() otrzymuje w klasie IZestawienieComDane zestaw danych przekazujący nam informację o magazynie, operatorze, dacie blokady okresu oraz aktywne połączenie do bazy danych. Metody Nazwa oraz Opis zwracają teksty które zostaną wyświetlone na liście zestawień. Metoda Programy zwraca wartość numeryczną, dla jakiej aplikacji (1 – Subiekt GT) dostępne jest zestawienie.
using ZestManLib;
namespace PIMCoreInsERTGT
{
// run CMD as Administrator
// cd C:\Windows\Microsoft.NET\Framework\v2.0.50727
// regasm.exe /c <folder>\<name>.dll
public class Main : IZestawienieWlasne
{
public void Wykonaj(IZestawienieComDane pZestawienieComDane)
{
PIM PIMForm = new PIM(pZestawienieComDane);
PIMForm.Show();
}
public string Nazwa
{
get { return "PIM Core - opisy produktów"; }
}
public string Opis
{
get { return "Manager opisów produktowych"; }
}
public int Programy
{
get { return 1; }
}
}
}
Do zestawienia możemy dodać poprzez kreator nowy formularz który będzie wywoływany podczas uruchomienia zestawienia. W oknie na podstawie uzyskanych danych możemy przeprowadzać operacje na bazie danych.

W celu wyświetlenia w nowym oknie danych z Subiekta GT wystarczy rozszerzyć klasę formularza o połączenie z bazą danych i wykonać zapytanie. W przykładzie występuje zapytanie o jedną nazwę aktywnego towaru, która przekazywana jest do kontroli tekstowej.
using System;
using System.Data.SqlClient;
using System.Windows.Forms;
using ZestManLib;
namespace PIMCoreInsERTGT
{
public partial class PIM : Form
{
public PIM(IZestawienieComDane pZestawienieComDane)
{
InitializeComponent();
txt_DatabaseVersion.Text = pZestawienieComDane.WersjaBazyDanych.ToString();
try
{
using (SqlConnection conn = (SqlConnection)pZestawienieComDane.PolaczenieAdoNet)
{
string queryString = "SELECT TOP 1 * FROM tw__Towar WHERE tw_Zablokowany = 0;";
SqlCommand oCmd = new SqlCommand(queryString, conn);
using (SqlDataReader oReader = oCmd.ExecuteReader())
{
while (oReader.Read())
{
txt_AdvanceInfo.Text = oReader["tw_Nazwa"].ToString();
}
}
}
} catch (Exception e)
{
MessageBox.Show(e.Message.ToString(), "Błąd wykonywania aplikacji");
}
}
}
}
W przypadku instalacji zestawienia na maszynie na której nie kompilowało się kodu należy zarejestrować naszą bibliotekę:
run CMD as Administrator
cd C:\Windows\Microsoft.NET\Framework\v2.0.50727
regasm.exe /c <folder>\<name>.dll