Webservice InventoryGenExits

Buenos días,

Estoy intentando hacer una emisión de componentes en una producción a través del Webservice InventoryGenExits.
El caso es que, si hago la imputación de una sóla línea a la vez me funciona sin problema, pero si intento hacer la imputación de varias líneas a la vez, no me hace la emisión, pero tampoco me genera ningún tipo de error.
Lo más curioso del caso, es que si ejecuto el Json en Postman funciona, pero si lo ejecuto desde mi programa de Php no funciona, ni da error.

Alguien me puede ayudar??

Dejo el Json que estoy enviando:

{"DocDate": "20230725", "DocDueDate": "20230725", "Reference2": "32", 
	"DocumentLines": [ 
	{"BaseType": 202, 
	"BaseEntry": "187", 
	"BaseLine": "13", 
	"Quantity": "1", 
	"ItemType": "pit_Item", 
	"BatchNumbers" : [ ],
	"SerialNumbers" : [ ] 
	},
	{"BaseType": 202, 
	"BaseEntry": "187", 
	"BaseLine": "14", 
	"Quantity": "1", 
	"ItemType": "pit_Item", 
	"BatchNumbers" : [
		{"BatchNumber": "12345678902311564", "Quantity": 1
		} 
	],
	"SerialNumbers" : [ ]
	}
	]
}

Muchas gracias!

:heavy_heart_exclamation: Importante :exclamation: La siguiente respuesta es generada por nuestro Robot de la comunidad de Consultoria-SAP.com denominado “CSAPBOT” usando tecnología de inteligencia artificial. Por lo tanto, puede haber datos incorrectos. No podemos garantizar que la información sea 100% correcta, solo consultores SAP profesionales podrían verificar la información. Muchos consultores leen nuestros foros de Ayuda SAP y lamentablemente pocos ayudan respondiendo y confirmando la información.

Si deseas aportar tus ideas para mejorar nuestros sistemas, te esperamos en este debate.

Buenos días,

Entiendo la frustración de encontrarse con un problema donde no se genera un error claro para identificar el problema, especialmente al interactuar con el WebService InventoryGenExits de SAP Business One a través de un desarrollo en PHP. Dado que el JSON parece funcionar en Postman, pero no desde tu programa PHP, podría tratarse de varios posibles problemas que involucran la forma en que se envía la solicitud desde PHP. A continuación, algunos puntos que podrías revisar para identificar y solucionar el problema:

1. Verificación de la Estructura JSON:

  • A primera vista, la estructura JSON parece correcta. Sin embargo, verifica que al construir el JSON en PHP, los datos estén siendo enviados exactamente igual que como lo envías desde Postman.
  • Asegúrate de que no haya problemas de codificación de caracteres o espacios adicionales en el JSON que puedan causar un problema de formato.

2. Encabezados HTTP y Tipo de Contenido:

  • Uno de los problemas más comunes al enviar datos JSON desde PHP es que los encabezados HTTP no se configuran correctamente. Asegúrate de que el encabezado Content-Type esté configurado como application/json. Ejemplo en PHP:

    $headers = [
        'Content-Type: application/json',
        'Accept: application/json'
    ];
    
  • Asegúrate de que el método HTTP sea POST y que la URL que utilizas en el PHP sea la misma que usas en Postman.

3. Verificar Manejo de Sesiones de SAP B1 Service Layer:

  • Cuando usas el Service Layer de SAP Business One, es importante que la sesión esté correctamente gestionada. Asegúrate de que el token de sesión (cookie B1SESSION) y el CompanyDB se envíen junto con la solicitud, ya que esto es requerido para mantener la autenticación:

    $sessionId = "tu_valor_de_sesion"; // Reemplaza con el valor real de la sesión.
    $companyDB = "tu_companyDB"; // Reemplaza con el valor real de tu compañía.
    
    $headers = [
        'Content-Type: application/json',
        'Accept: application/json',
        'Cookie: B1SESSION=' . $sessionId . '; CompanyDB=' . $companyDB
    ];
    
  • Si el problema es de sesión, podría ser que desde Postman se esté utilizando una sesión válida y, desde PHP, la sesión no esté siendo correctamente gestionada.

4. Revisar la Codificación del JSON en PHP:

  • Asegúrate de que el JSON esté correctamente codificado en PHP utilizando json_encode() y que no esté escapando caracteres de manera innecesaria. Un ejemplo básico sería:

    $data = [
        "DocDate" => "20230725",
        "DocDueDate" => "20230725",
        "Reference2" => "32",
        "DocumentLines" => [
            [
                "BaseType" => 202,
                "BaseEntry" => "187",
                "BaseLine" => "13",
                "Quantity" => "1",
                "ItemType" => "pit_Item",
                "BatchNumbers" => [],
                "SerialNumbers" => []
            ],
            [
                "BaseType" => 202,
                "BaseEntry" => "187",
                "BaseLine" => "14",
                "Quantity" => "1",
                "ItemType" => "pit_Item",
                "BatchNumbers" => [
                    [
                        "BatchNumber" => "12345678902311564",
                        "Quantity" => 1
                    ]
                ],
                "SerialNumbers" => []
            ]
        ]
    ];
    
    $jsonData = json_encode($data);
    

5. Capturar Respuesta Completa del WebService:

  • A veces, el WebService no arroja errores claros, pero sí podría estar dando respuestas con más detalles. Asegúrate de capturar la respuesta completa que el WebService devuelve:

    $ch = curl_init('https://tu-url-service-layer/');
    curl_setopt($ch, CURLOPT_POSTFIELDS, $jsonData);
    curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    
    $response = curl_exec($ch);
    
    if (curl_errno($ch)) {
        echo 'Error:' . curl_error($ch);
    } else {
        echo 'Response:' . $response;
    }
    
    curl_close($ch);
    
  • Esto puede darte más información sobre qué está recibiendo el WebService y si hay algún detalle en la respuesta que pueda ayudarte a identificar el problema.

6. Diferencias entre Entornos de PHP y Postman:

  • Verifica si hay diferencias en el entorno de PHP (como la versión de PHP, configuración de cURL, módulos habilitados, etc.) que puedan estar afectando la comunicación con el WebService. A veces, la configuración de cURL puede variar y afectar la conexión SSL/TLS.

Resumen Consultoria-SAP

Para solucionar el problema de la emisión de componentes en producción desde SAP Business One utilizando el Service Layer con PHP, es importante revisar la estructura del JSON, la configuración de los encabezados HTTP, la gestión de la sesión de SAP B1, y capturar la respuesta completa del WebService. Si el JSON funciona en Postman pero no en PHP, es muy probable que el problema esté en la forma en que se envía la solicitud desde PHP.

¡Estamos aquí para ayudarte!