Pregunta

Mi java programa / maravilloso recibe los nombres de tabla y los campos de la tabla de la entrada del usuario, consulta las tablas de SAP y devuelve su contenido.

La entrada del usuario puede referirse al CDPOS mesas y CDHDR. Después de leer la documentación de SAP y buscando en Google, encontré estos son tablas que almacenan los registros de cambio de documentos. Pero no he encontrado ninguna función de llamada remota que se pueden utilizar en Java para realizar este tipo de consultas.

Luego utiliza el módulo RFC RFC_READ_TABLE Función obsoleta y trató de construir consultas personalizadas única función de este RFC. Sin embargo, he encontrado si el número de campos deseados pasé a este RFC son más de 2, siempre que tengo el error DATA_BUFFER_EXCEEDED incluso si limitar las filas máx.

No estoy autorizado para ser un desarrollador ABAP en el sistema SAP y no puede añadir cualquier FM a los sistemas existentes, por lo que puede escribir código sólo para cumplir con este requisito en JAVA.

¿Estoy haciendo algo mal? ¿Me podría dar algunas pistas sobre esta cuestión?

¿Fue útil?

Solución

DATA_BUFFER_EXCEEDED sólo ocurre si el ancho total de los campos que desee leer excede el Ancho del parámetro DATA, que puede variar dependiendo de la versión de SAP - 512 caracteres para los sistemas actuales. No tiene nada que ver con el número de filas , pero el tamaño de un único conjunto de datos.

Así que la pregunta es: ¿Cuáles son los contenidos del parámetro FIELDS? Si está vacío, esto significa "leer todos los campos." CDHDR es de 192 caracteres de ancho, por lo que me supongo que el problema es que es CDPOS 774 caracteres de ancho. El principal problema sería el VALUE_OLD campos y VALUE_NEW, ambos 245 caracteres.

Incluso si no se consigue el acceso desarrollador, debe empujar a alguien para conseguir acceso de sólo lectura diccionario para poder examinar las estructuras en detalle.

Shameless enchufe: RCEab contiene una clase contenedora para RFC_READ_TABLE que se encarga del manejo de campo y asegura que el anchura total de los campos seleccionados está por debajo del límite impuesto por el módulo de función.

También tenga en cuenta que estas tablas puede ser enorme en entornos de producción - pensar en mil millones de entradas. Se puede fácilmente llevar a su base de datos a un punto muerto mediante la realización de operaciones de lectura excesivas en estas tablas.

PS: RFC_READ_TABLE no es liberado para uso del cliente de acuerdo con la nota SAP 382318 , y la nota 758.278 recomienda para crear su propia función módulo y proporciona una plantilla con una lógica mejorada.

Otros consejos

Hay una forma de evitar el error DATA_BUFFER_EXCEED. Aunque esta función no es liberado para uso del cliente de acuerdo con SAP OSS note 382318, puede solucionar este problema con cambios en la forma de pasar parámetros a esta función. No es un solo campo que está causando el error, pero si la fila de datos supera los 512 bytes se elevará este error. CDPOS tendrá este problema seguro!

El trabajo en torno a si se sabe cómo llamar a la función usando Jco y pasar parámetros de la tabla es especificar los campos exactos que desea obtener. A continuación, puede mantener los resultados devueltos por debajo del límite de 512 bytes.

Usando su ejemplo de CDPOS tabla, especifique algo como esto y usted debe ser bueno para ir ... (tenga cuidado, CDPOS puede obtener masiva! Debe especificar y aprobar una cláusula where!)

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

En Java se puede expresar como ..

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

Al limitar los campos va a devolver se puede evitar este error.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top