Logic Apps base64ToBinary() and binary() Functions Fail to Output Raw Byte[] for SQL VARBINARY Inputs
- Dominant language
- ABAP
- Stars
- 424
- Forks
- 320
- Avg merge
- 14h 41m
- Merged PRs (30d)
- 1
Description
### Severity
P1 - Critical (Blocking production)
### Describe the Bug with repro steps
Summary:
When using the base64ToBinary() or binary() functions in Azure Logic Apps to convert base64-encoded content (from OneDrive or SQL VARBINARY(MAX) queries), the output is not interpreted as raw byte[]. Instead, it results in a JObject or wrapped structure, which leads to a type conversion error when passed to a SQL stored procedure expecting a VARBINARY parameter.
Environment:
Logic Apps Standard
SQL Connector (using ExecuteStoredProcedure)
Source of base64 content: OneDrive > Get file content or ExecuteSQLQuery (VARBINARY data)
Target: SQL Stored Procedure expecting VARBINARY(MAX)
Reproduction Steps:
Use Get file content from OneDrive to retrieve a PDF.
Attempt to convert it using base64ToBinary(body('Get_file_content')?['$content']).
Pass the result to a SQL stored procedure as a VARBINARY(MAX) parameter.
Observe error:
css
Copy
Edit
Failed to convert parameter value from a JObject to a Byte[]
Output trace confirms the value being passed is an object with $content-type and $content, not raw binary.
Expected Behavior:
Calling base64ToBinary() or binary() on a valid base64 string should return raw binary byte[], compatible with SQL parameters of type VARBINARY.
Actual Behavior:
The output is wrapped in an object structure ({ "$content-type": "application/octet-stream", "$content": "..." }) rather than returning clean binary. This results in SQL execution failures due to type mismatch (JObject instead of Byte[]).
### What type of Logic App Is this happening in?
Consumption (Portal)
### Are you experiencing a regression?
_No response_
### Which operating system are you using?
Windows
### Did you refer to the TSG before filing this issue? https://aka.ms/lauxtsg
Yes
### Workflow JSON
```json
{
"definition": {
"$schema": "https://schema.management.azure.com/providers/Microsoft.Logic/schemas/2016-06-01/workflowdefinition.json#",
"actions": {
"Scope": {
"type": "Scope",
"actions": {
"Parse_JSON-DocType": {
"type": "ParseJson",
"inputs": {
"content": "@json(replace(replace(body('Chat_Completion-DocType')?['choices'][0]['message']['content'], '', ''), '', ''))",
"schema": {
"Code": "BOL"
}
},
"runAfter": {
"Chat_Completion-DocType": [
"SUCCEEDED"
]
}
},
"Chat_Completion-DocType": {
"type": "ApiConnection",
"inputs": {
"host": {
"connection": {
"referenceName": "openaiip-1"
}
},
"method": "post",
"body": {
"model": "gpt-4o",
"messages": [
{
"role": "system",
"content": "You are a document identifying assistant. Your job is to indentify document types. You must return the document code in JSON format. If a document code is not found, return \"MISC\" in JSON format."
},
{
"role": "user",
"content": "Your job is to review the document content provided and identify the document type. The document types available are provided in a list of document codes and descripitions. Return only the document code in JSON format. If document code is not found, return \"MISC\" in JSON format.\n\nDocument Content: @{body('Analyze_Document_for_Prebuilt_or_Custom_models_(v4.x_API)')?['analyzeResult']?['content']}\nDocument Types: @{outputs('JSON-DocType')}\n\nExtract values exactly as they appear (case-sensitive, no modifications).\nDO NOT alter data.\nDO NOT include placeholders such as \"Not Provided\", \"N/A\", \"Unknown\", or empty strings.\n\nExample 1: return with known values:\n{\n \"Code\": \"SCALE\"\n}\nExample 2: return with known values:\n{\n \"Code\": \"COA\"\n}\nExample 3: return with unknown values:\n{\n \"Code\": \"MISC\"\n}"
}
],
"n": 1,
"temperature": 0.9,
"max_tokens": 2048,
"frequency_penalty": 0,
"presence_penalty": 0
},
"path": "/v1/chat/completions"
},
"runAfter": {
"Analyze_Document_for_Prebuilt_or_Custom_models_(v4.x_API)": [
"SUCCEEDED"
]
}
},
"Analyze_Document_for_Prebuilt_or_Custom_models_(v4.x_API)": {
"type": "ApiConnection",
"inputs": {
"host": {
"connection": {
"referenceName": "formrecognizer"
}
},
"method": "post",
"body": "@triggerBody()",
"path": "/connectorinternaldocumentintelligence/documentModels/@{encodeURIComponent('prebuilt-layout')}:analyze",
"queries": {
"api-version": "2024-11-30"
}
}
}
},
"runAfter": {
"Filter_array": [
"SUCCEEDED"
]
}
},
"JSON-DocType": {
"type": "Compose",
"inputs": [
{
"Code": "BOL",
"Description": "Bill of Lading"
},
{
"Code": "BULK TRAILER",
"Description": "Bulk Trailer Cleanliness"
},
{
"Code": "CCR",
"Description": "Clean Container Report"
},
{
"Code": "COA",
"Description": "Certificate of Analysis"
},
{
"Code": "INTL DOCS",
"Description": "International Docs"
},
{
"Code": "MISC",
"Description": "Miscellaneous"
},
{
"Code": "PL",
"Description": "Packing List"
},
{
"Code": "PRIOR LOAD",
"Description": "Prior Load Hauled"
},
{
"Code": "SCALE",
"Description": "Weight Ticket"
},
{
"Code": "TEST RESULTS",
"Description": "Test Results"
},
{
"Code": "WAREHOUSERELEASE",
"Description": "Warehouse Release"
},
{
"Code": "INSPECT",
"Description": "Railcar Inspection Form"
},
{
"Code": "WEIGHT",
"Description": "Weight Certificate"
}
],
"runAfter": {
"Get_file_content": [
"SUCCEEDED"
]
}
},
"Compose-StoredProcedure": {
"type": "Compose",
"inputs": {
"pCompany": "Anchor Ingredients",
"pTableNo": "",
"pKey1": "test",
"pKey2": "test",
"pKey3": "test",
"pDocType": "test",
"pDocDesc": "test",
"pKeyWords": "test",
"pBytes": "test"
},
"runAfter": {
"Filter_array-DocType": [
"SUCCEEDED"
]
}
},
"Compose-DocTable": {
"type": "Compose",
"inputs": [
{
"prefix": "SO",
"table": 36
},
{
"prefix": "SS",
"table": 110
},
{
"prefix": "PO",
"table": 38
},
{
"prefix": "PR",
"table": 120
},
{
"prefix": "TO",
"table": 5740
},
{
"prefix": "TS",
"table": 5744
},
{
"prefix": "TR",
"table": 5746
}
],
"runAfter": {
"Scope": [
"SUCCEEDED"
]
}
},
"Filter_array-DocType": {
"type": "Query",
"inputs": {
"from": "@outputs('JSON-DocType')",
"where": "@equals(item()?['Code'],body('Parse_JSON-DocType')?['Code'])"
},
"runAfter": {
"Scope": [
"SUCCEEDED"
],
"Compose-DocTable": [
"SUCCEEDED"
]
}
},
"Switch": {
"type": "Switch",
"expression": "@substring(base64ToString(triggerOutputs()['headers']['x-ms-file-name-encoded']),0,2)",
"default": {
"actions": {}
},
"cases": {
"Case-isSO": {
"actions": {
"Compose-StoredProcedureSO": {
"type": "Compose",
"inputs": {
"pCompany": "Anchor Ingredients",
"pTableNo": "36",
"pKey1": "Order",
"pKey2": "",
"pKey3": "@substring(base64ToString(triggerOutputs()?['headers']['x-ms-file-name-encoded']),0,8)",
"pDocType": "@body('Filter_array-DocType')?[0]?['Code']",
"pDocDesc": "@concat(body('Filter_array-DocType')?[0]?['Description'],'Anchor-Automtion')",
"pKeyWords": "@body('Filter_array-DocType')?[0]?['Description']",
"pBytes": "@base64ToBinary(first(body('Filter_array')?[0])?['FileData'])\r\n"
},
"runAfter": {
"Compose_2": [
"SUCCEEDED"
],
"Compose_3": [
"SUCCEEDED"
]
}
},
"Execute_stored_procedureSO": {
"type": "ServiceProvider",
"inputs": {
"parameters": {
"storedProcedureName": "sp_bcStoreDocAll",
"storedProcedureParameters": "@outputs('Compose-StoredProcedureSO')",
"includeEmptyResultSets": true
},
"serviceProviderConfiguration": {
"connectionName": "sql-3",
"operationId": "executeStoredProcedure",
"serviceProviderId": "/serviceProviders/sql"
}
},
"runAfter": {
"Compose-StoredProcedureSO": [
"SUCCEEDED"
]
}
},
"Compose": {
"type": "Compose",
"inputs": "@triggerBody()"
},
"Compose_1": {
"type": "Compose",
"inputs": "@outputs('Compose')?['$content']",
"runAfter": {
"Compose": [
"SUCCEEDED"
]
}
},
"Compose_2": {
"type": "Compose",
"inputs": "@binary(variables('Content'))",
"runAfter": {
"Compose": [
"SUCCEEDED"
],
"Compose_1": [
"SUCCEEDED"
],
"Append_to_string_variable": [
"SUCCEEDED"
]
}
},
"Append_to_string_variable": {
"type": "AppendToStringVariable",
"inputs": {
"name": "Content",
"value": "@outputs('Compose_1')"
},
"runAfter": {
"Compose_1": [
"SUCCEEDED"
]
}
},
"Compose_3": {
"type": "Compose",
"inputs": "@outputs('Compose_2')?['$content']",
"runAfter": {
"Compose_2": [
"SUCCEEDED"
]
}
}
},
"case": "SO"
},
"Case-isTO": {
"actions": {
"Compose-StoredProcedureTO": {
"type": "Compose",
"inputs": {
"pCompany": "Anchor Ingredients",
"pTableNo": "5740",
"pKey1": "@substring(base64ToString(triggerOutputs()['headers']['x-ms-file-name-encoded']),0,8)",
"pKey2": "",
"pKey3": "",
"pDocType": "@body('Filter_array-DocType')?[0]?['Code']",
"pDocDesc": "@body('Filter_array-DocType')?[0]?['Description']",
"pKeyWords": "@body('Filter_array-DocType')?[0]?['Description']",
"pBytes": "@triggerBody()"
}
},
"Execute_stored_procedureTO": {
"type": "ServiceProvider",
"inputs": {
"parameters": {
"storedProcedureName": "sp_bcStoreDocAll",
"storedProcedureParameters": "@outputs('Compose-StoredProcedureTO')",
"includeEmptyResultSets": true
},
"serviceProviderConfiguration": {
"connectionName": "sql-3",
"operationId": "executeStoredProcedure",
"serviceProviderId": "/serviceProviders/sql"
}
},
"runAfter": {
"Compose-StoredProcedureTO": [
"SUCCEEDED"
]
}
}
},
"case": "TO"
},
"Case-isPO": {
"actions": {
"Compose-StoredProcedurePO": {
"type": "Compose",
"inputs": {
"pCompany": "Anchor Ingredients",
"pTableNo": "38",
"pKey1": "Order",
"pKey2": "",
"pKey3": "@substring(base64ToString(triggerOutputs()['headers']['x-ms-file-name-encoded']),0,8)",
"pDocType": "@body('Filter_array-DocType')?[0]?['Code']",
"pDocDesc": "@body('Filter_array-DocType')?[0]?['Description']",
"pKeyWords": "@body('Filter_array-DocType')?[0]?['Description']",
"pBytes": "@triggerBody()"
}
},
"Execute_stored_procedurePO": {
"type": "ServiceProvider",
"inputs": {
"parameters": {
"storedProcedureName": "sp_bcStoreDocAll",
"storedProcedureParameters": "@outputs('Compose-StoredProcedurePO')",
"includeEmptyResultSets": true
},
"serviceProviderConfiguration": {
"connectionName": "sql-3",
"operationId": "executeStoredProcedure",
"serviceProviderId": "/serviceProviders/sql"
}
},
"runAfter": {
"Compose-StoredProcedurePO": [
"SUCCEEDED"
]
}
}
},
"case": "PO"
},
"Case-isSS": {
"actions": {
"Compose-StoredProcedureSS": {
"type": "Compose",
"inputs": {
"pCompany": "Anchor Ingredients",
"pTableNo": "110",
"pKey1": "",
"pKey2": "",
"pKey3": "@substring(base64ToString(triggerOutputs()['headers']['x-ms-file-name-encoded']),0,8)",
"pDocType": "@body('Filter_array-DocType')?[0]?['Code']",
"pDocDesc": "@body('Filter_array-DocType')?[0]?['Description']",
"pKeyWords": "@body('Filter_array-DocType')?[0]?['Description']",
"pBytes": "@triggerBody()"
}
},
"Execute_stored_procedureSS": {
"type": "ServiceProvider",
"inputs": {
"parameters": {
"storedProcedureName": "sp_bcStoreDocAll",
"storedProcedureParameters": "@outputs('Compose-StoredProcedureSS')",
"includeEmptyResultSets": true
},
"serviceProviderConfiguration": {
"connectionName": "sql-3",
"operationId": "executeStoredProcedure",
"serviceProviderId": "/serviceProviders/sql"
}
},
"runAfter": {
"Compose-StoredProcedureSS": [
"SUCCEEDED"
]
}
}
},
"case": "SS"
},
"Case-isPR": {
"actions": {
"Compose-StoredProcedurePR": {
"type": "Compose",
"inputs": {
"pCompany": "Anchor Ingredients",
"pTableNo": "120",
"pKey1": "",
"pKey2": "",
"pKey3": "@substring(base64ToString(triggerOutputs()['headers']['x-ms-file-name-encoded']),0,8)",
"pDocType": "@body('Filter_array-DocType')?[0]?['Code']",
"pDocDesc": "@body('Filter_array-DocType')?[0]?['Description']",
"pKeyWords": "@body('Filter_array-DocType')?[0]?['Description']",
"pBytes": "@triggerBody()"
}
},
"Execute_stored_procedurePR": {
"type": "ServiceProvider",
"inputs": {
"parameters": {
"storedProcedureName": "sp_bcStoreDocAll",
"storedProcedureParameters": "@outputs('Compose-StoredProcedurePR')",
"includeEmptyResultSets": true
},
"serviceProviderConfiguration": {
"connectionName": "sql-3",
"operationId": "executeStoredProcedure",
"serviceProviderId": "/serviceProviders/sql"
}
},
"runAfter": {
"Compose-StoredProcedurePR": [
"SUCCEEDED"
]
}
}
},
"case": "PR"
},
"Case-isTS": {
"actions": {
"Compose-StoredProcedureTS": {
"type": "Compose",
"inputs": {
"pCompany": "Anchor Ingredients",
"pTableNo": "5744",
"pKey1": "@substring(base64ToString(triggerOutputs()['headers']['x-ms-file-name-encoded']),0,8)",
"pKey2": "",
"pKey3": "",
"pDocType": "@body('Filter_array-DocType')?[0]?['Code']",
"pDocDesc": "@body('Filter_array-DocType')?[0]?['Description']",
"pKeyWords": "@body('Filter_array-DocType')?[0]?['Description']",
"pBytes": "@triggerBody()"
}
},
"Execute_stored_procedureTS": {
"type": "ServiceProvider",
"inputs": {
"parameters": {
"storedProcedureName": "sp_bcStoreDocAll",
"storedProcedureParameters": "@outputs('Compose-StoredProcedureTS')",
"includeEmptyResultSets": true
},
"serviceProviderConfiguration": {
"connectionName": "sql-3",
"operationId": "executeStoredProcedure",
"serviceProviderId": "/serviceProviders/sql"
}
},
"runAfter": {
"Compose-StoredProcedureTS": [
"SUCCEEDED"
]
}
}
},
"case": "TS"
},
"Case-isTR": {
"actions": {
"Compose-StoredProcedureTR": {
"type": "Compose",
"inputs": {
"pCompany": "Anchor Ingredients",
"pTableNo": "5746",
"pKey1": "@substring(base64ToString(triggerOutputs()['headers']['x-ms-file-name-encoded']),0,8)",
"pKey2": "",
"pKey3": "",
"pDocType": "@body('Filter_array-DocType')?[0]?['Code']",
"pDocDesc": "@body('Filter_array-DocType')?[0]?['Description']",
"pKeyWords": "@body('Filter_array-DocType')?[0]?['Description']",
"pBytes": "@triggerBody()"
}
},
"Execute_stored_procedureTR": {
"type": "ServiceProvider",
"inputs": {
"parameters": {
"storedProcedureName": "sp_bcStoreDocAll",
"storedProcedureParameters": "@outputs('Compose-StoredProcedureTR')",
"includeEmptyResultSets": true
},
"serviceProviderConfiguration": {
"connectionName": "sql-3",
"operationId": "executeStoredProcedure",
"serviceProviderId": "/serviceProviders/sql"
}
},
"runAfter": {
"Compose-StoredProcedureTR": [
"SUCCEEDED"
]
}
}
},
"case": "TR"
},
"Case-isCM": {
"actions": {
"Compose-StoredProcedureCM": {
"type": "Compose",
"inputs": {
"pCompany": "Anchor Ingredients",
"pTableNo": "120",
"pKey1": "",
"pKey2": "",
"pKey3": "@substring(base64ToString(triggerOutputs()['headers']['x-ms-file-name-encoded']),0,8)",
"pDocType": "@body('Filter_array-DocType')?[0]?['Code']",
"pDocDesc": "@body('Filter_array-DocType')?[0]?['Description']",
"pKeyWords": "@body('Filter_array-DocType')?[0]?['Description']",
"pBytes": "@triggerBody()"
}
},
"Execute_stored_procedureCM": {
"type": "ServiceProvider",
"inputs": {
"parameters": {
"storedProcedureName": "sp_bcStoreDocAll",
"storedProcedureParameters": "@outputs('Compose-StoredProcedureCM')",
"includeEmptyResultSets": true
},
"serviceProviderConfiguration": {
"connectionName": "sql-3",
"operationId": "executeStoredProcedure",
"serviceProviderId": "/serviceProviders/sql"
}
},
"runAfter": {
"Compose-StoredProcedureCM": [
"SUCCEEDED"
]
}
}
},
"case": "CM"
}
},
"runAfter": {
"Compose-StoredProcedure": [
"SUCCEEDED"
],
"Initialize_variables": [
"SUCCEEDED"
]
}
},
"Get_file_content": {
"type": "ApiConnection",
"inputs": {
"host": {
"connection": {
"referenceName": "onedriveforbusiness"
}
},
"method": "get",
"path": "/datasets/default/files/@{encodeURIComponent(encodeURIComponent(triggerOutputs()['headers']['x-ms-file-id']))}/content",
"queries": {
"inferContentType": true
}
},
"runAfter": {}
},
"Initialize_variables": {
"type": "InitializeVariable",
"inputs": {
"variables": [
{
"name": "Content",
"type": "string"
}
]
},
"runAfter": {
"Compose-StoredProcedure": [
"SUCCEEDED"
]
}
},
"Execute_query": {
"type": "ServiceProvider",
"inputs": {
"parameters": {
"query": "SELECT * FROM dbo.PDF_Staging"
},
"serviceProviderConfiguration": {
"connectionName": "sql-2",
"operationId": "executeQuery",
"serviceProviderId": "/serviceProviders/sql"
}
},
"runAfter": {
"JSON-DocType": [
"SUCCEEDED"
]
}
},
"Filter_array": {
"type": "Query",
"inputs": {
"from": "@body('Execute_query')",
"where": "@equals(body('Execute_query')?[0]?[0]?['FileName']\r\n,triggerOutputs()['headers']['x-ms-file-name'])"
},
"runAfter": {
"JSON-DocType": [
"SUCCEEDED"
],
"Execute_query": [
"SUCCEEDED"
]
}
}
},
"contentVersion": "1.0.0.0",
"outputs": {},
"triggers": {
"When_a_file_is_created": {
"type": "ApiConnection",
"inputs": {
"host": {
"connection": {
"referenceName": "onedriveforbusiness"
}
},
"method": "get",
"path": "/datasets/default/triggers/onnewfilev2",
"queries": {
"folderId": "b!xGf3eqnvvkKXnE86BtM1V757Mv3XogdIrWL4I92RpFNg0t2R6xX5QpzysUfy4QrB.01S5ZIIKPZSCRJUQSFENBJRVBMIT2EZ6O4",
"includeSubfolders": false,
"inferContentType": true,
"simulate": false
}
},
"recurrence": {
"interval": 1,
"frequency": "Minute"
},
"metadata": {
"b!xGf3eqnvvkKXnE86BtM1V757Mv3XogdIrWL4I92RpFNg0t2R6xX5QpzysUfy4QrB.01S5ZIIKPZSCRJUQSFENBJRVBMIT2EZ6O4": "/Projects - OneDrive/_AUTOMATION FILES/PDF Processing/Complete"
}
}
}
},
"kind": "Stateful"
}
```
### Screenshots or Videos

### Environment
Chrome
### Additional context
I need to upload an outlook file's content in raw binary format into a SQL stored procedure. I've been trying for days retrieve only the content, but anytime a binary expression is used, the output is a json object.
Contributor guide
No contributing guide indexed for this repository
Assessment
This issue has not been assessed yet.