/ API / Notas de Pedido / MultiplesSincronización de múltiple Notas de Pedido

Ruta de acceso: http://www.bee2bee/syncro/orders

Para el caso que una empresa Compradora desee subir un conjunto grande de Notas de Pedido (dado un rango de fechas), la API de Bee2Bee permite sincronizar un conjunto completo de Notas de Pedido. Nuestros servidores validan el envío, comparan con las Notas de Pedido existentes y se encargan de

  • agregar las Notas nuevas,
  • modificar las ya existentes (marca como eliminada la anterior y crea una nueva)
  • marcar como eliminadas todas las Notas que existían antes de la sincronización, pero no se encuentran en ese rango de fechas en el sistema de gestión del comprador.

Para limitar la cantidad de datos de cada envío, el servicio restringe la cantidad máxima de registros subidos a nuestro servidor a 300. Si desea sincronizar una cantidad mayor lo deberá hacer por tramos, respetando los intervalos de fecha de cada tramo, o bien optar por la modalidad upload/batch. Recuerde que la sincronización requiere que sea enviado el universo completo de Notas en su sistema de gestión para el rango de fechas en cuestión.

Ejemplo

Veamos un ejemplo de objeto XML de envio:

<syncro> 
    <appkey>19efd346ddca</appkey> 
    <start_date>2008-02-24</start_date> 
    <end_date>2008-04-13</end_date> 
    <orders type="array"> 
		<order> 
			<ref>31870-171</ref> 
			<to-supplier>7632</to-supplier> 
			<deliver-to>PA</deliver-to> 
			<product-code>1323</product-code> 
			<description>BALANCIN 312</description> 
			<due-date type="date">2008-03-17</due-date> 
			<quantity type="decimal">325.0</quantity> 
			<unit>m</unit>
			<confirmed type="boolean">true</confirmed> 
		</order> 
		<order> 
			<ref>31870-172</ref> 
			<to-supplier>7632</to-supplier> 
			<deliver-to>PA</deliver-to> 
			<product-code>1323</product-code> 
			<description>BALANCIN 312</description> 
			<due-date type="date">2008-04-15</due-date> 
			<quantity type="decimal">345.0</quantity> 
			<unit>m</unit>
			<confirmed type="boolean">true</confirmed> 
		</order> 
		... 
    </orders> 
</syncro> 

Los tags utilizados son:

  • 'appkey': es una Application Key (APPKEY) provista por Bee2Bee
  • 'start-date', 'end-date' son las fechas limites del conjunto de datos que se quiere sincronizar. El formato de las mismas es 'YYYY-MM-DD'
  • 'orders': es una lista (array) con todas las Notas de Pedido que se desea sincronizar. Cada Nota de Pedido está detallada dentro del tag 'order' con los siguientes elementos:
    • 'ref': es el identificador primario de la Nota de Pedido. Debe ser único para cada Nota de Pedido, y es la clave que se utiliza para buscar las Notas en el momento de sincronizar y saber si se va a actualizar o crear una Nota nueva.
    • 'to-supplier': código de proveedor.
    • 'deliver-to': código de sucursal. Si no hay una sucursal específica a la cual se quiere enviar la mercadería, podrá omitir este campo.
    • 'product-code': es el código de producto (y es un string).
    • 'description': es la descripción del producto.
    • 'due-date': fecha de entrega (formato 'YYYY-MM-DD').
    • 'quantity': cantidad solicitada.
    • 'unit': unidades de la cantidad solicitada siguiendo esta convención.

Esta forma del objeto XML permite la sincronización de todas las Notas en un determinado rango de fechas.

Se puede probar el servicio con el siguiente comando curl, con el archivo que contiene el objeto XML llamado ‘nombre_archivo’:

curl -u lucas@mephisto.com:knikcata -H ‘Accept: application/xml’ -H ‘Content-Type: application/xml’ -d ‘@nombre_archivo’ http://www.bee2bee.com.ar/syncro/orders

El resultado contiene un tag de ‘status’, un mensaje plano ‘msg’, y una estadística ‘stat’ sobre las operaciones que se llevaron a cabo:

<hash> 
<status>OK</status> 
<msg>>Se validaron 53/53 ordenes. Se actualizaron 4, agregaron 0, borraron  
	47, no se tocaron 15 registros. Hubieron 0 fallos al escribir o borrar.</msg> 
<stat>     
  <read-in type="integer">19</read-in> 
  <validated-correct type="integer">15</validated-correct> 
  <failed-to-delete type="integer">0</failed-to-delete> 
  <failed-total type="integer">0</failed-total> 
  <updated type="integer">4</updated> 
  <inserted type="integer">0</inserted> 
  <failed-to-insert type="integer">0</failed-to-insert> 
  <no-updated type="integer">15</no-updated> 
  <failed-to-update type="integer">0</failed-to-update> 
  <deleted type="integer">47</deleted>   
</stat> 
</hash> 

Posibles fallos

El resultado de cualquier sincronización incluye una estadística del proceso. La misma informa cuantos registros se leyeron, cuantos fueron validados correctamente, cuantos se actualizaron, cuantos se borraron (o mejor dicho se marcaron como borrados), y cuantos se agregaron. Asi mismo informa, cuantos registros tuvieron fallos al escribir, tanto para agregar, modificar o borrar. En el tag ‘failed-total’ indica la suma total de todos los errores.

En el caso que haya errores, se agrega un tag ‘errors’ con una breve descripción:

<hash> 
  <stat> 
	<failed-to-delete type="integer">0</failed-to-delete> 
	<failed-total type="integer">2</failed-total> 
	<updated type="integer">0</updated> 
	<inserted type="integer">0</inserted> 
	<failed-to-insert type="integer">1</failed-to-insert> 
	<no-updated type="integer">17</no-updated> 
	<failed-to-update type="integer">1</failed-to-update> 
	<deleted type="integer">0</deleted> 
  </stat> 
  
  <msg>Se validaron 10/19 ordenes. Se actualizaron 0, agregaron 0, borraron 0,  
	  no se tocaron 17 registros. Hubieron 2 fallos al escribir o borrar.</msg> 
  <errors> 
	  <search supplier-code 1776>Not found>/search supplier-code 1776> 
	  <validation 35427> Missing or invalid 'product_code' field  
		in '35427'</validation 35427> 
	  <validation 31870> Missing or invalid 'to_company_id' field  
		in '31870'</validation 31870> 
  </errors> 
  <status>OK</status> 
</hash> 

El error más frecuente es que el código de proveedor no está actualizado en Bee2Bee <search supplier-code …>. Para esto es imprescindible sincronizar Proveedores, antes de sincronizar Notas de Pedido.

Observe que si hay errores, la sincronización no elimina aquellos registros que ya no figuran en los datos enviados. Esto es asi para que solo si NO hay errores, la sincronización es completa.