# SAP (IDoc and RFC)

O conector **SAP** permite a integração com sistemas SAP utilizando o protocolo **RFC** e o padrão **IDoc** para troca de dados.

## **Parâmetros**

Dê uma olhada nos parâmetros de configuração do conector. Parâmetros suportados por [expressões Double Braces](/documentation/connectors-and-triggers/pt-br/double-braces/overview.md) estão marcados com `(DB)`.

### **Aba Authorization**

<table data-full-width="true"><thead><tr><th>Parâmetro</th><th>Descrição</th><th>Valor padrão</th><th>Tipo de dado</th></tr></thead><tbody><tr><td><strong>Use Dynamic Account</strong></td><td>Quando ativado, o conector utilizará a conta de forma dinâmica. Caso contrário, usará a conta de forma estática. Saiba mais sobre <a href="/spaces/cO0A6g1dOsu8BiHYqO67/pages/FrKJOmsImCRBImMPMsU2">Contas Dinâmicas</a>.</td><td>False</td><td>Booleano</td></tr><tr><td><strong>Scoped</strong></td><td>Quando ativado, a conta armazenada é isolada de outros subprocessos. Nesse caso, os subprocessos visualizam sua própria versão dos dados da conta armazenada. Disponível apenas se o parâmetro <strong>Use Dynamic Account</strong> estiver habilitado.</td><td>False</td><td>Booleano</td></tr><tr><td><strong>Account Name</strong> <code>(DB)</code></td><td>Nome da conta dinâmica utilizada pelo conector. Essa conta deve ter sido previamente configurada em um conector <a href="/pages/iulYYuz29bvfGjceZb4e"><strong>Store Account</strong></a> no pipeline para que este processo tenha efeito. Disponível apenas se o parâmetro <strong>Use Dynamic Account</strong> estiver habilitado.</td><td>N/A</td><td>String</td></tr><tr><td><strong>Account</strong></td><td>Conta utilizada pelo conector. Tipo suportado: <a href="/spaces/cO0A6g1dOsu8BiHYqO67/pages/fS1QLzAg8rGSSJFwtrvy"><strong>Basic</strong> </a>(usuário e senha). Disponível apenas se o parâmetro <strong>Use Dynamic Account</strong> estiver desabilitado.</td><td>N/A</td><td>Conta</td></tr><tr><td><strong>Host</strong> <code>(DB)</code></td><td>Hostname do sistema SAP. Para suportar "IP" e "Port", é necessário conectividade via VPN (a VPN pode ser configurada pelo SAP GUI). Para resolver o hostname em um endereço IP, é preciso adicionar uma entrada de mapeamento no arquivo de hosts da máquina onde o agente está instalado.</td><td>N/A</td><td>String</td></tr><tr><td><strong>Client ID</strong> <code>(DB)</code></td><td>ID do cliente SAP, geralmente um número de 3 dígitos usado para conectar ao SAP.</td><td>400</td><td>String</td></tr><tr><td><strong>System Number</strong> <code>(DB)</code></td><td>Número do sistema SAP, geralmente com 2 dígitos. Essa informação pode ser encontrada no SAP GUI.</td><td>01</td><td>Integer</td></tr><tr><td><strong>Language</strong> <code>(DB)</code></td><td>Idioma utilizado na conexão com o sistema SAP (por exemplo, "EN" para inglês).</td><td>en</td><td>String</td></tr></tbody></table>

### **Aba General**

<table data-full-width="true"><thead><tr><th>Parâmetro</th><th>Descrição</th><th>Valor padrão</th><th>Tipo de dado</th></tr></thead><tbody><tr><td><strong>Alias</strong></td><td>Nome (alias) para a saída deste conector, permitindo referenciá-la posteriormente no fluxo utilizando expressões Double Braces. <a href="/pages/3qLsJwXf8erdLiaooiFB">Saiba mais</a>.</td><td>sap-1</td><td>String</td></tr><tr><td><strong>SAP Operation</strong></td><td>Tipo de conexão com o sistema SAP. Opções suportadas: <strong>RFC</strong> ou <strong>IDoc</strong>.</td><td>RFC</td><td>String</td></tr></tbody></table>

{% tabs fullWidth="true" %}
{% tab title="RFC" %}

<table data-full-width="true"><thead><tr><th>Parâmetro</th><th>Descrição</th><th>Valor padrão</th><th>Tipo de dado</th></tr></thead><tbody><tr><td><strong>RFC</strong> <code>(DB)</code></td><td>Nome da RFC utilizada para conectar ao sistema SAP. Esse valor é fornecido pelo cliente. Os parâmetros de import da função SAP devem ser mapeados.</td><td>YYPCL_RFC_ORDEM_FATURA</td><td>String</td></tr><tr><td><strong>Search Template</strong></td><td>Botão que preenche automaticamente o parâmetro <strong>Template (XML)</strong> com um template de RFC quando todos os detalhes de autorização e o nome da RFC são válidos.</td><td>N/A</td><td>Botão</td></tr><tr><td><strong>Send as File</strong></td><td>Quando ativado, um arquivo pode ser definido e enviado.</td><td>False</td><td>Booleano</td></tr><tr><td><strong>File Name</strong> <code>(DB)</code></td><td>Arquivo que contém o corpo a ser enviado ao servidor SAP. Utilize esta opção quando o payload for muito grande para o campo <strong>Template</strong>. Recomenda-se usar outros conectores como <a href="/pages/CHl7ZR2C1ogEIn8I4unU"><strong>Template Transformer</strong></a> e <a href="/pages/zeVDxGPTWV4yFiVQWYjg"><strong>File Writer</strong></a> para gerar o conteúdo do arquivo.</td><td>N/A</td><td>String</td></tr><tr><td><strong>Template (XML)</strong> <code>(DB)</code></td><td>Define o template Apache FreeMarker para a mensagem SOAP enviada na requisição. Para chamadas RFC, um template é gerado através do botão <strong>Search Template</strong> quando os detalhes de autorização e o nome da RFC são válidos.</td><td>N/A</td><td>String</td></tr><tr><td><strong>Fail On Error</strong></td><td>Se ativado, interrompe a execução do pipeline ao ocorrer um erro. Se desativado, a execução continua, mas a propriedade <code>"success"</code> será definida como <code>false</code>.</td><td>False</td><td>Booleano</td></tr><tr><td><strong>Raw Mode</strong></td><td>Quando ativado, o resultado será retornado no formato SAP XML original, encapsulado em JSON.</td><td>False</td><td>Booleano</td></tr></tbody></table>

{% endtab %}

{% tab title="IDoc" %}

<table data-full-width="true"><thead><tr><th>Parâmetro</th><th>Descrição</th><th>Valor padrão</th><th>Tipo de dado</th></tr></thead><tbody><tr><td><strong>IDoc Type</strong> <code>(DB)</code></td><td>Tipo básico de IDoc a ser enviado.</td><td>N/A</td><td>String</td></tr><tr><td><strong>IDoc Type Extension</strong> <code>(DB)</code></td><td>Extensão do tipo de IDoc, se aplicável.</td><td>N/A</td><td>String</td></tr><tr><td><strong>System Release</strong> <code>(DB)</code></td><td>SAP Basis Release associado ao IDoc.</td><td>N/A</td><td>String</td></tr><tr><td><strong>Application Release</strong> <code>(DB)</code></td><td>Application Release associado ao IDoc.</td><td>N/A</td><td>String</td></tr><tr><td><strong>Send as File</strong></td><td>Quando ativado, um arquivo pode ser definido e enviado.</td><td>False</td><td>Booleano</td></tr><tr><td><strong>File Name</strong> <code>(DB)</code></td><td>Arquivo que contém o corpo a ser enviado ao servidor SAP. Utilize esta opção quando o payload for muito grande para o campo <strong>Template</strong>. Recomenda-se usar outros conectores como <strong>Template Transformer</strong> e <strong>File Writer</strong> para gerar o conteúdo do arquivo.</td><td>N/A</td><td>String</td></tr><tr><td><strong>Template (XML)</strong> <code>(DB)</code></td><td>Define o template Apache FreeMarker para a mensagem SOAP enviada na requisição.</td><td>N/A</td><td>String</td></tr><tr><td><strong>Fail On Error</strong></td><td>Se ativado, interrompe a execução do pipeline ao ocorrer um erro. Se desativado, a execução continua, mas a propriedade <code>"success"</code> será definida como <code>false</code>.</td><td>False</td><td>Booleano</td></tr></tbody></table>

{% hint style="info" %}
Os IDocs são processados de forma assíncrona no SAP. Quando um IDoc é enviado, não há confirmação imediata de sucesso ou falha. Caso ocorra falha, o usuário deve reenviar o IDoc.
{% endhint %}
{% endtab %}
{% endtabs %}

### **Aba Documentation**

<table data-full-width="true"><thead><tr><th>Parâmetro</th><th>Descrição</th><th>Valor padrão</th><th>Tipo de dado</th></tr></thead><tbody><tr><td><strong>Documentation</strong></td><td>Campo opcional para descrever a configuração do conector e possíveis regras de negócio envolvidas.</td><td>N/A</td><td>Texto</td></tr></tbody></table>

## **Conector SAP – Guia de uso**

### **Limites de tamanho de arquivo**

Ao usar o conector SAP, observe o tamanho máximo de arquivo por tipo de implantação. Esses limites se aplicam quando o conector é usado isoladamente. Se outros conectores estiverem presentes no pipeline, os tamanhos podem variar:

* **Pequeno:** 10 MB
* **Médio:** 28 MB
* **Grande:** 67 MB

### **Configuração de variáveis globais**

Para simplificar a configuração dinâmica e promover a reutilização, recomenda-se definir [variáveis globais](/documentation/developer-guide/pt-br/development-cycle/build-overview/globals.md) no seu pipeline.

#### **Variáveis globais obrigatórias**

| Variável      | Descrição    |
| ------------- | ------------ |
| `environment` | Ambiente SAP |

#### **Variáveis globais opcionais para templates**

| Variável    | Descrição                              |
| ----------- | -------------------------------------- |
| `[rfc]`     | Nome da função RFC                     |
| `[table]`   | Tabela relacionada à chamada RFC       |
| `[columns]` | Colunas da tabela usadas na requisição |

Para mais detalhes, consulte o [guia de conectividade SAP](/documentation/troubleshooting/pt-br/connectivity-guides/digibee-sap.md).

### **Integração RFC**

#### **Exemplo de entrada JSON**

Para conexões RFC, inclua a [cápsula](/documentation/developer-guide/pt-br/development-cycle/build-overview/capsulas/public-capsules/sap.md) "**SAP JSON to RFC**" antes do conector SAP. Isso garante que a entrada esteja formatada corretamente para o sistema SAP.

Exemplo de uma chamada RFC em um conector [**JSON Generator**](/documentation/connectors-and-triggers/pt-br/connectors/tools/json-generator.md):

```json
{
  "sid": "{{sap-test-sid}}", 
  "rfc": "BAPI_BUPA_ADDRESS_GETDETAIL", 
  "importParameters": { 
    "attributes": { 
      "BUSINESSPARTNER": {{ message.BUSINESSPARTNER }}, 
      "VALID_DATE": {{FORMATDATE(NOW(), "timestamp", "yyyy-MM-dd", null , "GMT-3") }} 
    } 
  }
}
```

#### **Melhores práticas**

* Sempre especifique o `sid` (Nome do Ambiente/Sistema ou ID do Sistema).
* A função `rfc` pode ser definida no payload JSON ou diretamente no conector.
* Defina `importParameters` apenas com os campos necessários para a chamada da função.

### **Configuração do Template (XML)**

O campo **Template (XML)** permite a geração automática para RFCs e também suporta customização manual tanto para estruturas RFC quanto IDoc.

#### **Geração automática de template RFC**

Quando uma função RFC é selecionada, o botão **Search Template** fica disponível. Se os detalhes de autorização estiverem corretos e o nome da RFC for válido, ao clicá-lo o campo **Template (XML)** é preenchido automaticamente com um template pronto para você apenas substituir os valores.

**Exemplo de template gerado:**

```xml
<BBP_RFC_READ_TABLE:Request xmlns:BBP_RFC_READ_TABLE="http://sap.fusesource.org/rfc/EC1/BBP_RFC_READ_TABLE">
    <DELIMITER>${body.DELIMITER}</DELIMITER>
    <NO_DATA>${body.NO_DATA}</NO_DATA>
    <QUERY_TABLE>${body.QUERY_TABLE}</QUERY_TABLE>
    <ROWCOUNT>${body.ROWCOUNT?c}</ROWCOUNT>
    <ROWSKIPS>${body.ROWSKIPS?c}</ROWSKIPS>
    <FIELDS>
        <#if body.FIELDS??>
            <#list body.FIELDS as item>
            <row>
                <FIELDNAME>${item.FIELDNAME}</FIELDNAME>
                <OFFSET>${item.OFFSET}</OFFSET>
                <LENGTH>${item.LENGTH}</LENGTH>
                <TYPE>${item.TYPE}</TYPE>
                <FIELDTEXT>${item.FIELDTEXT}</FIELDTEXT>
            </row>
            </#list>
        </#if>
    </FIELDS>
    <OPTIONS>
        <#if body.OPTIONS??>
            <#list body.OPTIONS as item>
            <row>
                <TEXT>${item.TEXT}</TEXT>
            </row>
            </#list>
        </#if>
    </OPTIONS>
</BBP_RFC_READ_TABLE:Request>
```

#### **Exemplos de templates manuais**

**Exemplo de template IDoc**

```xml
<?xml version="1.0" encoding="ASCII"?> 
<idoc:Document 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:FLCUSTOMER_CREATEFROMDATA01---="http://sap.fusesource.org/idoc/{_YOUR_ENVIRONMENT_}/FLCUSTOMER_CREATEFROMDATA01///" 
    xmlns:idoc="http://sap.fusesource.org/idoc" 
    creationDate="2015-01-28T12:39:13.980-0500" 
    creationTime="2015-01-28T12:39:13.980-0500" 
    iDocType="FLCUSTOMER_CREATEFROMDATA01" 
    iDocTypeExtension="" 
    messageType="FLCUSTOMER_CREATEFROMDATA" 
    recipientPartnerNumber="QUICKCLNT" 
    recipientPartnerType="LS" 
    senderPartnerNumber="QUICKSTART" 
    senderPartnerType="LS"> 
  <rootSegment xsi:type="FLCUSTOMER_CREATEFROMDATA01---:ROOT" document="/">
    <segmentChildren parent="//@rootSegment"> 
      <E1SCU_CRE parent="//@rootSegment" document="/"> 
        <segmentChildren parent="//@rootSegment/@segmentChildren/@E1SCU_CRE.0"> 
          <E1BPSCUNEW parent="//@rootSegment/@segmentChildren/@E1SCU_CRE.0" 
              document="/" 
              CUSTNAME="Fred Flintstone" FORM="Mr." 
              STREET="123 Rubble Lane" 
              POSTCODE="01234" 
              CITY="Bedrock" 
              COUNTR="US" 
              PHONE="800-555-1212" 
              EMAIL="fred@bedrock.com"
              CUSTTYPE="P" 
              DISCOUNT="005" 
              LANGU="E"/> 
        </segmentChildren> 
      </E1SCU_CRE> 
    </segmentChildren> 
  </rootSegment> 
</idoc:Document>  
```

{% hint style="warning" %}
Substitua `{_YOUR_ENVIRONMENT_}` pelo seu SID SAP.
{% endhint %}

**RFC – Consulta Simples**

Campos elementares / Parâmetros de entrada:

```xml
<?xml version="1.0" encoding="ASCII"?> 
<[rfc]:Request xmlns:[rfc]="http://sap.fusesource.org/rfc/{{global.environment}}/[rfc]" 
  [columns]="20180801" 
  [columns]="20180806" 
  [columns]="050" />
```

Exemplo:

```xml
<?xml version="1.0" encoding="ASCII"?> 
<ABCD_RFC_ORDEM_FATURA:Request 
    xmlns:ABCD_RFC_ORDEM_FATURA="http://sap.fusesource.org/rfc/QAS/ABCD_RFC_ORDEM_FATURA" 
    P_ERDAT_INI="2018-07-01T00:00:00.000" 
    P_ERDAT_FIM="2018-08-01T00:00:00.000" 
    CLIENTE="" 
    VKORG="0010" 
    AUART="" /> 
```

**RFC – Consulta em Tabela**

Campos da tabela:

```xml
<?xml version="1.0" encoding="ASCII"?> 
<[rfc]:Request ">xmlns:[rfc]="http://sap.fusesource.org/rfc/{{global.environment}}/[rfc]"> 
 <[table]> 
  <row> 
   <[columns]>${VBELN}</[columns]> 
   <[columns]>${ABDC}</[columns]> 
  </row> 
 </[table]> 
</[rfc]:Request> 
```

Exemplo:

```xml
<?xml version="1.0" encoding="ASCII"?> 
<ABCD_RFC_MATERIAIS:Request ">xmlns:ABCD_RFC_MATERIAIS:Request="http://sap.fusesource.org/rfc/{{global.environment}}/ABCD_RFC_MATERIAIS:Request"> 
 <T_TIPO> 
  <row> 
   <MTART>${type}</MTART> 
  </row> 
 </T_TIPO> 
</ABCD_RFC_MATERIAIS:Request>
```

**Entrada**

```json
{  
    "body":{     
        "type": "S"   
    } 
}
```

* `${type}`**:** Variável que deve ser fornecida dentro da tag `body`.

#### **Variáveis no template e escape**

Ao usar variáveis como `sapRequestTemplate`, lembre-se:

* Caracteres especiais (como `-`, `.`, `:`) em nomes de variáveis devem ser **escapados** com barra invertida (`\`).
* Use funções Apache FreeMarker para formatação e conversão:

```
<#assign x=42>
${x}
${x?string} <#-- o mesmo que ${x} -->
${x?string.number}
${x?string.currency}
${x?string.percent}
${x?string.computer}
```

**Saídas:**

```
42
42
42
$42.00
4,200%
42
```

### **Fluxo de mensagens**

#### **Entrada**

O conector aceita entrada em qualquer formato, mas procura por um caminho específico baseado na configuração `modelPath`.

#### **Saída**

* A saída reflete a entrada, porém substitui a propriedade do modelo definida pela string XML gerada (a partir do Template).
* Em caso de erro, a propriedade `property_error` é adicionada no mesmo nível do modelo original.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.digibee.com/documentation/connectors-and-triggers/pt-br/connectors/enterprise-applications/sap.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
