

# Conexión a QuickBooks
<a name="connecting-to-data-quickbooks"></a>

QuickBooks es una aplicación de contabilidad líder dirigida a pequeñas y medianas empresas. Las aplicaciones de contabilidad QuickBooks se remontan a la década de 1980, cuando fueron lanzadas como uno de los primeros productos de Intuit y, en consecuencia, originalmente se desarrollaron como software de escritorio. En la actualidad, QuickBooks ofrece diversas aplicaciones de contabilidad y gestión financiera empresarial, disponibles tanto como software instalable como en su versión SaaS basada en la nube. Como usuario de QuickBooks, puede conectar AWS Glue a la cuenta de QuickBooks. A continuación, puede utilizar QuickBooks como origen de datos en los trabajos de ETL. Ejecute estos trabajos para transferir datos entre QuickBooks y los servicios de AWS u otras aplicaciones compatibles.

**Topics**
+ [Compatibilidad de AWS Glue con QuickBooks](quickbooks-support.md)
+ [Políticas que contienen las operaciones de la API para crear y usar conexiones](quickbooks-configuring-iam-permissions.md)
+ [Configuración de QuickBooks](quickbooks-configuring.md)
+ [Configuración de conexiones a QuickBooks](quickbooks-configuring-connections.md)
+ [Cómo leer a partir de entidades de QuickBooks](quickbooks-reading-from-entities.md)
+ [Opciones de conexión a QuickBooks](quickbooks-connection-options.md)
+ [Limitaciones y notas del conector de QuickBooks](quickbooks-connector-limitations.md)

# Compatibilidad de AWS Glue con QuickBooks
<a name="quickbooks-support"></a>

AWS Glue admite QuickBooks de la siguiente manera:

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

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

**Versiones de la API de QuickBooks compatibles**  
Se admiten las siguientes versiones de la API de QuickBooks:
+ v3

# Políticas que contienen las operaciones de la API para crear y usar conexiones
<a name="quickbooks-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 QuickBooks
<a name="quickbooks-configuring"></a>

Antes de poder utilizar AWS Glue para transferir datos desde QuickBooks, deberá cumplir estos requisitos:

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

Los requisitos mínimos son los siguientes:
+ Tener una cuenta de QuickBooks.
+ La cuenta de QuickBooks está habilitada para el acceso a la API.

Para obtener más información, consulte los siguientes temas en la documentación de QuickBooks:
+ [Creación de una cuenta de Intuit](https://quickbooks.intuit.com/learn-support/en-us/help-article/account-management/create-intuit-user-account/L62kSFEOM_US_en_US)
+ [Cómo crear y comenzar a desarrollar la aplicación](https://developer.intuit.com/app/developer/qbo/docs/get-started/start-developing-your-app)

Si cumple estos requisitos, estará listo para conectar AWS Glue a la cuenta de QuickBooks. Para conexiones típicas, no necesita hacer nada más en QuickBooks.

# Configuración de conexiones a QuickBooks
<a name="quickbooks-configuring-connections"></a>

QuickBooks admite el tipo de concesión AUTHORIZATION\$1CODE para OAuth 2. El tipo de concesión determina cómo se comunica AWS Glue con QuickBooks 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.
+ Los usuarios aún pueden optar por crear su propia aplicación conectada en QuickBooks 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 se abrirá QuickBooks 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 QuickBooks sobre la creación de una aplicación conectada para el flujo Authorization Code OAuth, consulte [Configuración de OAuth 2.0](https://developer.intuit.com/app/developer/qbo/docs/develop/authentication-and-authorization/oauth-2.0).

Para configurar una conexión a QuickBooks:

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 QuickBooks.

   1. Proporcione la URL de instancia y el ID de la empresa de la instancia QuickBooks a la que se desea conectar.

   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`.

# Cómo leer a partir de entidades de QuickBooks
<a name="quickbooks-reading-from-entities"></a>

**Requisito previo**

Un objeto de QuickBooks desde el que desea leer.

**Entidades compatibles como origen:**


| Entidad | Se puede filtrar | Admite límite | Admite Ordenar por | Admite Seleccionar \$1 | Admite partición | 
| --- | --- | --- | --- | --- | --- | 
| Cuenta | Sí | Sí | Sí | Sí | Sí | 
| Factura | Sí | Sí | Sí | Sí | Sí | 
| Información de la empresa | No | No | No | Sí | No | 
| Cliente | Sí | Sí | Sí | Sí | Sí | 
| Empleado | Sí | Sí | Sí | Sí | Sí | 
| Estimación | Sí | Sí | Sí | Sí | Sí | 
| Factura | Sí | Sí | Sí | Sí | Sí | 
| Elemento | Sí | Sí | Sí | Sí | Sí | 
| Pago | Sí | Sí | Sí | Sí | Sí | 
| Preferencias | No | No | No | Sí | No | 
| Pérdidas y ganancias | Sí | No | No | Sí | No | 
| Agencia fiscal | Sí | Sí | Sí | Sí | Sí | 
| Proveedores | Sí | Sí | Sí | Sí | Sí | 

**Ejemplo:**

```
QuickBooks_read = glueContext.create_dynamic_frame.from_options(
    connection_type="quickbooks",
    connection_options={
        "connectionName": "connectionName",
        "ENTITY_NAME": "Account",
        "API_VERSION": "v3"
    }
```

**Detalles de entidades y campos de QuickBooks**:

Para obtener más información acerca de las entidades y los detalles de los campos, consulte:
+ [Cuenta](https://developer.intuit.com/app/developer/qbo/docs/api/accounting/most-commonly-used/account)
+ [Factura](https://developer.intuit.com/app/developer/qbo/docs/api/accounting/most-commonly-used/bill)
+ [CompanyInfo](https://developer.intuit.com/app/developer/qbo/docs/api/accounting/most-commonly-used/companyinfo)
+ [Cliente](https://developer.intuit.com/app/developer/qbo/docs/api/accounting/most-commonly-used/customer)
+ [Empleado](https://developer.intuit.com/app/developer/qbo/docs/api/accounting/most-commonly-used/employee)
+ [Estimación](https://developer.intuit.com/app/developer/qbo/docs/api/accounting/most-commonly-used/estimate)
+ [Factura](https://developer.intuit.com/app/developer/qbo/docs/api/accounting/most-commonly-used/invoice)
+ [Elemento](https://developer.intuit.com/app/developer/qbo/docs/api/accounting/most-commonly-used/item)
+ [Pago](https://developer.intuit.com/app/developer/qbo/docs/api/accounting/most-commonly-used/payment)
+ [Preferencias](https://developer.intuit.com/app/developer/qbo/docs/api/accounting/most-commonly-used/preferences)
+ [ProfitAndLoss](https://developer.intuit.com/app/developer/qbo/docs/api/accounting/most-commonly-used/profitandloss)
+ [TaxAgency](https://developer.intuit.com/app/developer/qbo/docs/api/accounting/most-commonly-used/taxagency)
+ [Vendor](https://developer.intuit.com/app/developer/qbo/docs/api/accounting/most-commonly-used/vendor)

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

**Partición basada en campos**:

En QuickBooks, los campos de tipo de datos Integer y DateTime admiten la partición basada en campos.

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.

  En el campo Datetime, aceptamos el formato de marca de tiempo de Spark que se utiliza en las consultas SQL de Spark.

  Ejemplos de valor válido:

  ```
  "2024-05-07T02:03:00.00Z"
  ```
+ `UPPER_BOUND`: un valor límite superior **exclusivo** del campo de partición elegido.
+ `NUM_PARTITIONS`: el número de particiones.

Ejemplo:

```
QuickBooks_read = glueContext.create_dynamic_frame.from_options(
    connection_type="quickbooks",
    connection_options={
        "connectionName": "connectionName",
        "REALMID": "12345678690123456789",
        "ENTITY_NAME": "Account",
        "API_VERSION": "v3",
        "PARTITION_FIELD": "MetaData_CreateTime"
        "LOWER_BOUND": "2023-09-07T02:03:00.000Z"
        "UPPER_BOUND": "2024-05-07T02:03:00.000Z"
        "NUM_PARTITIONS": "10"
    }
```

**Partición basada en registros**:

La consulta original se divide en un número `NUM_PARTITIONS` de subconsultas que se pueden ejecutar por tareas Spark de forma simultánea:
+ `NUM_PARTITIONS`: el número de particiones.

Ejemplo:

```
QuickBooks_read = glueContext.create_dynamic_frame.from_options(
    connection_type="quickbooks",
    connection_options={
        "connectionName": "connectionName",
        "REALMID": "1234567890123456789",
        "ENTITY_NAME": "Bill",
        "API_VERSION": "v3",
        "NUM_PARTITIONS": "10"
    }
```

# Opciones de conexión a QuickBooks
<a name="quickbooks-connection-options"></a>

Las siguientes son opciones de conexión para QuickBooks:
+ `ENTITY_NAME`(cadena): (obligatorio) se usa para lectura. El nombre del objeto en QuickBooks.
+ `INSTANCE_URL`(Cadena): (obligatorio) una URL de instancia de QuickBooks válida.
+ `API_VERSION`(cadena): (obligatorio) se usa para lectura. Versión de la API de REST de QuickBooks que desea usar.
+ `REALM_ID`(Cadena): un identificador que identifica a una empresa individual de QuickBooks Online a la que se envían las solicitudes.
+ `SELECTED_FIELDS`(lista<Cadena>): predeterminado: empty(SELECT \$1). Se usa para leer. Columnas que desee seleccionar para el objeto.
+ `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.
+ `LOWER_BOUND`(cadena): se usa para leer. Un valor de límite inferior inclusivo del campo de partición elegido.
+ `UPPER_BOUND`(cadena): se usa para leer. Un valor límite superior exclusivo del campo de partición elegido.
+ `NUM_PARTITIONS`(entero): predeterminado: 1. Se usa para leer. Número de particiones para leer.

# Limitaciones y notas del conector de QuickBooks
<a name="quickbooks-connector-limitations"></a>

Las siguientes son limitaciones o notas para el conector de QuickBooks:
+ En la API de `taxAgency`, el orden por filtrado no funciona como se esperaba.