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.
- Dalla cartella "C:\Programmi\Microsoft ECMA2Host\Web Service Configuration Tool" avviare lo strumento di configurazione del servizio Web wsconfigTool.exe
- Scegliere Crea nuovo progetto SOAP dal menu File-Nuovo
- Fare clic su Progetto SOAP e scegliere Aggiungi nuovo servizio Web.
- 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.
- Specificare le credenziali per connettersi all'endpoint SAP ECC. Fare clic su Avanti.
- 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.
- Salvare il progetto nella cartella C:\Programmi\Microsoft ECMA2Host\Service\ECMA.
- Fare clic sulla scheda Tipi di oggetto e scegliere di aggiungere il tipo di oggetto Utente. Fare clic su OK.
- Espandere la scheda Tipi di oggetto e fare clic su Definizione tipo utente.
- Aggiungere gli attributi seguenti nello schema e scegliere userName come ancoraggio.
- 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.
- 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.
- 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 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() |
- 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.
- Per implementare la paginazione, dalla casella degli strumenti trascinare e rilasciare l'attività DoWhile all'interno dell'attività Sequence dopo l'ultima operazione Assign.
- Nel riquadro destro passare alla scheda Proprietà e immettere questa condizione per DoWhile
- ciclo:
returnedSize = pageSize
- Fare clic su Variables (Variabili) e aggiungere la proprietà currentPageNumber di tipo int32 all'interno del ciclo DoWhile con il valore predefinito 0.
- 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.
- 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.
- 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 |
- 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.
- 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
- 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)
- 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)())
- 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:
- 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.
- 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 |
- 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:
- 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 ))
- 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:
- 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.
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 |
- 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.
- Comprimere l'attività Sequenza all'interno dell'attività ForEach in modo che il ciclo DoWhile sia simile al seguente:
- 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 suselRangeTable.item(0).LOW
usersTable.item(returnedSize-1).username
.
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.
- 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.
- 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 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() |
- 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 digitareobjectToExport.AnchorAttributes
.
- 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). - 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.
- 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.
- 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 digitareobjectToExport.AttributeChanges
.
- Trascinare e rilasciare l'attività Switch nel corpo dell'attività ForEach.
- Nel menu popup selezionare
Microsoft.IdentityManagement.MA.WebServices.Activities.Extensions.AttributeNameWrapper
e fare clic su OK. - 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à.
- Fare clic su Aggiungi nuova area case dell'attività Switch e digitare un valore case city.
- Trascinare l'attività Assegna nel corpo di questo caso. Assegna
attributeChange.ValueChanges(0).Value.ToString()
a address.city.
- 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.
- 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)
- 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 diExportErrorMissingAnchorComponent
eExportErrorMissingProvisioningAttribute
.
- 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 |
- Fare clic su OK. Il segno di avviso scompare.
- 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
- 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.
- 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à
CreateAttrubuteChange
all'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.
- 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.
- 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. - 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
- 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).
- 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. ScegliereExportErrorCustomContinueRun
il codice di errore.
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.
- 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.
- 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 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() |
- 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 digitareobjectToExport.AnchorAttributes
.
- 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: NewAnchorAttributeNameWrapper(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 assegnarlaanchor.Value.ToString()
alla variabile userName. - 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 |
- Fare clic su OK. Il segno di avviso scompare.
- 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
- 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.
- 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.
- 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. - 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
- 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).
- 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. ScegliereExportErrorCustomContinueRun
il codice di errore.
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.
- 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.
- 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 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:
- 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 digitareobjectToExport.AnchorAttributes
.
- 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: NewAnchorAttributeNameWrapper(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 assegnarlaanchor.Value.ToString()
alla variabile userName. Il flusso di lavoro Export Replace è simile al seguente:
- 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.
- 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 digitareschemaType.Attributes
.
- 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:
- 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: NuovoAttributeNameWrapper(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:
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:
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
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 selezionareExportErrorCustomContinueRun
codice di errore. Il flusso di lavoro Export Replace è simile al seguente: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 |
- Fare clic su OK. Il segno di avviso scompare. Il flusso di lavoro Export Replace è simile al seguente:
- 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
- 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. - 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. AggiungereCreateCSEntryChangeResult
l'attività dopo l'attività log con il codice di errore diExportErrorCustomContinueRun
. Il flusso di lavoro Export Replace è simile al seguente:
La definizione del flusso di lavoro Esporta sostituisci è stata completata.
Il passaggio successivo consiste nel configurare il connettore web ECMA2Host usando questo modello.