Domanda

Il mio java programma / Groovy riceve nomi di tabelle e campi di tabella dal input dell'utente, interroga le tabelle in SAP e restituisce il suo contenuto.

L'input dell'utente può riguardare la tabelle CDPOS e CDHDR. Dopo aver letto le documentazioni di SAP e googling, ho trovato queste sono le tabelle l'archiviazione dei log cambiamento del documento. Ma non ho trovato alcuna funzione di chiamata remote che possono essere utilizzate in Java per eseguire questo tipo di query.

Poi ho usato il deprecato RFC_READ_TABLE modulo RFC funzione e ha cercato di costruire query personalizzate solo in funzione questo RFC. Tuttavia, ho trovato se il numero di campi desiderati sono passato a questo RFC sono più di 2, ho sempre ottenuto l'errore DATA_BUFFER_EXCEEDED anche se limitare le righe max.

non sono autorizzato ad essere uno sviluppatore ABAP nel sistema SAP e non può aggiungere qualsiasi FM per i sistemi esistenti, in modo da poter scrivere il codice solo per raggiungere questo requisito in JAVA.

sto facendo qualcosa di sbagliato? Potreste darmi qualche suggerimento su tale questione?

È stato utile?

Soluzione

DATA_BUFFER_EXCEEDED avviene solo se la larghezza totale dei campi che si desidera leggere supera il Larghezza del parametro DATA, che possono variare a seconda della versione di SAP - 512 caratteri per i sistemi attuali. Non ha nulla a che fare con il numero di file , ma la dimensione di un singolo set di dati.

Quindi la domanda è: quali sono i contenuti del parametro FIELDS? Se è vuota, questo significa "leggere tutti i campi." CDHDR è di 192 caratteri di larghezza, così mi assumo che il problema è CDPOS che è largo 774 caratteri. Il problema principale sarebbe la VALUE_OLD campi e VALUE_NEW, entrambi i 245 caratteri.

Anche se non si ottiene l'accesso degli sviluppatori, si dovrebbe spingere qualcuno per ottenere accesso in sola lettura dizionario per essere in grado di esaminare le strutture in dettaglio.

Shameless spina: RCER contiene una classe wrapper per RFC_READ_TABLE che si occupa di movimentazione campo e assicura che il larghezza totale dei campi selezionati è inferiore al limite imposto dal modulo funzionale.

Anche essere consapevoli del fatto che queste tabelle possono essere enormi in ambienti di produzione - si pensi miliardi di voci. Si può facilmente portare il database a un brusco stop eseguendo operazioni di lettura eccessivi su queste tabelle.

PS: RFC_READ_TABLE non è rilasciato per uso del cliente di cui alla nota SAP 382.318 , e la nota 758.278 consiglia di creare la propria funzione modulo e fornisce un modello con una migliore logica.

Altri suggerimenti

C'è un modo per aggirare l'errore DATA_BUFFER_EXCEED. Anche se questa funzione non viene rilasciato per uso del cliente come da SAP OSS nota 382.318, è possibile aggirare questo problema con le modifiche al modo in cui si passa i parametri per questa funzione. Non è un singolo campo che causa l'errore, ma se la fila di dati supera 512 byte questo errore verrà generato. CDPOS avrà questo problema di sicuro!

Il lavoro attorno se si sa come chiamare la funzione con JCO e passare parametri della tabella è quello di specificare i campi esatte si desidera venga restituito. È quindi possibile mantenere i risultati restituiti sotto il limite di 512 byte.

Usando il tuo esempio di CDPOS tavolo, specificare qualcosa di simile e si dovrebbe essere pronti per partire ... (fate attenzione, CDPOS può ottenere massiccia! Si dovrebbe specificare e passare una clausola where!)

FIELDS = 'OBJECTCLAS' .... CAMPI = 'OBJECTID'

In Java può essere espresso come ..

listParams.setValue (this.getpObjectclas (), "OBJECTCLAS");

Limitando i campi si restituisce si può evitare questo errore.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top