# ${docGenStepName}

## ${docGenDescription}

## Prerequisites

* You have enabled RFC on the ABAP system.
* You have a user account on the ABAP system where you have assigned the required roles for uploading via RFC.
* You have created a transport request on the ABAP system, which is the target container of the upload.

## RFC Client

The RFC Client connects to your ABAP system using the [SAP NetWeaver RFC SDK](https://support.sap.com/en/product/connectors/nwrfcsdk.html).

For more information, see [classical SAP connectivity technology RFC](https://help.sap.com/viewer/753088fc00704d0a80e7fbd6803c8adb/1709%20000/en-US/4888068ad9134076e10000000a42189d.html).

To install an RFC library based Connector Client, proceed as follows:

1. Create a Docker image as described in the Git repository [devops-docker-images/node-rfc](https://github.com/rodibrin/devops-docker-images/tree/master/node-rfc).
1. Push your image to your private [Docker Hub registry](https://hub.docker.com/).
1. Add the following to your config.yml file:

```yaml
steps:
  transportRequestUploadRFC:
    dockerImage: 'my/rfc-client'
```

## Specifying the Transport Request

The target of the upload is a transport request, identified by an identifier (ID).

The step `transportRequestUploadRFC` allows you to set the ID by parameter.

Alternatively, you can pass the ID through the `commonPipelineEnvironment`.
For example, by performing a step that generates the ID or obtains it differently.
See [transportRequestReqIDFromGit](transportRequestReqIDFromGit.md).

### Adding a Parameter

A parameterized pipeline allows you to specify the ID with the launch of the build instead of entering it statically into the pipeline.

```groovy
transportRequestUploadRFC(
    script: this,
    transportRequestId: ${TRANSPORT_REQUEST_ID},
    ...
)
```

The Jenkins pipeline `input` step allows you to specify the ID at runtime of the pipeline.

```groovy
def ids = input( message: "Upload?",
    parameters: [
        string(name: 'TRANSPORT_REQUEST_ID',description: 'Transport Request ID')
    ]
)

transportRequestUploadRFC(
    script:this,
    transportRequestId: ids['TRANSPORT_REQUEST_ID'],
    ...
)
```

## Common Pipeline Environment

Use the step [transportRequestReqIDFromGit](transportRequestReqIDFromGit.md) to obtain the  `transportRequestId` value from your Git commit messages.

This step extracts the ID from the commit messages of your project repository and enters it into the `commonPipelineEnvironment`, in turn, the upload step `transportRequestUploadRFC` picks it up from there.

```groovy
transportRequestReqIDFromGit( script: this )
transportRequestUploadRFC( script: this, ... )
```

## ${docGenParameters}

## ${docGenConfiguration}

## ${docJenkinsPluginDependencies}

## Example

```yaml
# config.yaml
steps:
  transportRequestUploadRFC:
    changeManagement:
      credentialsId: 'RFC_CREDENTIALS_ID'
      endpoint: 'https://example.org/cm/rfc/endpoint'
      instance: '00'
      client: '001'
    abapPackage: 'PACK'
    applicationDescription: 'Lorem ipsum'
    applicationName: 'APP'
    dockerImage: 'my/rfc-client'
```

```groovy
// pipeline script
transportRequestReqIDFromGit( script: this )
transportRequestUploadRFC( script: this, applicationUrl: 'https://example.org/appl/url/archive.zip')
```
