lib/ImportBatches.ps1

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157

#Import Batches
Function Get-TMImportBatch {
    param(
        [Parameter(Mandatory = $false)][String]$TMSession = "Default",
        [Parameter(Mandatory = $false)][int]$BatchId,
        [Parameter(Mandatory = $false)][String]$Server = $global:TMSessions[$TMSession].TMServer,
        [Parameter(Mandatory = $false)]$AllowInsecureSSL = $global:TMSessions[$TMSession].AllowInsecureSSL
    )

    ## Get Session Configuration
    $TMSessionConfig = $global:TMSessions[$TMSession]
    if (-not $TMSessionConfig) {
        Write-Host 'TMSession: [' -NoNewline
        Write-Host $TMSession -ForegroundColor Cyan
        Write-Host '] was not Found. Please use the New-TMSession command.'
        Throw "TM Session Not Found. Use New-TMSession command before using features."
    }

    #Honor SSL Settings
    if ($TMSessionConfig.AllowInsecureSSL) {
        $TMCertSettings = @{SkipCertificateCheck = $true }
    }
    else { 
        $TMCertSettings = @{SkipCertificateCheck = $false }
    }

    ## Construct the server URI
    $instance = $Server.Replace('/tdstm', '')
    $instance = $instance.Replace('https://', '')
    $instance = $instance.Replace('http://', '')
    
    ## Handle the URL Creation based on the TM Version
    if ($global:TMSessions[$TMSession].TMVersion.Major -eq 4) {
        $uri = "https://$Instance/tdstm/module/importbatch/$($BatchId ? $BatchId : "list")"
    }
    elseif ($global:TMSessions[$TMSession].TMVersion.Major -eq 5) {
        $uri = "https://$Instance/tdstm/ws/import/batches"
    }
    else {
        $uri = "https://$Instance/tdstm/ws/import/batches"
    }

    ## Attempt the Request
    try {
        $response = Invoke-WebRequest -Method Get -Uri $uri -WebSession $TMSessionConfig.TMWebSession @TMCertSettings
        if ($response.StatusCode -eq 200) {
            $Result = ($response.Content | ConvertFrom-Json).data
        }
        return @($Result)
    }
    catch {
        throw $_
    }
}

#Import Batch Records
Function Get-TMImportBatchRecord {
    param(
        [Parameter(Mandatory = $false)][String]$TMSession = "Default",
        [Parameter(Mandatory = $true)][int]$BatchId,
        [Parameter(Mandatory = $false)][int]$RecordId,
        [Parameter(Mandatory = $false)][String]$Server = $global:TMSessions[$TMSession].TMServer,
        [Parameter(Mandatory = $false)]$AllowInsecureSSL = $global:TMSessions[$TMSession].AllowInsecureSSL
    )
    ## Get Session Configuration
    $TMSessionConfig = $global:TMSessions[$TMSession]
    if (-not $TMSessionConfig) {
        Write-Host 'TMSession: [' -NoNewline
        Write-Host $TMSession -ForegroundColor Cyan
        Write-Host '] was not Found. Please use the New-TMSession command.'
        Throw "TM Session Not Found. Use New-TMSession command before using features."
    }

    #Honor SSL Settings
    if ($TMSessionConfig.AllowInsecureSSL) {
        $TMCertSettings = @{SkipCertificateCheck = $true }
    }
    else { 
        $TMCertSettings = @{SkipCertificateCheck = $false }
    }

    ## Construct the server URI
    $instance = $Server.Replace('/tdstm', '')
    $instance = $instance.Replace('https://', '')
    $instance = $instance.Replace('http://', '')
    
    ## Check version 4
    if ($global:TMSessions[$TMSession].TMVersion -like '4*') {

        ## TODO Get the 4.7 Web Service URI for this
        $uri = "https://$Instance/tdstm/module/importbatch/$($BatchId ? $BatchId : "list")"
    }
    else {
        if (-not $RecordId) {

            ## Get a List of the records if no specific record was requested
            $uri = "https://$Instance/tdstm/ws/import/batch/$($BatchId)/records"
        }
        else {
            ## Get a specific record
            $uri = "https://$Instance/tdstm/ws/import/batch/$($BatchId)/record/$($RecordId)"

        }
    }

    ## Attempt the Request
    try {
        $response = Invoke-WebRequest -Method Get -Uri $uri -WebSession $TMSessionConfig.TMWebSession @TMCertSettings
        if ($response.StatusCode -eq 200) {
            $Result = ($response.Content | ConvertFrom-Json).data
        }
        return @($Result)
    }
    catch {
        throw $_
    }
}


Function Start-TMImportBatch {
    param(
        [Parameter(Mandatory = $false)][String]$TMSession = "Default",
        [Parameter(Mandatory = $true)][int[]]$BatchId
    )
    ## Get Session Configuration
    $TMSessionConfig = $global:TMSessions[$TMSession]
    if (-not $TMSessionConfig) {
        Write-Host 'TMSession: [' -NoNewline
        Write-Host $TMSession -ForegroundColor Cyan
        Write-Host '] was not Found. Please use the New-TMSession command.'
        Throw "TM Session Not Found. Use New-TMSession command before using features."
    }

    ## Construct the server URI
    $uri = "https://$($TMSessionConfig.TMServer)/tdstm/ws/import/batches"
    
    $PatchBody = @{
        action = "QUEUE"
        ids     = $BatchId
    } | ConvertTo-Json

    ## Attempt the Request
    try {
        $response = Invoke-WebRequest -Method Patch -Body $PatchBody -Uri $uri -WebSession $TMSessionConfig.TMWebSession @TMCertSettings
        if ($response.StatusCode -eq 200) {
            $Result = $response.Content | ConvertFrom-Json
            if ($Result.status -ne 'Success') {
                throw $Result.errors
            }
        }
    }
    catch {
        throw $_
    }
}