

# Conexión a Oracle NetSuite
<a name="connecting-to-data-oracle-netsuite"></a>

Oracle NetSuite es una solución integral de administración empresarial en la nube que ayuda a las organizaciones a operar de forma más eficaz mediante la automatización de los procesos principales y la visibilidad en tiempo real del rendimiento operativo y financiero. Con un conjunto único e integrado de aplicaciones para administrar la contabilidad, el procesamiento de pedidos, la administración del inventario, la producción, la cadena de suministro y las operaciones de almacén, Oracle NetSuite ofrece a las empresas una visibilidad clara de sus datos y un control más estricto sobre sus negocios.

**Topics**
+ [Compatibilidad de AWS Glue para Oracle NetSuite](oracle-netsuite-support.md)
+ [Políticas que contienen las operaciones de la API para crear y usar conexiones](oracle-netsuite-configuring-iam-permissions.md)
+ [Configuración de Oracle NetSuite](oracle-netsuite-configuring.md)
+ [Configuración de las conexiones a Oracle NetSuite](oracle-netsuite-configuring-connections.md)
+ [Lectura de entidades de Oracle NetSuite](oracle-netsuite-reading-from-entities.md)
+ [Opciones de conexión a Oracle NetSuite](oracle-netsuite-connection-options.md)
+ [Limitaciones y notas para el conector de Oracle NetSuite](oracle-netsuite-connector-limitations.md)

# Compatibilidad de AWS Glue para Oracle NetSuite
<a name="oracle-netsuite-support"></a>

AWS Glue es compatible con Oracle NetSuite de la siguiente manera:

**¿Es compatible como origen?**  
Sí. Puede utilizar los trabajos de ETL de AWS Glue para consultar datos de Oracle NetSuite.

**¿Es compatible como destino?**  
No.

**Versiones de la API de Oracle NetSuite compatibles**  
Las siguientes versiones de la API de Oracle NetSuite son compatibles:
+ v1

Para conocer la compatibilidad de entidades por versión específica, consulte Entidades admitidas para el origen.

# Políticas que contienen las operaciones de la API para crear y usar conexiones
<a name="oracle-netsuite-configuring-iam-permissions"></a>

En el siguiente ejemplo de política se describen los permisos de AWS IAM necesarios para crear y utilizar conexiones. Si va a crear un nuevo rol, cree una política que contenga lo siguiente:

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "glue:ListConnectionTypes",
        "glue:DescribeConnectionType",
        "glue:RefreshOAuth2Tokens",
        "glue:ListEntities",
        "glue:DescribeEntity"
      ],
      "Resource": "*"
    }
  ]
}
```

------

Si no desea utilizar el método anterior, puede utilizar las siguientes políticas de IAM administradas:
+ [AWSGlueServiceRole](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/service-role/AWSGlueServiceRole): da acceso a recursos que precisan diversos procesos de AWS Glue para ejecutarse en su nombre. Entre estos recursos se incluyen AWS Glue, Amazon S3, IAM, CloudWatch Logs y Amazon EC2. Si aplica la convención de nomenclatura en los recursos especificados en esta política, los procesos de AWS Glue tienen los permisos necesarios. Normalmente, esta política se asocia a los roles que se especifican a la hora de definir rastreadores, trabajos y puntos de conexión de desarrollo.
+ [AWSGlueConsoleFullAccess](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/AWSGlueConsoleFullAccess): otorga acceso total a los recursos de AWS Glue cuando una identidad a la que está asociada la política utiliza la Consola de administración de AWS. Si sigue la convención de nomenclatura para los recursos especificados en esta política, los usuarios dispondrán de todas las funciones de la consola. Esta política se suele adjuntar a los usuarios de la consola AWS Glue.

# Configuración de Oracle NetSuite
<a name="oracle-netsuite-configuring"></a>

Antes de poder utilizar AWS Glue para transferir datos hacia o desde Oracle NetSuite, deberá cumplir estos requisitos:

## Requisitos mínimos
<a name="oracle-netsuite-configuring-min-requirements"></a>

Los requisitos mínimos son los siguientes:
+ Tener una cuenta de Oracle NetSuite. Para obtener más información, consulte [Creación de una cuenta de Oracle NetSuite](#oracle-netsuite-configuring-creating-oracle-netsuite-account).
+ La cuenta de Oracle NetSuite debe estar habilitada para el acceso de API.
+ Ha creado una integración de la API de OAuth 2.0 en su cuenta de desarrollador de Oracle NetSuite. Esta integración proporciona las credenciales de cliente que AWS Glue utiliza para acceder a los datos de forma segura cuando hace llamadas autenticadas a la cuenta. Para obtener más información, consulte [Creación de una aplicación cliente de Oracle NetSuite y credenciales de OAuth 2.0](#oracle-netsuite-configuring-creating-oracle-netsuite-client-app).

Si cumple estos requisitos, estará listo para conectar AWS Glue a la cuenta de Oracle NetSuite.

## Creación de una cuenta de Oracle NetSuite
<a name="oracle-netsuite-configuring-creating-oracle-netsuite-account"></a>

Vaya a [Oracle NetSuite](https://www.netsuite.com/portal/home.shtml) y elija **Recorrido gratuito por el producto**. Complete los detalles requeridos para obtener un recorrido gratuito por el producto, a través del cual podrá ponerse en contacto con un proveedor. El proceso para obtener una cuenta es el siguiente:
+ La adquisición de una cuenta de NetSuite se realiza a través de un proveedor, que proporciona un formulario o presupuesto que debe revisarse legalmente.
+ La cuenta que se va a adquirir para el conector Oracle NetSuite es de **Standard Cloud Service.**
+ El proveedor crea esta cuenta y comparte las credenciales temporales. Recibirá un correo de bienvenida de NetSuite <billing@notification.netsuite.com> <system@sent-via.netsuite.com> con detalles como su nombre de usuario y un enlace para configurar su contraseña.
+ Utilice el enlace **Establecer su contraseña** para establecer la contraseña del nombre de usuario proporcionado por el proveedor.

## Creación de una aplicación cliente de Oracle NetSuite y credenciales de OAuth 2.0
<a name="oracle-netsuite-configuring-creating-oracle-netsuite-client-app"></a>

Para obtener el ID de cliente y el secreto de cliente, debe crear una aplicación cliente de Oracle NetSuite:

1. Inicie sesión en su cuenta de NetSuite a través del [inicio de sesión de cliente de NetSuite](https://system.netsuite.com/pages/customerlogin.jsp).

1. Seleccione **Configuración** > **Empresa** > **Habilitar características**.

1. Vaya a la sección **SuiteCloud** y seleccione la casilla de verificación **REST WEB SERVICES** en **SuiteTalk (servicios web)**.

1. Seleccione la casilla de verificación **OAUTH 2.0** en **Administrar autenticación**. Haga clic en **Guardar**.

1. Vaya a **Configuración** > **Integración** > **Administrar integraciones** y seleccione **Nueva** para crear una aplicación OAuth2.0.

1. Introduzca un nombre de su elección y mantenga el **ESTADO** como Habilitado.

1. Si están marcadas, desactive las casillas de verificación **TBA: FLUJO DE AUTORIZACIÓN** y **AUTENTICACIÓN BASADA EN TOKEN** que aparecen en **Autenticación basada en token**.

1. Seleccione las casillas de verificación **CONCESIÓN DE CÓDIGO DE AUTORIZACIÓN** y **CLIENTE PÚBLICO** en **OAuth 2.0**.

1. En Auth, tome nota del ID de cliente y el secreto de cliente.

1. Introduzca un **URI DE REDIRECCIÓN**. Por ejemplo, https://us-east-1.console.aws.amazon.com/gluestudio/oauth

1. Seleccione la casilla **SERVICIOS WEB REST** en **ÁMBITO**.

1. Seleccione la casilla de verificación **CREDENCIALES DE USUARIO** en **Credenciales de usuario**. Seleccione **Save**.

1. Anote la CLAVE DEL CONSUMIDOR/ID DE CLIENTE y el SECRETO DEL CONSUMIDOR/SECRETO DEL CLIENTE en las **Credenciales de cliente**. Estos valores se muestran solo una vez.

1. Cree un rol de ADMINISTRADOR si es necesario; para ello, vaya a **Usuario/Roles** > **Administrar roles** > **Nuevo**.

1. Al crear un rol personalizado, agregue acceso completo en la pestaña **Permisos** para las siguientes entidades/funcionalidades:
   + “Depósito”, “Artículos”, “Cumplimiento de artículos”, “Realizar entrada en el diario”, “Orden de compra”, “Filiales”, “Proveedores”, “Facturas”, “Autorización de devolución del proveedor”, “Seguimiento del tiempo”, “Pago del cliente”, “Entradas de registro personalizadas”, “Tipos de registros personalizados”, “Servicios web REST”, “Administración de aplicaciones autorizadas de OAuth 2.0”, “Campos de entidad personalizados”, “Iniciar sesión con los tokens de acceso de OAuth 2.0”.

Para obtener más información, consulte [OAuth 2.0](https://docs.oracle.com/en/cloud/saas/netsuite/ns-online-help/chapter_157769826287.html) en la documentación de NetSuite Applications Suite.

# Configuración de las conexiones a Oracle NetSuite
<a name="oracle-netsuite-configuring-connections"></a>

Oracle NetSuite admite el tipo de concesión AUTHORIZATION\$1CODE para OAuth2. El tipo de concesión determina cómo se comunica AWS Glue con Oracle NetSuite para solicitar el acceso a los datos.
+ Este tipo de concesión se considera un OAuth de “tres vías”, ya que se basa en redirigir a los usuarios a un servidor de autorización externo para autenticar al usuario. Se utiliza para crear conexiones a través de la consola de AWS Glue. El usuario que crea una conexión puede, de forma predeterminada, confiar en una aplicación conectada propiedad de AWS Glue (aplicación cliente administrada por AWS Glue) en la que no necesita proporcionar ninguna información relacionada con OAuth, excepto la URL de la instancia de Oracle NetSuite. La consola de AWS Glue redirigirá al usuario a Oracle NetSuite, donde deberá iniciar sesión y conceder a AWS Glue los permisos solicitados para acceder a su instancia de Oracle NetSuite.
+ Los usuarios aún pueden optar por crear su propia aplicación conectada en Oracle NetSuite y proporcionar su propio ID y secreto de cliente al crear conexiones a través de la consola de AWS Glue. En este escenario, aún serán redirigidos a Oracle NetSuite para iniciar sesión y autorizar a AWS Glue para que acceda a sus recursos.
+ Este tipo de concesión da como resultado un token de actualización y un token de acceso. El token de acceso es de corta duración y se puede actualizar automáticamente sin la interacción del usuario mediante el token de actualización.
+ Para consultar la documentación pública de Oracle NetSuite sobre la creación de una aplicación conectada para el flujo Authorization Code OAuth, consulte [Aplicaciones públicas](https://developers.oracle-netsuite.com/docs/api/creating-an-app).

Para configurar una conexión a Oracle NetSuite:

1. En AWS Secrets Manager, cree un secreto con los siguientes detalles:

   1. En el caso de las aplicaciones conectadas administradas por el cliente, el secreto debe contener el secreto del consumidor de la aplicación conectada con `USER_MANAGED_CLIENT_APPLICATION_CLIENT_SECRET` como clave.

   1. Nota: Debe crear un secreto para su conexión en AWS Glue.

1. En AWS Glue Glue Studio, cree una conexión en **Conexiones de datos** según los pasos que se indican a continuación:

   1. Al seleccionar un **Tipo de conexión**, elija Oracle NetSuite.

   1. Proporcione el entorno de Oracle NetSuite.

   1. Seleccione el rol de AWS IAM que AWS Glue pueda asumir y que tenga permisos para las siguientes acciones:

------
#### [ JSON ]

****  

      ```
      {
        "Version":"2012-10-17",		 	 	 
        "Statement": [
          {
            "Effect": "Allow",
            "Action": [
              "secretsmanager:DescribeSecret",
              "secretsmanager:GetSecretValue",
              "secretsmanager:PutSecretValue",
              "ec2:CreateNetworkInterface",
              "ec2:DescribeNetworkInterfaces",
              "ec2:DeleteNetworkInterface"
            ],
            "Resource": "*"
          }
        ]
      }
      ```

------

   1. Seleccione el `secretName` que desee usar para esta conexión en AWS Glue para colocar los tokens.

   1. Seleccione las opciones de red si quiere usar su red.

1. Conceda el rol de IAM asociado a su permiso de trabajo de AWS Glue para leer `secretName`.

# Lectura de entidades de Oracle NetSuite
<a name="oracle-netsuite-reading-from-entities"></a>

**Requisito previo**

Un objeto de Oracle NetSuite desde el cual le gustaría leer. Necesitará el nombre del objeto, como `deposit` o `timebill`. En la siguiente tabla se muestran las entidades admitidas.

**Entidades compatibles como origen:**


| Entidad | Se puede filtrar | Admite Ordenar por | Admite límite | Admite SELECCIONAR \$1 | Admite partición | 
| --- | --- | --- | --- | --- | --- | 
| Depósito | Sí | No | Sí | Sí | Sí | 
| Artículo de la descripción | Sí | No | Sí | Sí | Sí | 
| Artículo de inventario | Sí | No | Sí | Sí | Sí | 
| Procesamiento de artículos | Sí | No | Sí | Sí | Sí | 
| Grupo de artículos | Sí | No | Sí | Sí | Sí | 
| Entrada de diario | Sí | No | Sí | Sí | Sí | 
| Artículo de compra no incluido en el inventario | Sí | No | Sí | Sí | Sí | 
| Artículo de reventa no incluido en el inventario | Sí | No | Sí | Sí | Sí | 
| Artículo de venta no incluido en el inventario | Sí | No | Sí | Sí | Sí | 
| Orden de compra | Sí | No | Sí | Sí | Sí | 
| Filial | Sí | No | Sí | Sí | Sí | 
| Proveedor | Sí | No | Sí | Sí | Sí | 
| Factura de proveedor | Sí | No | Sí | Sí | Sí | 
| Autorización de devolución del proveedor | Sí | No | Sí | Sí | Sí | 
| Factura de tiempo | Sí | No | Sí | Sí | Sí | 
| Pago de cliente | Sí | No | Sí | Sí | Sí | 
| Solicitud de cumplimiento | Sí | No | Sí | Sí | Sí | 
| Elemento | Sí | Sí | Sí | Sí | Sí | 
| Línea de transacción | Sí | Sí | Sí | Sí | Sí | 
| Línea de contabilidad de transacciones | Sí | Sí | Sí | Sí | Sí | 
| Tipos de registros personalizados (dinámicos) | Sí | Sí | Sí | Sí | Sí | 

**Ejemplo:**

```
netsuiteerp_read = glueContext.create_dynamic_frame.from_options(
    connection_type="netsuiteerp",
    connection_options={
        "connectionName": "connectionName",
        "ENTITY_NAME": "deposit",
        "API_VERSION": "v1"
    }
)
```

**Detalles de la entidad y el campo de Oracle NetSuite**:

Oracle NetSuite carga dinámicamente los campos disponibles en la entidad seleccionada. Según el tipo de datos de los campos, se admiten los operadores de filtro siguientes.


| Tipo de datos de los campos | Operadores de filtro admitidos | 
| --- | --- | 
| Cadena | LIKE, =, \$1= | 
| Date | BETWEEN, =, <, <=, >, >= | 
| DateTime | BETWEEN, <, <=, >, >= | 
| Numérico |  =, \$1=, <, <=, >, >= | 
| Booleano |  =, \$1= | 

**Formato de entrada esperado para los valores booleanos en Expresión de filtro**:


| Entidad | Formato de valor booleano “true” | Formato de valor booleano “false” | Ejemplo | 
| --- | --- | --- | --- | 
| Entidades de Elemento, Línea de transacción, Línea de contabilidad de transacciones y Tipo de registro personalizado | T o t | F o f | isinactive = “T” o isinactive = “t” | 
| Todas las demás entidades | true | false | isinactive = true | 

## Consultas de partición
<a name="oracle-netsuite-reading-partitioning-queries"></a>

**Partición basada en campos**

El conector de Oracle NetSuite tiene metadatos dinámicos, de modo que los campos compatibles para la partición basada en campos se eligen de forma dinámica. La partición basada en campos se admite en los campos que tienen el tipo de datos Integer, BigInteger, Date o DateTime.

Puede proporcionar las opciones adicionales de Spark `PARTITION_FIELD`, `LOWER_BOUND`, `UPPER_BOUND` y `NUM_PARTITIONS` si quiere utilizar la simultaneidad en Spark. Con estos parámetros, la consulta original se dividiría en un número `NUM_PARTITIONS` de subconsultas que las tareas de Spark pueden ejecutar simultáneamente.
+ `PARTITION_FIELD`: el nombre del campo que se utilizará para particionar la consulta.
+ `LOWER_BOUND`: un valor de límite inferior **inclusivo** del campo de partición elegido.

  Para el campo de marca de tiempo, aceptamos el formato de marca de tiempo de Spark que se usa en las consultas de Spark SQL.

  Ejemplos de valores válidos:

  ```
  "TIMESTAMP \"1707256978123\""
  "TIMESTAMP \"1702600882\""
  "TIMESTAMP '2024-02-06T22:00:00:00.000Z'"
  "TIMESTAMP '2024-02-06T22:00:00:00Z'"
  "TIMESTAMP '2024-02-06'"
  ```
+ `UPPER_BOUND`: un valor límite superior **exclusivo** del campo de partición elegido.
+ `NUM_PARTITIONS`: el número de particiones.

Ejemplo:

```
netsuiteerp_read = glueContext.create_dynamic_frame.from_options(
    connection_type="netsuiteerp",
    connection_options={
        "connectionName": "connectionName",
        "ENTITY_NAME": "deposit",
        "API_VERSION": "v1",
        "PARTITION_FIELD": "id",
        "LOWER_BOUND": "1",
        "UPPER_BOUND": "10000",
        "NUM_PARTITIONS": "10"
    }
```

**Partición basada en registros**

Puede proporcionar la opción adicional `NUM_PARTITIONS` de Spark si quiere usar la simultaneidad en Spark. Con estos parámetros, la consulta original se dividiría en `NUM_PARTITIONS` subconsultas que las tareas de Spark pueden ejecutar simultáneamente.

En la partición basada en registros, el número total de registros presentes se consulta desde la API de Oracle NetSuite y se divide entre el `NUM_PARTITIONS` proporcionado. A continuación, cada subconsulta obtiene simultáneamente el número de registros resultante.
+ `NUM_PARTITIONS`: el número de particiones.

Ejemplo:

```
netsuiteerp_read = glueContext.create_dynamic_frame.from_options(
    connection_type="netsuiteerp",
    connection_options={
        "connectionName": "connectionName",
        "ENTITY_NAME": "deposit",
        "API_VERSION": "v1",
        "NUM_PARTITIONS": "3"
    }
```

# Opciones de conexión a Oracle NetSuite
<a name="oracle-netsuite-connection-options"></a>

Las siguientes son opciones de conexión para Oracle NetSuite:
+ `ENTITY_NAME`(cadena): (obligatorio) se usa para lectura. El nombre de la entidad de Oracle NetSuite. Ejemplo: depósito.
+ `API_VERSION`(cadena): (obligatorio) se usa para lectura. Versión de la API de REST de Oracle NetSuite que desea usar. El valor será v1, ya que Oracle NetSuite actualmente solo admite la versión 1.
+ `SELECTED_FIELDS`(lista<Cadena>): predeterminado: empty(SELECT \$1). Se usa para leer. Lista de columnas separadas por comas que quiere seleccionar para la entidad seleccionada.
+ `FILTER_PREDICATE`(cadena): predeterminado: vacío. Se usa para leer. Debe estar en el formato de Spark SQL.
+ `QUERY`(cadena): predeterminado: vacío. Se usa para leer. Consulta completa de Spark SQL.
+ `PARTITION_FIELD`(cadena): se usa para leer. Campo que se utilizará para particionar la consulta (partición basada en campos).
+ `LOWER_BOUND`(cadena): se usa para leer. Un valor de límite inferior inclusivo del campo de partición elegido, que se utiliza en la partición basada en campos.
+ `UPPER_BOUND`(cadena): se usa para leer. Un valor límite superior exclusivo del campo de partición elegido, que se utiliza en la partición basada en campos. 
+ `NUM_PARTITIONS`(entero): predeterminado: 1. Se usa para leer. Número de particiones para leer. Se utiliza en la partición basada en campos y registros.
+ `INSTANCEE_URL`(cadena): una URL de instancia de NetSuite válida con el formato https://\$1account-id\$1.suitetalk.api.netsuite.com.

# Limitaciones y notas para el conector de Oracle NetSuite
<a name="oracle-netsuite-connector-limitations"></a>

Las siguientes son limitaciones o notas para el conector de Oracle NetSuite:
+ Los valores de los parámetros access\$1token y refresh\$1token están en formato JSON Web Token (JWT). access\$1token es válido durante 60 minutos, mientras que refresh\$1token es válido durante siete días.
+ Al generar el ID y el secreto de cliente, si selecciona “PUBLIC CLIENT” junto con “AUTHORIZATION CODE GRANT”, el token de actualización solo es válido durante tres horas y solo se puede usar una vez.
+ Puede obtener un máximo de 100 000 de registros mediante el conector. Para obtener más información, consulte [Executing SuiteQL Queries Through REST Web Services](https://docs.oracle.com/en/cloud/saas/netsuite/ns-online-help/section_157909186990.html).
+ Las particiones se crean de manera que cada partición recupere los registros en múltiplos de 1000, excepto posiblemente la última, que recuperará los registros restantes.
+ En el caso de los objetos Elemento, Línea de transacción y Línea de contabilidad de transacciones, el conector no admite algunos operadores por los siguientes motivos:
  + Al aplicar los operadores de filtro `EQUAL_TO`, `NOT_EQUAL_TO` a campos de tipo Fecha, se obtienen resultados poco fiables.
  + Al aplicar el operador de filtro `LESS_THAN_OR_EQUAL_TO` a campos de tipo Fecha, se obtienen resultados poco fiables y el operador se comporta de forma similar al operador `LESS_THAN`.
  + Al aplicar el operador de filtro `GREATER_THAN` a campos de tipo Fecha=, se obtienen resultados poco fiables y el operador se comporta de forma similar al operador `GREATER_THAN_OR_EQUAL_TO`.
+ En el caso de los objetos Elemento, Línea de transacción, Línea de contabilidad de transacciones y Tipo de registro personalizado, los valores booleanos aparecen en el formato T/F en lugar del estándar true/false. El conector asigna los valores t/f a true/false para garantizar la coherencia de los datos.