Udostępnij za pośrednictwem


Tworzenie szablonu łącznika usługi internetowej SAP ECC 7.51 dla hosta ECMA2Host

Ten przewodnik przeprowadzi Cię przez proces tworzenia szablonu dla łącznika agenta zarządzania łącznością rozszerzalności usług sieci Web (ECMA) w celu zarządzania użytkownikami programu SAP ECC.

Ograniczenia i założenia

Ten szablon przedstawia sposób zarządzania użytkownikami. Inne typy obiektów, takie jak Lokalne Grupy Aktywności, role i profile, nie są objęte tym przewodnikiem, ponieważ ECMA2Host nie obsługuje obecnie odwołań wielowartościowych. Operacje na hasłach są również poza zakresem tego przewodnika.

Ten przewodnik nie obejmuje tworzenia konta usługi w oprogramowaniu SAP, które jest używane do wywoływania uwidocznionych funkcji BAPI. Przyjęto założenie, że wstępnie utworzone konto demonstracyjne Developer jest używane z profilem RFC_ALL, który przyznaje uprawnienia do interfejsów BAPI wymienionych w tym artykule.

Narzędzie konfiguracji usługi sieci Web nie obsługuje następujących funkcji udostępnianych w SAP domyślnie: Zasady WSP i wiele powiązań per punkt końcowy. Oczekuje WSDL z tylko SOAP 1.1, jednolitym łączeniem w stylu dokumentu, bez polityk.

Funkcje BAPI SAP ECC używane w tym szablonie:

  • BAPI_USER_GETLIST — uzyskaj listę wszystkich użytkowników połączonych z tym systemem.
  • BAPI_USER_GETDETAIL — uzyskaj szczegółowe informacje o określonym użytkowniku.
  • BAPI_USER_CREATE1 — tworzy użytkownika.
  • BAPI_USER_DELETE — usuwa użytkownika.
  • BAPI_USER_CHANGE — aktualizuje użytkownika.

Wszystkie właściwości użytkownika sap w tym przewodniku są traktowane jako właściwości o pojedynczej wartości.

Używany język programowania to Visual Basic.

Definiowanie punktu końcowego usługi internetowej i tworzenie schematu

Zanim będzie można zaprojektować przepływy pracy importowania i eksportowania, należy utworzyć szablon i zdefiniować punkt końcowy za pomocą funkcji SAP BAPI uwidocznionych za pośrednictwem interfejsu PROTOKOŁU SOAP. Następnie utwórz schemat obiektów ECMA2 i ich właściwości są dostępne w tym szablonie.

  1. W folderze "C:\Program Files\Microsoft ECMA2Host\Web Service Configuration Tool" uruchom narzędzie konfiguracji usługi sieci Web wsconfigTool.exe
  2. Z menu File-New wybierz pozycję Utwórz nowy projekt SOAP

Zrzut ekranu przedstawiający tworzenie projektu PROTOKOŁU SOAP.

  1. Wybierz Projekt SOAP i wybierz Dodaj nową usługę internetową.

Zrzut ekranu przedstawiający dodawanie nowej usługi internetowej.

  1. Nazwij swoją usługę internetową SAPECC, podaj adres URL do pobrania opublikowanego pliku WSDL, a SAPECC wprowadź jako przestrzeń nazw. Nazwa usługi sieciowej pomaga odróżnić tę usługę w szablonie od innych. Przestrzeń nazw definiuje nazwę przestrzeni nazw Microsoft .NET używanej do generowania klas. Wybierz opcję Tryb uwierzytelniania podstawowego, chyba że administrator SAP w inny sposób nie poinstruuje. Wybierz pozycję Dalej.

Zrzut ekranu przedstawiający nazewnictwo usługi internetowej.

  1. Podaj poświadczenia, aby nawiązać połączenie z punktem końcowym usługi SAP ECC. Wybierz pozycję Dalej.
  2. Na stronie sekcji punkty końcowe i operacje upewnij się, że BAPI są wyświetlane i kliknij Zakończ

Uwaga

Jeśli widzisz więcej niż jeden punkt końcowy, włączono powiązania protokołu SOAP 1.2 i SOAP 1.1. Powoduje to niepowodzenie łącznika. Zmodyfikuj definicję powiązania w programie SOAMANAGER i zachowaj tylko jedną definicję. Następnie ponownie dodaj usługę internetową.

Zrzut ekranu przedstawiający interfejsy BAPI.

  1. Zapisz projekt w folderze C:\Program Files\Microsoft ECMA2Host\Service\ECMA.
  2. Przejdź do karty Typy obiektów i dodaj typ obiektu Użytkownik. Wybierz przycisk OK.
  3. Rozwiń kartę Typy obiektów i wybierz definicję typu użytkownika.

Zrzut ekranu przedstawiający typy obiektów.

  1. Dodaj następujące atrybuty do schematu i wybierz userName jako punkt odniesienia.

Zrzut ekranu przedstawiający dodawanie atrybutów.

  1. Zapisz projekt.
Nazwisko Typ Kotwica
miejscowość string
firma string
dział string
email string
czas wygaśnięcia string
imię string
nazwisko string
drugie imię string
numer telefonu ciąg / sznurek
tytuł zawodowy string
userName string sprawdzono

Tworzenie przepływu pracy pełnego importu

Przepływ pracy Importuj, będący opcjonalnym elementem ECMA2Host, umożliwia importowanie istniejących użytkowników SAP do pamięci tymczasowej ECMA2Host, co pozwala uniknąć tworzenia duplikatów użytkowników podczas aprowizacji.

Jeśli nie utworzysz przepływu pracy importu, łącznik działa w trybie tylko eksport, co powoduje, że host ECMA2Host zawsze wystawia operacje tworzenia użytkownika , nawet dla istniejących użytkowników. Może to prowadzić do awarii lub duplikatów, gdy standardowe SAP BAPIs są używane, chyba że duplikaty są obsługiwane przez przepływ pracy eksportu.

System SAP ECC nie oferuje wbudowanego mechanizmu odczytywania zmian wprowadzonych od ostatniego odczytu.

W związku z tym implementujemy tylko przepływ pracy pełnego importu. Jeśli musisz zaimplementować importy różnicowe ze względu na wydajność, skontaktuj się z administratorem SAP, aby uzyskać listę interfejsów BAPI i opublikować je jako usługę internetową protokołu SOAP. Następnie zaimplementuj przepływ pracy importowania różnicowego zgodnie z poniższym podejściem i z użyciem właściwości customData, która zawiera znacznik czasu poprzedniego pomyślnego uruchomienia.

Rozwiązanie SAP ECC oferuje kilka funkcji BAPI umożliwiających uzyskanie listy użytkowników z ich właściwościami:

  • BAPI_USER_GETLIST — uzyskaj listę wszystkich użytkowników połączonych z tym systemem.
  • BAPI_USER_GETDETAIL — uzyskaj szczegółowe informacje o określonym użytkowniku.

Tylko te dwa interfejsy BAPI są używane do pobierania istniejących użytkowników z usługi SAP ECC w tym szablonie.

  1. Przejdź do obszaru Typy obiektów —> Użytkownik —> Importowanie —> pełny przepływ pracy importu i z przybornika po prawej stronie przeciągnij i upuść działanie Sekwencja w okienku projektanta przepływu pracy.
  2. W lewym dolnym rogu znajdź przycisk Zmienne i wybierz go, aby rozwinąć listę zmiennych zdefiniowanych w ramach tej sekwencji.
  3. Dodaj następujące zmienne. Aby wybrać typ zmiennej wygenerowany z SAP WSDL, wybierz pozycję Przeglądaj typy i rozwiń wygenerowany przez, a następnie rozwiń przestrzeń nazw SAPECC.
Nazwisko Typ zmiennej Scope Wartość domyślna
selRangeTable SAPECC. TABLE_OF_BAPIUSSRGE Sekwencja new TABLE_OF_BAPIUSSRGE with {.item = new BAPIUSSRGE(){new BAPIUSSRGE}}
getListRetTable SAPECC. TABLE_OF_BAPIRET2 Sekwencja nowa TABLE_OF_BAPIRET2
Rozmiar strony Int32 Sekwencja 200
returnedSize Int32 Sekwencja
tabelaUżytkowników SAPECC. TABLE_OF_BAPIUSNAME Sekwencja new TABLE_OF_BAPIUSNAME()

Zrzut ekranu przedstawiający przepływ pracy pełnej operacji importowania.

  1. Z narzędziownika przeciągnij i upuść cztery czynności przypisania wewnątrz czynności sekwencji i ustaw następujące wartości:
selRangeTable.item(0).PARAMETER = "USERNAME" 
selRangeTable.item(0).SIGN = "I" selRangeTable.item(0).OPTION = "GT" selRangeTable.item(0).LOW = ""   

Parametry te są używane do wywoływania funkcji BAPI_USER_GETLIST i implementowania stronicowania.

Zrzut ekranu przedstawiający pełny przepływ pracy importowania.

  1. Aby zaimplementować stronicowanie, przeciągnij i upuść działanie DoWhile wewnątrz działania Sekwencja po ostatniej operacji Przypisywanie.
  2. W okienku po prawej stronie przejdź do karty Właściwości i wprowadź ten warunek w obszarze DoWhile
  • cykl: returnedSize = pageSize

Zrzut ekranu przedstawiający ekran zwracanego rozmiaru.

  1. Wybierz zmienne i dodaj właściwość currentPageNumber typu int32 w cyklu DoWhile z wartością domyślną 0.

Zrzut ekranu ekranu dowhile.

  1. Opcjonalny krok: jeśli planujesz zaimplementować przepływ pracy importowania różnicowego, przeciągnij i upuść działanie Assign w przyborniku wewnątrz działania Sekwencja po cyklu DoWhile. Ustaw tę wartość:
  • customData(schemaType.Name + "_lastImportTime") = DateTimeOffset.UtcNow.Ticks.ToString() Spowoduje to zapisanie daty i godziny ostatniego pełnego uruchomienia importu, a ten znacznik czasu może być później używany w przepływie pracy usługi Delta Import.

Zrzut ekranu przedstawiający ekran customdata.

  1. Z przybornika przeciągnij i upuść aktywność Sequence w aktywności DoWhile. Przeciągnij i upuść działanie WebServiceCall wewnątrz tego działania sekwencji i wybierz nazwę usługi SAPECC, punkt końcowy ZSAPCONNECTORWS i operację BAPI_USER_GETLIST.

Zrzut ekranu przedstawiający sekwencję dowhile.

  1. Kliknij przycisk argumenty, aby zdefiniować parametry wywołania usługi internetowej w następujący sposób:
Nazwisko Kierunek Typ Wartość
MAX_ROWS W Int32 Rozmiar strony
MAX_ROWSSpecified W Wartość logiczna Prawda
WRÓĆ Wewnątrz/Zewnątrz TABLE_OF_BAPIRET2 getListRetTable
WYBÓR_EXP We/Wy TABLE_OF_BAPIUSSEXP
ZAKRES_WYBORU We/Wy TABLE_OF_BAPIUSSRGE selRangeTable
LISTA UŻYTKOWNIKÓW Wejście/Wyjście TABLE_OF_BAPIUSNAME Tabela użytkowników
Z_NAZWĄ_UŻYTKOWNIKA W String
WIERSZE Na zewnątrz Int32 returnedSize
  1. Wybierz przycisk OK. Znak ostrzegawczy zniknie. Lista użytkowników przechowywanych w zmiennej usersTable. Ponieważ system SAP nie zwraca pełnej listy użytkowników w jednej odpowiedzi, musimy zaimplementować stronicowanie i wywołać tę funkcję kilka razy podczas przełączania stron. Następnie dla każdego zaimportowanego użytkownika musisz uzyskać szczegóły tego użytkownika, wykonując oddzielne wywołanie. Oznacza to, że w przypadku środowiska z 1000 użytkownikami i rozmiarem strony 200 łącznik usługi sieci Web wykonuje 5 wywołań w celu pobrania listy użytkowników i 1000 pojedynczych wywołań w celu pobrania szczegółów użytkowników. Aby zwiększyć wydajność, poproś zespół SAP o opracowanie niestandardowego programu BAPI zawierającego listę wszystkich zastosowań z ich właściwościami. Pozwala to uniknąć konieczności wykonywania 1000 pojedynczych wywołań i uwidaczniania funkcji BAPI za pośrednictwem punktu końcowego protokołu SOAP WS.
  2. Z przybornika przeciągnij i upuść aktywność IF w obrębie aktywności DoWhile, po aktywności WebServiceCall. Określ ten warunek, aby sprawdzić, czy odpowiedź nie jest pusta i czy nie ma błędów: IsNothing(getListRetTable.item) OrElse getListRetTable.item.Count(Function(errItem) errItem.TYPE.Equals("E") = True) = 0
  3. Z przybornika przeciągnij i upuść działanie Throw w gałęzi Else działania IF, aby zgłosić błąd podczas nieudanego importowania. Przejdź do karty Właściwości i wprowadź to wyrażenie dla właściwości Exception działania Throw: New Exception(getListRetTable.item.First(Function(retItem) retItem.TYPE.Equals("E")).MESSAGE)

Zrzut ekranu przedstawiający właściwość wyjątku.

  1. Aby przetworzyć listę zaimportowanych użytkowników, przeciągnij i upuść działanie ForEachWithBodyFactory z Przybornika do gałęzi "Then" działania "IF". Przejdź do karty Właściwości i wybierz pozycję SAPECC.BAPIUSNAME jako argument typu. Kliknij przycisk ... i wpisz to wyrażenie w pole wartości: if(usersTable.item,Enumerable.Empty(of BAPIUSNAME)())

Zrzut ekranu przedstawiający działanie IF.

  1. Z przybornika przeciągnij i upuść aktywność Sekwencja wewnątrz aktywności ForEach. Mając aktywne okno działania Sekwencja, kliknij przycisk Zmienne i zdefiniuj następujące zmienne:
Nazwisko Typ zmiennej Scope Wartość domyślna
firma SAPECC.BAPIUSCOMP Sekwencja nowy BAPIUSCOMP()
adres SAPECC. BAPIADDR3 Sekwencja new BAPIADDR3()
Wartości domyślne SAPECC. BAPIDEFAUL Sekwencja nowy BAPIDEFAUL()
logndata SAPECC.BAPILOGOND Sekwencja nowy BAPILOGOND()
getDetailRetTable SAPECC. TABLE_OF_BAPIRET2 Sekwencja new TABLE_OF_BAPIRET2()

Działanie IF wygląda następująco:

Zrzut ekranu przedstawiający działanie IF z foreach.

  1. Przeciągnij i upuść działanie CreateCSEntryChangeScope wewnątrz działania Sekwencja. We właściwości DN wprowadź schemaType.Name & element.NAZWA_UŻYTKOWNIKA. W polu CreateAnchorAttribute AnchorValue wprowadź wartość item.username.

Zrzut ekranu CreateCSEntryChangeScope.

  1. Aby pobrać szczegóły każdego użytkownika, przeciągnij i upuść akcję WebServiceCall z przybornika do akcji Sekwencja bezpośrednio przed akcję CreateAnchorAttribute. Wybierz nazwę usługi SAPECC, punkt końcowy ZSAPCONNECTORWS i operację BAPI_USER_GET_DETAIL. Kliknij przycisk argumenty, aby zdefiniować parametry wywołania usługi internetowej w następujący sposób:
Nazwisko Kierunek Typ Wartość
POWRÓT Wejście/Wyjście TABELA_BAPIRET2 getDetailRetTable
NAZWA UŻYTKOWNIKA W String element.nazwaUżytkownika
ADRES Na zewnątrz BAPIADDR3 adres
FIRMA Poza BAPIUSCOMP firma
USTAWIENIA DOMYŚLNE Na zewnątrz BAPIUSDEFAUL Wartości domyślne
LOGONDATA Na zewnątrz BAPILOGOND dane logowania
WITH_USERNAME W Łańcuch
WIERSZE Na zewnątrz Int32 returnedSize
  1. Wybierz przycisk OK. Znak ostrzegawczy zniknie. Szczegóły użytkownika są przechowywane w powyższych zmiennych. Twoje działanie IF wygląda następująco:

Zrzut ekranu przedstawiający parametry.

  1. Aby sprawdzić wyniki operacji BAPI_USER_GET_DETAIL, z przybornika przeciągnij i upuść działanie IF i umieść je wewnątrz działania Sekwencja między działaniami WebServiceCall i CreateAnchorAttribute. Wprowadź następujący warunek: IsNothing(getDetailRetTable.item) OrElse getDetailRetTable.item.Count(Function(errItem) errItem.TYPE.Equals("E") = True) = 0

Ponieważ brakujące szczegóły użytkownika nie powinny być traktowane jako katastrofalne zdarzenie, chcemy wskazać ten błąd i kontynuować przetwarzanie innych użytkowników. Przeciągnij i upuść działanie Sekwencja do gałęzi Else działania IF. Dodaj aktywność rejestrowania wewnątrz tej nowej aktywności sekwencji. Przejdź do karty Właściwości i zmień właściwość Poziom na Wysoki oraz Śledzenie na Tag. Wprowadź następujące informacje we właściwości LogText: string.Join("\n", getDetailRetTable.item.Select (Function(item) item.MESSAGE ))

  1. Przeciągnij i upuść aktywność Sekwencja do gałęzi 'Then' aktywności IF. Przeciągnij i upuść istniejącą aktywność CreateAnchorAttribute do aktywności Sekwencja w gałęzi Then aktywności IF. Działanie ForEach wygląda teraz następująco:

Zrzut ekranu przedstawiający program ForEach.

  1. Dla każdej właściwości użytkownika, takiej jak miasto, firma, dział, adres e-mail, dodaj działanie IF po działaniu CreateAnchorAttribute i sprawdź, czy wartości są niepuste, wprowadzając warunki, takie jak Not string.IsNullOrEmpty(address.city), a następnie dodając działania CreateAttributeChange do części 'Then' tego działania IF.

Zrzut ekranu przedstawiający pozycję CreateAttributeChange.

Na przykład: Dodaj działania CreateAttributeChange dla wszystkich właściwości użytkownika przy użyciu tej tabeli mapowania:

Właściwość użytkownika ECMA Właściwość SAP
miejscowość adres.miasto
dział adres.dział
firma company.company
e-mail adres_e-mail
imię adres.imię
nazwisko adres.nazwisko
drugie imię address.drugieImię
stanowisko address.function
czas wygaśnięcia logonData.GLTGB
numerTelefonu adres. TEL1_NUMBR
  1. Na koniec dodaj działanie SetImportStatusCode po ostatnim działaniu CreateAttributeChange. Ustaw wartość ErrorCode na Powodzenie w bloku Then. Dodaj jeszcze jedną czynność kodu SetImportStatus do gałęzi Else i ustaw wartość ErrorCode na ImportErrorCustomContinueRun.

Zrzut ekranu przedstawiający plik SetImportStatusCode.

  1. Zwiń działanie sekwencji wewnątrz działania ForEach, aby cykl DoWhile wyglądał następująco:

Zrzut ekranu przedstawiający cykl DoWhile.

  1. Aby pobrać następną stronę użytkowników, zaktualizuj właściwość selRangeTable.item(0).LOW. Przeciągnij i upuść działanie IF do działania Sekwencja w obszarze DoWhile. Umieść go po istniejącym działaniu IF. Wprowadź wartość returnedSize>0 jako Warunek. Dodaj działanie Assign do gałęzi Then działania IF i ustaw selRangeTable.item(0).LOW na usersTable.item(returnedSize-1).username.

Zrzut ekranu przedstawiający końcowy stan DoWhile.

Proces definiowania pełnego przepływu pracy importu został ukończony.

Tworzenie przepływu pracy dla dodawania eksportu

Aby utworzyć użytkownika w programie SAP ECC, możesz wywołać program BAPI_USER_CREATE1 i podać wszystkie parametry, w tym nazwę konta i początkowe hasło. Jeśli potrzebujesz nazwy konta, która ma być generowana po stronie systemu SAP, skontaktuj się z administratorem SAP i użyj niestandardowej funkcji BAPI zwracającej właściwość userName nowo utworzonego konta użytkownika.

Ten przewodnik nie demonstruje przypisywania licencji, lokalnych lub globalnych grup działań, systemów ani profilów. Skontaktuj się z administratorem sap i odpowiednio zmodyfikuj ten przepływ pracy.

Nie ma potrzeby implementowania stronicowania w procesach eksportu. W kontekście przepływu pracy jest dostępny tylko jeden obiekt objectToExport.

  1. Przejdź do pozycji Typy obiektów —> Użytkownik —> Eksportowanie —> Dodaj przepływ pracy i z przybornika po prawej stronie przeciągnij i upuść działanie Sekwencja w okienku projektanta przepływu pracy.
  2. W lewym dolnym rogu znajdź przycisk Zmienne i wybierz go, aby rozwinąć listę zmiennych zdefiniowanych w ramach tej sekwencji.
  3. Dodaj następujące zmienne. Aby wybrać typ zmiennej wygenerowany z SAP WSDL, wybierz pozycję Przeglądaj typy i rozwiń wygenerowany przez, a następnie rozwiń przestrzeń nazw SAPECC. Inicjuje struktury danych używane przez program BAPI_USER_CREATE1.
Nazwisko Typ zmiennej Scope Wartość domyślna
adres SAPECC. BAPIADDR3 Sekwencja new BAPIADDR3()
userName String Sekwencja
hasło SAPECC.BAPIPWD Sekwencja nowy BAPIPWD()
firma SAPECC.BAPIUSCOMP Sekwencja nowy BAPIUSCOMP()
Wartości domyślne SAPECC. BAPIDEFAUL Sekwencja nowy BAPIDEFAUL()
logOnData SAPECC. BAPILOGOND Sekwencja nowy BAPILOGOND()
bapiret2Table SAPECC. TABLE_OF_BAPIRET2 Sekwencja new TABLE_OF_BAPIRET2()

Zrzut ekranu przedstawiający przepływ pracy dodawania eksportu.

  1. Ponieważ zdefiniowaliśmy właściwość userName jako niezmienny identyfikator, czyli kotwicę, musimy wyodrębnić wartość userName z kolekcji kotwic naszego obiektu eksportowanego. Przeciągnij i upuść element ForEachWithBodyFactory z przybornika do elementu Sequence. Zastąp nazwę zmiennej item nazwą anchor, przejdź do właściwości i wybierz TypeArgument Microsoft.MetadirectoryServices.AnchorAttribute. W polu Wartość wpisz objectToExport.AnchorAttributes.

Zrzut ekranu przedstawiający sekwencję dodawania eksportu.

  1. Aby wyodrębnić wartość ciągu kotwicy userName, przeciągnij i upuść aktywność Switch wewnątrz aktywności ForEach. W oknie podręcznym wybierz typ przełącznika Microsoft.IdentityManagement.MA.WebServices.Activities.Extensions.AnchorAttributeNameWrapper. Wprowadź wartość wyrażenia: New AnchorAttributeNameWrapper(anchor.Name).
  2. Wybierz opcję Dodaj nowy przypadek w obszarze działania Przełącz. Wpisz userName jako wartość zmienną. Przeciągnij i upuść działanie 'Przypisywanie' do treści przypadku userName i przypisz anchor.Value.ToString() do zmiennej userName.

Zrzut ekranu przedstawiający nowy przypadek.

  1. Teraz, gdy wyodrębniliśmy wartość userName z wyeksportowanej właściwości kotwicy obiektu, musimy wypełnić inne struktury, takie jak firma, wartości domyślne, adres, dane logowania zawierające inne szczegóły użytkownika SAP. Robimy to poprzez przeglądanie zbioru zmian atrybutów.
  2. Zwiń działanie ForEach i przeciągnij oraz upuść kolejne działanie ForEachWithBothFactory wewnątrz działania Sequence po istniejącym działaniu ForEach. Zastąp nazwę zmiennej elementu atrybutemChange, przejdź do właściwości i wybierz pozycję TypeArgument of Microsoft.MetadirectoryServices.AttributeChange. W polu Wartość wpisz objectToExport.AttributeChanges.

Zrzut ekranu przedstawiający nową sekwencję.

  1. Przeciągnij i upuść działanie Switch w treści działania ForEach.
  2. W menu kontekstowym wybierz Microsoft.IdentityManagement.MA.WebServices.Activities.Extensions.AttributeNameWrapper i kliknij OK.
  3. Wprowadź następujące wyrażenie: New AttributeNameWrapper(attributeChange.Name). W prawym górnym rogu aktywności Switch zobaczysz ikonę ostrzeżenia o nieobsługiwanych atrybutach zdefiniowanych w schemacie i nieprzypisanych do żadnej właściwości.
  4. Wybierz Dodaj nowy przypadek w obszarze działania Przełącznika i wpisz wartość przypadku dla miasta.
  5. Przeciągnij i upuść Akcję przypisywania do głównej części tego przypadku. Przypisz attributeChange.ValueChanges(0).Value.ToString() do adresu.city.

Zrzut ekranu przedstawiający nowy przepływ pracy dodawania eksportu.

  1. Dodaj inne brakujące przypadki i przypisania. Użyj tej tabeli mapowania jako przewodnika:
Przypadek Zadanie
miejscowość address.city = attributeChange.ValueChanges(0)Value.ToString()
firma company.company = attributeChange.ValueChanges(0)Value.ToString()
dział address.department = attributeChange.ValueChanges(0)Value.ToString()
e-mail address.e_mail = attributeChange.ValueChanges(0)Value.ToString()
czas wygaśnięcia logOnData.GLTGB = attributeChange.ValueChanges(0)Value.ToString()
imię address.firstname = attributeChange.ValueChanges(0)Value.ToString()
nazwisko address.lastname = attributeChange.ValueChanges(0)Value.ToString()
drugie imię address.middlename = attributeChange.ValueChanges(0)Value.ToString()
numerTelefonu adres.TEL1_Numbr = attributeChange.ValueChanges(0)Value.ToString()
stanowisko pracy address.function = attributeChange.ValueChanges(0)Value.ToString()
eksport_hasło hasło.BAPIPWD1 = attributeChange.ValueChanges(0)Value.ToString()

W tym miejscu export_password jest specjalnym atrybutem wirtualnym, który jest zawsze zdefiniowany w schemacie i może służyć do przekazywania początkowego hasła tworzonego użytkownika.

Zrzut ekranu przedstawiający przypadki.

  1. Zwiń działanie ForEach i przeciągnij i upuść działanie IF do działania Sekwencja, po drugim działaniu ForEach, aby zweryfikować właściwości użytkownika przed przesłaniem żądania tworzenia użytkownika. Potrzebujemy co najmniej 3 wartości niepustych: nazwa użytkownika, nazwisko, początkowe hasło. Wprowadź następujący warunek: (String.IsNullOrEmpty(address.lastname) = False ) AND (String.IsNullOrEmpty(userName) = False) AND (String.IsNullOrEmpty(password.BAPIPWD1) = False)
  2. W gałęzi Else działania IF dodaj jeszcze jedno działanie IF, ponieważ chcemy zróżnicować błędy w zależności od tego, co brakuje. Wprowadź wartość warunku: String.IsNullOrEmpty(userName). Przeciągnij i upuść CreateCSEntryChangeResult aktywności do obu gałęzi drugiej aktywności IF i skonfiguruj ErrorCode ExportErrorMissingAnchorComponent i ExportErrorMissingProvisioningAttribute.

Zrzut ekranu przedstawiający drugie działanie IF.

  1. Przeciągnij i upuść działanie Sekwencja w pustej gałęzi Następnie pierwszego działania IF. Przeciągnij i upuść działanie WebSeviceCall wewnątrz działania Sekwencja. Wybierz nazwę usługi SAPECC, punkt końcowy ZSAPCONNECTORWS i operację BAPI_USER_CREATE1. Kliknij przycisk argumenty, aby zdefiniować parametry wywołania usługi internetowej w następujący sposób:
Nazwisko Kierunek Typ Wartość
ADRES W BAPIADDR3 adres
FIRMA W BAPIUSCOMP firma
USTAWIENIA DOMYŚLNE W BAPIDEFAUL Wartości domyślne
LOGONDATA W BAPILOGOND logOnData
HASŁO W BAPIPWD hasło
WRÓĆ Wejście-Wyjście TABLE_OF_BAPIRET2 bapiret2Table
SAMOZAREJESTROWANIE W String "X"
NAZWA UŻYTKOWNIKA W Sznurek userName
  1. Wybierz przycisk OK. Znak ostrzegawczy zniknie.

Zrzut ekranu przedstawiający przepływ pracy po parametrach.

  1. Aby przetworzyć tworzenie wyników żądania użytkownika, przeciągnij i upuść działanie IF wewnątrz działania Sekwencja po działaniu WebServiceCall. Wprowadź następujący warunek: IsNothing (bapiret2Table.item) OrElse bapiret2Table.item.Count(Function(errItem) errItem.TYPE.Equals("E") = True) <> 0
  2. Jeśli nie wystąpią żadne błędy, zakładamy, że operacja eksportowania została ukończona pomyślnie i chcemy wskazać pomyślne wyeksportowanie tego obiektu przez utworzenie pliku CSEntryChangeResult ze stanem Powodzenie. Przeciągnij i upuść działanie CreateCSEntryChangeResult do gałęzi Else działania IF i wybierz pozycję Kod błędu powodzenia.
  3. Opcjonalnie: Jeśli wywołanie usługi internetowej zwraca wygenerowaną nazwę konta użytkownika, musimy zaktualizować wartość kotwicy wyeksportowanego obiektu. Aby to zrobić, przeciągnij i upuść CreateAttrubuteChangeaktywność wewnątrz CreateCSEntryChangeResult aktywności i wybierz Dodaj nazwę użytkownika. Następnie przeciągnij i upuść CreateValueChange aktywność wewnątrz CreateAttributeChange aktywności i wprowadź nazwę zmiennej wypełnianą przez aktywność wywołania usługi sieciowej. W tym przewodniku użyjesz zmiennej userName, która nie jest aktualizowana podczas eksportowania.

Zrzut ekranu przedstawiający zaktualizowany przepływ sekwencji.

  1. Ostatnim krokiem w procesie dodawania eksportu jest obsługa błędów i ich rejestrowanie. Przeciągnij i upuść aktywność Sekwencja do pustej gałęzi Then w działaniu IF.
  2. Przeciągnij i upuść działanie Log do działania Sequence. Przejdź do karty Właściwości i wprowadź wartość LogText: bapiret2Table.item.First(Function(retItem) retItem.TYPE.Equals("E")).MESSAGE. Zachowaj wysoki poziom logowania i znacznik śledzenia. Spowoduje to zarejestrowanie komunikatu o błędzie w dzienniku łączników lub dzienniku zdarzeń ECMA2Host po włączeniu pełnego śledzenia.
  3. Przeciągnij i upuść działanie Przełącznika wewnątrz akcji Sekwencji po akcji logowania. W oknie podręcznym wybierz typ ciągu dla wartości przełącznika. Wprowadź następujące wyrażenie: bapiret2Table.item.First(Function(retItem) retItem.TYPE.Equals("E")).NUMBER
  4. Wybierz domyślny scenariusz i przeciągnij oraz upuść czynność CreateCSEntryChangeResult wewnątrz tego przypadku. Wybierz kod błędu ExportErrorInvalidProvisioningAttributeValue.

Zrzut ekranu przedstawiający nową aktualizację przepływu pracy.

  1. Wybierz obszar Dodaj nową sprawę i wpisz wartość sprawy równą 224. Przeciągnij i upuść CreateCSEntryChangeResult działanie do treści tego przypadku. Wybierz ExportErrorCustomContinueRun kod błędu.

Zrzut ekranu przedstawiający ostateczną aktualizację przepływu pracy.

Ukończono definicję przepływu pracy Export Add.

Tworzenie przepływu pracy do eksportowania i usuwania

Aby usunąć użytkownika w programie SAP ECC, możesz wywołać program BAPI_USER_DELETE i podać nazwę konta, która ma zostać usunięta w połączonym systemie. Skontaktuj się z administratorem SAP, aby ustalić, czy ten scenariusz jest obowiązkowy. Najczęściej konta usługi SAP ECC nie są usuwane, ale są ustawione na wygaśnięcie w celu przechowywania rekordów historycznych.

Ten przewodnik nie obejmuje scenariuszy związanych z systemem SAP Common User Administration, anulowaniem aprowizacji użytkowników z połączonych systemów, odwoływaniem licencji itp.

Nie ma potrzeby implementowania stronicowania w procesach eksportu. W kontekście przepływu pracy jest dostępny tylko jeden obiekt objectToExport.

  1. Przejdź do Typy obiektów —> Użytkownik —> Eksportuj —> Usuń przepływy pracy i z narzędzi po prawej stronie przeciągnij i upuść aktywność "Sekwencja" na okienko projektanta przepływu pracy.
  2. W lewym dolnym rogu znajdź przycisk Zmienne i wybierz go, aby rozwinąć listę zmiennych zdefiniowanych w ramach tej sekwencji.
  3. Dodaj następujące zmienne. Aby wybrać typ zmiennej wygenerowany z SAP WSDL, wybierz pozycję Przeglądaj typy i rozwiń wygenerowany przez, a następnie rozwiń przestrzeń nazw SAPECC. Inicjuje struktury danych używane przez program BAPI_USER_DELETE.
Nazwisko Typ zmiennej Scope Wartość domyślna
userName String Sekwencja
bapiret2Table SAPECC. TABLE_OF_BAPIRET2 Sekwencja new TABLE_OF_BAPIRET2()
  1. Ponieważ zdefiniowaliśmy właściwość userName jako niezmienny identyfikator, czyli kotwicę, musimy wyodrębnić wartość userName z kolekcji kotwic naszego obiektu eksportowanego. Przeciągnij i upuść działanie ForEachWithBodyFactory z przybornika do działania Sekwencja. Zastąp nazwę zmiennej element nazwą kotwica, przejdź do właściwości i wybierz TypeArgument z Microsoft.MetadirectoryServices.AnchorAttribute. W polu Wartość wpisz objectToExport.AnchorAttributes.

Zrzut ekranu przedstawiający przepływ pracy operacji usuwania eksportu.

  1. Aby wyodrębnić wartość ciągu kotwicy userName, przeciągnij i upuść aktywność Switch wewnątrz aktywności ForEach. W oknie podręcznym wybierz typ przełącznika Microsoft.IdentityManagement.MA.WebServices.Activities.Extensions.AnchorAttributeNameWrapper. Wprowadź wartość wyrażenia: Nowy AnchorAttributeNameWrapper(anchor.Name). Wybierz pozycję Dodaj nowy obszar przypadku działania Przełącz. Wpisz userName jako wartość Case. Przeciągnij i upuść czynność Assign do obszaru case userName i przypisz anchor.Value.ToString() do zmiennej userName.
  2. Przeciągnij i upuść działanie WebSeviceCall wewnątrz działania Sekwencja po działaniu ForEach. Wybierz nazwę usługi SAPECC, punkt końcowy ZSAPCONNECTORWS i operację BAPI_USER_DELETE. Kliknij przycisk argumenty, aby zdefiniować parametry wywołania usługi internetowej w następujący sposób:
Nazwisko Kierunek Typ Wartość
WRÓĆ Wejście/Wyjście TABLE_OF_BAPIRET2 bapiret2Table
NAZWA UŻYTKOWNIKA W String userName
  1. Wybierz przycisk OK. Znak ostrzegawczy zniknie.

Zrzut ekranu przedstawiający zaktualizowany przepływ pracy operacji usuwania.

  1. Aby przetworzyć usuwanie wyników żądania użytkownika, przeciągnij i upuść działanie IF wewnątrz działania Sekwencja po działaniu WebServiceCall. Wprowadź następujący warunek: If(bapiRet2Table.item, Enumerable.Empty(Of BAPIRET2)()).Count(Function(errItem) errItem.TYPE.Equals("E") = True) <> 0
  2. Jeśli nie wystąpią żadne błędy, zakładamy, że operacja usuwania została ukończona pomyślnie i chcemy wskazać pomyślne wyeksportowanie tego obiektu przez utworzenie CSEntryChangeResult stanu Powodzenie. Przeciągnij i upuść CreateCSEntryChangeResult aktywność do gałęzi Else aktywności IF i wybierz kod błędu wskazujący sukces.

Zrzut ekranu przedstawiający przepływ pracy usuwania eksportu.

  1. Ostatnim krokiem w przepływie pracy eksportowania usuwania jest obsługa błędów eksportu i ich rejestrowanie. Przeciągnij i upuść aktywność 'Sekwencja' w pustą gałąź 'Then' aktywności IF.
  2. Przeciągnij i upuść działanie Dziennika do działania sekwencji. Przejdź do karty Właściwości i wprowadź wartość LogText: bapiRetTable.item.First(Function(retItem) retItem.TYPE.Equals("E")= True).MESSAGE. Zachowaj wysoki poziom logowania i znacznik śledzenia. Spowoduje to dodanie komunikatu o błędzie do dziennika zdarzeń ConnectorsLog lub ECMA2Host, gdy włączone jest szczegółowe śledzenie.
  3. Przeciągnij i upuść działanie Switch wewnątrz działania Sequence po działaniu Log. W oknie podręcznym wybierz typ ciągu dla wartości przełącznika. Wprowadź następujące wyrażenie: bapiret2Table.item.First(Function(retItem) retItem.TYPE.Equals("E")).NUMBER
  4. Wybierz domyślny scenariusz i przeciągnij oraz upuść czynność CreateCSEntryChangeResult wewnątrz tego przypadku. Wybierz kod błędu ExportErrorSyntaxViolation. (Kod błędu ExportErrorSyntaxViolation)

Zrzut ekranu przedstawiający przepływ pracy operacji aktualizowania w celu eksportowania operacji usuwania.

  1. Wybierz obszar Dodaj nową sprawę i wpisz wartość sprawy 124. Przeciągnij i upuść CreateCSEntryChangeResult działanie do treści tego przypadku. Wybierz ExportErrorCustomContinueRun kod błędu.

Zrzut ekranu przedstawiający przepływ pracy operacji usuwania końcowego eksportu.

Ukończono definicję przepływu pracy dotyczącego usuwania eksportu.

Tworzenie przepływu pracy „Export Replace”

Aby zaktualizować użytkownika w programie SAP ECC, możesz wywołać program BAPI_USER_CHANGE i podać wszystkie parametry, w tym nazwę konta i wszystkie szczegóły użytkownika, w tym te, które nie ulegają zmianie. Tryb eksportu ECMA2, gdy wszystkie właściwości użytkownika mają być udostępniane, nosi nazwę Replace. Dla porównania tryb eksportu AtrybutUpdate zapewnia tylko atrybuty, które są zmieniane i może to spowodować zastąpienie niektórych właściwości użytkownika pustymi wartościami. W związku z tym łącznik usługi sieci Web zawsze używa trybu eksportu Zamień obiekt i oczekuje, że łącznik zostanie skonfigurowany dla Typu eksportu: Zastąp.

Przepływ pracy Eksportuj zamień jest prawie identyczny z przepływem pracy Eksportuj dodaj. Jedyną różnicą jest to, że należy określić dodatkowe parametry, takie jak addressX lub companyX dla programu BAPI_USER_CHANGE. Znak X na końcu adresuX wskazuje, że struktura adresu zawiera zmianę.

  1. Przejdź do pozycji Typy obiektów —> Użytkownik —> Eksport —> zamień przepływ pracy i z przybornika na działanie przeciągania i upuszczania sekwencji po prawej stronie do okienka projektanta przepływu pracy.
  2. W lewym dolnym rogu znajdź przycisk Zmienne i wybierz go, aby rozwinąć listę zmiennych zdefiniowanych w ramach tej sekwencji.
  3. Dodaj następujące zmienne. Aby wybrać typ zmiennej wygenerowany z SAP WSDL, wybierz pozycję Przeglądaj typy i rozwiń wygenerowany przez, a następnie rozwiń przestrzeń nazw SAPECC. Spowoduje to zainicjowanie struktur danych używanych przez program BAPI_USER_CHANGE.
Nazwisko Typ zmiennej Scope Wartość domyślna
userName Sznurek Sekwencja
bapiret2Table SAPECC. TABLE_OF_BAPIRET2 Sekwencja new TABLE_OF_BAPIRET2()
addressX SAPECC. BAPIADDR3X Sekwencja new BAPIADDR3X()
adres SAPECC. BAPIADDR3 Sekwencja new BAPIADDR3()
companyX SAPECC. BAPIUSCOMX Sekwencja nowy BAPIUSCOMX()
firma SAPECC.BAPIUSCOMP Sekwencja nowy obiekt BAPIUSCOMP()
defaultsX SAPECC. BAPIDEFAX Sekwencja nowy BAPIDEFAX()
Wartości domyślne SAPECC. BAPIDEFAUL Sekwencja nowy BAPIDEFAUL()
logOnDataX SAPECC.BAPILOGONX Sekwencja nowy BAPILOGONX()
logOnData SAPECC. BAPILOGOND Sekwencja nowy BAPILOGOND()

Przepływ pracy 'Eksport-Zamiana' wygląda następująco:

Zrzut ekranu przedstawiający rozpoczęcie przepływu pracy operacji zastępowania.

  1. Ponieważ zdefiniowaliśmy właściwość userName jako niezmienny identyfikator, czyli kotwicę, musimy wyodrębnić wartość userName z kolekcji kotwic naszego obiektu eksportowanego. Przeciągnij i upuść aktywność ForEachWithBodyFactory z przybornika do aktywności Sekwencja. Zastąp nazwę zmiennej elementu kotwicą, przejdź do właściwości i wybierz typArgument elementu Microsoft.MetadirectoryServices.AnchorAttribute. W polu Wartość wpisz objectToExport.AnchorAttributes.

Zrzut ekranu aktualizacji zastępującej przepływ operacyjny.

  1. Aby wyodrębnić wartość ciągu znaków kotwicy userName, przeciągnij i upuść aktywność Switch wewnątrz aktywności ForEach. W oknie podręcznym wybierz typ przełącznika Microsoft.IdentityManagement.MA.WebServices.Activities.Extensions.AnchorAttributeNameWrapper. Wprowadź wartość wyrażenia: Nowy AnchorAttributeNameWrapper(anchor.Name). Wybierz opcję "Dodaj nowy przypadek" w obszarze aktywności "Przełącz". Wpisz userName jako wartość przypadku. Przeciągnij i upuść działanie Assign do treści sprawy userName i przypisz anchor.Value.ToString() do zmiennej userName. Przepływ pracy Eksportuj zamień wygląda następująco:

Zrzut ekranu przedstawiający inną aktualizację w celu zastąpienia przepływu pracy operacji.

  1. Teraz, gdy wyodrębniliśmy wartość userName z wyeksportowanej właściwości kotwicy obiektu, musimy wypełnić inne struktury, takie jak firma, wartości domyślne, adres, dane logowania zawierające inne szczegóły użytkownika SAP. Robimy to przez przechodzenie przez kolekcję wszystkich atrybutów zdefiniowanych w schemacie.
  2. Zwiń aktywność ForEach i przeciągnij i upuść kolejną aktywność ForEachWithBothFactory wewnątrz aktywności Sequence po istniejącej aktywności ForEach. Zamień nazwę zmiennej item na schemaAttr, przejdź do właściwości i wybierz TypeArgument Microsoft.MetadirectoryServices.SchemaAttribute. W polu Wartość wpisz schemaType.Attributes.

Zrzut ekranu przedstawiający działanie zastępowania sekwencji operacji.

  1. Przeciągnij i upuść działanie Sekwencja w treści działania ForEach. W lewym dolnym rogu znajdź przycisk Zmienne i wybierz go, aby rozwinąć listę zmiennych zdefiniowanych w ramach tej sekwencji. Dodaj następującą zmienną: xValue typu String. Przeciągnij i upuść Działanie Przypisz do Działania Sekwencji. Przypisz xValue wyrażenie: If(objectToExport.AttributeChanges.Contains(schemaAttr.Name), objectToExport.AttributeChanges(schemaAttr.Name).ValueChanges(0).Value.ToString(), String.Empty) Wyodrębnia zmiany przygotowane do eksportu dla tego atrybutu lub inicjuje go pustym ciągiem. Przepływ pracy Eksportuj zamień wygląda następująco:

Zrzut ekranu przedstawiający aktualizację sekwencji zastępowania.

  1. Przeciągnij i upuść działanie Switch po działaniu Assign. W menu podręcznym wybierz pozycję Microsoft.IdentityManagement.MA.WebServices.Activities.Extensions.AttributeNameWrapper i wybierz przycisk OK. Wprowadź następujące wyrażenie: New AttributeNameWrapper(schemaAttr.Name). W prawym górnym rogu działania Switcha zobaczysz ikonę ostrzeżenia o nieobsługiwanych atrybutach zdefiniowanych w schemacie i nieprzypisanych do żadnej właściwości. Wybierz Dodaj nowy przypadek w obszarze działania Przełącznika i wpisz wartość przypadku dla miasta. Przeciągnij i upuść aktywność typu Sekwencja do treści tego przypadku. Przeciągnij i upuść akcję Przypisanie do obszaru tego przypadku. Przypisz wartość "X" do adresuX.city. Przeciągnij i upuść kolejne działanie Assign w treści tego przypadku. Przypisz wartość xValue do adresu.city. Twój przepływ pracy Export Replace wygląda następująco:

Zrzut ekranu przedstawiający działanie przeciągania i upuszczania przełącznika.

10.Dodaj inne brakujące przypadki i przypisania. Użyj tej tabeli mapowania jako przewodnika:

Przypadek Zadanie
miejscowość addressX.city = "X" address.city = xValue
firma companyX.company = "X" company.company = xValue
dział address.departmentX = "X" address.department = xValue
e-mail addressX.e_mail = "X" address.e_mail = xValue
czas wygaśnięcia logOnDataX.GLTGB = "X" logOnData.GLTGB = xValue
imię addressX.firstname = "X" address.firstname = xValue
nazwisko addressX.lastname = "X" address.lastname = xValue
drugie imię addressX.middlename = "X" address.middlename = xValue
numer telefonu addressX.TEL1_Numbr = "X" adres. TEL1_Numbr = xValue
tytuł stanowiska addressX.function = "X" address.function = xValue

Przepływ pracy Eksportuj zamień wygląda następująco:

Zrzut ekranu przedstawiający działanie drugiego przeciągania i upuszczania przełącznika.

  1. Przed wywołaniem programu BAPI_USER_CHANGE musimy sprawdzić, czy nie jest pusta nazwa użytkownika. Najpierw zwiń oba działania ForEach. Następnie przeciągnij i upuść działanie IF po drugim działaniu ForEach. Wprowadź następujący warunek: String.IsNullOrEmpty(userName ) = False

  2. Gdy nazwa użytkownika jest pusta, chcemy wskazać, że operacja nie powiodła się. Przeciągnij i upuść CreateCSEntryChangeResult działanie do gałęzi Else działania IF i wybierz ExportErrorCustomContinueRun kod błędu. Przepływ pracy Eksportuj zamień wygląda następująco: Zrzut ekranu przedstawiający działanie CreateCSEntryChangeResult.

  3. Przeciągnij i upuść aktywność Sekwencja do pustej gałęzi 'Then' w pierwszym działaniu IF. Przeciągnij i upuść działanie WebSeviceCall wewnątrz działania Sekwencja. Wybierz nazwę usługi SAPECC, punkt końcowy ZSAPCONNECTORWS i operację BAPI_USER_CHANGE. Kliknij przycisk argumenty, aby zdefiniować parametry wywołania usługi internetowej w następujący sposób:

Nazwisko Kierunek Typ Wartość
ADRES W BAPIADDR3 adres
ADDRESSX W BAPIADDR3X addressX
FIRMA W BAPIUSCOMP firma
COMPANYX W BAPIUSCOMX firma
USTAWIENIA DOMYŚLNE W BAPIDEFAUL Wartości domyślne
DEFAULTSX W BAPIDEFAX defaultsX
LOGONDATA W BAPILOGOND logOnData
LOGONDATAX W BAPILOGONX logOnDataX
POWRÓT W/Z TABLE_OF_BAPIRET2 bapiret2Table
NAZWA UŻYTKOWNIKA W String userName
  1. Wybierz przycisk OK. Znak ostrzegawczy zniknie. Przepływ pracy Eksportuj zamień wygląda następująco:

Zrzut ekranu przedstawiający operację BAPI_USER_CHANGE.

  1. Aby przetworzyć zmiany wyników żądania użytkownika, przeciągnij i upuść działanie IF wewnątrz działania Sekwencja po działaniu WebServiceCall. Wprowadź następujący warunek: Not IsNothing(bapiret2Table.item) AndAlso bapiret2Table.item.Count(Function(errItem) errItem.TYPE.Equals("E") = True) <> 0
  2. Jeśli nie wystąpią żadne błędy, zakładamy, że operacja eksportowania została ukończona pomyślnie i chcemy wskazać pomyślne wyeksportowanie tego obiektu przez utworzenie CSEntryChangeResult stanu Powodzenie. Przeciągnij i upuść CreateCSEntryChangeResult aktywność do gałęzi Else swojej aktywności IF i wybierz kod sukcesu.
  3. Przeciągnij i upuść działanie „Sekwencja” do gałęzi „Następnie” w działaniu „IF”. Dodaj aktywność dziennika z wartością string.Join("\n",bapiret2Table.item.Where(Function(retItem) retItem.TYPE.Equals("E")).Select(Function(r) r.MESSAGE)) LogText i tagiem Error. Dodaj CreateCSEntryChangeResult działanie po działaniu rejestrowania z kodem błędu ExportErrorCustomContinueRun. Przepływ pracy Eksportuj zamień wygląda następująco:

Zrzut ekranu przedstawiający ostateczny przepływ pracy zamiany eksportu.

Zakończono definicję przepływu pracy "Eksport Zamień".

Następnym krokiem jest skonfigurowanie łącznika ECMA2Host Webservice przy użyciu tego szablonu.

Następne kroki