Messaggi bloccati su SMQ2 “permanent inbound processing”

Il tuo BPM è partito la prima volta, s’è bloccato, e adesso ti da un errore totalmente diverso? prova con i seguenti step.

parti da SWF_XI_SWQR

trova la riga corrispondente al BPM, deve essere in error. selezionala.

GoTo -> display work item (Ctrl+F2). sei in una nuova schermata

GoTo -> technical work item display (Ctrl+Shift+F6). compare una schermata con una lista di comandi a sinistra.

SE NON COMPARE: Extras -> Activate administration

dalla lista a sinistra; Logically Delete.


IB: Match code non seleziona Service Interface

Contesto

Uno sviluppo coinvolge a livello di ESR oggetti, specificatamente Service Interface, distribuiti su più Software Component Version – tipico quando si suddividono gli oggetti del SCV sender da quelli del SCV receiver.

Problema

A livello di Integration Builder, nell’editor dell’Interface Determination o Sender Agreement il match code che seleziona le Service Interface receiver non aggancia gli oggetti riferiti al Communication Component receiver.

Soluzione

Entrare nel System Landscade Directory, Technical Systems;

Selezionare i Technical System relativi ai Business System coinvolti nel flusso;

Selezionare il tab Installed Software e verificare che tutti i Product/Software Component Version interessati nello scenario siano inclusi.

Andare nel Business System relativo al TS sotto il tab Installed Software e aggiungere la spunta al SCV.

In Integration Builder forzare il refresh della cache SLD, Environment > Clear SLD Data Cache.


Best Practice

In un Java Mapping (accertato) e in un modulo non utilizzare mai variabili o metodi statici in quanto il loro comportamento diventa imprevedibile nel momento in cui vengono chiamati parallelamente dall’Integration Engine o dall’Adapter Engine.

Una variabile statica può venire sporcata dai valori contemporanei delle varie istanze di chiamata del modulo da parte dell’engine.

Stesso discorso per i metodi statici.


CC RFC Receiver in Load Balancing

Per configurare il cc sulla base del SAP Logon procedere come segue

Communication Channel Editor SAP Logon
Adapter Type RFC

Receiver

Marcare Load Balancing

Message Server

Message Server

Message Server Service

“sapms”+System ID

es: sapmsIP0

System ID

System ID

Logon Group

Group/Server


SOAP

Utilizzare l’adapter SOAP senza Envelop qualora occorra inviare un messaggio HTTP in modalità POST.

In scenari webservice basati su communication channel HTTP POST invece che SOAP può essere necessario dover :

  • Aggiungere imbustamento SOAP ad un messaggio in uscita da PI
  • Togliere imbustamento SOAP da un messaggio in entrata a PI

Condizionare cc sender a cc receiver

Obiettivo

L’esigenza è quella di impedire che il file sul cc sender venga processato, e magari cancellato/archiviato, se l’elaborazione sul cc receiver va in errore.

Soluzione

Impostare la QoA sul cc sender in modalità Best Effort invece che Each Once.

In questo modo si rende sincrono l’intero processo la qual cosa comporta che:

  • L’Adapter processa il file sender (lettura e/o content conversion) e quindi viene passato all’integration engine o all’AAEx ma non viene cancellato o archiviato;
  • L’Adapter file receiver tenta la scrittura; se va a buon fine ritorna il controllo al cc sender che provvederà a cancellare/archiviare il file; se va in errore propaga l’errore al cc sender e le operazioni sul file sender si interrompono.

Strutture dati definenti ABAP Proxy

La struttura dati che definisce la service interface su cui si baserà un ABAP proxy deve sempre essere definita tramite un datatype e mai tramite un xsd; il datatype infatti, viene importato sull’ECC e dà origine ad un oggetto di dictionary. Un xsd invece resta confinato sullo stack java e questo comporta che la fase di generazione del proxy sul lato ECC va a buon fine ma viene generato un abend (ST22) in fase di run dovuto al fatto che le strutture che definiscono l’interfaccia non sono presenti nel dictionary. Uno degli  errori che può verificarsi è GETWA_NOT_ASSIGNED.