Ephesoft.Transact.Batch.psm1
using module .\Ephesoft.Transact.Common.psm1 <# .Synopsis Submits a batch class .Description Submit a .zip file containing documents to be processed by an existing batch class .Example Submit-TransactBatch -Credential $Cred -FilePath C:\Path\To\Batch1.zip -BatchClassName 'MyBatchClass' -Hostname 'MyTransactServer.com' Connects to the Ephesoft Transact instance at https://MyTransactServer.com and uploads Batch1.zip as a batch to be processed by the 'MyBatchClass' batch class. .Example Get-SubmitBatch -Credential $Cred -FilePath 'C:\MyBatch1.zip' -BatchClassName 'MyBatchClass' -Hostname 'transact.some.net' -port 8080 -UseHTTP -AcknowledgeInsecure Connects to the Ephesoft Transact instance at http://transact.some.net on an insecure port (only recommended for local on-box testing) and submits batch 'MyBatch1.zip' to 'MyBatchClass' .Parameter Credential A PSCredential object containing the username/password used to connect to the Ephesoft Transact instance. .Parameter FilePath The full windows filepath to the batch .zip file to be submitted. The file may contain multiple documents for processing. .Parameter BatchClassName Name of the existing batch class in the Ephesoft Transact application that will process the submitted batch. .Parameter Hostname The hostname where the transact web services API can be reached. .Parameter Port The TCP/IP port to make the connection on if using something other than the standard HTTPS port 443. .Parameter UseHTTP By default, connections are made over HTTPS. Setting this parameter will attempt the connection over http which is only recommended for on-box testing. .Parameter AckknowledgeInsecure By default, connections are made over HTTPS. If forcing an http connection, the call will be rejected unless this parameter is specified. #> Function Submit-TransactBatch { param ( [Parameter (Mandatory = $true)] [pscredential]$Credential, [Parameter (Mandatory = $true)] [string] $FilePath, [Parameter (Mandatory = $true)] [string] $BatchClassName, [Parameter (Mandatory = $true)] [string] $Hostname, [ValidateRange(1,65535)] [int] $Port=443, [switch] $UseHTTP, [switch] $AcknowledgeInsecure ) # TODO - Put this into a common function # Prepare authorization headers $headers = @{"Authorization" = "Basic " + [System.Convert]::TOBase64String([System.Text.Encoding]::UTF8.GetBytes("$($Credential.UserName):$($Credential.GetNetworkCredential().Password)"))} # Validate FilePath here to specify custom error message if ($FilePath -notmatch '.*\.zip$') { throw "Filepath parameter specified must be the full path to a .zip file containing an Ephesoft Transact batch class." } if (-NOT (Test-Path $FilePath)) { throw "Could not find batch file at specified path $FilePath" } # Get Batch Class ID $batchName = (Split-Path $FilePath -Leaf) -replace('.zip','') $Params = @{ Credential = $Credential Hostname = $Hostname Port = $Port UseHTTP = $UseHTTP AcknowledgeInsecure = $AcknowledgeInsecure } $batchClassID = (Get-TransactBatchCLassList @Params | Where-Object {$_.Name -eq $BatchClassName}).Identifier # Validate batch class name exists if (-NOT $batchClassID) { throw "Could not find existing batch class with name $BatchClassName" } # URL encode batch name and batch class ID before using in endpoint $encoded_BatchName = [System.Web.HTTPUtility]::UrlEncode($BatchName) $encoded_BatchClassID = [System.Web.HTTPUtility]::UrlEncode($batchClassID) # Prepare URL to use $endpoint = "uploadBatch/$encoded_BatchClassID/$encoded_BatchName" $uri = Get-TransactURI -Endpoint $endpoint -Port $Port -UseHTTP:$UseHTTP -AcknowledgeInsecure:$AcknowledgeInsecure -Hostname $Hostname # Get multipart content for all files in the batches' .zip file $multiPartFileContent = $FilePath | Get-MultiPartFileContent # Submit request Write-Progress "Submitting batch $batchName from file $FilePath" Write-Verbose "Submitting batch $batchName from file $FilePath" $result = Invoke-RestMethod $uri -Method 'POST' -Headers $headers -Body $multiPartFileContent.Content -SkipCertificateCheck -ContentType "application/xml" -ErrorAction 'Stop' $return = [pscustomobject] @{ BatchClassName = $BatchClassName BatchName = $batchName StatusCode = $result.web_service_result.response_code.HTTP_CODE Message = "$($result.web_service_result.response_code.Result)" } return $return } |