Zmiana Capabilities dla istniejącego agenta

2014-10-03

Podczas budowy agenta typu Extensible Connection 2.0 w naszej klasie implementujemy między innymi interfejs IMAExtensible2GetCapabilities. Wymaga to dodania do niej publicznej właściwości Capabilities zwracającej obiekt typu MACapabilities. Obiekt ten posiada szereg ustawień konfigurujących pracę naszego agenta. Oto przykładowa implementacja tej właściwości:

public MACapabilities Capabilities
{
  get
  {
    return new MACapabilities()
      {
        ConcurrentOperation = false,
        DeltaImport = false,
        DistinguishedNameStyle = MADistinguishedNameStyle.Generic,
        DeleteAddAsReplace = false,
        ExportType = MAExportType.AttributeReplace,
        NoReferenceValuesInFirstExport = false,
        SupportExport = true
      };
  }
}

Podczas dodawania agenta do Synchronization Service jednym z kroków jest Capabilities:

MaCapabilities

Właśnie w tym momencie następuje odwołanie do właściwości Capabilities w klasie naszego agenta i odczyt znajdujących się tam ustawień. Niestety tu pojawia się pewien problem. Odczyt ten następuje tylko podczas dodawania nowego agenta i pobrane ustawienia są dla niego zapamiętywane w aktualnej postaci. Jeżeli później wejdziemy w edycję istniejącego agenta to kroku Capabilities już nie zobaczymy. Co więcej, nawet jak wyeksportujemy agenta do pliku i następnie utworzymy nowego poprzez import, to ustawienia Capabilities nie zostaną wczytane z biblioteki a jedynie odtworzone z pliku eksportu. Co to oznacza? Jeżeli zmodyfikujemy ustawienia MACapabilities w naszej klasie to pomimo podmiany biblioteki agent cały czas będzie działał zgodnie z ustawieniami zapamiętanymi podczas jego tworzenia. Nie ma możliwości odświeżenia Capabilities dla istniejącego agenta więc nie jesteśmy w stanie zmienić dla niego tych ustawień (Refresh interfaces nie zadziała). Możemy oczywiście usunąć aktualnego agenta i utworzyć nowego, ale takie rozwiązanie przy rozbudowanym agencie (posiadającym kilka typów obiektów, do tego filtry oraz kilkanaście przepływów) oznacza żmudną i podatną na błędy pracę. Jaki jest więc sposób na wprowadzenie zmian w Capabilities dla istniejącego agenta? Ja stosuję następującą metodę:

  1. Modyfikujemy właściwość Capabilities w klasie agenta, kompilujemy i podmieniamy bibliotekę
  2. Dodajemy do Synchronization Service nowego agenta korzystającego z naszej biblioteki (pod dowolną nazwą, bez konfigurowania)
  3. Eksportujemy oryginalnego i nowego agenta do plików xml
  4. Usuwamy obydwu agentów z Synchronization Service
  5. Podmieniamy wartości elementów <capabilities-mask> i <capability-bits> w pliku xml oryginalnego agenta na wartości z pliku nowego agenta
  6. Importujemy oryginalnego agenta

W elementach <capabilities-mask> i <capability-bits> znajdują się ustawienia Capabilities zapisane podczas tworzenia agenta. Po zmianie ich na nowe wartości i imporcie nasz dotychczasowy agent będzie działał zgodnie z oczekiwaniami.

Reklamy

Posted on 2014-10-03, in MIM/FIM and tagged , , . Bookmark the permalink. Dodaj komentarz.

Skomentuj

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

Logo WordPress.com

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

Zdjęcie z Twittera

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

Zdjęcie na Facebooku

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

Zdjęcie na Google+

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

Connecting to %s

%d blogerów lubi to: