This, perhaps?
2 Likes
Export BAQ is binary so it’s one of those things you can’t inspect diffs. However, it looks like this json schema is sufficient for both create and update.
Here’s a script that exports all BAQs. We use a BAQ called baq_BAQs_For_SCM to filter by name, author, modified date, etc to get those we want to track, then iterate over them to either export data or export design.
# Set environment variables (run this once, store outside this script, don't commit to source control)
# [System.Environment]::SetEnvironmentVariable("API_USERNAME", "YOUR_USERNAME", "User")
# [System.Environment]::SetEnvironmentVariable("API_PASSWORD", "YOUR_PASSWORD", "User")
# [System.Environment]::SetEnvironmentVariable("API_KEY", "YOU_APIKEY", "User")
# Retrieve environment variables inside this script
$Username = [System.Environment]::GetEnvironmentVariable("API_USERNAME", "User")
$Password = [System.Environment]::GetEnvironmentVariable("API_PASSWORD", "User")
$ApiKey = [System.Environment]::GetEnvironmentVariable("API_KEY", "User")
# Write-Host $Username
# Write-Host $Password
# Write-Host $ApiKey
# Define credentials
$Base64Auth = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes("$($Username):$($Password)"))
# Set headers
$Headers = @{
Authorization = "Basic $Base64Auth"
"x-api-key" = $ApiKey
"Content-Type" = "application/json"
}
$server = "https://YOUR_SERVER.epicorsaas.com"
$instance = "YOUR_INSTANCE"
$company = "YOUR_COMPANY"
$Path = "T:\DMT\EpicorDMTScripts"
$BAQ = "baq_BAQs_For_SCM"
$TargetFile = $BAQ + ".json"
$body = '{
"queryID": "' + $BAQ + '",
"executionParams": {
"ExecutionFilter": [
],
"ExecutionParameter": []
}
}'
# Make the request
$Response = Invoke-RestMethod "$server/$instance/api/v2/odata/$company/Ice.BO.DynamicQuerySvc/ExecuteByID" -Method 'POST' -Headers $Headers -Body $body
# Convert response to JSON format and save to file
$Response | ConvertTo-Json -Depth 10 | Out-File -FilePath $Path\$TargetFile
# Load the JSON file
$jsonContent = Get-Content -Raw -Path $Path\$TargetFile | ConvertFrom-Json
# Loop through the Results array and export QueryHdr_QueryID
$jsonContent.returnObj.Results | Where-Object {
# $_.QueryHdr_AuthorID -Like 'jbooker'
$_.QueryHdr_QueryID -Like 'DMT-24*'
} | Foreach-Object {
Write-Output $_.QueryHdr_QueryID
$BAQ = $_.QueryHdr_QueryID
$TargetFile = $BAQ + ".json"
#############
# EXPORT DATA
<#
$body = '{
"queryID": "' + $BAQ + '",
"executionParams": {
"ExecutionFilter": [
],
"ExecutionParameter": []
}
}'
# $Response = Invoke-RestMethod "$server/$instance/api/v2/odata/$company/Ice.BO.DynamicQuerySvc/ExecuteByID" -Method 'POST' -Headers $Headers -Body $body
#>
###############
# EXPORT DESIGN
$Response = Invoke-RestMethod "$server/$instance/api/v2/odata/$company/Ice.BO.DynamicQuerySvc/GetByID/?queryID=$BAQ" -Method 'POST' -Headers $Headers -Body $body
###############
# Convert response to JSON format and save to file
$Response | ConvertTo-Json -Depth 10 | Out-File -FilePath $Path\$TargetFile
}
2 Likes