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 działań, role i profile, nie są objęte tym przewodnikiem, ponieważ host ECMA2Host nie obsługuje obecnie odwołań wielowartych. 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 uwidocznionych w oprogramowaniu SAP domyślnie: Zasady programu WSP i wiele powiązań na punkt końcowy. Oczekuje to, że WSDL tylko z protokołu SOAP 1.1, powiązanie stylu dokumentu all-in-one bez zasad.

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, wprowadź wartość SAPECC jako przestrzeń nazw. Nazwa usługi sieci Web pomaga odróżnić tę usługę internetową 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 pozycję userName jako kotwicę.

Zrzut ekranu przedstawiający dodawanie atrybutów.

  1. Zapisz projekt.
Nazwisko Typ Kotwica
miejscowość string
company string
department string
adres e-mail string
expirationTime string
firstName string
lastName string
middleName string
telephoneNumber string
jobTitle string
userName string checked

Tworzenie przepływu pracy pełnego importu

Przepływ pracy Importuj, będąc opcjonalnym elementem ECMA2Host, umożliwia importowanie istniejących użytkowników sap do pamięci podręcznej ECMA2Host i unikanie 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 interfejsy BAPI sap są używane, chyba że duplikaty są obsługiwane przez przepływ pracy eksportowania.

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 Sequence new TABLE_OF_BAPIUSSRGE with {.item = new BAPIUSSRGE(){new BAPIUSSRGE}}
getListRetTable SAPECC. TABLE_OF_BAPIRET2 Sequence nowa TABLE_OF_BAPIRET2
Pagesize Int32 Sequence 200
returnedSize Int32 Sequence
usersTable SAPECC. TABLE_OF_BAPIUSNAME Sequence 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 = ""   

Te parametry 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 przedstawiający ekran w czasie.

  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ę czasowa.

  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 Pagesize
MAX_ROWSSpecified W Wartość logiczna Prawda
WRÓCIĆ We/Wy TABLE_OF_BAPIRET2 getListRetTable
SELECTION_EXP We/Wy TABLE_OF_BAPIUSSEXP
SELECTION_RANGE We/Wy TABLE_OF_BAPIUSSRGE selRangeTable
LISTA UŻYTKOWNIKÓW We/Wy TABLE_OF_BAPIUSNAME usersTable
WITH_USERNAME W String
WIERSZE Out 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ść działanie IF wewnątrz działania DoWhile po działaniu WebServiceCall. Określ ten warunek, aby sprawdzić, czy niepusta odpowiedź i brak 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 TypeArgument. 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
company SAPECC. BAPIUSCOMP Sequence nowy BAPIUSCOMP()
adres SAPECC. BAPIADDR3 Sequence new BAPIADDR3()
Wartości domyślne SAPECC. BAPIDEFAUL Sequence nowy BAPIDEFAUL()
logndata SAPECC. BAPILOGOND Sequence nowy BAPILOGOND()
getDetailRetTable SAPECC. TABLE_OF_BAPIRET2 Sequence 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 przedstawiający pozycję CreateCSEntryChangeScope.

  1. Aby pobrać szczegóły każdego użytkownika, przeciągnij i upuść działanie WebServiceCall przybornika wewnątrz działania sekwencji bezpośrednio przed działaniem CreateAnchorAttribute. Wybierz nazwę usługi SAPECC, punkt końcowy ZSAPCONNECTORWS i operację BAPI_USER_GET_DETAIL. Wybierz przycisk Argumenty, aby zdefiniować parametry wywołania usługi internetowej w następujący sposób:
Nazwisko Kierunek Typ Wartość
WRÓCIĆ We/Wy TABLE_OF_BAPIRET2 getDetailRetTable
NAZWA UŻYTKOWNIKA W String item.username
ADRES Out BAPIADDR3 adres
FIRMA Out BAPIUSCOMP company
USTAWIENIA DOMYŚLNE Out BAPIUSDEFAUL Wartości domyślne
LOGONDATA Out BAPILOGOND logonData
WITH_USERNAME W String
WIERSZE Out Int32 returnedSize
  1. Wybierz przycisk OK. Znak ostrzegawczy zniknie. Szczegóły użytkownika są przechowywane w powyższych zmiennych. 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 działanie dziennika wewnątrz tego nowego działania sekwencji. Przejdź do karty Właściwości i zmień właściwość Poziom na Wysoki, Tag na Trace. 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ść działanie Sekwencja do gałęzi Następnie działania IF. Przeciągnij i upuść istniejące działanie CreateAnchorAttribute do działania sekwencji wewnątrz gałęzi Następnie działania 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, takiego jak miasto, firma, dział, poczta e-mail, dodaj działanie IF po działaniu CreateAnchorAttribute i sprawdź, czy niepuste wartości, wprowadzając warunki, takie jak Not string.IsNullOrEmpty(address.city) i dodając działania CreateAttributeChange do gałęzi Następnie 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ść address.city
department address.department
company company.company
adres e-mail address.e_mail
firstName address.firstName
lastName address.lastName
middleName address.middleName
jobTitle address.function
expirationTime logonData.GLTGB
telephoneNumber adres. TEL1_NUMBR
  1. Na koniec dodaj działanie SetImportStatusCode po ostatnim działaniu CreateAttributeChange. Ustaw wartość ErrorCode na Powodzenie w gałęzi Następnie. Dodaj jeszcze jedno działanie 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 selRangeTable.item(0).LOW właściwość. 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 wartość selRangeTable.item(0).LOWusersTable.item(returnedSize-1).username.

Zrzut ekranu przedstawiający końcowy stan DoWhile.

Ukończono definicję pełnego przepływu pracy importu.

Tworzenie przepływu pracy eksportu Dodaj

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 przepływach pracy eksportowania. 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 na podstawie języka SAP WSDL, wybierz pozycję Przeglądaj dla typów i rozwiń węzeł wygenerowany, a następnie rozwiń węzeł Przestrzeń nazw SAPECC. Inicjuje struktury danych używane przez program BAPI_USER_CREATE1.
Nazwisko Typ zmiennej Scope Wartość domyślna
adres SAPECC. BAPIADDR3 Sequence new BAPIADDR3()
userName String Sequence
hasło SAPECC. BAPIPWD Sequence nowy BAPIPWD()
company SAPECC. BAPIUSCOMP Sequence nowy BAPIUSCOMP()
Wartości domyślne SAPECC. BAPIDEFAUL Sequence nowy BAPIDEFAUL()
logOnData SAPECC. BAPILOGOND Sequence nowy BAPILOGOND()
bapiret2Table SAPECC. TABLE_OF_BAPIRET2 Sequence new TABLE_OF_BAPIRET2()

Zrzut ekranu przedstawiający eksportowanie dodawania przepływu pracy.

  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 elementu kotwicą, przejdź do właściwości i wybierz typArgument elementu Microsoft.MetadirectoryServices.AnchorAttribute. W polu Wartość wpisz objectToExport.AnchorAttributes.

Zrzut ekranu przedstawiający eksportowanie sekwencji dodawania.

  1. Aby wyodrębnić wartość ciągu kotwicy userName, przeciągnij i upuść działanie Switch wewnątrz działania ForEach. W oknie podręcznym wybierz typ przełącznika Microsoft.IdentityManagement.MA.WebServices.Activities.Extensions.AnchorAttributeNameWrapper. Wprowadź wartość wyrażenia: New AnchorAttributeNameWrapper(anchor. Nazwa).
  2. Wybierz pozycję Dodaj nowy obszar przypadku działania Przełącz. Wpisz userName jako wartość wielkości liter. Przeciągnij i upuść działanie Assign do treści sprawy userName i przypisz kotwicę. 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 przez przechodzenie na rowerze przez kolekcję zmian atrybutów.
  2. Zwiń działanie ForEach i przeciągnij i upuść kolejne działanie ForEachWithBothFactory wewnątrz działania sekwencji 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 podręcznym wybierz pozycję Microsoft.IdentityManagement.MA.WebServices.Activities.Extensions.AttributeNameWrapper i wybierz przycisk OK.
  3. Wprowadź następujące wyrażenie: New AttributeNameWrapper(attributeChange.Name). W prawym górnym rogu działania Przełącznik 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ść działanie Przypisz do treś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 Przypisywanie
miejscowość address.city = attributeChange.ValueChanges(0)Value.ToString()
company company.company = attributeChange.ValueChanges(0)Value.ToString()
department address.department = attributeChange.ValueChanges(0)Value.ToString()
adres e-mail address.e_mail = attributeChange.ValueChanges(0)Value.ToString()
expirationTime logOnData.GLTGB = attributeChange.ValueChanges(0)Value.ToString()
firstname address.firstname = attributeChange.ValueChanges(0)Value.ToString()
lastName address.lastname = attributeChange.ValueChanges(0)Value.ToString()
middleName address.middlename = attributeChange.ValueChanges(0)Value.ToString()
telephoneNumber adres. TEL1_Numbr = attributeChange.ValueChanges(0)Value.ToString()
jobTitle address.function = attributeChange.ValueChanges(0)Value.ToString()
export_password 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 działania do obu gałęzi drugiego działania IF i skonfiguruj wartość ErrorCode of 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. Aby zdefiniować parametry dla wywołania usługi sieciowej, kliknij przycisk "Argumenty" w następujący sposób:
Nazwisko Kierunek Typ Wartość
ADRES W BAPIADDR3 adres
FIRMA W BAPIUSCOMP company
USTAWIENIA DOMYŚLNE W BAPIDEFAUL Wartości domyślne
LOGONDATA W BAPILOGOND logOnData
HASŁO W BAPIPWD hasło
WRÓCIĆ Wyjście TABLE_OF_BAPIRET2 bapiret2Table
SELF_REGISTER W String "X"
NAZWA UŻYTKOWNIKA W String 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ść CreateAttrubuteChangedziałanie wewnątrz CreateCSEntryChangeResult działania i wybierz pozycję Dodaj nazwę użytkownika. Następnie przeciągnij i upuść CreateValueChange działanie wewnątrz CreateAttributeChange działania i wprowadź nazwę zmiennej wypełnianą przez działanie wywołania usługi internetowej. 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 przepływu pracy Eksportowanie dodawania jest obsługa błędów eksportu i rejestrowania. Przeciągnij i upuść działanie Sekwencja do pustej gałęzi Następnie działania IF.
  2. Przeciągnij i upuść działanie Dziennika do działania sekwencji. Przejdź do karty Właściwości i wprowadź wartość LogText: bapiret2Table.item.First(Function(retItem) retItem.TYPE.Equals("E")). KOMUNIKAT. Zachowaj wysoki poziom rejestrowania i tag ś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 Switch wewnątrz działania Sekwencja po działaniu dziennika. 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 pozycję ExportErrorInvalidProvisioningAttributeValue kod błędu.

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ę eksportu Dodaj przepływ pracy.

Tworzenie przepływu pracy eksportowania 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 przepływach pracy eksportowania. W kontekście przepływu pracy jest dostępny tylko jeden obiekt objectToExport.

  1. Przejdź do obszaru Typy obiektów —> Użytkownik —> Eksport —> Usuń 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 opcję Przeglądaj typy i rozwiń węzeł wygenerowany, 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 Sequence
bapiret2Table SAPECC. TABLE_OF_BAPIRET2 Sequence 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 eksportu. Przeciągnij i upuść działanie ForEachWithBodyFactory z przybornika do działania 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 przedstawiający przepływ pracy operacji usuwania eksportu.

  1. Aby wyodrębnić wartość ciągu kotwicy userName, przeciągnij i upuść działanie Switch wewnątrz działania 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ść wielkości liter. Przeciągnij i upuść działanie Assign do treści sprawy 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. Wybierz przycisk Argumenty, aby zdefiniować parametry wywołania usługi internetowej w następujący sposób:
Nazwisko Kierunek Typ Wartość
WRÓCIĆ We/Wy 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 działanie do gałęzi Else działania IF i wybierz pozycję Kod błędu powodzenia.

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

  1. Ostatnim krokiem przepływu pracy eksportowania usuwania jest obsługa błędów eksportu i rejestrowania. Przeciągnij i upuść działanie Sekwencja do pustej gałęzi Następnie działania 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 rejestrowania i tag śledzenia. Spowoduje to zarejestrowanie komunikatu o błędzie w dzienniku zdarzeń ConnectorsLog lub ECMA2Host po włączeniu pełnego śledzenia.
  3. Przeciągnij i upuść działanie Switch wewnątrz działania Sekwencja po działaniu dziennika. W oknie podręcznym wybierz pozycję Typ ciągu wartości przełącznika. Wprowadź następujące wyrażenie: bapiret2Table.item.First(Function(retItem) retItem.TYPE.Equals("E")).NUMBER
  4. Wybierz przypadek domyślny i przeciągnij i upuść aktywność CreateCSEntryChangeResult do treści tego przypadku. Wybierz pozycję ExportErrorSyntaxViolation error code (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 Eksportowanie usuwania.

Tworzenie przepływu pracy eksportowania zamień

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 eksportowania zamień obiektów 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 na podstawie SAP WSDL, wybierz pozycję Przeglądaj typy i rozwiń węzeł wygenerowany, 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 String Sequence
bapiret2Table SAPECC. TABLE_OF_BAPIRET2 Sequence new TABLE_OF_BAPIRET2()
addressX SAPECC. BAPIADDR3X Sequence new BAPIADDR3X()
adres SAPECC. BAPIADDR3 Sequence new BAPIADDR3()
companyX SAPECC. BAPIUSCOMX Sequence nowy BAPIUSCOMX()
company SAPECC. BAPIUSCOMP Sequence nowy BAPIUSCOMP()
defaultsX SAPECC. BAPIDEFAX Sequence nowy BAPIDEFAX()
Wartości domyślne SAPECC. BAPIDEFAUL Sequence nowy BAPIDEFAUL()
logOnDataX SAPECC. BAPILOGONX Sequence nowy BAPILOGONX()
logOnData SAPECC. BAPILOGOND Sequence nowy BAPILOGOND()

Przepływ pracy Eksportuj zamień 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 i kotwicę, musimy wyodrębnić wartość userName z kolekcji kotwic naszego obiektu eksportu. Przeciągnij i upuść działanie ForEachWithBodyFactory z przybornika do działania 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 przedstawiający aktualizację w celu zastąpienia przepływu pracy operacji.

  1. Aby wyodrębnić wartość ciągu kotwicy userName, przeciągnij i upuść działanie Switch wewnątrz działania ForEach. W oknie podręcznym wybierz Microsoft.IdentityManagement.MA.WebServices.Activities.Extensions.AnchorAttributeNameWrapper typ przełącznika. Wprowadź wartość wyrażenia: Nowy AnchorAttributeNameWrapper(anchor.Name). Wybierz obszar 'Dodaj nową sprawę' w działaniu typu 'Przełącz'. Wpisz userName jako wartość wielkości liter. 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 na rowerze przez kolekcję wszystkich atrybutów zdefiniowanych w schemacie.
  2. Zwiń działanie ForEach i przeciągnij i upuść kolejne działanie ForEachWithBothFactory wewnątrz działania sekwencji po istniejącym działaniu ForEach. Zamień nazwę zmiennej elementu na schemaAttr, przejdź do właściwości i wybierz typArgument elementu 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 Ciąg. Przeciągnij i upuść działanie Przypisz do działania Sekwencja. 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ę do sekwencji zamiany.

  1. Przeciągnij i upuść działanie Switch po przypisaniu działania. 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 Przełącznik zobaczysz ikonę ostrzeżenia o nieobsługiwanych atrybutach zdefiniowanych w schemacie i nieprzypisanych do żadnej właściwości. Wybierz pozycję Dodaj nowy obszar przypadku działania Przełącz i wpisz wartość przypadku miasta. Przeciągnij i upuść działanie Sekwencja w treści tego przypadku. Przeciągnij i upuść działanie Przypisywanie do treści 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. Przepływ pracy Eksportuj zamień 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 Przypisywanie
miejscowość addressX.city = "X" address.city = xValue
company companyX.company = "X" company.company = xValue
department address.departmentX = "X" address.department = xValue
adres e-mail addressX.e_mail = "X" address.e_mail = xValue
expirationTime logOnDataX.GLTGB = "X" logOnData.GLTGB = xValue
firstname addressX.firstname = "X" address.firstname = xValue
lastName addressX.lastname = "X" address.lastname = xValue
middleName addressX.middlename = "X" address.middlename = xValue
telephoneNumber addressX.TEL1_Numbr = "X" adres. TEL1_Numbr = xValue
jobTitle 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. Zwiń zarówno działania ForEach, jak i 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ść 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_CHANGE. Kliknij przycisk Argumenty, aby zdefiniować parametry dla 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 company
COMPANYX W BAPIUSCOMX company
USTAWIENIA DOMYŚLNE W BAPIDEFAUL Wartości domyślne
DEFAULTSX W BAPIDEFAX defaultsX
LOGONDATA W BAPILOGOND logOnData
LOGONDATAX W BAPILOGONX logOnDataX
WRÓCIĆ We/Wy 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 działanie do gałęzi Else działania IF i wybierz pozycję Kod błędu powodzenia.
  3. Przeciągnij i upuść działanie Sekwencja do gałęzi Następnie działania 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 dziennika 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.

Ukończono definicję przepływu pracy Eksportuj zamień.

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

Następne kroki