> ## Documentation Index
> Fetch the complete documentation index at: https://docs.bijection.com/llms.txt
> Use this file to discover all available pages before exploring further.

# SAP Landscape Transformation Replication Server (SLT)

> Resources, examples, configuration and evidence for SAP Landscape Transformation Replication Server (SLT).

Use the `@bijection/connectors/sap-slt` entrypoint to declare SAP Landscape Transformation Replication Server (SLT) resources.

## Availability

This page describes the pinned source package. Published availability is unestablished for this artifact. [Source build and package availability](https://docs.bijection.com/client/sdk-distribution.md).

## Resources and modes

| Resource | Mode | Description |
| - | - | - |
| Replicated table | `odp` | ODP delta queue over OData: initial load, trigger deltas and deletions |

Declare a resource in application code, then bind deployment-specific settings and credentials. See [typed resources](https://docs.bijection.com/integrations/resources.md), [connections](https://docs.bijection.com/integrations/connections.md) and [source inspection](https://docs.bijection.com/integrations/cli.md).

## Replicated table

### odp: ODP delta queue over OData: initial load, trigger deltas and deletions

The following example matches configuration `standard`.

```ts theme={"theme":{"light":"github-light-default","dark":"github-dark-default"}}
import { sapSlt } from "@bijection/connectors/sap-slt";
import { v } from "bijection/values";

export const salesHeaders = sapSlt.table.odp({
  schema: {
    VBELN: v.string(),
    ERDAT: v.union(v.string(), v.null()),
    AUART: v.union(v.string(), v.null()),
    NETWR: v.union(v.string(), v.null()),
    WAERK: v.union(v.string(), v.null()),
  },
  key: ["VBELN"],
});
```

> **Inferred record types**
>
> ```ts theme={"theme":{"light":"github-light-default","dark":"github-dark-default"}}
> {
>   "VBELN": string;
>   "ERDAT": string | null;
>   "AUART": string | null;
>   "NETWR": string | null;
>   "WAERK": string | null;
> }
> ```

#### Configuration: standard

Case: `sap-slt/table/odp/standard`.

Connection and resource configuration are declared by this exact case.

Credential kind: `odata`. Keep credential material in the private credential inventory.

| Setting | Type | Required | Owner |
| - | - | - | - |
| `annotationDocuments` | array of string | No | Shared connection |
| `serviceUrl` | string | Yes | Shared connection |
| `entitySet` | string | Yes | Resource binding |
| `version` | "v2" or "v4" | Yes | Shared connection |
| `sapClient` | string or null | No | Shared connection |
| `pageSize` | number or null | No | Shared connection |

> **Complete configuration contract**
>
> ```json theme={"theme":{"light":"github-light-default","dark":"github-dark-default"}}
> {
>   "setup": [],
>   "resource": {
>     "access": {},
>     "defaults": {},
>     "connector": "odata",
>     "output": {
>       "kind": "single",
>       "collection": "records"
>     },
>     "credential_kind": "odata",
>     "connection_fields": [
>       "serviceUrl",
>       "version",
>       "sapClient",
>       "pageSize",
>       "annotationDocuments"
>     ]
>   },
>   "connection_setup": {
>     "type": "object",
>     "value": {
>       "annotationDocuments": {
>         "fieldType": {
>           "type": "array",
>           "value": {
>             "type": "string"
>           }
>         },
>         "optional": true
>       },
>       "serviceUrl": {
>         "fieldType": {
>           "type": "string"
>         },
>         "optional": false
>       },
>       "entitySet": {
>         "fieldType": {
>           "type": "string"
>         },
>         "optional": false
>       },
>       "version": {
>         "fieldType": {
>           "type": "union",
>           "value": [
>             {
>               "type": "literal",
>               "value": "v2"
>             },
>             {
>               "type": "literal",
>               "value": "v4"
>             }
>           ]
>         },
>         "optional": false
>       },
>       "sapClient": {
>         "fieldType": {
>           "type": "union",
>           "value": [
>             {
>               "type": "string"
>             },
>             {
>               "type": "null"
>             }
>           ]
>         },
>         "optional": true
>       },
>       "pageSize": {
>         "fieldType": {
>           "type": "union",
>           "value": [
>             {
>               "type": "number"
>             },
>             {
>               "type": "null"
>             }
>           ]
>         },
>         "optional": true
>       }
>     }
>   },
>   "execution": null
> }
> ```

Native admission analysis is available for this exact declaration.

**Collection: records**

| Contract | Meaning |
| - | - |
| Initial | Current membership |
| Changes | Current record read after a change indication |
| Deletions | Explicit deletion evidence |
| Resume | Opaque cursor |
| Gap | Explicit repair required after a gap |
| Retention | Unspecified |

> **Complete native profile**
>
> ```json theme={"theme":{"light":"github-light-default","dark":"github-dark-default"}}
> {
>   "movement": {
>     "exchanges": {},
>     "nativeInputLimitBytes": "0",
>     "steps": [
>       {
>         "id": "acquire.1",
>         "inputs": [],
>         "action": {
>           "operation": "acquire",
>           "subject": "native input",
>           "limitBytes": "0"
>         }
>       },
>       {
>         "id": "retain.1",
>         "inputs": [
>           "acquire.1"
>         ],
>         "action": {
>           "operation": "retain",
>           "subject": "acquisition evidence",
>           "reason": "recovery",
>           "release": "acquisition_custody"
>         }
>       },
>       {
>         "id": "interpret.1",
>         "inputs": [
>           "retain.1"
>         ],
>         "action": {
>           "operation": "interpret",
>           "subject": "acquired input",
>           "produces": "records"
>         }
>       },
>       {
>         "id": "materialize.1",
>         "inputs": [
>           "interpret.1"
>         ],
>         "action": {
>           "operation": "materialize",
>           "subject": "source rows",
>           "reason": "serving",
>           "release": "replacement"
>         }
>       },
>       {
>         "id": "publish.1",
>         "inputs": [
>           "materialize.1"
>         ],
>         "action": {
>           "operation": "publish",
>           "subject": "source rows",
>           "visibility": "with_acquisition"
>         }
>       }
>     ]
>   },
>   "initial": "current_membership",
>   "changes": "current_state_after_change",
>   "deletions": "explicit_events",
>   "resume": "opaque_cursor",
>   "retentionMs": null,
>   "gap": "explicit_repair",
>   "limits": {
>     "entities_per_request": "100",
>     "exchange_evidence_bytes": "524288",
>     "publication_page_records": "128",
>     "record_fields": "32"
>   },
>   "restrictions": [],
>   "commands": {}
> }
> ```

> **Commands, occurrences and artifacts**
>
> ```json theme={"theme":{"light":"github-light-default","dark":"github-dark-default"}}
> {
>   "records": {
>     "records": {
>       "protocol": "record_observation",
>       "coverage": "incremental_snapshot",
>       "consistency": "observations",
>       "atomicity": "record",
>       "history": "observations",
>       "recordRefresh": false,
>       "reconciliation": false,
>       "notifications": false,
>       "snapshotMaxRows": null,
>       "profile": {
>         "movement": {
>           "exchanges": {},
>           "nativeInputLimitBytes": "0",
>           "steps": [
>             {
>               "id": "acquire.1",
>               "inputs": [],
>               "action": {
>                 "operation": "acquire",
>                 "subject": "native input",
>                 "limitBytes": "0"
>               }
>             },
>             {
>               "id": "retain.1",
>               "inputs": [
>                 "acquire.1"
>               ],
>               "action": {
>                 "operation": "retain",
>                 "subject": "acquisition evidence",
>                 "reason": "recovery",
>                 "release": "acquisition_custody"
>               }
>             },
>             {
>               "id": "interpret.1",
>               "inputs": [
>                 "retain.1"
>               ],
>               "action": {
>                 "operation": "interpret",
>                 "subject": "acquired input",
>                 "produces": "records"
>               }
>             },
>             {
>               "id": "materialize.1",
>               "inputs": [
>                 "interpret.1"
>               ],
>               "action": {
>                 "operation": "materialize",
>                 "subject": "source rows",
>                 "reason": "serving",
>                 "release": "replacement"
>               }
>             },
>             {
>               "id": "publish.1",
>               "inputs": [
>                 "materialize.1"
>               ],
>               "action": {
>                 "operation": "publish",
>                 "subject": "source rows",
>                 "visibility": "with_acquisition"
>               }
>             }
>           ]
>         },
>         "initial": "current_membership",
>         "changes": "current_state_after_change",
>         "deletions": "explicit_events",
>         "resume": "opaque_cursor",
>         "retentionMs": null,
>         "gap": "explicit_repair",
>         "limits": {
>           "entities_per_request": "100",
>           "exchange_evidence_bytes": "524288",
>           "publication_page_records": "128",
>           "record_fields": "32"
>         },
>         "restrictions": [],
>         "commands": {}
>       }
>     }
>   },
>   "occurrences": null,
>   "artifacts": {
>     "raw_archive": false,
>     "native_file_transfer_limit_bytes": null,
>     "external_versions": false,
>     "files": {}
>   },
>   "commands": {}
> }
> ```

**Recorded checks**

| Requirement | Scope | Evidence | Result |
| - | - | - | - |
| page-publication-recovery | \{"kind":"collection","name":"records"} | The native OData reader's ODP images, delta refusal and rebaseline have controlled histories; none runs an SLT response. | Execution result unavailable |

Hosted qualification: **unestablished for this catalog configuration**. Installed connections report their own identity, authority and current status.

## Provider guidance

`sapSlt.table.odp({ schema, key, fields?, filter? })` reads one table that an SLT
configuration replicates into the Operational Data Provisioning (ODP) framework.
It is the native `odata` transport over the OData v2 service SAP Gateway
generates for the configuration's ODP context, so an SLT table gets an initial
load, then trigger-based deltas with deletions, and the ODP subscription is the
retained position.

## Setup on the SAP side

1. In `LTRC`, create a configuration with the SLT system as target and the
   scenario **Operational Data Provisioning (ODP)**, and a six-character queue
   alias. Activate the BAdI implementation `ODQ_ENH_SLT_REPLICATION` (Expert
   Functions > ODP/ODQ Specific Functions). The ODP context is
   `SLT~<queue alias>`; each table is an ODP named after the table.
2. In `SEGW` on the system that hosts the queue, create a project, then
   Data Model > Redefine > ODP Extraction, choose the context `SLT~<alias>` and
   the tables, generate, and register the service in `/IWFND/MAINT_SERVICE`.
   Each table is an entity set such as `FactsOfVBAK`, with the properties
   `ODQ_CHANGEMODE` and `ODQ_ENTITYCNTR`, and the function import
   `TerminateDeltasForFactsOfVBAK`.
3. Create a technical user for Bijection alone. SAP keeps one delta
   subscription per service and per user: another consumer, or a manual
   request without a delta token, under the same user re-initialises the
   subscription this source follows.

## Binding

Bind an `odata` connection: `serviceUrl` (the generated service root, such as
`https://slt.example/sap/opu/odata/sap/ZSLT_SALES_SRV`), `version: "v2"`,
`sapClient` where the system needs it, and the `odata` credential (basic, OAuth
client credentials or an X.509 client certificate). The resource's `entitySet`
is the generated `FactsOf<TABLE>` name. `key` must equal the entity type's key
in `$metadata`; `filter` narrows the published rows by equality on filterable
properties, and a row that leaves it is withdrawn.

## What is read

The first read asks for the entity set with `Prefer: odata.track-changes`,
which is the ODP delta initialization: SLT's initial load in pages, ending in a
delta link. Each later read follows that link. `ODQ_CHANGEMODE` `D` is a
deletion and becomes an explicit absence; `C`/`U` after images publish; a `U`
before image (counter -1) is skipped; any other mode is refused. Packed numbers
(`Edm.Decimal`) stay exact text.

## Recovery

* A delta link the service answers 410, or 400/404 on this ODP service (an
  ended or re-initialised subscription; SAP documents no status for it), is a
  typed gap: acquisition stops until an operator rebaselines.
* A rebaseline calls `TerminateDeltasFor…`, reads a new delta initialization,
  and withdraws the previously published keys that initialization did not list:
  ODP serves it from one queue request, the table's full image, and ODP
  services are not read by key.
* `ODQMON` reorganisation removes queue requests after their retention.
  Whether a subscription paused beyond it still answers its delta link is not
  established; if it is refused, the source records the same gap.

No SAP system has been reached: the transport's ODP behaviour is proven against
controlled histories and a loopback stand-in modelled on SAP's documented ODP
OData responses only.

## Provider references

Provider references and prerequisites are maintained in the connector guidance above. No separate provider-documentation review date is recorded.

## Source and evidence

[Canonical connector source](https://github.com/bijectionhq/component-support/blob/b632604330ce9cbcfe17a5a680ef4fbe80f6f672/packages/connectors/src/connectors/sap-slt/README.md), [native analysis](https://github.com/bijectionhq/component-support/blob/b632604330ce9cbcfe17a5a680ef4fbe80f6f672/packages/connectors/contract-analysis.json) and [check receipts](https://github.com/bijectionhq/component-support/blob/b632604330ce9cbcfe17a5a680ef4fbe80f6f672/packages/connectors/evidence.json).

Connector artifact: `905888ea276a2a28e36981a79e8142b2547ea451c3e63162cb6915ad4a7d1305`.

The resource declaration examples above are compiled and compared with exact catalog declarations. Recorded checks apply only to their source, declaration and runtime identities. Configure a connection and inspect its status to establish deployment-specific readiness.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.