New Portal Designer (In Preview) not adhering to the the null check expression
- Dominant language
- TypeScript
- Stars
- 111
- Forks
- 109
- Avg merge
- 1d 23h
- Merged PRs (30d)
- 20
Description
### Severity
P4 - Low (Cosmetic/minor inconvenience)
### Describe the Bug with repro steps
The workflow expression should not cause an exception when using a null check with "?" when the property does not exist e.g. defaultValues does not exist here:
`{
"type": "Compose",
"inputs": "@addProperty(variables('RequestMessage'), 'defaultValues', parameters('globalOptions')?['specific']?[workflow().name]?['defaultValues'])"
}`
Exception raised when running my workflow with a payload in the preview designer:
> InvalidTemplate
> Unable to process template language expressions in action 'TransformRequest-_Add_Default_Values' inputs at line '0' and column '0': 'The workflow parameter 'globalOptions' is not found.'.
The same run with payload completes successfully in the old designer.
### What type of Logic App Is this happening in?
Standard (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": {
"Initialize_Checkpoint_variable": {
"type": "InitializeVariable",
"inputs": {
"variables": [
{
"name": "Checkpoint",
"type": "string"
}
]
},
"runAfter": {
"Initialize_ErrorMessage_variable": [
"Succeeded"
]
}
},
"Initialize_CreateUpdateRequest_variable": {
"type": "InitializeVariable",
"inputs": {
"variables": [
{
"name": "CreateUpdateRequest",
"type": "object"
}
]
},
"runAfter": {
"Initialize_ResponseMessage_variable": [
"Succeeded"
]
}
},
"Initialize_ErrorMessage_variable": {
"type": "InitializeVariable",
"inputs": {
"variables": [
{
"name": "ErrorMessage",
"type": "string",
"value": "An error occurred in the @{workflow()?['name']} (@{workflow()?['run']?['name']}) workflow"
}
]
},
"runAfter": {
"Initialize_FaultMessage_variable": [
"Succeeded"
]
}
},
"Initialize_FaultMessage_variable": {
"type": "InitializeVariable",
"inputs": {
"variables": [
{
"name": "FaultMessage",
"type": "object"
}
]
},
"runAfter": {
"Initialize_StatusCode_variable": [
"Succeeded"
]
}
},
"Initialize_Operation_variable": {
"type": "InitializeVariable",
"inputs": {
"variables": [
{
"name": "Operation",
"type": "string",
"value": "@triggerBody()?['paymentRefund']?['operation']"
}
]
},
"runAfter": {
"Initialize_CreateUpdateRequest_variable": [
"Succeeded"
]
}
},
"Initialize_RequestMessage_variable": {
"type": "InitializeVariable",
"inputs": {
"variables": [
{
"name": "RequestMessage",
"type": "object"
}
]
},
"runAfter": {
"Initialize_Checkpoint_variable": [
"Succeeded"
]
}
},
"Initialize_ResponseMessage_variable": {
"type": "InitializeVariable",
"inputs": {
"variables": [
{
"name": "ResponseMessage",
"type": "object"
}
]
},
"runAfter": {
"Initialize_RequestMessage_variable": [
"Succeeded"
]
}
},
"Initialize_StatusCode_variable": {
"type": "InitializeVariable",
"inputs": {
"variables": [
{
"name": "StatusCode",
"type": "integer",
"value": 500
}
]
},
"runAfter": {}
},
"Respond-_Were_we_successful": {
"type": "If",
"expression": {
"or": [
{
"equals": [
"@variables('Checkpoint')",
"CreatePaymentRefundSuccess"
]
},
{
"equals": [
"@variables('Checkpoint')",
"CreatePaymentRefundSkipped"
]
}
]
},
"actions": {
"Respond-Success-_Return_success_response": {
"type": "Response",
"kind": "http",
"inputs": {
"statusCode": 200,
"headers": {
"Content-Type": "application/json",
"Tracking-Id": "@{triggerOutputs()['headers']?['Tracking-Id']}"
},
"body": "@variables('ResponseMessage')"
}
}
},
"else": {
"actions": {
"Respond-Failure-_Do_we_have_a_FaultMessage": {
"type": "If",
"expression": {
"and": [
{
"not": {
"equals": [
"@variables('FaultMessage')?['fault']",
null
]
}
}
]
},
"actions": {},
"else": {
"actions": {
"Respond-Failure-NoFault-_Create_Fault_message": {
"type": "Compose",
"inputs": {
"fault": {
"additionalDetails": {
"logicApp": {
"lastCheckpoint": "@variables('Checkpoint')",
"logicAppName": "@appsetting('logicAppName')",
"resourceGroupName": "@appsetting('logicAppResourceGroupName')",
"runId": "@workflow()?['run']?['name']",
"workflowName": "@workflow()?['name']"
}
},
"faultActor": "@concat(workflow()?['name'], '.', 'Respond-_Were_we_successful', ' (', workflow()?['run']?['name'], ')')",
"faultCategory": "Error",
"faultCode": "ORAC075",
"faultMessage": "@variables('ErrorMessage')",
"faultReason": null,
"statusCode": "500"
}
}
},
"Respond-Failure-NoFault-_Set_FaultMessage_variable": {
"type": "SetVariable",
"inputs": {
"name": "FaultMessage",
"value": "@outputs('Respond-Failure-NoFault-_Create_Fault_message')"
},
"runAfter": {
"Respond-Failure-NoFault-_Create_Fault_message": [
"Succeeded"
]
}
}
}
}
},
"Respond-Failure-_Return_FaultMessage_response": {
"type": "Response",
"kind": "http",
"inputs": {
"statusCode": 500,
"headers": {
"Content-Type": "application/json"
},
"body": "@variables('FaultMessage')"
},
"runAfter": {
"Respond-Failure-_Do_we_have_a_FaultMessage": [
"Succeeded"
]
}
},
"Respond-Failure-_Should_we_Terminate": {
"type": "If",
"expression": {
"or": [
{
"equals": [
"@coalesce(parameters('globalOptions')?['specific']?[workflow().name]?['terminateOnError'], parameters('globalOptions')?['global']?['terminateOnError'], true)",
true
]
}
]
},
"actions": {
"Respond-Failure-_Terminate_workflow": {
"type": "Terminate",
"inputs": {
"runStatus": "Failed",
"runError": {
"code": "500",
"message": "@variables('ErrorMessage')"
}
}
}
},
"else": {
"actions": {}
},
"runAfter": {
"Respond-Failure-_Return_FaultMessage_response": [
"Succeeded"
]
}
}
}
},
"runAfter": {
"Step-_Create_PaymentRefund": [
"Succeeded",
"Failed",
"Skipped",
"TimedOut"
]
}
},
"Step-_Validate_Request": {
"type": "If",
"expression": {
"and": [
{
"equals": [
"@variables('Checkpoint')",
""
]
}
]
},
"actions": {
"ValidateRequest-_Have_valid_request": {
"type": "If",
"expression": {
"and": [
{
"not": {
"equals": [
"@coalesce(triggerBody(), '')",
""
]
}
},
{
"not": {
"equals": [
"@coalesce(triggerBody()?['paymentRefund']?['paymentRefundReference'],'')",
""
]
}
},
{
"or": [
{
"not": {
"equals": [
"@coalesce(triggerBody()?['paymentRefund']?['customerNumber'],'')",
""
]
}
},
{
"not": {
"equals": [
"@coalesce(triggerBody()?['paymentRefund']?['studentRegNumber'],'')",
""
]
}
}
]
},
{
"not": {
"equals": [
"@triggerBody()?['paymentRefund']",
""
]
}
}
]
},
"actions": {
"ValidateRequest-Success-_Set_Checkpoint_variable": {
"type": "SetVariable",
"inputs": {
"name": "Checkpoint",
"value": "ValidateRequestSuccess"
},
"runAfter": {
"ValidateRequest-Success-_Set_RequestMessage_variable": [
"Succeeded"
]
}
},
"ValidateRequest-Success-_Set_RequestMessage_variable": {
"type": "SetVariable",
"inputs": {
"name": "RequestMessage",
"value": "@triggerBody()"
}
}
},
"else": {
"actions": {
"ValidateRequest-InvalidBody-_Set_ErrorMessage_variable": {
"type": "SetVariable",
"inputs": {
"name": "ErrorMessage",
"value": "An invalid body was supplied with this request - either the body was blank, or the paymentRefundReference or either customerNumber and studentRegNumber values were blank. A valid JSON @{workflow()?['name']} request body must be supplied"
}
}
}
}
}
},
"else": {
"actions": {}
},
"runAfter": {
"Initialize_Operation_variable": [
"Succeeded"
]
}
},
"Step-_Transform_Request": {
"type": "If",
"expression": {
"or": [
{
"equals": [
"@variables('Checkpoint')",
"ValidateRequestSuccess"
]
}
]
},
"actions": {
"TransformRequest-Set_StatusCode_variable": {
"type": "SetVariable",
"inputs": {
"name": "StatusCode",
"value": "@if(equals(coalesce(actions('TransformRequest-_Call_TransformRequest')['status'], 'Failed'), 'Failed'), 500, 200)"
},
"runAfter": {
"TransformRequest-_Call_TransformRequest": [
"Succeeded",
"TIMEDOUT",
"SKIPPED",
"FAILED"
]
}
},
"TransformRequest-_Add_Default_Values": {
"type": "Compose",
"inputs": "@addProperty(variables('RequestMessage'), 'defaultValues', parameters('globalOptions')?['specific']?[workflow().name]?['defaultValues'])"
},
"TransformRequest-_Add_Payment_Config": {
"type": "Compose",
"inputs": "@addProperty(outputs('TransformRequest-_Add_Default_Values'), 'paymentConfig', parameters('paymentConfig'))",
"runAfter": {
"TransformRequest-_Add_Default_Values": [
"Succeeded"
]
}
},
"TransformRequest-_Call_TransformRequest": {
"type": "Liquid",
"kind": "JsonToJson",
"inputs": {
"content": "@outputs('TransformRequest-_Update_Payment_Receipt_Method_Mappings')",
"map": {
"source": "LogicApp",
"name": "CreatePaymentRefundRequest_to_CreatePaymentActivityRequest.liquid"
}
},
"runAfter": {
"TransformRequest-_Update_Payment_Receipt_Method_Mappings": [
"SUCCEEDED"
]
}
},
"TransformRequest-_Validate_Transform": {
"type": "If",
"expression": {
"and": [
{
"equals": [
"@variables('StatusCode')",
200
]
},
{
"not": {
"equals": [
"@body('TransformRequest-_Call_TransformRequest')",
"@json('{}')"
]
}
}
]
},
"actions": {
"TransformRequest-Success-_Validate_ReceiptMethod": {
"type": "If",
"expression": {
"and": [
{
"not": {
"equals": [
"@body('TransformRequest-_Call_TransformRequest')?['ReceiptMethod']",
"(unknown)"
]
}
}
]
},
"actions": {
"TransformRequest-Success-ReceiptMethodSuccess-_Set_CreateUpdateRequest_variable": {
"type": "SetVariable",
"inputs": {
"name": "CreateUpdateRequest",
"value": "@body('TransformRequest-_Call_TransformRequest')"
}
},
"TransformRequest-Success-ReceiptMethodSuccess-_Set_Checkpoint_variable": {
"type": "SetVariable",
"inputs": {
"name": "Checkpoint",
"value": "TransformRequestSuccess"
},
"runAfter": {
"TransformRequest-Success-ReceiptMethodSuccess-_Set_CreateUpdateRequest_variable": [
"SUCCEEDED"
]
}
}
},
"else": {
"actions": {
"TransformRequest-Success-SkipAsNotProcessPayment-_Set_Checkpoint_variable": {
"type": "SetVariable",
"inputs": {
"name": "Checkpoint",
"value": "CreatePaymentRefundSkipped"
},
"runAfter": {
"TransformRequest-Success-SkipAsNotProcessPayment-_Set_ResponseMessage_variable": [
"SUCCEEDED"
]
}
},
"TransformRequest-Success-SkipAsNotProcessPayment-_Create_Response_message": {
"type": "Compose",
"inputs": {
"code": "200",
"operation": "@variables('Operation')",
"paymentReference": "@body('TransformRequest-_Call_TransformRequest')?['createActivityApplication']?['activityApplication']?['receiptNumber']",
"status": "Success",
"trackingId": "@coalesce(triggerOutputs()?['headers']?['Tracking-Id'], '(Unknown)')"
},
"runAfter": {
"TransformRequest-Success-SkipAsNotProcessPayment-_Set_Operation_variable": [
"SUCCEEDED"
]
}
},
"TransformRequest-Success-SkipAsNotProcessPayment-_Set_ResponseMessage_variable": {
"type": "SetVariable",
"inputs": {
"name": "ResponseMessage",
"value": "@outputs('TransformRequest-Success-SkipAsNotProcessPayment-_Create_Response_message')"
},
"runAfter": {
"TransformRequest-Success-SkipAsNotProcessPayment-_Create_Response_message": [
"SUCCEEDED"
]
}
},
"TransformRequest-Success-SkipAsNotProcessPayment-_Set_Operation_variable": {
"type": "SetVariable",
"inputs": {
"name": "Operation",
"value": "Skipped"
}
}
}
}
}
},
"else": {
"actions": {
"TransformRequest-Failure-_Create_Fault_message": {
"type": "Compose",
"inputs": {
"fault": {
"additionalDetails": {
"logicApp": {
"lastCheckpoint": "@variables('Checkpoint')",
"logicAppName": "@appsetting('logicAppName')",
"resourceGroupName": "@appsetting('logicAppResourceGroupName')",
"runId": "@workflow()?['run']?['name']",
"workflowName": "@workflow()?['name']"
}
},
"faultActor": "@concat(workflow()?['name'], '.', actions('TransformRequest-_Call_TransformRequest')?['name'], ' (', workflow()?['run']?['name'], ')')",
"faultCategory": "Error",
"faultCode": "ORAC075",
"faultMessage": "An error occurred whilst transforming the request: @{coalesce(actions('TransformRequest-_Call_TransformRequest')?['error']?['error']?['message'], '(Unknown Error)')}",
"faultReason": "@actions('TransformRequest-_Call_TransformRequest')?['status']",
"statusCode": "@actions('TransformRequest-_Call_TransformRequest')?['code']"
}
}
},
"TransformRequest-Failure-_Set_FaultMessage_variable": {
"type": "SetVariable",
"inputs": {
"name": "FaultMessage",
"value": "@outputs('TransformRequest-Failure-_Create_Fault_message')"
},
"runAfter": {
"TransformRequest-Failure-_Create_Fault_message": [
"SUCCEEDED"
]
}
}
}
},
"runAfter": {
"TransformRequest-Set_StatusCode_variable": [
"Succeeded"
]
}
},
"TransformRequest-_Update_Payment_Receipt_Method_Mappings": {
"type": "Compose",
"inputs": "@setProperty(\r\n\toutputs('TransformRequest-_Add_Payment_Config'), \r\n\t'paymentConfig', \r\n\tsetProperty(\r\n\t\toutputs('TransformRequest-_Add_Payment_Config')?['paymentConfig'], \r\n\t\t'paymentRefund', \r\n\t\tsetProperty(\r\n\t\t\toutputs('TransformRequest-_Add_Payment_Config')?['paymentConfig']?['paymentRefund'], \r\n\t\t\t'receiptMethodMappings', \r\n\t\t\tjson(outputs('TransformRequest-_Add_Payment_Config')?['paymentConfig']?['paymentRefund']?['receiptMethodMappings'])\r\n\t\t)\r\n\t)\r\n)",
"runAfter": {
"TransformRequest-_Add_Payment_Config": [
"SUCCEEDED"
]
}
}
},
"else": {
"actions": {}
},
"runAfter": {
"Step-_Validate_Request": [
"SUCCEEDED",
"TIMEDOUT",
"SKIPPED",
"FAILED"
]
}
},
"Step-_Create_PaymentRefund": {
"type": "If",
"expression": {
"and": [
{
"equals": [
"@variables('Checkpoint')",
"TransformRequestSuccess"
]
},
{
"equals": [
"@variables('Operation')",
"Create"
]
}
]
},
"actions": {
"CreatePaymentRefund-_Call_CreatePaymentRefund": {
"type": "Http",
"inputs": {
"uri": "@{appsetting('apimBaseUrl')}/@{appsetting('oracleFinanceOrchestratorApiPath')}/@{appsetting('oracleFinancePaymentRefundApiPath')}",
"method": "POST",
"headers": {
"Ocp-Apim-Subscription-Key": "@{appsetting('apimFinanceSubscriptionKey')}",
"Ocp-Apim-Trace": "@parameters('enableApimTrace')",
"Tracking-Id": "@coalesce(triggerOutputs()?['headers']?['Tracking-Id'], '(Unknown)')"
},
"body": "@variables('CreateUpdateRequest')",
"authentication": {
"type": "ManagedServiceIdentity"
},
"retryPolicy": {
"type": "none"
}
}
},
"CreatePaymentRefund-_Set_StatusCode_variable": {
"type": "SetVariable",
"inputs": {
"name": "StatusCode",
"value": "@outputs('CreatePaymentRefund-_Call_CreatePaymentRefund')['statusCode']"
},
"runAfter": {
"CreatePaymentRefund-_Call_CreatePaymentRefund": [
"Succeeded",
"TIMEDOUT",
"SKIPPED",
"FAILED"
]
}
},
"CreatePaymentRefund-_Switch_on_StatusCode": {
"type": "Switch",
"expression": "@variables('StatusCode')",
"default": {
"actions": {
"CreatePaymentRefund-Failure-_Create_Fault_message": {
"type": "Compose",
"inputs": {
"fault": {
"additionalDetails": {
"entity": {
"entityReference": "@{coalesce(triggerBody()?['paymentRefund']?['paymentRefundReference'], '(No paymentRefundReference set)')}",
"entityReferenceName": "paymentRefundReference",
"entityType": "PaymentRefund",
"operation": "@variables('Operation')",
"trackingId": "@{coalesce(triggerOutputs()?['headers']?['Tracking-Id'], '(Unknown)')}"
},
"logicApp": {
"lastCheckpoint": "@variables('Checkpoint')",
"logicAppName": "@appsetting('logicAppName')",
"resourceGroupName": "@appsetting('logicAppResourceGroupName')",
"runId": "@workflow()?['run']?['name']",
"workflowName": "@workflow()?['name']"
}
},
"faultActor": "@concat(workflow()?['name'], '.', actions('CreatePaymentRefund-_Call_CreatePaymentRefund')?['name'], ' (', workflow()?['run']?['name'], ')')",
"faultCategory": "Error",
"faultCode": "@{coalesce(if(contains(outputs('CreatePaymentRefund-_Call_CreatePaymentRefund')?['headers']?['Content-Type'], 'json'), body('CreatePaymentRefund-_Call_CreatePaymentRefund')?['fault']?['faultCode'], null), 'ORAC075')}",
"faultMessage": "An error occurred whilst creating a PaymentRefund entity- @{coalesce(body('CreatePaymentRefund-_Call_CreatePaymentRefund')?['fault']?['faultMessage'], body('CreatePaymentRefund-_Call_CreatePaymentRefund')?['errors'], body('CreatePaymentRefund-_Call_CreatePaymentRefund')?['error']?['message'], '(Unknown Error)')}",
"faultReason": null,
"headers": "@outputs('CreatePaymentRefund-_Call_CreatePaymentRefund')?['headers']",
"innerFault": "@body('CreatePaymentRefund-_Call_CreatePaymentRefund')",
"statusCode": "@{coalesce(if(contains(outputs('CreatePaymentRefund-_Call_CreatePaymentRefund')?['headers']?['Content-Type'], 'json'), coalesce(body('CreatePaymentRefund-_Call_CreatePaymentRefund')?['fault']?['statusCode'], body('CreatePaymentRefund-_Call_CreatePaymentRefund')?['error']?['statusCode'], body('CreatePaymentRefund-_Call_CreatePaymentRefund')?['statusCode']), null), '500')}"
}
}
},
"CreatePaymentRefund-Failure-_Set_FaultMessage_variable": {
"type": "SetVariable",
"inputs": {
"name": "FaultMessage",
"value": "@outputs('CreatePaymentRefund-Failure-_Create_Fault_message')"
},
"runAfter": {
"CreatePaymentRefund-Failure-_Create_Fault_message": [
"Succeeded"
]
}
}
}
},
"cases": {
"CreatePaymentRefund-Success": {
"actions": {
"CreatePaymentRefund-Success-_Create_Response_message": {
"type": "Compose",
"inputs": {
"code": "200",
"operation": "@variables('Operation')",
"paymentRefundReference": "@body('CreatePaymentRefund-_Call_CreatePaymentRefund')?['createActivityApplicationResponse']?['result']?['value']?['ReceiptNumber']",
"responseCode": "@coalesce(body('CreatePaymentRefund-_Call_CreatePaymentRefund')?['ReceivableApplicationFLEXVA']?['ReceivableApplicationId'],body('CreatePaymentRefund-_Call_CreatePaymentRefund')?['ActivityApplicationGdfVA']?['ReceivableApplicationId'],0)",
"status": "Success",
"trackingId": "@coalesce(triggerOutputs()?['headers']?['Tracking-Id'], '(Unknown)')"
}
},
"CreatePaymentRefund-Success-_Set_Checkpoint_variable": {
"type": "SetVariable",
"inputs": {
"name": "Checkpoint",
"value": "CreatePaymentRefundSuccess"
},
"runAfter": {
"CreatePaymentRefund-Success-_Create_Response_message": [
"SUCCEEDED"
]
}
},
"CreatePaymentRefund-Success-_Set_ResponseMessage_variable": {
"type": "SetVariable",
"inputs": {
"name": "ResponseMessage",
"value": "@outputs('CreatePaymentRefund-Success-_Create_Response_message')"
},
"runAfter": {
"CreatePaymentRefund-Success-_Create_Response_message": [
"Succeeded"
]
}
}
},
"case": 200
}
},
"runAfter": {
"CreatePaymentRefund-_Set_StatusCode_variable": [
"Succeeded"
]
}
}
},
"else": {
"actions": {}
},
"runAfter": {
"Step-_Transform_Request": [
"SUCCEEDED",
"TIMEDOUT",
"SKIPPED",
"FAILED"
]
}
}
},
"contentVersion": "1.0.0.0",
"outputs": {},
"triggers": {
"manual": {
"type": "Request",
"kind": "Http",
"inputs": {
"schema": {
"$id": "http://schemas/azure/esb/oracle/upsertrefundrequest.json",
"$schema": "https://json-schema.org/draft/2019-09/schema",
"properties": {
"paymentRefund": {
"examples": [
{
"amount": "-10.4",
"currency": "GBP",
"customerNumber": "",
"entryDate": "2024-08-19",
"invoiceNumber": "",
"operation": "Create",
"paymentRefundReference": "",
"source": "Flywire",
"studentRegNumber": "",
"transactionDate": "2024-08-19"
}
],
"properties": {
"amount": {
"default": "",
"description": "The amount of the payment refund",
"examples": [
"-1100.12"
],
"title": "Payment Refund Amount",
"type": "string"
},
"currency": {
"default": "",
"description": "The currency of the payment refund",
"examples": [
"GBP"
],
"maxLength": 15,
"title": "Currency",
"type": "string"
},
"customerNumber": {
"default": "",
"description": "The customer account number of the customer on the payment refund",
"examples": [
"123456"
],
"maxLength": 30,
"title": "Customer Account Number",
"type": "string"
},
"entryDate": {
"default": "",
"description": "The date when the payment refund was processed",
"examples": [
"2024-08-09T17:57:03.2058826Z"
],
"title": "Entry Date",
"type": "string"
},
"invoiceNumber": {
"default": "",
"description": "The invoice number assigned to the payment refund",
"examples": [
"12457894"
],
"title": "Invoice Number",
"type": "string"
},
"operation": {
"default": "",
"description": "Operation to be performed e.g. Update, Delete, Disable",
"examples": [
"Update",
"Delete",
"Disable"
],
"title": "Operation",
"type": "string"
},
"paymentRefundReference": {
"default": "",
"description": "The payment refund reference of the payment refund request",
"examples": [
""
],
"maxLength": 30,
"title": "Receipt Number",
"type": "string"
},
"source": {
"default": "",
"description": "The source where the payment refund originated from",
"examples": [
"HEP",
"Adelante",
"Flywire"
],
"title": "Source",
"type": "string"
},
"studentRegNumber": {
"default": "",
"description": "The student registration number",
"examples": [
""
],
"maxLength": 30,
"title": "Student Registration Number",
"type": "string"
},
"transactionDate": {
"default": "",
"description": "The date when the payment refund was transacted",
"examples": [
"20240813"
],
"title": "Transaction Date",
"type": "string"
}
},
"required": [
"operation",
"paymentRefundReference",
"source",
"transactionDate",
"entryDate",
"amount",
"currency"
],
"title": "Upsert Payment Refund Request",
"type": "object"
},
"processType": {
"default": "",
"description": "ProcessType for this message",
"examples": [
"PaymentRefund"
],
"title": "Process Type",
"type": "string"
},
"trackingId": {
"default": "",
"description": "TrackingId for this message",
"examples": [
"0A437B69-09FC-4D5B-B292-AC76BB72BF7D"
],
"title": "Tracking Id",
"type": "string"
}
},
"required": [
"processType",
"paymentRefund"
],
"title": "Upsert Payment Refund Request"
}
},
"correlation": {
"clientTrackingId": "@{coalesce(if(empty(triggerOutputs()?['headers']?['Tracking-Id']), null, triggerOutputs()?['headers']?['Tracking-Id']), '(Unknown)')}"
}
}
}
},
"kind": "Stateful"
}
```
### Screenshots or Videos
_No response_
### Environment
- Browser Vivaldi 7.7.3851.52
### Additional context
_No response_
Contributor guide
No contributing guide indexed for this repository
Research direction
Start by reproducing the expression in the New Portal Designer preview with the workflow JSON provided, then compare its handling with the old designer. Trace the preview designer's expression-evaluation entry point and verify that the null-safe lookup does not raise the missing-parameter exception. Done means the workflow completes successfully with the expression shown and existing behavior remains intact.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- react, typescript
- Domain
- frontend
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Stale
- Clarity
- Mostly clear
- Newbie friendliness
- 35/100