---
sourceDocument: Xanadu IT Service Management
sourceDocumentLink: https://servicenow-prod.fluidtopics.net/r/de-DE/xanadu/it-service-management

 Release :

    - xanadu

ft:locale :

    - de-DE

ft:publication_title :

    - Xanadu IT Service Management

ft:clusterId :

    - itsm

bundleId :

    - itsm

workflow :

    - Technology


---

# Fügen Sie Change-Anforderungen mithilfe der Anhang-API Anhänge hinzu

# Fügen Sie Change-Anforderungen mithilfe der Anhang-API Anhänge hinzu {#ariaid-title1}

* Freigeben Version: Xanadu
* 
* Aktualisiert 1. August 2024
* 
* ![](https://www.servicenow.com/docs/portal-asset/ico-clock) 2 Minuten Lesedauer

Fügen Sie mithilfe der Anhang-API Testberichts-XMLs als Anhänge zu DevOps-Change-Anforderungen hinzu.
Weitere Informationen zur API finden Sie unter [Attachment - POST /now/attachment/file](https://www.servicenow.com/docs/access?context=c_AttachmentAPI&version=xanadu&pubname=xanadu-api-reference&section=attachment-POST-file&ft:locale=en-US).

Die API-URL des Anhangs lautet:  
`https://`\<your_instance\> .service-now.com/api/now/attachment/file?table_name=change_request\&table_sys_id=$(getServerChange.sys_id)\&file_name=\<attached_filename.xml\> , wobei

* table_name = „change_request"
* table_sys_id =\<chg record sys_id\>
* file_name = Beliebiger Name für den Anhang
{#attachment-api-chg__ul_eqs_jpn_lbc}

## Azure DevOps {#attachment-api-chg__section_q33_xyk_kbc}

Voraussetzungen  
* Erstellen Sie einen aktiven Benutzer mit der Option Nur Webservice-Zugriff. Informationen zum Erstellen eines -Benutzers finden Sie unter [Create a user](https://www.servicenow.com/docs/access?context=t_CreateAUser&version=xanadu&pubname=xanadu-customer-service-management&ft:locale=en-US).
* Weisen Sie dem Benutzer die Rolle sn_change_write zu. Informationen zum Zuweisen der Rolle finden Sie unter [Assign a role to a user](https://www.servicenow.com/docs/access?context=t_AssignARoleToAUser&version=xanadu&pubname=xanadu-platform-administration&ft:locale=en-US).

* Die Systemeigenschaft sn_devops.enable_ado_generic_connection muss aktiviert sein.
* Bei der Konfiguration Ihres Azure DevOps -Projekts zum Hochladen in CHG. In der Tabelle muss die generische Verbindung über einen Anwender mit der Rolle sn_change_write verfügen.
{#attachment-api-chg__ul_hnf_srn_lbc}

Verwenden Sie für Azure DevOps -Pipelines das hier angegebene Format, um Change-Anforderungen Anhänge hinzuzufügen.  
Beispielpipeline:

    stage: PostDeploy
        jobs:
          - job: 'pd1'
            pool: server
            steps:
               - task: ServiceNow-DevOps-Server-Get-Change@1
                 inputs:
                   connectedServiceName: 'v01-Software Quality Scans-ServiceNow DevOps Service Connection'
                   projectName: '$(system.teamProject)'
                   pipelineName: '$(build.definitionName)'
                   stageName: 'Deploy'
                   jobName: 'd1'
                   buildNumber: '$(build.buildId)'
                   branchName: '$(Build.SourceBranchName)'
                 name: getServerChange  
               - task: InvokeRESTAPI@1
                 inputs:
                   connectionType: 'connectedServiceName'
                   serviceConnection: 'v01 - new'
                   method: 'POST'
                   body: '<root><name>john2</name><age>34</age></root>'
                   urlSuffix: 'api/now/attachment/file?table_name=change_request&table_sys_id=$(getServerChange.changeSysId)&file_name=test3.xml'
                   waitForCompletion: 'false'

## GitHub {#attachment-api-chg__section_agm_wyk_kbc}

Verwenden Sie für GitHub -Pipelines das hier angegebene Format, um Change-Anforderungen Anhänge hinzuzufügen.

Beispielpipeline:

Anhang im Formular „Change-Anforderung" in Now-Instanz:

## Jenkins {#attachment-api-chg__section_pfd_5yk_kbc}

Verwenden Sie für Jenkins -Pipelines das hier angegebene Format, um Change-Anforderungen Anhänge hinzuzufügen.  
Beispielpipeline:

    pipeline {
        agent any
        
        stages {
            stage('POST API Call') {
                steps {
                    script {
                        def apiUrl = 'https://<your_instance>.service-now.com/api/sn_devops/v1/devops/tool/test?toolId=<devops_ToolId>&testType=Smoke'
                        def requestBody = [
                            name: "Smoke tests",
                            duration: 0.0,
                            passedTests: 1,
                            failedTests: 1,
                            skippedTests: 1,
                            blockedTests: 1,
                            totalTests: 4,
                            startTime: "2023-12-14T23:31:31z",
    	                    finishTime: "2023-12-15T23:31:31z",
                            buildNumber: env.BUILD_NUMBER,
                            stageName: "POST API Call",
                            pipelineName: "TestPipelineKL"
                        ]
                        
                        def auth = "<password>" // devops.integration.user:<password> in base64 encoded.
                        def authHeader = "Basic " + auth
                        
                        def response = httpRequest(
                            contentType: 'APPLICATION_JSON',
                            httpMode: 'POST',
                            requestBody: groovy.json.JsonOutput.toJson(requestBody),
                            url: apiUrl,
                            customHeaders: [[name: 'Authorization', value: authHeader]]
                        )
                        
                        if (response.status == 200 || response.status == 201) {
                            echo "API call successful!"
                            echo "Response: ${response.content}"
                        } else {
                            error "API call failed with status ${response.status}"
                        }
                    }
                }
            }
            stage('UAT deploy') {
                        steps {
                            script {
                                def chg_output = snDevOpsChange()
                                def changeRequestNumber = snDevOpsGetChangeNumber(changeDetails: """{"build_number":"${env.BUILD_NUMBER}", "pipeline_name": "TestPipelineKL", "stage_name": "UAT deploy"}""")
                                echo "${changeRequestNumber}"
                                echo "Output of snDevOpsChange(): ${chg_output}"
                        }
                    }
            }
            stage('Example') {
                steps {
                    script {
                        def API_URL = 'https://<your_instance>.service-now.com/api/sn_devops/devops/orchestration/changeInfo?pipelineName=TestPipelineKL&toolId=<devops_ToolId>&buildNumber=' + env.BUILD_NUMBER + '&stageName=UAT%20deploy'
                        def AUTH = 'Basic <password>'
                        // Call the API
                        def response = sh(script: "curl -X GET -H 'Authorization: ${AUTH}' -H 'Content-Type: application/json' '${API_URL}'", returnStdout: true).trim()
                        echo "Response: ${response}"
                        
                        // Store the JSON response into a variable
                        def slurper = new groovy.json.JsonSlurper()
                        def jsonResponse = slurper.parseText(response)
                        echo "Stored JSON Response: ${jsonResponse}"
                        
                        // Store the specific field value from JSON response into a variable
                        def changeId = jsonResponse.result.sys_id
                        echo "Change ID: ${changeId}"
                        
                        // Call the second API to post attachment
                        def xmlData = '<root><name>john2</name><age>34</age></root>'
                        def AUTH2 = 'Basic <password>='
                        def postResponse = sh(script: "curl -X POST -H 'Authorization: ${AUTH2}' -H 'Content-Type: application/xml' -d '${xmlData}' 'https://<your_instance>.service-now.com/api/now/attachment/file?table_name=change_request&table_sys_id=${changeId}&file_name=test10111.xml'", returnStdout: true).trim()
                    }
                }
            }
        }
    }

## Einschränkungen der Anhang-API {#attachment-api-chg__section_k1v_shp_kbc}

* Die Textgröße der XML-Anhangdatei muss für das Orchestration-Tool akzeptabel sein.
* Für Azure DevOpswird die Rolle sn_change_write zur Authentifizierung der Anhang-API benötigt, um die Datei in den Change-Datensatz hochzuladen.
{#attachment-api-chg__ul_zlf_thp_kbc}

