Saltar al contenido

Solución de problemas de NetSuite

Todas las entradas de solución de problemas en esta página

Errores de conexión

Error del centro de datos

  • Síntoma: Una conexión de NetSuite que antes se probaba con éxito ahora falla con este error:

    Connector Error: Error getting the data center URL.

    Caused by: org.jitterbit.integration.server.engine.connector.exception.NetSuiteWebServiceRuntimeException: FaultString:

    In this account, you must use account-specific domains with this SOAP web services endpoint. You can use the SOAP getDataCenterUrls operation to obtain the correct domain. Or, go to Setup > Company > Company Information in the NetSuite UI. Your domains are listed on the Company URLs tab.

    En algunas circunstancias, puede aparecer este error en su lugar:

    You are not requesting the correct data center for your company.

  • Causa: Debido a los cambios realizados por NetSuite, algunos formatos de URL de WSDL que antes se permitían ya no se aceptan, incluidas las URL de WSDL genéricas y específicas del centro de datos. Por ejemplo:

    • URL de WSDL genérica: https://webservices.netsuite.com/wsdl/v2025_1_0/netsuite.wsdl
    • URL de WSDL específica del centro de datos: https://webservices.na3.netsuite.com/wsdl/v2025_1_0/netsuite.wsdl
  • Solución alternativa: Cambie la URL de WSDL para utilizar un dominio específico de la cuenta:

    • URL de WSDL específica de la cuenta: https://abcdef123456.suitetalk.api.netsuite.com/wsdl/v2025_1_0/netsuite.wsdl

    Para obtener instrucciones sobre cómo encontrar el dominio específico de la cuenta de NetSuite y usarlo en la URL de WSDL, consulte Usar una URL de WSDL específica de la cuenta de NetSuite.

Permisos insuficientes

  • Síntoma: Aunque la prueba de una conexión de NetSuite se realice con éxito, es posible que reciba un error INSUFFICIENT_PERMISSION al ejecutar operaciones que contienen actividades que utilizan esa conexión.
  • Solución alternativa: Al generar tokens de acceso, utilice un rol de Full Access o Administrator, o asegúrese de que se permitan los permisos apropiados para el rol que se esté utilizando. Encontrará instrucciones detalladas en la documentación de NetSuite Primeros pasos con la autenticación basada en token.

La conexión de sandbox falla después de actualizar el sandbox

  • Síntoma: Una conexión de NetSuite configurada para una cuenta de sandbox de NetSuite falla con un error de autenticación después de actualizar el entorno de sandbox.
  • Causa: Cada vez que se actualiza un sandbox de NetSuite, todos los tokens de autenticación basada en tokens (TBA) asociados con ese sandbox se invalidan. La conexión sigue utilizando los tokens anteriores, que NetSuite ya no acepta.
  • Resolución: Después de cada actualización del sandbox, genere nuevos tokens TBA para la cuenta de sandbox y actualice los campos Clave de token y Secreto de token en la conexión de NetSuite. Para obtener instrucciones sobre cómo obtener los nuevos valores de token, consulte Reunir valores para usar NetSuite TBA.

Problemas de esquema y campos

Los campos personalizados no aparecen en el esquema de la actividad

  • Síntoma: Los campos personalizados de un objeto de NetSuite no están presentes en el esquema de transformación de un agente privado, aunque esos campos existan en NetSuite.
  • Causa: El conector de NetSuite expone campos personalizados para muchos objetos de forma predeterminada, pero algunos objetos requieren una configuración explícita en el archivo de configuración del conector de NetSuite del agente.
  • Resolución: Agregue el objeto al archivo de configuración netsuiteconfig.xml en el agente privado. Consulte Exponer campos personalizados en el conector de NetSuite para obtener instrucciones completas, incluida la forma de manejar objetos con más de 1,000 campos personalizados.

Los segmentos personalizados no aparecen o no son compatibles en búsquedas avanzadas

  • Síntoma: Los segmentos personalizados no son visibles en el esquema de la actividad, o los segmentos personalizados de tipo Lista/Registro no están disponibles en una búsqueda avanzada.
  • Causa: Los segmentos personalizados requieren permisos específicos en la cuenta de usuario de NetSuite. Además, el tipo de segmento Lista/Registro no es compatible en búsquedas avanzadas, solo lo es el tipo Selección Múltiple.
  • Resolución: Consulte Segmentos personalizados en la página de la actividad Búsqueda de NetSuite para conocer los requisitos de permisos y las limitaciones conocidas.

Los campos personalizados del cuerpo no son visibles debido a la falta de un permiso de rol

  • Síntoma: Los campos personalizados del cuerpo de una transacción (por ejemplo, campos agregados a un pedido de venta u otro registro de transacción) no aparecen en el esquema de salida de la actividad de Búsqueda de NetSuite, aunque los campos existan en la instancia de NetSuite y la prueba de conexión se realice correctamente.
  • Posible causa: El rol de NetSuite utilizado por la integración no tiene el permiso View para Custom Body Fields. El conector de NetSuite llama a la acción SOAP getList para recuperar las definiciones de campos personalizados; una infracción de permisos en esa llamada provoca que los campos se omitan por completo del esquema.
  • Resolución:
    1. En su cuenta de NetSuite, abra el rol asignado al usuario de integración y otorgue al menos el permiso View para Custom Body Fields.
    2. Guarde el rol y espere unos minutos para que el cambio de permisos surta efecto.
    3. En Studio, cree una nueva actividad de Búsqueda de NetSuite o importe el proyecto en un nuevo ambiente de proyecto para borrar el esquema en caché. Los campos personalizados del cuerpo deberían aparecer ahora en el esquema de salida.

Errores de configuración de actividades

Las búsquedas guardadas no aparecen en el menú desplegable

  • Síntoma: Al configurar una actividad de Búsqueda de NetSuite utilizando un tipo de búsqueda Búsqueda Guardada, el menú desplegable Seleccionar una Búsqueda Guardada aparece vacío o no muestra todas las búsquedas guardadas esperadas.
  • Causa: La API de NetSuite limita las respuestas a 1,000 registros por solicitud. Cuando un objeto tiene más de 1,000 búsquedas guardadas, el menú desplegable no puede mostrarlas todas y puede aparecer vacío.
  • Resolución: Utilice la opción Proporcionar ID de Script de Búsqueda Guardada para omitir el menú desplegable:
    1. En la sección Seleccionar una Búsqueda Guardada de la configuración de la actividad, seleccione Proporcionar ID de Script de Búsqueda Guardada.
    2. Ingrese directamente el ID de script de la búsqueda guardada de destino. El ID de script se encuentra en la interfaz de NetSuite, en la página de detalles de la búsqueda guardada.

Búsqueda expandida: El botón Probar Consulta está desactivado

  • Síntoma: Al configurar una búsqueda expandida en la actividad de Búsqueda de NetSuite, el botón Probar Consulta aparece atenuado y no se puede hacer clic en él.
  • Causa: Una búsqueda expandida requiere una condición de consulta sobre un objeto relacionado. El botón Probar Consulta se desactiva cuando no se ha agregado ninguna condición sobre un objeto relacionado.
  • Resolución: Agregue al menos una condición que filtre sobre un objeto relacionado. Si la búsqueda solo necesita filtrar por los campos propios del objeto actual, utilice un tipo de búsqueda Básica en lugar de una búsqueda expandida.

Los campos de fórmula de la búsqueda guardada faltan en la salida de la actividad

  • Síntoma: Una actividad de Búsqueda de NetSuite que utiliza una búsqueda guardada devuelve la cantidad esperada de registros en Probar Consulta, pero las columnas basadas en fórmulas o en uniones complejas (por ejemplo, campos customSearchJoin) faltan en la salida de la actividad y en el mapeo de la transformación, aunque esas columnas aparezcan en la búsqueda guardada dentro de la interfaz de NetSuite.
  • Causa: Las columnas de la búsqueda guardada basadas en fórmulas se calculan a nivel de la interfaz de NetSuite y no se incluyen en la respuesta SOAP que lee el conector. Como resultado, esos valores no aparecen en la salida de la actividad aunque la búsqueda devuelva registros.
  • Resolución:
    1. Cuando sea posible, reconstruya la búsqueda guardada utilizando campos almacenados (no basados en fórmulas), ya que los valores calculados por fórmula pueden no devolverse a través de la API.
    2. En Studio, abra la actividad de Búsqueda de NetSuite y, en la primera página de configuración, seleccione la opción Búsqueda Guardada (utiliza una búsqueda reutilizable que ya ha definido en NetSuite).
    3. Seleccione la búsqueda guardada en el menú desplegable Seleccionar una Búsqueda Guardada.
    4. Continúe con las páginas restantes y ejecute la operación para recuperar todos los datos.

Probar Consulta devuelve un error de análisis cuando el filtro usa una variable de proyecto

  • Síntoma: Cuando el filtro de una actividad de Búsqueda de NetSuite usa una variable de proyecto para un valor de fecha o fecha y hora (como lastModifiedDate), al hacer clic en Probar Consulta en la configuración de la actividad se devuelve un error 500 que hace referencia a un formato de fecha no válido. La misma operación se ejecuta correctamente en tiempo de ejecución.

    Connector Error: FaultString: java.text.ParseException: Invalid dateTime format: [lastModifiedDate]
    
  • Causa: Probar Consulta no resuelve las variables de proyecto. Envía la referencia literal de la variable (por ejemplo, [lastModifiedDate]) como valor de filtro, que NetSuite rechaza como una fecha no válida. En tiempo de ejecución, el agente sustituye el valor real de la variable, por lo que la operación en sí se ejecuta correctamente.

  • Resolución: Para probar o guardar cambios en la actividad sin eliminar la variable, agregue un valor predeterminado temporal a la referencia de la variable en la condición del filtro:
    1. En el filtro, cambie la referencia de la variable de [my_date_variable] a [my_date_variable{2023-01-01T00:00:00.000Z}] (utilizando la fecha y hora ISO 8601 adecuada como valor predeterminado).
    2. Haga clic en Probar Consulta. La prueba ahora se realiza correctamente porque se sustituye una fecha válida en lugar de la variable no resuelta.
    3. Guarde cualquier otro cambio en la actividad. El valor predeterminado puede permanecer en su lugar; en tiempo de ejecución, el agente siempre utiliza el valor actual de la variable de proyecto.

La Búsqueda Guardada con campos de resultado como salida requiere el agente 11.49 o posterior

  • Síntoma: En la actividad de Búsqueda de NetSuite, la opción Búsqueda Guardada con campos de resultado como salida es visible en la interfaz de la actividad, pero las operaciones que la utilizan fallan con un error 500 al ejecutarse en un agente privado más antiguo.
  • Causa: La función Búsqueda Guardada con campos de resultado como salida se introdujo en la versión 11.49 del agente. Los agentes privados en versiones anteriores muestran la opción en la interfaz, pero no tienen la compatibilidad en tiempo de ejecución para ejecutarla.
  • Resolución:
    1. Confirme la versión del agente en la pestaña Privado de la página Agentes de la Consola de Administración.
    2. Actualice los agentes privados a la versión 11.49 o posterior para usar esta opción. Los agentes en la nube se mantienen actualizados automáticamente.
    3. Si no es posible actualizar el agente privado, reconfigure la actividad para usar Búsqueda Guardada en su lugar. Este modo es compatible con versiones anteriores del agente.

La actividad Actualización devuelve INVALID_KEY_OR_REF cuando el XML de origen pierde internalId

  • Síntoma: Una actividad de Actualización de NetSuite se completa sin generar una excepción, pero no se actualiza ningún registro en NetSuite. La carga útil de la respuesta contiene el estado SOAP INVALID_KEY_OR_REF. Este problema suele aparecer cuando un script de transformación usa GetXMLString para construir la carga útil de actualización a partir de una respuesta de búsqueda anterior.

    <writeResponse>
      <platformCore:status isSuccess="false">
        <platformCore:statusDetail type="ERROR">
          <platformCore:code>INVALID_KEY_OR_REF</platformCore:code>
          <platformCore:message>The specified key is invalid.</platformCore:message>
        </platformCore:statusDetail>
      </platformCore:status>
      <baseRef>
        <platformCore:RecordRef type="invoice"></platformCore:RecordRef>
      </baseRef>
    </writeResponse>
    
  • Causa: GetXMLString serializa un nodo XML, pero no conserva los atributos del elemento raíz. Cuando el internalId del registro de origen se almacena como un atributo en el nodo raíz del registro de NetSuite (por ejemplo, en el elemento Invoice), se elimina de la cadena resultante y la actividad Actualización ve una referencia de registro vacía.

  • Resolución: Capture el internalId del registro de origen por separado y luego vuelva a agregarlo al XML serializado antes de pasar la carga útil a la actividad Actualización:

    1. En el script de transformación, asigne el internalId de origen a una variable.
    2. Llame a GetXMLString para construir el XML del registro.
    3. Use Replace para insertar internalId="..." en el elemento raíz. Para un registro de Invoice:

      <trans>
      $invoiceInternalId = searchResponse$searchResult$recordList$record.Invoice$internalId;
      $MyRecord = GetXMLString([searchResponse$searchResult$recordList$record.]);
      $MyRecord = Replace($MyRecord, "<Invoice>", '<Invoice internalId="' + $invoiceInternalId + '">');
      </trans>
      
    4. Pase MyRecord al siguiente paso.

Rendimiento y límites de registros

Las operaciones fallan debido a los límites de registros de la API de NetSuite

  • Síntoma: Una operación que utiliza el conector de NetSuite falla o procesa menos registros de los esperados porque los datos de origen superan el límite de registros por llamada impuesto por la API de NetSuite.
  • Causa: La API de NetSuite aplica limitaciones de tamaño a la cantidad de registros por solicitud. Cuando se envían más registros en una sola llamada de los que permite el límite, NetSuite rechaza el excedente.
  • Resolución:
    1. Habilite la fragmentación en la operación en Opciones de operación. Cuando el origen es una actividad de NetSuite, la fragmentación divide los datos durante la transformación en lugar de al recuperarlos. Cada fragmento se escribe en un archivo temporal y los archivos se combinan en el destino final después de procesar todos los fragmentos.
    2. Cuando el destino es una actividad de NetSuite, cada fragmento de origen produce un fragmento de destino, y la transformación se aplica por separado a cada uno. Los fragmentos de destino resultantes se combinan luego.
    3. Para obtener instrucciones y mejores prácticas, consulte Habilitar fragmentación.
    4. Para obtener información de referencia más detallada, consulte información detallada sobre el fragmentado.

Las operaciones fallan debido al límite de solicitudes simultáneas

  • Síntoma: Las operaciones de NetSuite de alto volumen fallan con uno de los siguientes errores:
    • Solicitudes RESTlet: HTTP error code: 400 Bad Request / SuiteScript error code: SSS_REQUEST_LIMIT_EXCEEDED
    • Solicitudes de servicios web: ExceededConcurrentRequestLimitFault o ExceededRequestLimitFault
  • Causa: NetSuite aplica una gobernanza de concurrencia por cuenta, que limita el total combinado de solicitudes simultáneas de servicios web y RESTlet. El límite depende de su nivel de servicio y de la cantidad de licencias de SuiteCloud Plus. Por ejemplo, el nivel de servicio 1 con cinco licencias de SuiteCloud Plus permite 65 solicitudes simultáneas (15 + (5 × 10)). Superar este límite hace que NetSuite rechace el excedente de solicitudes.
  • Resolución:
    1. Para agentes privados, establezca MaxNumberOfOperationThreads en la sección [OperationEngine] de jitterbit.conf en un valor que mantenga el total de solicitudes simultáneas a NetSuite dentro del límite de gobernanza de su cuenta.
    2. Diseñe las operaciones para serializar las solicitudes cuando sea posible, o implemente una lógica de reintento que espere y reintente cuando se reciba la respuesta WS_CONCUR_SESSION_DISALLOWED.
    3. Revise sus aplicaciones cliente de NetSuite para confirmar que manejan correctamente los códigos de error de concurrencia.
    4. Para obtener más detalles sobre los límites de gobernanza por nivel, revise las notas de lanzamiento de NetSuite 2017.2 (páginas 71 a 72).

Cambios de versión y esquema

Las operaciones fallan después de actualizar la URL de WSDL de NetSuite

  • Síntoma: Después de actualizar la URL de descarga de WSDL en una conexión de NetSuite para hacer referencia a una versión de WSDL más reciente, todas las operaciones que utilizan las actividades de esa conexión fallan en tiempo de ejecución.
  • Causa: Cambiar la URL de descarga de WSDL actualiza la conexión, pero no actualiza los esquemas de datos que utilizan las transformaciones existentes. Las transformaciones siguen haciendo referencia a los campos de esquema de la versión anterior de WSDL, que son incompatibles con la nueva versión.
  • Resolución: Para actualizar correctamente la versión de WSDL, siga los pasos en Cambiar la versión de WSDL. Este procedimiento actualiza tanto la URL de la conexión como los esquemas de datos utilizados por todas las actividades afectadas, evitando fallos en tiempo de ejecución causados por discrepancias de esquema.