Condividi tramite


Creazione del modello di connettore del servizio Web SAP ECC 7.51 per ECMA2Host

Questa guida illustra il processo di creazione di un modello per il connettore ECMA (Web Service Extensibility Connectivity Agent) per gestire gli utenti SAP ECC.

Limitazioni e presupposti

Questo modello illustra come gestire gli utenti. Altri tipi di oggetto, ad esempio gruppi di attività locali, ruoli e profili, non sono coperti da questa guida perché ECMA2Host non supporta attualmente riferimenti multivalore. Le operazioni relative alle password non rientrano nell'ambito di questa guida.

Questa guida non illustra la creazione dell'account del servizio all'interno di SAP usato per chiamare le funzioni BAPI esposte. Si presuppone che un account demo creato in precedenza Sviluppatore venga usato con un profilo RFC_ALL che concede le autorizzazioni ai BAPI indicati di seguito.

Lo strumento di configurazione del servizio Web non supporta le funzionalità seguenti esposte in SAP per impostazione predefinita: Criteri WSP e più associazioni per endpoint. Si prevede un'associazione WSDL solo con SOAP 1.1, senza criteri.

Funzioni BAPI SAP ECC usate in questo modello:

  • BAPI_USER_GETLIST: ottenere un elenco di tutti gli utenti connessi a questo sistema.
  • BAPI_USER_GETDETAIL: ottenere i dettagli di un utente specifico.
  • BAPI_USER_CREATE1 : crea un utente.
  • BAPI_USER_DELETE: elimina un utente.
  • BAPI_USER_CHANGE: aggiorna un utente.

Tutte le proprietà utente SAP in questa guida vengono considerate come proprietà con valori singoli.

Il linguaggio di programmazione usato è Visual Basic.

Definizione di un endpoint servizio Web e creazione di uno schema

Prima di poter progettare flussi di lavoro di importazione ed esportazione, è necessario creare un modello e definire un endpoint con le funzioni SAP BAPI esposte tramite un'interfaccia SOAP. Creare quindi uno schema degli oggetti ECMA2 e le relative proprietà sono disponibili in questo modello.

  1. Dalla cartella "C:\Programmi\Microsoft ECMA2Host\Web Service Configuration Tool" avviare lo strumento di configurazione del servizio Web wsconfigTool.exe
  2. Scegliere Crea nuovo progetto SOAP dal menu File-Nuovo

Screenshot della creazione di un progetto SOAP.

  1. Fare clic su Progetto SOAP e scegliere Aggiungi nuovo servizio Web.

Screenshot dell'aggiunta di un nuovo servizio Web.

  1. Denominare il servizio Web SAPECC, specificare un URL per scaricare WSDL pubblicato, immettere SAPECC come spazio dei nomi. Il nome del servizio Web consente di distinguere questo servizio Web nel modello da altri utenti. Lo spazio dei nomi definisce un nome dello spazio dei nomi Microsoft .NET usato per generare classi. Scegliere Modalità di autenticazione di base, a meno che non venga specificato diversamente dall'amministratore SAP. Fare clic su Avanti.

Screenshot della denominazione del servizio Web.

  1. Specificare le credenziali per connettersi all'endpoint SAP ECC. Fare clic su Avanti.
  2. Nella pagina endpoint e operazioni assicurarsi che vengano visualizzati i BAPI e fare clic su Fine

Nota

se vengono visualizzati più endpoint, sono abilitate entrambe le associazioni SOAP 1.2 e SOAP 1.1. In questo modo il connettore non riesce. Modificare la definizione di associazione in SOAMANAGER e mantenerla una sola. Aggiungere quindi di nuovo un servizio Web.

Screenshot di BAPIs.

  1. Salvare il progetto nella cartella C:\Programmi\Microsoft ECMA2Host\Service\ECMA.
  2. Fare clic sulla scheda Tipi di oggetto e scegliere di aggiungere il tipo di oggetto Utente. Fare clic su OK.
  3. Espandere la scheda Tipi di oggetto e fare clic su Definizione tipo utente.

Screenshot dei tipi di oggetto.

  1. Aggiungere gli attributi seguenti nello schema e scegliere userName come ancoraggio.

Screenshot dell'aggiunta di attributi.

  1. Salvare il progetto.
Nome Type Ancora
city string
company string
department string
posta elettronica string
expirationTime string
firstName string
lastName string
middleName string
telephoneNumber string
jobTitle string
userName string checked

Creazione di un flusso di lavoro di importazione completo

Il flusso di lavoro Di importazione, essendo facoltativo in ECMA2Host, consente di importare gli utenti SAP esistenti nella cache in memoria ECMA2Host ed evitare la creazione di utenti duplicati durante il provisioning.

Se non si crea un flusso di lavoro di importazione, il connettore funziona in modalità solo esportazione e fa sì che ECMA2Host esequisi sempre creare operazioni utente , anche per gli utenti esistenti. Ciò può causare errori o duplicati quando vengono usate le api SAP BAPI standard, a meno che i duplicati non vengano gestiti dal flusso di lavoro di esportazione.

SAP ECC non offre un meccanismo predefinito per la lettura delle modifiche apportate dall'ultima lettura.

Di conseguenza, viene implementato solo il flusso di lavoro Importazione completa. Se è necessario implementare Le importazioni delta per motivi di prestazioni, rivolgersi all'amministratore SAP per un elenco di BAPI e pubblicarle come servizio Web SOAP. Implementare quindi il flusso di lavoro di importazione delta usando l'approccio descritto di seguito e una proprietà customData che contiene un timestamp dell'esecuzione precedente.

SAP ECC offre diverse funzioni BAPI per ottenere un elenco di utenti con le relative proprietà:

  • BAPI_USER_GETLIST: ottenere un elenco di tutti gli utenti connessi a questo sistema.
  • BAPI_USER_GETDETAIL: ottenere i dettagli di un utente specifico.

Solo questi due BAPI vengono usati per recuperare gli utenti esistenti da SAP ECC in questo modello.

  1. Passare a Tipi di oggetto -> Utente -> Importazione -> Flusso di lavoro Importazione completa e dalla casella degli strumenti a destra trascinare e rilasciare l'attività Sequenza nel riquadro progettazione flussi di lavoro.
  2. In basso a sinistra trovare il pulsante Variabili e fare clic su di esso per espandere un elenco di variabili definite all'interno di questa sequenza.
  3. Aggiungere le variabili seguenti. Per selezionare un tipo di variabile generato da SAP WSDL, fare clic su Sfoglia per tipi ed espandere lo spazio dei nomi SAPECC e quindi espandere lo spazio dei nomi SAPECC.
Nome Tipo di variabile Ambito Predefiniti
selRangeTable SAPECC. TABLE_OF_BAPIUSSRGE Sequenza nuovo TABLE_OF_BAPIUSSRGE con {.item = new BAPIURSGE(){new BAPIURSGE}}
getListRetTable SAPECC. TABLE_OF_BAPIRET2 Sequenza nuovo TABLE_OF_BAPIRET2
pageSize Int32 Sequenza 200
returnedSize Int32 Sequenza
usersTable SAPECC. TABLE_OF_BAPIUSNAME Sequenza new TABLE_OF_BAPIUSNAME()

Screenshot del flusso di lavoro completo dell'operazione di importazione.

  1. Dalla casella degli strumenti trascinare e rilasciare quattro attività Assegna all'interno dell'attività Sequenza e impostare questi valori:
selRangeTable.item(0).PARAMETER = "USERNAME" 
selRangeTable.item(0).SIGN = "I" selRangeTable.item(0).OPTION = "GT" selRangeTable.item(0).LOW = ""   

Questi parametri usati per chiamare la funzione BAPI_USER_GETLIST e implementare la paginazione.

Screenshot del flusso di lavoro di importazione completo.

  1. Per implementare la paginazione, dalla casella degli strumenti trascinare e rilasciare l'attività DoWhile all'interno dell'attività Sequence dopo l'ultima operazione Assign.
  2. Nel riquadro destro passare alla scheda Proprietà e immettere questa condizione per DoWhile
  • ciclo: returnedSize = pageSize

Screenshot della schermata restituita.

  1. Fare clic su Variables (Variabili) e aggiungere la proprietà currentPageNumber di tipo int32 all'interno del ciclo DoWhile con il valore predefinito 0.

Screenshot della schermata dowhile.

  1. Passaggio facoltativo: se si prevede di implementare il flusso di lavoro di importazione delta, dalla casella degli strumenti trascinare e rilasciare l'attività Assegna all'interno dell'attività Sequenza dopo il ciclo DoWhile. Impostare questo valore:
  • customData(schemaType.Name + "_lastImportTime") = DateTimeOffset.UtcNow.Ticks.ToString() In questo modo viene salvata la data e l'ora dell'ultima esecuzione dell'importazione completa e questo timestamp può essere usato in un secondo momento nel flusso di lavoro di importazione delta.

Screenshot della schermata customdata.

  1. Dall'attività Sequenza di trascinamento della casella degli strumenti all'interno dell'attività DoWhile. Trascinare e rilasciare l'attività WebServiceCall all'interno dell'attività Sequence e selezionare il nome del servizio SAPECC, l'endpoint ZSAPCONNECTORWS e BAPI_USER_GETLIST operazione.

Screenshot della sequenza dowhile.

  1. Fare clic su ... Pulsante Argomenti per definire i parametri per la chiamata al servizio Web come indicato di seguito:
Nome Direzione Type Valore
MAX_ROWS In Int32 pageSize
MAX_ROWSSpecified In Booleano Vero
RETURN In/Out TABLE_OF_BAPIRET2 getListRetTable
SELECTION_EXP In/Out TABLE_OF_BAPIUSSEXP
SELECTION_RANGE In/Out TABLE_OF_BAPIUSSRGE selRangeTable
USERLIST In/Out TABLE_OF_BAPIUSNAME usersTable
WITH_USERNAME In String
ROWS Verso l'esterno Int32 returnedSize
  1. Fare clic su OK. Il segno di avviso scompare. Elenco di utenti archiviati nella variabile usersTable. Poiché SAP non restituisce un elenco completo di utenti in un'unica risposta, è necessario implementare l'impaginazione e chiamare questa funzione più volte durante il cambio di pagine. Quindi per ogni utente importato è necessario ottenere i dettagli dell'utente effettuando una chiamata separata. Ciò significa che per un panorama con 1000 utenti e una dimensione di pagina pari a 200, Web Service Connector effettua 5 chiamate per recuperare un elenco di utenti e 1000 singole chiamate per recuperare i dettagli degli utenti. Per migliorare le prestazioni, chiedere al team SAP di sviluppare un programma BAPI personalizzato che elenca tutti gli usi con le relative proprietà per evitare la necessità di effettuare 1000 singole chiamate ed esporre tale funzione BAPI sull'endpoint SOAP WS.
  2. Dalla casella degli strumenti trascinare l'attività IF all'interno dell'attività DoWhile dopo l'attività WebServiceCall. Specificare questa condizione per verificare la presenza di risposta non vuota e assenza di errori: IsNothing(getListRetTable.item) OrElse getListRetTable.item.Count(Function(errItem) errItem.TYPE.Equals("E") = True) = 0
  3. Dalla casella degli strumenti trascinare e rilasciare l'attività Throw nel ramo Else dell'attività IF per generare un errore durante l'importazione non riuscita. Passare alla scheda Proprietà e immettere questa espressione per la proprietà Exception dell'attività Throw: New Exception(getListRetTable.item.First(Function(retItem) retItem.TYPE.Equals("E")).MESSAGE)

Screenshot della proprietà dell'eccezione.

  1. Per elaborare un elenco di utenti importati, trascinare e rilasciare l'attività ForEachWithBodyFactory dalla casella degli strumenti nel ramo Then dell'attività IF. Passare alla scheda Proprietà e selezionare SAPECC. BAPIUSNAME come TypeArgument. Fare clic su ... button e digitare questa espressione per la proprietà values: if(usersTable.item,Enumerable.Empty(of BAPIUSNAME)())

Screenshot dell'attività IF.

  1. Dall'attività Sequenza di trascinamento della casella degli strumenti all'interno dell'attività ForEach. Dopo aver attivato questa finestra Attività sequenza, fare clic sul pulsante Variabili e definire queste variabili:
Nome Tipo di variabile Ambito Predefiniti
company SAPECC. BAPIUSCOMP Sequenza new BAPIUSCOMP()
address SAPECC. BAPIADDR3 Sequenza nuovo BAPIADDR3()
defaults SAPECC. BAPIDEFAUL Sequenza new BAPIDEFAUL()
logondata SAPECC. BAPILOGOND Sequenza new BAPILOGOND()
getDetailRetTable SAPECC. TABLE_OF_BAPIRET2 Sequenza new TABLE_OF_BAPIRET2()

L'attività IF è simile alla seguente:

Screenshot dell'attività IF con foreach.

  1. Trascinare e rilasciare l'attività CreateCSEntryChangeScope all'interno dell'attività Sequence. Nella proprietà DN immettere schemaType.Name & item. NOME UTENTE. Nel campo CreateAnchorAttribute AnchorValue immettere item.username.

Screenshot di CreateCSEntryChangeScope.

  1. Per recuperare i dettagli di ogni utente, dalla casella degli strumenti trascinare e rilasciare l'attività WebServiceCall all'interno dell'attività Sequence subito prima dell'attività CreateAnchorAttribute. Selezionare il nome del servizio SAPECC, l'endpoint ZSAPCONNECTORWS e l'operazione di BAPI_USER_GET_DETAIL. Fare clic su ... Pulsante Argomenti per definire i parametri per la chiamata al servizio Web come indicato di seguito:
Nome Direzione Type Valore
RETURN In/Out TABLE_OF_BAPIRET2 getDetailRetTable
USERNAME In String item.username
INDIRIZZO Verso l'esterno BAPIADDR3 address
COMPANY Verso l'esterno BAPIUSCOMP company
IMPOSTAZIONI PREDEFINITE Verso l'esterno BAPIUSDEFAUL defaults
LOGONDATA Verso l'esterno BAPILOGOND logonData
WITH_USERNAME In String
ROWS Verso l'esterno Int32 returnedSize
  1. Fare clic su OK. Il segno di avviso scompare. I dettagli di un utente vengono archiviati nelle variabili elencate sopra. L'attività IF è simile alla seguente:

Screenshot dei parametri.

  1. Per controllare i risultati dell'operazione di BAPI_USER_GET_DETAIL, dalla casella degli strumenti trascinare e rilasciare l'attività IF e inserirla all'interno dell'attività Sequence tra le attività WebServiceCall e CreateAnchorAttribute. Immettere questa condizione: IsNothing(getDetailRetTable.item) OrElse getDetailRetTable.item.Count(Function(errItem) errItem.TYPE.Equals("E") = True) = 0

Poiché i dettagli dell'utente mancanti non devono essere considerati come eventi irreversibili, si vuole indicare questo errore e continuare l'elaborazione di altri utenti. Trascinare e rilasciare l'attività Sequenza nel ramo Else dell'attività IF. Aggiungere l'attività Log all'interno di tale nuova attività Sequence. Passare alla scheda Proprietà e modificare la proprietà Level impostandola su High, Tag su Trace. Immettere quanto segue nella proprietà LogText: string.Join("\n", getDetailRetTable.item.Select (Function(item) item.MESSAGE ))

  1. Trascinare e rilasciare l'attività Sequenza nel ramo Then dell'attività IF. Trascinare e rilasciare l'attività CreateAnchorAttribute esistente nell'attività Sequenza all'interno del ramo Then dell'attività IF. L'attività ForEach è ora simile alla seguente:

Screenshot di ForEach.

  1. Per ogni proprietà di un utente come city, company, department, email add IF activity after CreateAnchorAttribute activity and check for non-empty values by entering conditions like and adding CreateAttributeChange activities into Then branch of that IF activity .For each property of a user like, company, department, add IF activity after CreateAnchorAttribute activity and check for non-empty values by entering conditions like Not string.IsNullOrEmpty(address.city) and adding CreateAttributeChange activities into Then branch of that IF activity.

Screenshot di CreateAttributeChange.

Ad esempio: Aggiungere attività CreateAttributeChange per tutte le proprietà utente usando questa tabella di mapping:

Proprietà utente ECMA Proprietà SAP
city address.city
department address.department
company company.company
posta elettronica address.e_mail
firstName address.firstName
lastName address.lastName
middleName address.middleName
jobTitle address.function
expirationTime logonData.GLTGB
telephoneNumber indirizzo. TEL1_NUMBR
  1. Aggiungere infine l'attività SetImportStatusCode dopo l'ultima attività CreateAttributeChange. Impostare ErrorCode su Operazione riuscita nel ramo Then. Aggiungere un'altra attività di codice SetImportStatus nel ramo Else e impostare ErrorCode su ImportErrorCustomContinueRun.

Screenshot di SetImportStatusCode.

  1. Comprimere l'attività Sequenza all'interno dell'attività ForEach in modo che il ciclo DoWhile sia simile al seguente:

Screenshot del ciclo DoWhile.

  1. Per recuperare la pagina successiva degli utenti, aggiornare selRangeTable.item(0).LOW la proprietà . Trascinare e rilasciare l'attività IF nell'attività Sequenza all'interno di DoWhile, posizionarla dopo l'attività IF esistente. Immettere returnedSize>0 come Condizione. Aggiungere l'attività Assign nel ramo Then dell'attività IF e impostare su selRangeTable.item(0).LOW usersTable.item(returnedSize-1).username.

Screenshot di DoWhile finale.

La definizione del flusso di lavoro importazione completa è stata completata.

Creazione del flusso di lavoro Di esportazione Aggiungi flusso di lavoro

Per creare un utente in SAP ECC, è possibile chiamare BAPI_USER_CREATE1 programma e specificare tutti i parametri, inclusi un nome account e una password iniziale. Se è necessario generare un nome account sul lato SAP, rivolgersi all'amministratore SAP e usare una funzione BAPI personalizzata che restituisce una proprietà userName di un account utente appena creato.

Questa guida non illustra l'assegnazione di licenze, gruppi di attività locali o globali, sistemi o profili. Rivolgersi all'amministratore SAP e modificare questo flusso di lavoro di conseguenza.

Non è necessario implementare la paginazione nei flussi di lavoro di esportazione. Nel contesto del flusso di lavoro è disponibile un solo oggetto objectToExport.

  1. Passare a Tipi di oggetto - Utente ->> Esporta -> Aggiungi flusso di lavoro e dalla casella degli strumenti a destra trascinare e rilasciare l'attività Sequenza nel riquadro progettazione flussi di lavoro.
  2. In basso a sinistra trovare il pulsante Variabili e fare clic su di esso per espandere un elenco di variabili definite all'interno di questa sequenza.
  3. Aggiungere le variabili seguenti. Per selezionare un tipo di variabile generato da SAP WSDL, fare clic su Sfoglia per tipi ed espandere lo spazio dei nomi SAPECC e quindi espandere lo spazio dei nomi SAPECC. In questo modo vengono inizializzate le strutture di dati utilizzate dal programma BAPI_USER_CREATE1.
Nome Tipo di variabile Ambito Predefiniti
address SAPECC. BAPIADDR3 Sequenza nuovo BAPIADDR3()
userName String Sequenza
password SAPECC. BAPIPWD Sequenza new BAPIPWD()
company SAPECC. BAPIUSCOMP Sequenza new BAPIUSCOMP()
defaults SAPECC. BAPIDEFAUL Sequenza new BAPIDEFAUL()
logOnData SAPECC. BAPILOGOND Sequenza new BAPILOGOND()
bapiret2Table SAPECC. TABLE_OF_BAPIRET2 Sequenza new TABLE_OF_BAPIRET2()

Screenshot dell'aggiunta del flusso di lavoro di esportazione.

  1. Poiché la proprietà userName è stata definita come ID non modificabile, è necessario estrarre il valore userName da una raccolta di ancoraggi dell'oggetto di esportazione. Trascinare e rilasciare l'attività ForEachWithBodyFactory dalla casella degli strumenti all'attività Sequence. Sostituire il nome della variabile di elemento con ancoraggio, passare alle proprietà e scegliere TypeArgument di Microsoft.MetadirectoryServices.AnchorAttribute. Nel campo Valore digitare objectToExport.AnchorAttributes.

Screenshot della sequenza di aggiunta dell'esportazione.

  1. Per estrarre un valore stringa di un ancoraggio userName, trascinare e rilasciare l'attività Switch all'interno dell'attività ForEach. Nella finestra popup selezionare Microsoft.IdentityManagement.MA.WebServices.Activities.Extensions.AnchorAttributeNameWrapper il tipo di opzione. Immettere il valore expression di: New AnchorAttributeNameWrapper(anchor. Nome).
  2. Fare clic su Add new case area (Aggiungi nuovo caso) dell'attività Switch (Cambia attività). Digitare userName come valore case. Trascinare e rilasciare Assegna attività nel corpo del case userName e assegnare l'ancoraggio. Valore.ToString() alla variabile userName.

Screenshot del nuovo caso.

  1. Ora che è stato estratto il valore userName dalla proprietà di ancoraggio oggetti esportato, è necessario popolare altre strutture come società, impostazioni predefinite, indirizzo, dati di accesso che contengono altri dettagli utente SAP. A tale scopo, è possibile eseguire il ciclo tramite una raccolta di modifiche agli attributi.
  2. Comprimere l'attività ForEach e trascinare un'altra attività ForEachWithBothFactory all'interno dell'attività Sequence dopo l'attività ForEach esistente. Sostituire il nome della variabile di elemento con attributeChange, passare alle proprietà e scegliere TypeArgument di Microsoft.MetadirectoryServices.AttributeChange. Nel campo Valore digitare objectToExport.AttributeChanges.

Screenshot della nuova sequenza.

  1. Trascinare e rilasciare l'attività Switch nel corpo dell'attività ForEach.
  2. Nel menu popup selezionare Microsoft.IdentityManagement.MA.WebServices.Activities.Extensions.AttributeNameWrapper e fare clic su OK.
  3. Immettere l'espressione seguente: New AttributeNameWrapper(attributeChange.Name). Verrà visualizzata un'icona di avviso nell'angolo superiore destro dell'attività Switch sugli attributi non gestiti definiti nello schema e non assegnati ad alcuna proprietà.
  4. Fare clic su Aggiungi nuova area case dell'attività Switch e digitare un valore case city.
  5. Trascinare l'attività Assegna nel corpo di questo caso. Assegna attributeChange.ValueChanges(0).Value.ToString() a address.city.

Screenshot del nuovo flusso di lavoro di aggiunta esportazione.

  1. Aggiungere altri casi e assegnazioni mancanti. Usare questa tabella di mapping come guida:
Case Assegnazione
city address.city = attributeChange.ValueChanges(0)Value.ToString()
company company.company = attributeChange.ValueChanges(0)Value.ToString()
department address.department = attributeChange.ValueChanges(0)Value.ToString()
posta elettronica 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 indirizzo. TEL1_Numbr = attributeChange.ValueChanges(0)Value.ToString()
jobTitle address.function = attributeChange.ValueChanges(0)Value.ToString()
export_password parola d’ordine. BAPIPWD1 = attributeChange.ValueChanges(0)Value.ToString()

Qui export_password è un attributo virtuale speciale che viene sempre definito nello schema e può essere usato per passare una password iniziale dell'utente da creare.

Screenshot dei casi.

  1. Comprimere l'attività ForEach e trascinare l'attività IF nell'attività Sequence, dopo la seconda attività ForEach, per convalidare le proprietà utente, prima di inviare la richiesta di creazione dell'utente. Sono necessari almeno 3 valori non vuoti: nome utente, cognome, password iniziale. Immettere questa condizione: (String.IsNullOrEmpty(address.lastname) = False ) AND (String.IsNullOrEmpty(userName) = False) AND (String.IsNullOrEmpty(password.BAPIPWD1) = False)
  2. Nel ramo Else dell'attività IF aggiungere un'altra attività IF perché si vogliono generare errori diversi a seconda di ciò che manca. Immettere il valore della condizione: String.IsNullOrEmpty(userName). Trascinare e rilasciare CreateCSEntryChangeResult le attività in entrambi i rami della seconda attività IF e configurare ErrorCode di ExportErrorMissingAnchorComponent e ExportErrorMissingProvisioningAttribute.

Screenshot della seconda attività IF.

  1. Trascinare e rilasciare l'attività Sequenza nel ramo Then vuoto della prima attività IF. Trascinare e rilasciare l'attività WebSeviceCall all'interno dell'attività Sequenza. Selezionare il nome del servizio SAPECC, l'endpoint ZSAPCONNECTORWS e l'operazione di BAPI_USER_CREATE1. Fare clic su ... Pulsante Argomenti per definire i parametri per la chiamata al servizio Web come indicato di seguito:
Nome Direzione Type Valore
INDIRIZZO In BAPIADDR3 address
COMPANY In BAPIUSCOMP company
IMPOSTAZIONI PREDEFINITE In BAPIDEFAUL defaults
LOGONDATA In BAPILOGOND logOnData
PASSWORD In BAPIPWD password
RETURN In uscita TABLE_OF_BAPIRET2 bapiret2Table
SELF_REGISTER In String "X"
USERNAME In String userName
  1. Fare clic su OK. Il segno di avviso scompare.

Screenshot del flusso di lavoro dopo i parametri.

  1. Per elaborare i risultati della richiesta utente trascinare e rilasciare l'attività IF all'interno dell'attività Sequence dopo l'attività WebServiceCall. Immettere la condizione seguente: IsNothing (bapiret2Table.item) OrElse bapiret2Table.item.Count(Function(errItem) errItem.TYPE.Equals("E") = True) <> 0
  2. Se non vengono visualizzati errori, si presuppone che l'operazione di esportazione sia stata completata correttamente e si vuole indicare l'esportazione corretta di questo oggetto creando CSEntryChangeResult con lo stato Operazione riuscita. Trascinare e rilasciare l'attività CreateCSEntryChangeResult nel ramo Else dell'attività IF e selezionare Codice errore operazione riuscita.
  3. Facoltativo: se la chiamata al servizio Web restituisce un nome account generato di un utente, è necessario aggiornare un valore di ancoraggio dell'oggetto esportato. A tale scopo, trascinare l'attività CreateAttrubuteChangeall'interno dell'attività CreateCSEntryChangeResult e selezionare Aggiungi un nome utente. Trascinare quindi l'attività CreateValueChange all'interno dell'attività CreateAttributeChange e immettere il nome della variabile popolato da un'attività di chiamata al servizio Web. In questa guida si usa la variabile userName non aggiornata durante l'esportazione.

Screenshot del flusso di sequenza aggiornato.

  1. L'ultimo passaggio del flusso di lavoro Esporta aggiungi consiste nel gestire e registrare gli errori di esportazione. Trascinare l'attività Sequenza nel ramo Then vuoto dell'attività IF.
  2. Trascinare e rilasciare Attività log nell'attività Sequenza. Passare alla scheda Proprietà e immettere il valore LogText di : bapiret2Table.item.First(Function(retItem) retItem.TYPE.Equals("E")). MESSAGGIO. Mantenere il livello di registrazione elevato e il tag di traccia. Questo registra un messaggio di errore in ConnectorsLog o nel registro eventi ECMA2Host quando è abilitata la traccia dettagliata.
  3. Trascinare e rilasciare l'attività Switch all'interno dell'attività Sequenza dopo l'attività Log. Nella finestra popup selezionare Tipo di stringa del valore switch. Immettere l'espressione bapiret2Table.item.First(Function(retItem) retItem.TYPE.Equals("E")).NUMBER
  4. Fare clic su Case predefinito e trascinare e rilasciare l'attività CreateCSEntryChangeResult nel corpo di questo caso. Scegliere ExportErrorInvalidProvisioningAttributeValue error code (Codice di errore ExportErrorInvalidProvisioningAttributeValue).

Screenshot del nuovo aggiornamento al flusso di lavoro.

  1. Fare clic sull'area Aggiungi nuovo case e digitare un valore case pari a 224. Trascinare e rilasciare CreateCSEntryChangeResult l'attività nel corpo di questo caso. Scegliere ExportErrorCustomContinueRun il codice di errore.

Screenshot dell'aggiornamento finale al flusso di lavoro.

La definizione di Esporta aggiungi flusso di lavoro è stata completata.

Creazione di un flusso di lavoro di eliminazione esportazione

Per eliminare un utente in SAP ECC, è possibile chiamare BAPI_USER_DELETE programma e specificare un nome di account da eliminare nel sistema connesso. Rivolgersi all'amministratore SAP se questo scenario è obbligatorio, perché spesso gli account SAP ECC non devono essere eliminati, ma devono essere scaduti per conservare i record cronologici.

Questa guida non illustra gli scenari correlati al sistema sap Common User Administration, al deprovisioning degli utenti da sistemi connessi, alla revoca delle licenze e così via.

Non è necessario implementare la paginazione nei flussi di lavoro di esportazione. Nel contesto del flusso di lavoro è disponibile un solo oggetto objectToExport.

  1. Passare a Tipi di oggetto -> Utente -> Esporta -> Elimina flusso di lavoro e dalla casella degli strumenti a destra trascinare e rilasciare l'attività Sequenza nel riquadro progettazione flussi di lavoro.
  2. In basso a sinistra trovare il pulsante Variabili e fare clic su di esso per espandere un elenco di variabili definite all'interno di questa sequenza.
  3. Aggiungere le variabili seguenti. Per selezionare un tipo di variabile generato da SAP WSDL, fare clic su Sfoglia per tipi ed espandere lo spazio dei nomi SAPECC e quindi espandere lo spazio dei nomi SAPECC. In questo modo vengono inizializzate le strutture di dati utilizzate dal programma BAPI_USER_DELETE.
Nome Tipo di variabile Ambito Predefiniti
userName String Sequenza
bapiret2Table SAPECC. TABLE_OF_BAPIRET2 Sequenza new TABLE_OF_BAPIRET2()
  1. Poiché la proprietà userName è stata definita come ID non modificabile, è necessario estrarre il valore userName da una raccolta di ancoraggi dell'oggetto di esportazione. Trascinare e rilasciare l'attività ForEachWithBodyFactory dalla casella degli strumenti all'attività Sequence. Sostituire il nome della variabile di elemento con ancoraggio, passare alle proprietà e scegliere TypeArgument di Microsoft.MetadirectoryServices.AnchorAttribute. Nel campo Valore digitare objectToExport.AnchorAttributes.

Screenshot del flusso di lavoro dell'operazione di eliminazione dell'esportazione.

  1. Per estrarre un valore stringa di un ancoraggio userName, trascinare e rilasciare l'attività Switch all'interno dell'attività ForEach. Nella finestra popup selezionare Microsoft.IdentityManagement.MA.WebServices.Activities.Extensions.AnchorAttributeNameWrapper il tipo di opzione. Immettere il valore expression di: New AnchorAttributeNameWrapper(anchor.Name). Fare clic su Add new case area (Aggiungi nuovo caso) dell'attività Switch (Cambia attività). Digitare userName come valore case. Trascinare l'attività Assegna attività nel corpo del case userName e assegnarla anchor.Value.ToString() alla variabile userName.
  2. Trascinare e rilasciare l'attività WebSeviceCall all'interno dell'attività Sequence dopo l'attività ForEach. Selezionare il nome del servizio SAPECC, l'endpoint ZSAPCONNECTORWS e BAPI_USER_DELETE operazione. Fare clic su ... Pulsante Argomenti per definire i parametri per la chiamata al servizio Web come indicato di seguito:
Nome Direzione Type Valore
RETURN In/Out TABLE_OF_BAPIRET2 bapiret2Table
USERNAME In String userName
  1. Fare clic su OK. Il segno di avviso scompare.

Screenshot del flusso di lavoro dell'operazione di eliminazione aggiornata.

  1. Per elaborare i risultati della richiesta utente, trascinare e rilasciare l'attività IF all'interno dell'attività Sequence dopo l'attività WebServiceCall. Immettere la condizione seguente: If(bapiRet2Table.item, Enumerable.Empty(Of BAPIRET2)()).Count(Function(errItem) errItem.TYPE.Equals("E") = True) <> 0
  2. Se non vengono visualizzati errori, si presuppone che l'operazione di eliminazione sia stata completata correttamente e che si voglia indicare l'esportazione corretta di questo oggetto creando CSEntryChangeResult con lo stato Operazione riuscita. Trascinare l'attività CreateCSEntryChangeResult nel ramo Else dell'attività IF e selezionare Codice errore operazione riuscita.

Screenshot del flusso di lavoro di eliminazione dell'esportazione.

  1. L'ultimo passaggio del flusso di lavoro Esporta eliminazione consiste nel gestire e registrare gli errori di esportazione. Trascinare l'attività Sequenza nel ramo Then vuoto dell'attività IF.
  2. Trascinare e rilasciare Attività log nell'attività Sequenza. Passare alla scheda Proprietà e immettere il valore LogText di : bapiRetTable.item.First(Function(retItem) retItem.TYPE.Equals("E")= True).MESSAGE. Mantenere il livello di registrazione elevato e il tag di traccia. Questo registra un messaggio di errore nel registro eventi ConnectorsLog o ECMA2Host quando è abilitata la traccia dettagliata.
  3. Trascinare e rilasciare l'attività Switch all'interno dell'attività Sequenza dopo l'attività Log. Nella finestra popup selezionare Tipo di stringa del valore switch. Immettere l'espressione bapiret2Table.item.First(Function(retItem) retItem.TYPE.Equals("E")).NUMBER
  4. Fare clic su Case predefinito e trascinare e rilasciare l'attività CreateCSEntryChangeResult nel corpo di questo caso. Scegliere ExportErrorSyntaxViolation error code (Codice di errore ExportErrorSyntaxViolation).

Screenshot dell'aggiornamento per esportare il flusso di lavoro dell'operazione di eliminazione.

  1. Fare clic sull'area Aggiungi nuovo caso e digitare un valore case pari a 124. Trascinare e rilasciare CreateCSEntryChangeResult l'attività nel corpo di questo caso. Scegliere ExportErrorCustomContinueRun il codice di errore.

Screenshot del flusso di lavoro dell'operazione di eliminazione dell'esportazione finale.

La definizione del flusso di lavoro Esporta elimina è stata completata.

Creazione del flusso di lavoro Di sostituzione esportazione

Per aggiornare un utente in SAP ECC, è possibile chiamare BAPI_USER_CHANGE programma e specificare tutti i parametri, inclusi un nome account e tutti i dettagli utente, inclusi quelli che non cambiano. La modalità di esportazione ECMA2 quando vengono fornite tutte le proprietà utente è denominata Replace. In confronto, la modalità di esportazione di AttributeUpdate fornisce solo attributi che vengono modificati e ciò può causare la sovrascrittura di alcune proprietà utente con valori vuoti. Pertanto, il connettore Webservice usa sempre la modalità di esportazione Sostituzione oggetti e prevede che il connettore sia configurato per Export Type: Replace.

Il flusso di lavoro Esporta sostituisci è quasi identico al flusso di lavoro Esporta aggiungi. L'unica differenza è che è necessario specificare parametri aggiuntivi come addressX o companyX per BAPI_USER_CHANGE programma, dove X che termina con addressX indica che la struttura dell'indirizzo contiene una modifica.

  1. Passare a Tipi di oggetto -> Utente -> Esportazione -> Sostituisci flusso di lavoro e dalla casella degli strumenti a destra trascinare e rilasciare l'attività Sequenza nel riquadro progettazione flussi di lavoro.
  2. In basso a sinistra trovare il pulsante Variabili e fare clic su di esso per espandere un elenco di variabili definite all'interno di questa sequenza.
  3. Aggiungere le variabili seguenti. Per selezionare un tipo di variabile generato da SAP WSDL, fare clic su Sfoglia per tipi ed espandere lo spazio dei nomi SAPECC e quindi espandere lo spazio dei nomi SAPECC. In questo modo vengono inizializzate le strutture di dati utilizzate dal programma BAPI_USER_CHANGE.
Nome Tipo di variabile Ambito Predefiniti
userName String Sequenza
bapiret2Table SAPECC. TABLE_OF_BAPIRET2 Sequenza new TABLE_OF_BAPIRET2()
addressX SAPECC. BAPIADDR3X Sequenza new BAPIADDR3X()
address SAPECC. BAPIADDR3 Sequenza nuovo BAPIADDR3()
companyX SAPECC. BAPIUSCOMX Sequenza new BAPIUSCOMX()
company SAPECC. BAPIUSCOMP Sequenza new BAPIUSCOMP()
defaultsX SAPECC. BAPIDEFAX Sequenza new BAPIDEFAX()
defaults SAPECC. BAPIDEFAUL Sequenza new BAPIDEFAUL()
logOnDataX SAPECC. BAPILOGONX Sequenza new BAPILOGONX()
logOnData SAPECC. BAPILOGOND Sequenza new BAPILOGOND()

Il flusso di lavoro Export Replace è simile al seguente:

Screenshot dell'inizio del flusso di lavoro dell'operazione di sostituzione.

  1. Poiché la proprietà userName è stata definita come ID non modificabile, è necessario estrarre il valore userName da una raccolta di ancoraggi dell'oggetto di esportazione. Trascinare e rilasciare l'attività ForEachWithBodyFactory dalla casella degli strumenti all'attività Sequence. Sostituire il nome della variabile di elemento con ancoraggio, passare alle proprietà e scegliere TypeArgument di Microsoft.MetadirectoryServices.AnchorAttribute. Nel campo Valore digitare objectToExport.AnchorAttributes.

Screenshot dell'aggiornamento per sostituire il flusso di lavoro dell'operazione.

  1. Per estrarre un valore stringa di un ancoraggio userName, trascinare e rilasciare l'attività Switch all'interno dell'attività ForEach. Nella finestra popup selezionare Microsoft.IdentityManagement.MA.WebServices.Activities.Extensions.AnchorAttributeNameWrapper il tipo di opzione. Immettere il valore expression di: New AnchorAttributeNameWrapper(anchor.Name). Fare clic su Add new case area (Aggiungi nuovo caso) dell'attività Switch (Cambia attività). Digitare userName come valore case. Trascinare l'attività Assegna attività nel corpo del case userName e assegnarla anchor.Value.ToString() alla variabile userName. Il flusso di lavoro Export Replace è simile al seguente:

Screenshot di un altro aggiornamento per sostituire il flusso di lavoro dell'operazione.

  1. Ora che è stato estratto il valore userName dalla proprietà di ancoraggio oggetti esportato, è necessario popolare altre strutture come società, impostazioni predefinite, indirizzo, dati di accesso che contengono altri dettagli utente SAP. A tale scopo, eseguire il ciclo attraverso la raccolta di tutti gli attributi definiti nello schema.
  2. Comprimere l'attività ForEach e trascinare un'altra attività ForEachWithBothFactory all'interno dell'attività Sequence dopo l'attività ForEach esistente. Sostituire il nome della variabile di elemento con schemaAttr, passare alle proprietà e scegliere TypeArgument di Microsoft.MetadirectoryServices.SchemaAttribute. Nel campo Valore digitare schemaType.Attributes.

Screenshot dell'attività della sequenza di operazioni di sostituzione.

  1. Trascinare e rilasciare l'attività Sequence nel corpo dell'attività ForEach. In basso a sinistra trovare il pulsante Variabili e fare clic su di esso per espandere un elenco di variabili definite all'interno di questa sequenza. Aggiungere la variabile seguente: xValue di tipo String. Trascinare e rilasciare Assegna attività nell'attività Sequenza. Assegnare xValue l'espressione di : If(objectToExport.AttributeChanges.Contains(schemaAttr.Name), objectToExport.AttributeChanges(schemaAttr.Name).ValueChanges(0).Value.ToString(), String.Empty) estrae le modifiche in staging per l'esportazione per questo attributo o la inizializza con una stringa vuota. Il flusso di lavoro Export Replace è simile al seguente:

Screenshot dell'aggiornamento alla sequenza di sostituzione.

  1. Trascinare e rilasciare l'attività Switch dopo l'attività Assign. Nel menu popup selezionare Microsoft.IdentityManagement.MA.WebServices.Activities.Extensions.AttributeNameWrapper e fare clic su OK. Immettere l'espressione seguente: Nuovo AttributeNameWrapper(schemaAttr.Name). Verrà visualizzata un'icona di avviso nell'angolo superiore destro dell'attività Switch sugli attributi non gestiti definiti nello schema e non assegnati ad alcuna proprietà. Fare clic su Aggiungi nuova area case dell'attività Switch e digitare un valore case city. Trascinare e rilasciare l'attività Sequenza nel corpo di questo caso. Trascinare e rilasciare l'attività Assegna nel corpo di questo caso. Assegnare il valore "X" a addressX.city. Trascinare e rilasciare un'altra attività Assign nel corpo di questo caso. Assegnare xValue a address.city. Il flusso di lavoro Export Replace è simile al seguente:

Screenshot dell'attività di trascinamento della selezione.

10.Aggiungere altri casi e assegnazioni mancanti. Usare questa tabella di mapping come guida:

Case Assegnazione
city addressX.city = "X" address.city = xValue
company companyX.company = "X" company.company = xValue
department address.departmentX = "X" address.department = xValue
posta elettronica 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 = indirizzo "X". TEL1_Numbr = xValue
jobTitle addressX.function = "X" address.function = xValue

Il flusso di lavoro Export Replace è simile al seguente:

Screenshot della seconda attività di trascinamento della selezione.

  1. Prima di chiamare BAPI_USER_CHANGE programma, è necessario verificare la presenza di un nome utente non vuoto. Comprimere entrambe le attività ForEach e trascinare l'attività IF dopo la seconda attività ForEach. Immettere la condizione seguente: String.IsNullOrEmpty(userName ) = False

  2. Quando il nome utente è vuoto, si vuole indicare che l'operazione non è riuscita. Trascinare e rilasciare CreateCSEntryChangeResult l'attività nel ramo Else dell'attività IF e selezionare ExportErrorCustomContinueRun codice di errore. Il flusso di lavoro Export Replace è simile al seguente: Screenshot dell'attività CreateCSEntryChangeResult.

  3. Trascinare e rilasciare l'attività Sequence nel ramo Then vuoto della prima attività IF. Trascinare e rilasciare l'attività WebSeviceCall all'interno dell'attività Sequenza. Selezionare il nome del servizio SAPECC, l'endpoint ZSAPCONNECTORWS e l'operazione di BAPI_USER_CHANGE. Fare clic su ... Pulsante Argomenti per definire i parametri per la chiamata al servizio Web come indicato di seguito:

Nome Direzione Type Valore
INDIRIZZO In BAPIADDR3 address
ADDRESSX In BAPIADDR3X addressX
COMPANY In BAPIUSCOMP company
COMPANYX In BAPIUSCOMX company
IMPOSTAZIONI PREDEFINITE In BAPIDEFAUL defaults
DEFAULTSX In BAPIDEFAX defaultsX
LOGONDATA In BAPILOGOND logOnData
LOGONDATAX In BAPILOGONX logOnDataX
RETURN In/Out TABLE_OF_BAPIRET2 bapiret2Table
USERNAME In String userName
  1. Fare clic su OK. Il segno di avviso scompare. Il flusso di lavoro Export Replace è simile al seguente:

Screenshot dell'operazione di BAPI_USER_CHANGE.

  1. Per elaborare i risultati delle richieste utente di modifica, trascinare e rilasciare l'attività IF all'interno dell'attività Sequence dopo l'attività WebServiceCall. Immettere la condizione seguente: Not IsNothing(bapiret2Table.item) AndAlso bapiret2Table.item.Count(Function(errItem) errItem.TYPE.Equals("E") = True) <> 0
  2. Se non vengono visualizzati errori, si presuppone che l'operazione di esportazione sia stata completata correttamente e si vuole indicare l'esportazione corretta di questo oggetto creando CSEntryChangeResult con lo stato Operazione riuscita. Trascinare l'attività CreateCSEntryChangeResult nel ramo Else dell'attività IF e selezionare Codice errore operazione riuscita.
  3. Trascinare e rilasciare l'attività Sequenza nel ramo Then dell'attività IF. Aggiungere l'attività Log con il valore LogText di string.Join("\n",bapiret2Table.item.Where(Function(retItem) retItem.TYPE.Equals("E")).Select(Function(r) r.MESSAGE)) e Il tag Error. Aggiungere CreateCSEntryChangeResult l'attività dopo l'attività log con il codice di errore di ExportErrorCustomContinueRun. Il flusso di lavoro Export Replace è simile al seguente:

Screenshot del flusso di lavoro di sostituzione dell'esportazione finale.

La definizione del flusso di lavoro Esporta sostituisci è stata completata.

Il passaggio successivo consiste nel configurare il connettore web ECMA2Host usando questo modello.

Passaggi successivi