Saltar al contenido

MS Dynamics 365 Business Central. API POST, PATCH, DELETE no funciona

Haz todo lo posible por interpretar el código bien previamente a aplicarlo a tu proyecto si ttienes algo que aportar puedes dejarlo en los comentarios.

Solución:

El punto final de OData es diferente al punto final de la API.

Recomendaría usar la API, ya que es la forma más actualizada y eficiente de interactuar con los datos dentro de Business Central.

La documentación para el extremo de la API se puede encontrar aquí https://docs.microsoft.com/en-us/dynamics-nav/api-reference/v1.0/, junto con algunos ejemplos, como actualizar clientes, artículos, etc.

Puede usar OData para modificar datos, pero solo si el objeto subyacente que controla el extremo es una página (a diferencia de una consulta) y debe marcarse con InsertAllowed. Esto está menos optimizado que el punto final de la API. https://docs.microsoft.com/en-us/dynamics365/business-central/dev-itpro/webservices/use-odata-to-modify-data

Los parámetros son los siguientes:

  1. URL básica: el nombre del servidor, por ejemplo, d365bc.vendor.com
  2. Puerto: el puerto utilizado para OData, por ejemplo, 7058
  3. instancia del servidor: el nombre de la instancia del servidor de Business Central, por ejemplo, alcanzar
  4. Editor de API: se usa para agrupar API personalizadas (no se requiere cuando se usan las API estándar)
  5. grupo de API: se usa para agrupar API personalizadas (no se requiere cuando se usan las API estándar)
  6. Versión API: se usa para agrupar API personalizadas (no se requiere cuando se usan las API estándar)

La combinación de URL base, puerto e instancia de servidor se puede ubicar en Servicios OData y el campo URL base de OData en la configuración del nivel de servicio de Business Central.

El punto final base que necesita usar es (según la información que proporcionó):

// Version 13
https://d365bc.vendor.com:7058/Attain/api/beta

// Version 14+
https://d365bc.vendor.com:7058/Attain/api/v1.0

Para trabajar con las API, primero debe obtener una identificación para la empresa, por lo que obtiene la lista de empresas:

// Version 13
https://d365bc.vendor.com:7058/Attain/api/beta/companies

// Version 14+
https://d365bc.vendor.com:7058/Attain/api/v1.0/companies

Con la identificación de su empresa, puede obtener una lista de clientes:

// Version 13
https://d365bc.vendor.com:7058/Attain/api/beta/companies([company id here!])/customers

// Version 14+
https://d365bc.vendor.com:7058/Attain/api/v1.0/companies([company id here!])/customers

Usaría el mismo punto final para POST o PATCH al proporcionar los datos requeridos como json en el cuerpo de la solicitud.

Requisitos:

  1. La API debe estar habilitada en la instancia del servidor Business Central
  2. El usuario utilizado para la autenticación debe tener una clave de acceso al servicio web (creada para el usuario en Business Central)
  3. El usuario debe tener los permisos requeridos dentro de Business Central para las API relevantes.

Comentarios:

  • Algunas de las API solo admiten GET. Esto significa que obtendrá el error 405 No permitido para POST o PATCH.
  • Es posible que deba agregar If-Match * a los encabezados de solicitud para las operaciones PATCH.

Respuesta a UPD.2:

  • Puerto 7057 y https://d365bc.vendor.com:7057/Attain/WS/ es para servicios web SOAP y no debe confundirse con API. Necesita el puerto 7058 como se indica en la pestaña Servicios OData.

  • Para asignar una clave de acceso al servicio web, debe navegar a Usuarios en Business Central, buscar el usuario en cuestión y hacer clic en el botón Change Web Service Key.

Algunas notas:

  1. Primero necesita recuperar entidades (haciendo ‘Obtener’), luego, cuando necesite actualizar/PUT o eliminar (además de la necesidad de usar el método correcto (PUT, DELETE)), debe enviar los encabezados de su llamada API, el parámetro: If-Match y hágalo igual al valor de odata.etag (que obtuvo de la respuesta GET), es así: If-Match: W/”JzQ0O0YxVTZnTlFpQ0NxbExDdmN0N2JGSDM2azN4dUhncEk1Nnl0MVhETGRIemc9MTswMDsn”

  2. Con respecto a: https://d365bc.vendor.com:7058/attain/ODataV4/Company(‘company’)/Customer(No=’01121212′) Esto no es OData: /Customer(No= debe usar eq en lugar del signo = Sin embargo, es mejor usar la ID (GUID) del registro y debe proporcionar If-Match en el encabezado con el valor de odata.etag

Recuerda que puedes comunicar esta noticia si lograste el éxito.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *