DataRaptor Load
Tags: omnistudio, dataraptor, lowcode
Published: 2023-09-18 13:22:29

DataRaptor é um componente do _Salesforce Omnistudio_, que faz parte da camada _Service Management_. Ele é essencialmente um componente de _backend_, que permite leitura, escrita e transformação de dados no _Salesforce_. Ele é dividido em quatro tipos: _Extract_, _Turbo Extract_, _Load_ e _Transform_. Nesse artigo, irei explicar um pouco sobre o _**DataRaptor Load**_, utilizando um exemplo prático.

O DataRaptor Load permite a criação e edição de dados no Salesforce. Os dados de entrada podem ser dos tipos: _JSON_, _XML _ou formato customizado. Estes dados podem ser obtidos através de: outros componentes do _Omnistudio_, como _Omniscripts_ e _Integration Procedures_; _DataRaptor API Rest call_; classes _Apex_. 

Apenas o Omnistudio for Vlocity têm suporte para receber dados através de objetos de Interface, como o Salesforce Bulk Loader e outras ferramentas similares.

Os dados de saída contém os registros e Ids dos registros criados e/ou atualizados. Esses registros serão sempre de _sObjects_, ou objetos do Salesforce, que podem ser os objetos padrão, como Contas e Oportunidades, ou objetos customizados.

Durante o processamento do DataRaptor Load, temos as seguintes etapas:
- Etapa de Fórmula: funções matemática e de Strings são processadas para atender a resultados de fórmulas específicas, quando criadas;
- Etapa de Transformação: é quando os dados de entrada são mapeados para os dados de saída correspondentes;
- Etapa de Carregamento: quando os dados são persistidos em um sObject.

## Hands-on

Criar um componente DataRaptor Load que receba uma lista de gêneros de filmes, e grave os dados em um objeto customizado Genre__c.

Para este projeto, estarei usando os dados da API do [DB Movies](https://developer.themoviedb.org/). Estou usando também a _org_ _Developer Edition_ com o pacote do _Omnistudio_ já instalado.

Antes de iniciar a construção do componente, criei o objeto Genre (Genre__c), e dois campos do tipo Texto, Id (Id__c) e Name. O perfil de usuário Administrador do Sistema terá acesso de criação, leitura e edição para o objeto e seus campos.

No aplicativo _Omnistudio_, vamos acessar a guia _DataRaptor_ e criar um novo componente, com a interface _Load_.
![Setup component](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/i168oxtm393ezg7lf44w.png)

Na guia _Objects_, selecionar o objeto Genre__c.
![Setup Genre sObject](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/1w6w2qu50mc3spo4v88b.png)

Na guia Fields, vamos copiar a lista de gêneros e colar na seção Input JSON. Logo após, vamos clicar em Quick Match.

```
{
  "genres": [
    {
      "id": 28,
      "name": "Action"
    },
    {
      "id": 12,
      "name": "Adventure"
    },
    {
      "id": 16,
      "name": "Animation"
    },
    {
      "id": 35,
      "name": "Comedy"
    },
    {
      "id": 80,
      "name": "Crime"
    },
    {
      "id": 99,
      "name": "Documentary"
    },
    {
      "id": 18,
      "name": "Drama"
    },
    {
      "id": 10751,
      "name": "Family"
    },
    {
      "id": 14,
      "name": "Fantasy"
    },
    {
      "id": 36,
      "name": "History"
    },
    {
      "id": 27,
      "name": "Horror"
    },
    {
      "id": 10402,
      "name": "Music"
    },
    {
      "id": 9648,
      "name": "Mystery"
    },
    {
      "id": 10749,
      "name": "Romance"
    },
    {
      "id": 878,
      "name": "Science Fiction"
    },
    {
      "id": 10770,
      "name": "TV Movie"
    },
    {
      "id": 53,
      "name": "Thriller"
    },
    {
      "id": 10752,
      "name": "War"
    },
    {
      "id": 37,
      "name": "Western"
    }
  ]
}
```

![Input JSON](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/pe72jxfgo2llwnhhe7yq.png)

No popup que se abre, vemos na esquerda, a lista de paths do JSON de entrada; no meio, os campos do referido objeto (Genre__c); e, na direita, ficarão os campos mapeados. Podemos clicar em Auto Match, ou arrastar o path da esquerda para o campo correspondente. Se os campos estiverem mapeados corretamente, clicar em Save.
![Mapping fields](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/0rtb0rmth8o1he54t88a.png)

Vamos editar o mapeamento para o path genre:id, e marcá-lo como Upsert Key; desta forma, se o Salesforce encontrar um gênero com o mesmo genre:id, ele irá atualizar o registro, ao invés de criar um novo.
![Enter insert key](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/cnq403ifytks605ritei.png)

Na aba preview, vamos testar o componente. Colamos o JSON de entrada na seção input, e clicamos em Execute.
![Preview](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/hdro9gqxq60ggxuulvs8.png)

Quando a operação é executada com sucesso, vemos a lista de registros criados, junto com os Ids do Salesforce.
![Success](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/nxsph548d4jxt9lhec1i.png)