domingo, 21 de enero de 2024

Element {urn:enterprise.soap.sforce.com}city invalid at this location

El siguiente error quizás les ha salido en al menos una ocasión al querer actualizar campos de objetos de salesforce, en mi caso particular fue por querer actualizar campos del objeto BillingAddress de los Accounts, sucede que Salesforce en algunos de sus campos en los que nos proporciona información en el WSDL son de solo lectura, imposibles de escribir sobre ellos, al retirar de mi update este objeto y sus valores el error Element {urn:enterprise.soap.sforce.com}city invalid at this location dejo de aparecer.

Entonces no intenten algo que Salesforce nunca les permitirá, saludos.

Actualización (Update) de direcciones Ship to y Bill to con Service Layer

Les dejo algo que es simple pero muy importante para poder actualizar las direcciones fiscales y de entrega por medio de Service Layer sin que les marque errores como por ejemplo "This entry already exists in the following tables (ODBC -2035)", al utilizar el endpoint PATCH: https://tudominio:50000/b1s/v1/BusinessPartners('C010').

Para que Service Layer pueda identificar que dirección es la que queremos modificar debemos agregar el atributo Row en el Json a enviar como se muestra abajo:

"BPAddresses": [
    {
        "AddressName": "Billing Address",
        "Street": "Marine Drive",
        "Block": null,
        "ZipCode": "12345",
        "City": "NEWPORT",
        "Country": "US",
        "State": "OR",
        "BuildingFloorRoom": "",
        "AddressType": "bo_BillTo",
        "StreetNo": null,
        "BPCode": "T10360",
        "RowNum": 0,
        "GlobalLocationNumber": null,
        "Nationality": null,
        "TaxOffice": null,
        "GSTIN": null,
        "GstType": null,
        "U_WBCUSTADDID": null,
        "U_TelNo": null
    },
El valor de este atributo, lo encuentran en la tabla CRD1 en su campo llamado LineNum con ayuda de está consulta:

SELECT "LineNum" FROM CRD1 WHERE "AdresType" = 'B' AND address = 'Nombre Dirección' AND CardCode = 'C010'esType" = 'B' AND address = 'Nombre Dirección' AND CardCode = 'C010'.

¡Saludos!

"value": "Table 'CRD4' not accessible"

¿Qué tal?, ¿Cómo están?, espero que después del Guadalupe - Reyes como le decimos aquí en México, estén de lo mejor, en está primera publicación del 2024 les traigo la solución al error que surge al consumir el endpoint de service layer para crear querys personalizadas: https://TUSERVER:50000/b1s/v1/SQLQueries


Resulta que service layer no puede consultar todas la tablas de SAP desde este endpoint por seguridad según su documentación, en mi caso no tiene permitido consultar la tabla CRD4 (Impuesto de retención), arrojando el error en su respuesta: "value": "Table 'CRD4' not accessible", esto se soluciona yendo a la carpeta de instalación de service layer en mi caso fue en el servidor de SUSE ya que es un base de datos en HANA, el archivo se llama b1s_sqltable.conf y la ruta por defecto en SUSE es /usr/sap/SAPBusinessOne/ServiceLayer/conf, lo único que tiene que hacer es agregar al listado la tabla a consultar para que se le permita ser consultada:


Espero con esto una consulta no les impida continuar con su desarrollo. ¡Saludos!