Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
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 utilizzato per richiamare le funzioni BAPI esposte. Si assume che sia utilizzato un account demo pre-creato Developer con un profilo RFC_ALL che concede le autorizzazioni alle BAPIs menzionate in questo articolo.
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 WSDL con solo SOAP 1.1, in associazione di stile documento tutto in uno, 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
- Dal menu File-New scegliere Crea nuovo progetto SOAP
- Selezionare Progetto SOAP e scegliere Aggiungi nuovo servizio Web.
- Denomina il servizio Web SAPECC, specifica l'URL per scaricare il WSDL pubblicato, immetti SAPECC come spazio dei nomi. Il nome del servizio Web ti aiuta a distinguere questo servizio Web nel modello da altri. 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. Selezionare Avanti.
- Specificare le credenziali per connettersi all'endpoint SAP ECC. Selezionare Avanti.
- Nella pagina degli endpoint e delle operazioni, verificare che vengano visualizzati i BAPIs e selezionare Fine
Nota
se vengono visualizzati più endpoint, sono abilitate entrambe le associazioni SOAP 1.2 e SOAP 1.1. Questo provoca il fallimento del connettore. Modifica la definizione di binding in SOAMANAGER e mantenerne una sola. Aggiungere quindi di nuovo un servizio Web.
- Salvare il progetto nella cartella C:\Programmi\Microsoft ECMA2Host\Service\ECMA.
- Selezionare la scheda Tipi di oggetto e scegliere di aggiungere il tipo di oggetto Utente. Selezionare OK.
- Espandere la scheda Tipi di oggetto e selezionare Definizione tipo utente.
- Aggiungere gli attributi seguenti nello schema e scegliere userName come ancoraggio.
- Salva il tuo progetto.
Nome | Tipo | Ancora |
---|---|---|
città | corda | |
azienda | corda | |
dipartimento | corda | |
posta elettronica | corda | |
tempo di scadenza | corda | |
nome | corda | |
cognome | corda | |
secondo nome | corda | |
numero di telefono | corda | |
titolo di lavoro | corda | |
nome utente | corda | controllato |
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 esegua sempre operazioni di Creazione 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.
Pertanto, implementeremo solo il flusso di lavoro di Importazione completa. Se è necessario implementare le importazioni Delta per motivi di prestazioni, rivolgersi all'amministratore SAP per un elenco di BAPI, affinché siano pubblicate come servizio Web SOAP. Quindi, implementare il flusso di lavoro di importazione delta utilizzando l'approccio descritto di seguito e una proprietà customData che include un timestamp dell'esecuzione precedente riuscita.
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.
- Navigare verso Tipi di oggetto -> Utente -> Importazione -> Importazione completa e dalla casella degli strumenti a destra trascinare e rilasciare l'attività Sequenza nel riquadro del designer del flusso di lavoro.
- In basso a sinistra trovare il pulsante Variabili e selezionarlo per espandere un elenco di variabili definite all'interno di questa sequenza.
- Aggiungere le variabili seguenti. Per selezionare un tipo di variabile generato dal WSDL SAP, selezionare l'opzione Sfoglia per tipi ed espandere generato, quindi espandere lo spazio dei nomi SAPECC.
Nome | Tipo di variabile | Ambito | Predefinito |
---|---|---|---|
selRangeTable | SAPECC. TABLE_OF_BAPIUSSRGE | Sequenza | nuovo TABLE_OF_BAPIUSSRGE con {.item = new BAPIUSSRGE(){new BAPIUSSRGE}} |
getListRetTable | SAPECC. TABLE_OF_BAPIRET2 | Sequenza | nuovo TABLE_OF_BAPIRET2 |
dimensione della pagina | Int32 | Sequenza | 200 |
dimensione restituita | Int32 | Sequenza | |
tabellaUtenti | SAPECC. TABLE_OF_BAPIUSNAME | Sequenza | nuova TABLE_OF_BAPIUSNAME() |
- Dalla Toolbox, trascina quattro attività Assign all'interno dell'attività Sequence e imposta questi valori:
selRangeTable.item(0).PARAMETER = "USERNAME"
selRangeTable.item(0).SIGN = "I" selRangeTable.item(0).OPTION = "GT" selRangeTable.item(0).LOW = ""
Questi parametri sono 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
- Su Variables, selezionare e aggiungere la proprietà currentPageNumber di tipo int32 all'interno del ciclo DoWhile con il valore predefinito di 0.
- Passaggio facoltativo: Se prevedi di implementare il workflow di importazione delta, trascina e rilascia l'attività Assegna dalla casella degli strumenti 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.
- Dalla Toolbox, trascina e rilascia l'attività Sequence all'interno dell'attività DoWhile. Trascinare e posizionare l'attività WebServiceCall all'interno dell'attività Sequence e selezionare il nome del servizio SAPECC, l'endpoint ZSAPCONNECTORWS e l'operazione BAPI_USER_GETLIST.
- Selezionare il pulsante Argomenti per definire i parametri per la chiamata al servizio web come indicato di seguito:
Nome | Direzione | Tipo | Valore |
---|---|---|---|
MAX_ROWS | In | Int32 | dimensione della pagina |
MAX_ROWSSpecified | In | Booleano | Vero |
RITORNO | Entrata/Uscita | TABLE_OF_BAPIRET2 | getListRetTable |
SELECTION_EXP | Entrata/Uscita | TABELLA_DI_BAPIUSSEXP | |
INTERVALLO_SELEZIONE | Entrata/Uscita | TABLE_OF_BAPIUSSRGE | selRangeTable |
Elenco Utenti | Entrata/Uscita | TABLE_OF_BAPIUSNAME | tabellaUtenti |
CON_NOME_UTENTE | In | Stringa | |
RIGHE | Fuori | Int32 | dimensione restituita |
- Selezionare 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 1.000 utenti e una dimensione di pagina pari a 200, Web Service Connector effettua 5 chiamate per recuperare un elenco di utenti e 1.000 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à. In questo modo si evita la necessità di effettuare 1.000 chiamate singole ed esporre tale funzione BAPI sull'endpoint SOAP WS.
- Dalla Toolbox, trascina e rilascia l'attività IF all'interno dell'attività DoWhile, successivamente all'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 Toolbox, trascina e rilascia l'attività Throw nel ramo Else dell'attività IF per generare un errore sull'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, trascina e rilascia l'attività ForEachWithBodyFactory dalla casella degli strumenti nel ramo Then della tua attività IF. Passare alla scheda Proprietà e selezionare SAPECC. BAPIUSNAME come TypeArgument. Selezionare il pulsante ... e digitare questa espressione per la proprietà values:
if(usersTable.item,Enumerable.Empty(of BAPIUSNAME)())
- Dalla casella degli strumenti, trascinate e rilasciate l'attività Sequenza all'interno della vostra attività ForEach. Dopo aver attivato questa finestra Attività sequenza, selezionare il pulsante Variabili e definire queste variabili:
Nome | Tipo di variabile | Ambito | Predefinito |
---|---|---|---|
azienda | SAPECC.BAPIUSCOMP | Sequenza | new BAPIUSCOMP() |
indirizzo | SAPECC. BAPIADDR3 | Sequenza | nuovo BAPIADDR3() |
impostazioni predefinite | SAPECC. BAPIDEFAUL | Sequenza | new BAPIDEFAUL() |
logondata | SAPECC.BAPILOGOND | Sequenza | new BAPILOGOND() |
getDetailRetTable | SAPECC. TABLE_OF_BAPIRET2 | Sequenza | nuovo TABLE_OF_BAPIRET2() |
La tua attività IF è così:
- Trascina e rilascia l'attività CreateCSEntryChangeScope all'interno della tua attività Sequence. Nella proprietà DN immettere schemaType.Name & elemento.USERNAME. Nel campo CreateAnchorAttribute AnchorValue immettere item.username.
- Per recuperare i dettagli di ogni utente, dalla Toolbox 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. Selezionare il pulsante Argomenti per definire i parametri per la chiamata al servizio web come indicato di seguito:
Nome | Direzione | Tipo | Valore |
---|---|---|---|
RITORNO | Entrata/Uscita | TABLE_OF_BAPIRET2 | getDetailRetTable |
NOME UTENTE | In | Stringa | elemento.username |
INDIRIZZO | Fuori | BAPIADDR3 | indirizzo |
AZIENDA | Fuori | BAPIUSCOMP | azienda |
IMPOSTAZIONI PREDEFINITE | Fuori | BAPIUSDEFAUL | impostazioni predefinite |
LOGONDATA | Fuori | BAPILOGOND | dati di accesso |
CON_NOME_UTENTE | In | Stringa | |
RIGHE | Fuori | Int32 | dimensione restituita |
- Selezionare OK. Il segno di avviso scompare. I dettagli di un utente vengono archiviati nelle variabili elencate sopra. La tua attività IF è così:
- 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. Trascina e rilascia l'attività Sequenza nel ramo Else dell'attività IF. Inserisci l'attività Log all'interno della 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'. Trascina e rilascia 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 città, azienda, reparto, email, aggiungi l'attività IF dopo l'attività CreateAnchorAttribute e verifica se i valori non sono vuoti inserendo condizioni come
Not string.IsNullOrEmpty(address.city)
e aggiungendo attività CreateAttributeChange nel ramo Then di tale attività IF.
Ad esempio: Aggiungere attività CreateAttributeChange per tutte le proprietà utente usando questa tabella di mapping:
Proprietà utente ECMA | Proprietà SAP |
---|---|
città | indirizzo.città |
dipartimento | indirizzo.dipartimento |
azienda | azienda.azienda |
posta elettronica | indirizzo.email |
nome | indirizzo.nome |
cognome | indirizzo.cognome |
secondo nome | indirizzo.nomeSecondo |
titolo di lavoro | indirizzo.funzione |
tempo di scadenza | logonData.GLTGB |
numero di telefono | indirizzo.TEL1_NUMERO |
- 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 la proprietà
selRangeTable.item(0).LOW
. Trascina e rilascia l'attività IF nell'attività Sequence all'interno di DoWhile. Posizionarlo dopo l'attività IF esistente. Immettere returnedSize>0 come Condizione. Aggiungere l'attività Assign nel ramo Then dell'attività IF e impostareselRangeTable.item(0).LOW
suusersTable.item(returnedSize-1).username
.
Hai completato la definizione del flusso di lavoro per l'importazione completa.
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 pannello di progettazione del flusso di lavoro.
- In basso a sinistra trovare il pulsante Variabili e selezionarlo per espandere un elenco di variabili definite all'interno di questa sequenza.
- Aggiungere le variabili seguenti. Per selezionare un tipo di variabile generato dal WSDL SAP, selezionare l'opzione Sfoglia per tipi ed espandere generato, 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 | Predefinito |
---|---|---|---|
indirizzo | SAPECC. BAPIADDR3 | Sequenza | nuovo BAPIADDR3() |
nome utente | Stringa | Sequenza | |
parola d’ordine | SAPECC.BAPIPWD | Sequenza | new BAPIPWD() |
azienda | SAPECC.BAPIUSCOMP | Sequenza | new BAPIUSCOMP() |
impostazioni predefinite | SAPECC. BAPIDEFAUL | Sequenza | new BAPIDEFAUL() |
logOnData | SAPECC.BAPILOGOND | Sequenza | new BAPILOGOND() |
bapiret2Table | SAPECC. TABLE_OF_BAPIRET2 | Sequenza | nuovo 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. Trascina e rilascia l'attività ForEachWithBodyFactory dal Toolbox all'interno dell'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 nome utente di riferimento, trascinare e rilasciare l'attività Switch all'interno dell'attività ForEach. Nella finestra di popup, selezionare il tipo di interruttore
Microsoft.IdentityManagement.MA.WebServices.Activities.Extensions.AnchorAttributeNameWrapper
. Immettere il valore di espressione di: New AnchorAttributeNameWrapper(anchor.Nome). - Seleziona l'area "Aggiungi nuovo caso" dell'attività Switch. Inserire userName come valore nelle maiuscole. Trascinare e rilasciare l'Attività di assegnazione nel corpo del case userName e assegnare anchor.Value.ToString() alla variabile userName.
- Ora che è stato estratto il valore userName dalla proprietà di ancoraggio dell'oggetto esportato, è necessario popolare altre strutture come la società, le impostazioni predefinite, l'indirizzo e i dati di accesso che contengono altri dettagli dell'utente SAP. Per fare ciò, scorriamo una serie di modifiche degli attributi.
- Riduci l'attività ForEach e trascina un'altra attività ForEachWithBothFactory all'interno dell'attività Sequence, dopo quella 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
.
- Trascina e rilascia l'attività Switch nel corpo dell'attività ForEach.
- Nel menu popup selezionare
Microsoft.IdentityManagement.MA.WebServices.Activities.Extensions.AttributeNameWrapper
e selezionare 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à.
- Selezionare nell'area Aggiungi nuovo caso dell'attività Switch e digitare un valore del caso di city.
- Trascina l'attività Assegna all'interno di questo caso. Assegna
attributeChange.ValueChanges(0).Value.ToString()
a indirizzo.città.
- Aggiungere altri casi e assegnazioni mancanti. Usare questa tabella di mappatura come guida.
Caso | Assegnazione |
---|---|
città | address.city = attributeChange.ValueChanges(0)Value.ToString() |
azienda | company.company = attributeChange.ValueChanges(0)Value.ToString() |
dipartimento | address.department = attributeChange.ValueChanges(0)Value.ToString() |
posta elettronica | address.e_mail = attributeChange.ValueChanges(0)Value.ToString() |
tempo di scadenza | logOnData.GLTGB = attributeChange.ValueChanges(0)Value.ToString() |
nome di battesimo | address.firstname = attributeChange.ValueChanges(0)Value.ToString() |
cognome | address.lastname = attributeChange.ValueChanges(0)Value.ToString() |
secondo nome | address.middlename = attributeChange.ValueChanges(0)Value.ToString() |
numero di telefono | indirizzo.TEL1_Numbr = attributeChange.ValueChanges(0)Value.ToString() |
titolo di lavoro | address.function = attributeChange.ValueChanges(0)Value.ToString() |
export_password | parola d’ordine. BAPIPWD1 = attributeChange.ValueChanges(0)Value.ToString() |
In questo caso, 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.
- Riduci l'attività ForEach e trascina l'attività IF nella attività Sequenza, dopo la seconda attività ForEach, per convalidare le proprietà dell'utente, prima di inviare la richiesta di creazione 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 blocco Else dell'attività IF, aggiungi un'altra attività IF poiché desideriamo generare errori diversi a seconda di ciò che manca. Immettere il valore della condizione: String.IsNullOrEmpty(userName). Trascina e rilascia
CreateCSEntryChangeResult
nei rami della seconda attività IF e imposta i codici di erroreExportErrorMissingAnchorComponent
eExportErrorMissingProvisioningAttribute
.
- Trascinare e rilasciare l'attività Sequenza nel ramo Then vuoto della prima attività IF. Trascinare e rilasciare l'attività WebServiceCall all'interno dell'attività Sequenza. Selezionare il nome del servizio SAPECC, l'endpoint ZSAPCONNECTORWS e l'operazione di BAPI_USER_CREATE1. Selezionare il pulsante Argomenti per definire i parametri per la chiamata al servizio web come indicato di seguito:
Nome | Direzione | Tipo | Valore |
---|---|---|---|
INDIRIZZO | In | BAPIADDR3 | indirizzo |
AZIENDA | In | BAPIUSCOMP | azienda |
IMPOSTAZIONI PREDEFINITE | In | BAPIDEFAUL | impostazioni predefinite |
LOGONDATA | In | BAPILOGOND | logOnData |
Password | In | BAPIPWD | parola d’ordine |
RITORNO | Entrata-Uscita | TABLE_OF_BAPIRET2 | bapiret2Table |
Registrati da solo | In | Stringa | "X" |
NOME UTENTE | In | Stringa | nome utente |
- Selezionare OK. Il segno di avviso scompare.
- Per elaborare i risultati della creazione di una 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. Trascina e rilascia l'attività CreateCSEntryChangeResult nel ramo Else dell'attività IF e seleziona il codice di errore di successo.
- 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 all'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'.
- Trascina e rilascia l'attività di registro nell'attività di 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. - Trascina e rilascia l'attività Switch all'interno dell'attività Sequenza dopo l'attività Log. Nella finestra popup, selezionare il tipo di stringa per il valore dello switch. Immettere l'espressione
bapiret2Table.item.First(Function(retItem) retItem.TYPE.Equals("E")).NUMBER
- Selezionare il caso predefinito e trascinare nel corpo di questo caso l'attività CreateCSEntryChangeResult. Scegliere il codice di errore ExportErrorInvalidProvisioningAttributeValue.
- Selezionare l'area Aggiungi nuovo caso e digitare un valore di caso pari a 224. Trascinare e rilasciare l'attività
CreateCSEntryChangeResult
nel corpo di questo caso. ScegliereExportErrorCustomContinueRun
codice di errore.
Hai completato la definizione del flusso di lavoro "Esportazione Aggiungi".
Creazione di un flusso di lavoro di eliminazione dell'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 per determinare se questo scenario è obbligatorio. Nella maggior parte dei casi, gli account SAP ECC non vengono eliminati, ma sono impostati per scadere per mantenere 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 -> Esportazione -> Elimina workflow e dalla casella degli strumenti a destra trascinare e rilasciare l'attività Sequenza nell'area di progettazione del flusso di lavoro.
- In basso a sinistra trovare il pulsante Variabili e selezionarlo per espandere un elenco di variabili definite all'interno di questa sequenza.
- Aggiungere le variabili seguenti. Per selezionare un tipo di variabile generato dal WSDL SAP, selezionare l'opzione Sfoglia per tipi ed espandere generato, 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 | Predefinito |
---|---|---|---|
nome utente | Stringa | Sequenza | |
bapiret2Table | SAPECC. TABLE_OF_BAPIRET2 | Sequenza | nuovo 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. Trascina e rilascia l'attività ForEachWithBodyFactory dal Toolbox all'interno dell'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 nome utente di riferimento, trascinare e rilasciare l'attività Switch all'interno dell'attività ForEach. Nella finestra di popup, selezionare il tipo di interruttore
Microsoft.IdentityManagement.MA.WebServices.Activities.Extensions.AnchorAttributeNameWrapper
. Immettere il valore espressione di: NewAnchorAttributeNameWrapper(anchor.Name)
. Seleziona l'area "Aggiungi nuovo caso" dell'attività Switch. Inserire userName come valore nelle maiuscole. 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 l'operazione BAPI_USER_DELETE. Selezionare il pulsante Argomenti per definire i parametri per la chiamata al servizio web come indicato di seguito:
Nome | Direzione | Tipo | Valore |
---|---|---|---|
RITORNO | Entrata/Uscita | TABLE_OF_BAPIRET2 | bapiret2Table |
NOME UTENTE | In | Stringa | nome utente |
- Selezionare OK. Il segno di avviso scompare.
- Per elaborare i risultati della richiesta di eliminazione dell'utente, trascina e rilascia l'attività IF all'interno dell'attività Sequence, successivamente all'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. Trascina l'attivitàCreateCSEntryChangeResult
nel ramo Else dell'attività IF e seleziona il codice di errore Successo.
- 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'.
- Trascina e rilascia l'attività di registro nell'attività di 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. - Trascina e rilascia l'attività Switch all'interno dell'attività Sequenza dopo l'attività Log. Nella finestra popup, selezionare il tipo di stringa per il valore dello switch. Immettere l'espressione
bapiret2Table.item.First(Function(retItem) retItem.TYPE.Equals("E")).NUMBER
- Selezionare il caso predefinito e trascinare nel corpo di questo caso l'attività CreateCSEntryChangeResult. Scegliere il codice di errore ExportErrorSyntaxViolation.
- Selezionare nell'area Aggiungi nuovo caso e digitare un valore del caso di 124. Trascinare e rilasciare l'attività
CreateCSEntryChangeResult
nel corpo di questo caso. ScegliereExportErrorCustomContinueRun
codice di errore.
La definizione del flusso di lavoro Esporta elimina è stata completata.
Creare il flusso di lavoro per Sostituisci 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 dell'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 utilizza sempre la modalità di esportazione Sostituisci oggetti e prevede che il connettore sia configurato per Tipo di Esportazione: Sostituisci.
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 il programma BAPI_USER_CHANGE. La X alla fine di addressX indica che la struttura dell'indirizzo contiene una modifica.
- Passare a Tipi di Oggetto -> Utente -> Export -> Sostituisci il flusso di lavoro e dalla casella degli strumenti a destra trascinare e rilasciare l'attività Sequenza nel riquadro del progettista del flusso di lavoro.
- In basso a sinistra trovare il pulsante Variabili e selezionarlo per espandere un elenco di variabili definite all'interno di questa sequenza.
- Aggiungere le variabili seguenti. Per selezionare un tipo di variabile generato dal WSDL SAP, selezionare l'opzione Sfoglia per tipi ed espandere generato, 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 | Predefinito |
---|---|---|---|
nome utente | Stringa | Sequenza | |
bapiret2Table | SAPECC. TABLE_OF_BAPIRET2 | Sequenza | nuovo TABLE_OF_BAPIRET2() |
indirizzoX | SAPECC. BAPIADDR3X | Sequenza | new BAPIADDR3X() |
indirizzo | SAPECC. BAPIADDR3 | Sequenza | nuovo BAPIADDR3() |
companyX | SAPECC. BAPIUSCOMX | Sequenza | new BAPIUSCOMX() |
azienda | SAPECC.BAPIUSCOMP | Sequenza | new BAPIUSCOMP() |
ImpostazioniPredefiniteX | SAPECC. BAPIDEFAX | Sequenza | new BAPIDEFAX() |
impostazioni predefinite | 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. Trascina e rilascia l'attività ForEachWithBodyFactory dal Toolbox all'interno dell'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 nome utente di riferimento, trascinare e rilasciare l'attività Switch all'interno dell'attività ForEach. Nella finestra di popup, selezionare il tipo di interruttore
Microsoft.IdentityManagement.MA.WebServices.Activities.Extensions.AnchorAttributeNameWrapper
. Immettere il valore espressione di: NewAnchorAttributeNameWrapper(anchor.Name)
. Seleziona l'area "Aggiungi nuovo caso" dell'attività Switch. Inserire userName come valore nelle maiuscole. 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 dell'oggetto esportato, è necessario popolare altre strutture come la società, le impostazioni predefinite, l'indirizzo e i dati di accesso che contengono altri dettagli dell'utente SAP. Facciamo questo eseguendo un ciclo attraverso la raccolta di tutti gli attributi definiti nello schema.
- Riduci l'attività ForEach e trascina un'altra attività ForEachWithBothFactory all'interno dell'attività Sequence, dopo quella 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
.
- Trascina e rilascia l'attività Sequence nel corpo dell'attività ForEach. In basso a sinistra trovare il pulsante Variabili e selezionarlo per espandere un elenco di variabili definite all'interno di questa sequenza. Aggiungere la variabile seguente: xValue di tipo String. Trascina e rilascia l'attività "Assegna" nell'attività "Sequenza". Assegna a xValue l'espressione di:
If(objectToExport.AttributeChanges.Contains(schemaAttr.Name), objectToExport.AttributeChanges(schemaAttr.Name).ValueChanges(0).Value.ToString(), String.Empty)
che estrae le modifiche pronte per l'esportazione per questo attributo, oppure le inizializza con una stringa vuota. Il flusso di lavoro Export Replace è simile al seguente:
- Trascina e rilascia l'attività Switch dopo l'attività Assign. Nel menu popup selezionare
Microsoft.IdentityManagement.MA.WebServices.Activities.Extensions.AttributeNameWrapper
e selezionare 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à. Selezionare nell'area Aggiungi nuovo caso dell'attività Switch e digitare un valore del caso di city. Trascina e rilascia l'attività Sequenza nel corpo di questo caso. Trascina e rilascia l'attività Assign nell'ambito di questo caso. Assegnare il valore "X" a addressX.city. Trascinare e rilasciare un'altra attività di assegnazione all'interno di questo caso. Assegna xValue a indirizzo.città. Il flusso di lavoro Export Replace è simile al seguente:
10.Aggiungere altri casi e assegnazioni mancanti. Usare questa tabella di mappatura come guida.
Caso | Assegnazione |
---|---|
città | addressX.city = "X"; address.city = xValue |
azienda | companyX.company = "X" company.company = xValue |
dipartimento | address.departmentX = "X" address.department = xValue |
posta elettronica | addressX.e_mail = "X" address.e_mail = xValue |
tempo di scadenza | logOnDataX.GLTGB = "X" logOnData.GLTGB = xValue |
nome di battesimo | addressX.firstname = "X" address.firstname = xValue |
cognome | ``` // Imposta il cognome di addressX a "X" e il cognome di address al valore xValue addressX.lastname = "X" address.lastname = xValue ``` |
secondo nome | addressX.middlename = "X" address.middlename = xValue |
numero di telefono | addressX.TEL1_Numbr = indirizzo "X". TEL1_Numbr = xValue |
titolo di lavoro | 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. Trascina e rilascia l'attività
CreateCSEntryChangeResult
nel ramo Else dell'attività IF e seleziona il codice di erroreExportErrorCustomContinueRun
. Il flusso di lavoro Export Replace è simile al seguente:Trascina e rilascia l'attività Sequenza nel ramo vuoto "Then" della prima attività IF. Trascinare e rilasciare l'attività WebServiceCall all'interno dell'attività Sequenza. Selezionare il nome del servizio SAPECC, l'endpoint ZSAPCONNECTORWS e l'operazione di BAPI_USER_CHANGE. Selezionare il pulsante Argomenti per definire i parametri per la chiamata al servizio web come indicato di seguito:
Nome | Direzione | Tipo | Valore |
---|---|---|---|
INDIRIZZO | In | BAPIADDR3 | indirizzo |
ADDRESSX | In | BAPIADDR3X | indirizzoX |
AZIENDA | In | BAPIUSCOMP | azienda |
COMPANYX | In | BAPIUSCOMX | azienda |
IMPOSTAZIONI PREDEFINITE | In | BAPIDEFAUL | impostazioni predefinite |
DEFAULTSX | In | BAPIDEFAX | ImpostazioniPredefiniteX |
LOGONDATA | In | BAPILOGOND | logOnData |
LOGONDATAX | In | BAPILOGONX | logOnDataX |
RITORNO | Entrata/Uscita | TABLE_OF_BAPIRET2 | bapiret2Table |
NOME UTENTE | In | Stringa | nome utente |
- Selezionare 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. Trascina l'attivitàCreateCSEntryChangeResult
nel ramo Else dell'attività IF e seleziona il codice di errore Successo. - Trascina e rilascia l'attività Sequenza nel ramo 'Then' dell'attività IF. Aggiungi l'attività Log con il valore di LogText
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à di registro con il codice erroreExportErrorCustomContinueRun
. 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 ECMA2Host Webservice usando questo modello.