Share via


Copiar dados de e para o Salesforce Service Cloud usando o Azure Data Factory ou o Synapse Analytics (herdado)

APLICA-SE A: Azure Data Factory Azure Synapse Analytics

Dica

Experimente o Data Factory no Microsoft Fabric, uma solução de análise tudo-em-um para empresas. O Microsoft Fabric abrange desde movimentação de dados até ciência de dados, análise em tempo real, business intelligence e relatórios. Saiba como iniciar uma avaliação gratuita!

Este artigo descreve como usar a atividade de cópia nos pipelines do Azure Data Factory ou do Synapse Analytics para copiar dados de e para o Service Cloud do Salesforce. Ele amplia o artigo Visão geral da Atividade de Cópia que apresenta uma visão geral da atividade de cópia.

Importante

O serviço lançou um novo conector do Salesforce Service Cloud que oferece melhor suporte nativo ao Salesforce Service Cloud. Consulte o artigo Conector do Salesforce Service Cloud para obter detalhes.

Funcionalidades com suporte

Há suporte para este conector do Service Cloud do Salesforce para as seguintes funcionalidades:

Funcionalidades com suporte IR
Atividade de cópia (origem/coletor) ① ②
Atividade de pesquisa ① ②

① Runtime de integração do Azure ② Runtime de integração auto-hospedada

Para obter uma lista de armazenamentos de dados com suporte como origens ou coletores, confira a tabela Armazenamentos de dados com suporte.

Especificamente, este conector do Service Cloud do Salesforce é compatível com:

  • Edições de Desenvolvedor, Professional, Enterprise ou Ilimitada do Salesforce.
  • Copiar dados de e para a produção, da área restrita e do domínio personalizado do Salesforce.

O conector do Salesforce é criado sobre a API REST/Em massa do Salesforce. Por padrão, ao copiar dados do Salesforce, o conector usa v45 e escolhe automaticamente entre REST e APIs em massa com base no tamanho dos dados - quando o conjunto de resultados é grande, a API em massa é usada para melhor desempenho; ao gravar dados no Salesforce, o conector usa v40 da API em massa. Você também pode definir explicitamente a versão da API usada para ler/gravar dados por meio da apiVersion propriedade no serviço vinculado.

Pré-requisitos

A permissão de API deve estar habilitada no Salesforce.

Limites da solicitação Salesforce

O Salesforce tem limites para o total de solicitações de API e as solicitações simultâneas de API. Observe os seguintes pontos:

  • Se o número de solicitações simultâneas exceder o limite, a limitação será atingida e você verá falhas aleatórias.
  • Se o número total de solicitações exceder o limite, a conta do Salesforce será bloqueada por 24 horas.

Você também pode receber a mensagem de erro "REQUEST_LIMIT_EXCEEDED" em ambos os cenários. Para obter mais informações, veja a seção "Limites de Solicitações da API" na seção Salesforce Developer Limits (Limites do Desenvolvedor Salesforce).

Introdução

Para executar a atividade de Cópia com um pipeline, será possível usar as ferramentas ou os SDKs abaixo:

Criar um serviço vinculado à nuvem do serviço Salesforce usando a interface do usuário

Use as etapas a seguir para criar um serviço vinculado à nuvem do serviço Salesforce na interface do usuário do portal do Microsoft Azure.

  1. Navegue até a guia Gerenciar em seu espaço de trabalho do Azure Data Factory ou do Synapse e selecione Serviços Vinculados, em seguida, clique em Novo:

  2. Pesquise por Salesforce e selecione o conector de nuvem de serviço Salesforce.

    Select the Salesforce Service Cloud connector.

  3. Configure os detalhes do serviço, teste a conexão e crie o novo serviço vinculado.

    Configure a linked service to Salesforce Service Cloud.

Detalhes da configuração do conector

As seções a seguir fornecem detalhes sobre as propriedades que são usadas para definir entidades do Data Factory específicas ao conector do Service Cloud do Salesforce.

Propriedades do serviço vinculado

As propriedades a seguir têm suporte para o serviço vinculado do Salesforce.

Propriedade Descrição Obrigatório
type A propriedade de tipo deve ser definida como SalesforceServiceCloud. Yes
environmentUrl Especifique a URL da instância do Service Cloud do Salesforce.
– O padrão é "https://login.salesforce.com".
– Para copiar dados da área restrita, especifique "https://test.salesforce.com".
– Para copiar dados do domínio personalizado, especifique, por exemplo, "https://[domain].my.salesforce.com".
No
Nome de Usuário Especifique um nome de usuário para a conta de usuário. Sim
password Especifique um senha para a conta de usuário.

Marque este campo como um SecureString para armazená-lo com segurança ou referencie um segredo armazenado no Azure Key Vault.
Sim
securityToken Especifique um token de segurança para a conta de usuário.

Para saber mais sobre os tokens de segurança em geral, veja Security and the API (Segurança e a API). O token de segurança só poderá ser ignorado se você adicionar o IP do Integration Runtime à lista de endereços IP confiáveis no Salesforce. Ao usar o Azure IR, consulte o endereço IP do Azure Integration Runtime.

Para obter instruções sobre como obter e redefinir o token de segurança, consulte Obter token de segurança. Marque este campo como uma SecureString para armazená-la com segurança no Data Factory ou faça referência a um segredo armazenado no Azure Key Vault.
Não
apiVersion Especifique a versão da API REST/Em massa do Salesforce que será usada, por exemplo, 48.0. Por padrão, o conector usa a v45 para copiar dados do Salesforce e usa a v40 para copiar dados para o Salesforce. Não
connectVia O runtime de integração a ser usado para se conectar ao armazenamento de dados. Se não for especificado, ele usa o Integration Runtime padrão do Azure. Não

Exemplo: armazenar credenciais

{
    "name": "SalesforceServiceCloudLinkedService",
    "properties": {
        "type": "SalesforceServiceCloud",
        "typeProperties": {
            "username": "<username>",
            "password": {
                "type": "SecureString",
                "value": "<password>"
            },
            "securityToken": {
                "type": "SecureString",
                "value": "<security token>"
            }
        },
        "connectVia": {
            "referenceName": "<name of Integration Runtime>",
            "type": "IntegrationRuntimeReference"
        }
    }
}

Exemplo: Credenciais de armazenamento no Key Vault

{
    "name": "SalesforceServiceCloudLinkedService",
    "properties": {
        "type": "SalesforceServiceCloud",
        "typeProperties": {
            "username": "<username>",
            "password": {
                "type": "AzureKeyVaultSecret",
                "secretName": "<secret name of password in AKV>",
                "store":{
                    "referenceName": "<Azure Key Vault linked service>",
                    "type": "LinkedServiceReference"
                }
            },
            "securityToken": {
                "type": "AzureKeyVaultSecret",
                "secretName": "<secret name of security token in AKV>",
                "store":{
                    "referenceName": "<Azure Key Vault linked service>",
                    "type": "LinkedServiceReference"
                }
            }
        },
        "connectVia": {
            "referenceName": "<name of Integration Runtime>",
            "type": "IntegrationRuntimeReference"
        }
    }
}

Propriedades do conjunto de dados

Para obter uma lista completa das seções e propriedades disponíveis para definir os conjuntos de dados, confira o artigo sobre Conjuntos de Dados. Esta seção fornece uma lista de propriedades compatíveis com o conjunto de dados do Service Cloud do Salesforce.

Para copiar dados de e para o Service Cloud do Salesforce, há suporte para as propriedades a seguir.

Propriedade Descrição Obrigatório
type A propriedade de tipo deve ser definida como SalesforceServiceCloudObject. Yes
objectApiName O nome do objeto de Salesforce para recuperar dados. Não para fonte, Sim para o coletor

Importante

A parte "__c" do Nome da API é necessária para qualquer objeto personalizado.

Salesforce connection API Name

Exemplo:

{
    "name": "SalesforceServiceCloudDataset",
    "properties": {
        "type": "SalesforceServiceCloudObject",
        "typeProperties": {
            "objectApiName": "MyTable__c"
        },
        "schema": [],
        "linkedServiceName": {
            "referenceName": "<Salesforce Service Cloud linked service name>",
            "type": "LinkedServiceReference"
        }
    }
}
Propriedade Descrição Obrigatório
type A propriedade type do conjunto de dados deve ser definida como RelationalTable. Sim
tableName Nome da tabela no Service Cloud do Salesforce. Não (se "query" na fonte da atividade for especificada)

Propriedades da atividade de cópia

Para obter uma lista completa das seções e propriedades disponíveis para definir atividades, confia o artigo Pipelines. Esta seção fornece uma lista das propriedades compatíveis com a fonte e o coletor do Service Cloud do Salesforce.

Service Cloud do Salesforce como tipo de origem

Para copiar dados do Service Cloud do Salesforce, há suporte para as seguintes propriedades na seção de origem da atividade de cópia.

Propriedade Descrição Obrigatório
type A propriedade de tipo de origem da atividade de cópia deve ser definida como SalesforceServiceCloudSource. Sim
Consulta Utiliza a consulta personalizada para ler os dados. É possível usar a consulta SOQL (Salesforce Object Query Language) ou a consulta SQL-92. Veja mais dicas na seção dicas de consulta. Se a consulta não for especificada, todos os dados do objeto do Service Cloud do Salesforce identificado em "objectApiName" no conjunto de dados serão recuperados. Não (se "objectApiName" no conjunto de dados for especificado)
readBehavior Indica se deve consultar os registros existentes, ou consultar todos os registros, incluindo o que foi excluído. Se não for especificado, o comportamento padrão é o primeiro.
Valores permitidos: query (padrão), queryAll.
No

Importante

A parte "__c" do Nome da API é necessária para qualquer objeto personalizado.

Salesforce connection API Name list

Exemplo:

"activities":[
    {
        "name": "CopyFromSalesforceServiceCloud",
        "type": "Copy",
        "inputs": [
            {
                "referenceName": "<Salesforce Service Cloud input dataset name>",
                "type": "DatasetReference"
            }
        ],
        "outputs": [
            {
                "referenceName": "<output dataset name>",
                "type": "DatasetReference"
            }
        ],
        "typeProperties": {
            "source": {
                "type": "SalesforceServiceCloudSource",
                "query": "SELECT Col_Currency__c, Col_Date__c, Col_Email__c FROM AllDataType__c"
            },
            "sink": {
                "type": "<sink type>"
            }
        }
    }
]

Observação

A origem da Nuvem de Serviço do Salesforce não dá suporte a configurações de proxy no runtime de integração auto-hospedada, mas o coletor dá suporte.

Service Cloud do Salesforce como tipo de coletor

Para copiar dados do Service Cloud do Salesforce, há suporte para as seguintes propriedades na seção de coletor da atividade de cópia.

Propriedade Descrição Obrigatório
type A propriedade de tipo de coletor da atividade de cópia deve ser definida como SalesforceServiceCloudSink. Sim
writeBehavior O comportamento da operação de gravação.
Valores permitidos são Insert e Upsert.
Não (o padrão é Insert)
externalIdFieldName O nome do campo de ID externo para a operação upsert. O campo especificado deve ser definido como "Campo de ID externo" no objeto de Service Cloud do Salesforce. Ele não pode ter valores nulos nos dados de entrada correspondentes. Sim para "Upsert"
writeBatchSize A contagem de linhas de dados gravados no Service Cloud do Salesforce em cada lote. Não (o padrão é 5.000)
ignoreNullValues Indica se deve ignorar valores NULL de dados de entrada durante a operação de gravação.
Os valores permitidos são True e False.
- True: Deixa os dados no objeto de destino inalterados quando você faz uma operação upsert ou atualização. Insira um valor padrão definido quando você faz uma operação insert.
- False: atualiza os dados no objeto de destino como NULL quando você faz uma operação upsert ou atualização. Insira um valor NULL quando você faz uma operação insert.
Não (padrão é falso)
 maxConcurrentConnections O limite superior de conexões simultâneas estabelecidas com o armazenamento de dados durante a execução da atividade. Especifique um valor somente quando desejar limitar as conexões simultâneas.  Nenhum

Exemplo:

"activities":[
    {
        "name": "CopyToSalesforceServiceCloud",
        "type": "Copy",
        "inputs": [
            {
                "referenceName": "<input dataset name>",
                "type": "DatasetReference"
            }
        ],
        "outputs": [
            {
                "referenceName": "<Salesforce Service Cloud output dataset name>",
                "type": "DatasetReference"
            }
        ],
        "typeProperties": {
            "source": {
                "type": "<source type>"
            },
            "sink": {
                "type": "SalesforceServiceCloudSink",
                "writeBehavior": "Upsert",
                "externalIdFieldName": "CustomerId__c",
                "writeBatchSize": 10000,
                "ignoreNullValues": true
            }
        }
    }
]

Dicas de consulta

Recupere dados do relatório do Service Cloud Salesforce

Você pode recuperar dados de relatórios do Service Cloud do Salesforce especificando uma consulta como {call "<report name>"}. Um exemplo é "query": "{call \"TestReport\"}".

Recupere registros excluídos da lixeira do Service Cloud do Salesforce

Para consultar os registros excluídos de maneira reversível da lixeira do Service Cloud do Salesforce, você pode especificar readBehavior como queryAll.

Diferença entre a sintaxe de consulta SOQL e SQL

Ao copiar dados do Service Cloud do Salesforce, é possível usar a consulta SOQL ou a consulta SQL. Note que as duas têm suporte diferente de sintaxe e funcionalidade, não combine-as. É recomendável utilizar a consulta SOQL, que tem suporte nativo pelo Service Cloud do Salesforce. A tabela a seguir lista as principais diferenças:

Syntax Modo SOQL Modo SQL
Seleção de coluna É necessário enumerar os campos que serão copiados na consulta, por exemplo SELECT field1, filed2 FROM objectname SELECT * tem suporte além da seleção de colunas.
Aspas Nomes de campos/objetos não podem ser entre aspas. Nomes de campos/objetos podem ser entre aspas, p. ex. SELECT "id" FROM "Account"
Formato de data/hora Consulte os detalhes aqui e exemplos na próxima seção. Consulte os detalhes aqui e exemplos na próxima seção.
Valores boolianos Representado como False e True, p. ex. SELECT … WHERE IsDeleted=True. Representado como 0 ou 1, p. ex. SELECT … WHERE IsDeleted=1.
Renomeação de coluna Não há suporte. Com suporte, p. ex.: SELECT a AS b FROM ….
Relação Com suporte, p. ex. Account_vod__r.nvs_Country__c. Não há suporte.

Recuperar dados usando um onde cláusula na coluna DateTime

Ao especificar a consulta SQL ou SOQL, preste atenção à diferença de formato DateTime. Por exemplo:

  • Exemplo de SOQL:SELECT Id, Name, BillingCity FROM Account WHERE LastModifiedDate >= @{formatDateTime(pipeline().parameters.StartTime,'yyyy-MM-ddTHH:mm:ssZ')} AND LastModifiedDate < @{formatDateTime(pipeline().parameters.EndTime,'yyyy-MM-ddTHH:mm:ssZ')}
  • Exemplo de SQL: SELECT * FROM Account WHERE LastModifiedDate >= {ts'@{formatDateTime(pipeline().parameters.StartTime,'yyyy-MM-dd HH:mm:ss')}'} AND LastModifiedDate < {ts'@{formatDateTime(pipeline().parameters.EndTime,'yyyy-MM-dd HH:mm:ss')}'}

Erro de MALFORMED_QUERY: truncado

O erro de "MALFORMED_QUERY: truncado" normalmente ocorre quando há uma coluna de tipo JunctionIdList nos dados e o Salesforce tem compatibilidade limitada com dados que têm um grande número de linhas. Para mitigá-lo, tente excluir a coluna JunctionIdList ou limitar o número de linhas que serão copiadas (você pode particionar várias execuções da atividade de cópia).

Mapeamento de tipo de dados para o Service Cloud do Salesforce

Ao copiar dados do Service Cloud do Salesforce, os seguintes mapeamentos são usados dos tipos de dados do Service Cloud do Salesforce para tipos de dados provisórios usados internamente no serviço. Para saber mais sobre como a atividade de cópia mapeia o tipo de dados e esquema de origem para o coletor, consulte Mapeamentos de tipo de dados e esquema.

Tipo de dados do Service Cloud do Salesforce Tipo de dados provisório do serviço
Numeração automática String
Caixa de seleção Boolean
Moeda Decimal
Data Datetime
Data/Hora Datetime
Email String
ID String
Relação de pesquisa String
Lista de seleção múltipla String
Número Decimal
Porcentagem Decimal
Telefone String
Lista de seleção String
Texto Cadeia de caracteres
Área de texto String
Área de texto (longo) String
Área de texto (Rich) String
Texto (criptografado) String
URL String

Observação

O tipo de número do Salesforce Service Cloud está sendo mapeado para o tipo Decimal nos pipelines do Azure Data Factory e do Azure Synapse como um tipo de dados provisório de serviço. O tipo Decimal segue a precisão e a escala definidas. Para dados cujas casas decimais excedem a escala definida, o valor será arredondado em dados de visualização e cópia. Para evitar essa perda de precisão nos pipelines do Azure Data Factory e do Azure Synapse, considere aumentar as casas decimais para um valor razoavelmente grande na página Editar Definição de Campo Personalizado do Salesforce Service Cloud.

Pesquisar propriedades de atividade

Para saber detalhes sobre as propriedades, verifique Atividade de pesquisa.

Próximas etapas

Para obter uma lista dos armazenamentos de dados com suporte como coletores e fontes da atividade de cópia, confira os Armazenamentos de dados com suporte.