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

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

Screenshot della creazione di un progetto SOAP.

  1. Selezionare Progetto SOAP e scegliere Aggiungi nuovo servizio Web.

Screenshot dell'aggiunta di un nuovo servizio Web.

  1. 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.

Screenshot della denominazione del servizio Web.

  1. Specificare le credenziali per connettersi all'endpoint SAP ECC. Selezionare Avanti.
  2. 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.

Screenshot di BAPIs.

  1. Salvare il progetto nella cartella C:\Programmi\Microsoft ECMA2Host\Service\ECMA.
  2. Selezionare la scheda Tipi di oggetto e scegliere di aggiungere il tipo di oggetto Utente. Selezionare OK.
  3. Espandere la scheda Tipi di oggetto e selezionare 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. 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.

  1. 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.
  2. In basso a sinistra trovare il pulsante Variabili e selezionarlo per espandere un elenco di variabili definite all'interno di questa sequenza.
  3. 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()

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

  1. 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.

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. Su Variables, selezionare e aggiungere la proprietà currentPageNumber di tipo int32 all'interno del ciclo DoWhile con il valore predefinito di 0.

Screenshot della schermata Dowhile.

  1. 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.

Screenshot della schermata customdata.

  1. 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.

Screenshot della sequenza

  1. 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
  1. 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.
  2. 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
  3. 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)

Screenshot della proprietà dell'eccezione.

  1. 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)())

Screenshot dell'attività IF.

  1. 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ì:

Screenshot dell'attività IF con foreach.

  1. 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.

Screenshot di CreateCSEntryChangeScope.

  1. 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
  1. Selezionare OK. Il segno di avviso scompare. I dettagli di un utente vengono archiviati nelle variabili elencate sopra. La tua attività IF è così:

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. 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 ))

  1. 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:

Screenshot di ForEach.

  1. 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.

Screenshot di CreateAttributeChange.

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
  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 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 impostare selRangeTable.item(0).LOW su usersTable.item(returnedSize-1).username.

Screenshot finale di DoWhile.

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.

  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 pannello di progettazione del flusso di lavoro.
  2. In basso a sinistra trovare il pulsante Variabili e selezionarlo per espandere un elenco di variabili definite all'interno di questa sequenza.
  3. 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()

Screenshot del flusso di lavoro per l'aggiunta di esportazioni.

  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. 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 digitare objectToExport.AnchorAttributes.

Screenshot della sequenza di esportazione aggiunta.

  1. 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).
  2. 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.

Screenshot del nuovo caso.

  1. 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.
  2. 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 digitare objectToExport.AttributeChanges.

Screenshot della nuova sequenza.

  1. Trascina e rilascia l'attività Switch nel corpo dell'attività ForEach.
  2. Nel menu popup selezionare Microsoft.IdentityManagement.MA.WebServices.Activities.Extensions.AttributeNameWrapper e selezionare 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. Selezionare nell'area Aggiungi nuovo caso dell'attività Switch e digitare un valore del caso di city.
  5. Trascina l'attività Assegna all'interno di questo caso. Assegna attributeChange.ValueChanges(0).Value.ToString() a indirizzo.città.

Screenshot del nuovo flusso di lavoro per l'aggiunta di esportazioni.

  1. 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.

Screenshot dei casi.

  1. 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)
  2. 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 errore ExportErrorMissingAnchorComponent e ExportErrorMissingProvisioningAttribute.

Schermata della seconda attività IF.

  1. 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
  1. Selezionare OK. Il segno di avviso scompare.

Screenshot del flusso di lavoro dopo i parametri.

  1. 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
  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. Trascina e rilascia l'attività CreateCSEntryChangeResult nel ramo Else dell'attività IF e seleziona il codice di errore di successo.
  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 all'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. 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.
  3. 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
  4. Selezionare il caso predefinito e trascinare nel corpo di questo caso l'attività CreateCSEntryChangeResult. Scegliere il codice di errore ExportErrorInvalidProvisioningAttributeValue.

Screenshot del nuovo aggiornamento al flusso di lavoro.

  1. 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. Scegliere ExportErrorCustomContinueRun codice di errore.

Screenshot dell'aggiornamento finale al flusso di lavoro.

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.

  1. 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.
  2. In basso a sinistra trovare il pulsante Variabili e selezionarlo per espandere un elenco di variabili definite all'interno di questa sequenza.
  3. 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()
  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. 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 digitare objectToExport.AnchorAttributes.

Screenshot del flusso di lavoro per l'operazione di cancellazione dell'esportazione.

  1. 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: New AnchorAttributeNameWrapper(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 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 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
  1. Selezionare OK. Il segno di avviso scompare.

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

  1. 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
  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. Trascina l'attività CreateCSEntryChangeResult nel ramo Else dell'attività IF e seleziona il codice di errore Successo.

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. 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.
  3. 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
  4. Selezionare il caso predefinito e trascinare nel corpo di questo caso l'attività CreateCSEntryChangeResult. Scegliere il codice di errore ExportErrorSyntaxViolation.

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

  1. 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. Scegliere ExportErrorCustomContinueRun codice di errore.

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

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.

  1. 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.
  2. In basso a sinistra trovare il pulsante Variabili e selezionarlo per espandere un elenco di variabili definite all'interno di questa sequenza.
  3. 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:

Screenshot dell'inizio del processo 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. 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 digitare objectToExport.AnchorAttributes.

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

  1. 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: New AnchorAttributeNameWrapper(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 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 operativo.

  1. 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.
  2. 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 digitare schemaType.Attributes.

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

  1. 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:

Screenshot dell'aggiornamento alla sequenza di sostituzione.

  1. 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: 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à. 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:

Screenshot dell'attività di trascinamento e rilascio dell'interruttore.

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:

Screenshot della seconda attività di trascinamento e rilascio del commutatore.

  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. Trascina e rilascia l'attività CreateCSEntryChangeResult nel ramo Else dell'attività IF e seleziona il codice di errore ExportErrorCustomContinueRun. Il flusso di lavoro Export Replace è simile al seguente: Screenshot dell'attività CreateCSEntryChangeResult.

  3. 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
  1. Selezionare 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. Trascina l'attività CreateCSEntryChangeResult nel ramo Else dell'attività IF e seleziona il codice di errore Successo.
  3. 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. Aggiungere CreateCSEntryChangeResult l'attività dopo l'attività di registro con il codice errore 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 ECMA2Host Webservice usando questo modello.

Passaggi successivi