簡體   English   中英

Azure LogicApps:從字符串到浮點數的轉換返回零

[英]Azure LogicApps: Conversion from String to Float returns zero

我很驚訝地看到這一點,但我見證了在某些情況下,字符串值沒有按預期轉換為浮點數; 大多返回零。

下圖顯示了發生的情況。 正如你看到的我有2個變量,即var_MarginStr類型的stringvar_MarginValues類型的float在我的邏輯應用。 我分配var_MarginVal如下:

var_MarginVal = float(string(variables('var_MarginStr')))

在此處輸入圖片說明

在此處輸入圖片說明

在我的工作中,在將新 blob 插入 blob 存儲帳戶后觸發我的邏輯應用程序。 blob 的內容 (*.csv) 被傳遞到一個 Azure 函數,該函數返回一個JSON對象。 然后將 JSON 對象循環到每個項目上,並通過存儲過程發送到我的數據庫。

我已經檢查了我的 Azure 函數,它可以完美地將內容轉換為 JSON,並且來自這樣的響應是:

{
  "fileName": "20200307-PLC-JKB-Margin.csv",
  "agentName": "PLC",
  "noOfRecords": 5,
  "data": [
    {
      "accountId": "JKB1234LC",
      "marginValue": "0.00"
    },
    {
      "accountId": "JKB4321LC",
      "marginValue": "1200000.00"
    },
    {
      "accountId": "JKB5678LC",
      "marginValue": "6000000.00"
    },
    {
      "accountId": "JKB8765LC",
      "marginValue": "4000000.00"
    },
    {
      "accountId": "JKB9123LC",
      "marginValue": "0.00"
    }
  ]
}

這是我的整個 LogicApp:

{
    "definition": {
        "$schema": "https://schema.management.azure.com/providers/Microsoft.Logic/schemas/2016-06-01/workflowdefinition.json#",
        "actions": {
            "CSVTOJSON": {
                "inputs": {
                    "body": "@body('Get_blob_content')",
                    "function": {
                        "id": "/subscriptions/xxxx/resourceGroups/xxxx-PRD-PORTAL-01/providers/Microsoft.Web/sites/jksbmarginrequest/functions/CSVTOJSON"
                    },
                    "method": "POST",
                    "queries": {
                        "fileName": "@triggerBody()?['Name']"
                    }
                },
                "runAfter": {
                    "[Initialize]_For_Composed_AccountId": [
                        "Succeeded"
                    ]
                },
                "type": "Function"
            },
            "Condition": {
                "actions": {
                    "Apply_to_DB": {
                        "actions": {
                            "Execute_stored_procedure_(V2)": {
                                "inputs": {
                                    "body": {
                                        "pActualAccountId": "@{items('Apply_to_DB')?['accountId']}@{variables('var_ComposeAccountIdSuffix')}",
                                        "pAgentId": "@variables('var_AgentName')",
                                        "pEffectiveDate": "@{formatDateTime(utcNow(),'yyyy-MM-dd')}",
                                        "pMarginVal": "@variables('var_MarginVal')"
                                    },
                                    "host": {
                                        "connection": {
                                            "name": "@parameters('$connections')['sql']['connectionId']"
                                        }
                                    },
                                    "method": "post",
                                    "path": "/v2/datasets/@{encodeURIComponent(encodeURIComponent('default'))},@{encodeURIComponent(encodeURIComponent('default'))}/procedures/@{encodeURIComponent(encodeURIComponent('[dbo].[usp_MarginAddUpdate]'))}"
                                },
                                "runAfter": {
                                    "[Set]_Margin_Value_Float": [
                                        "Succeeded"
                                    ]
                                },
                                "type": "ApiConnection"
                            },
                            "[Set]_Margin_Value_Float": {
                                "inputs": {
                                    "name": "var_MarginVal",
                                    "value": "@float(string(variables('var_MarginStr')))"
                                },
                                "runAfter": {
                                    "[Set]_Margin_Value_String": [
                                        "Succeeded"
                                    ]
                                },
                                "type": "SetVariable"
                            },
                            "[Set]_Margin_Value_String": {
                                "inputs": {
                                    "name": "var_MarginStr",
                                    "value": "@items('Apply_to_DB')?['marginValue']"
                                },
                                "runAfter": {},
                                "type": "SetVariable"
                            }
                        },
                        "foreach": "@body('Parse_JSON')?['data']",
                        "runAfter": {
                            "For_each": [
                                "Succeeded"
                            ]
                        },
                        "type": "Foreach"
                    },
                    "Create_HTML_table": {
                        "inputs": {
                            "format": "HTML",
                            "from": "@body('Parse_JSON')?['data']"
                        },
                        "runAfter": {
                            "Apply_to_DB": [
                                "Succeeded"
                            ]
                        },
                        "type": "Table"
                    },
                    "Execute_a_SQL_query_(V2)": {
                        "inputs": {
                            "body": {
                                "actualParameters": {
                                    "pAgentId": "@variables('var_AgentName')"
                                },
                                "formalParameters": {
                                    "pAgentId": "VARCHAR(10)"
                                },
                                "query": "select * from [dbo].[Parser_MarginFileSettings]\nWhere AgentId =@pAgentId"
                            },
                            "host": {
                                "connection": {
                                    "name": "@parameters('$connections')['sql']['connectionId']"
                                }
                            },
                            "method": "post",
                            "path": "/v2/datasets/@{encodeURIComponent(encodeURIComponent('default'))},@{encodeURIComponent(encodeURIComponent('default'))}/query/sql"
                        },
                        "runAfter": {
                            "[Set]_Agent_Name": [
                                "Succeeded"
                            ]
                        },
                        "type": "ApiConnection"
                    },
                    "For_each": {
                        "actions": {
                            "[Set]_Composed_Account_ID_with_Suffix": {
                                "inputs": {
                                    "name": "var_ComposeAccountIdSuffix",
                                    "value": "@items('For_each')?['Suffix_AccountId']"
                                },
                                "runAfter": {},
                                "type": "SetVariable"
                            }
                        },
                        "foreach": "@body('Execute_a_SQL_query_(V2)')?['resultsets']?['Table1']",
                        "runAfter": {
                            "Execute_a_SQL_query_(V2)": [
                                "Succeeded"
                            ]
                        },
                        "type": "Foreach"
                    },
                    "Parse_JSON": {
                        "inputs": {
                            "content": "@body('CSVTOJSON')",
                            "schema": {
                                "properties": {
                                    "agentName": {
                                        "type": "string"
                                    },
                                    "data": {
                                        "items": {
                                            "properties": {
                                                "accountId": {
                                                    "type": "string"
                                                },
                                                "marginValue": {
                                                    "type": "string"
                                                }
                                            },
                                            "required": [
                                                "accountId",
                                                "marginValue"
                                            ],
                                            "type": "object"
                                        },
                                        "type": "array"
                                    },
                                    "fileName": {
                                        "type": "string"
                                    },
                                    "noOfRecords": {
                                        "type": "integer"
                                    }
                                },
                                "type": "object"
                            }
                        },
                        "runAfter": {},
                        "type": "ParseJson"
                    },
                    "[Set]_Agent_Name": {
                        "inputs": {
                            "name": "var_AgentName",
                            "value": "@body('Parse_JSON')?['agentName']"
                        },
                        "runAfter": {
                            "Parse_JSON": [
                                "Succeeded"
                            ]
                        },
                        "type": "SetVariable"
                    }
                },
                "else": {
                    "actions": {
                        "Compose_Fail-over_Data": {
                            "inputs": {
                                "File_Name": "@triggerBody()?['Name']",
                                "Message": "@body('CSVTOJSON')",
                                "Status_Code": "@outputs('CSVTOJSON')['statusCode']"
                            },
                            "runAfter": {},
                            "type": "Compose"
                        },
                        "For_Error_Listing": {
                            "inputs": {
                                "format": "HTML",
                                "from": "@outputs('Compose_Fail-over_Data')"
                            },
                            "runAfter": {
                                "Compose_Fail-over_Data": [
                                    "Succeeded"
                                ]
                            },
                            "type": "Table"
                        },
                        "Send_an_email_(V2)": {
                            "inputs": {
                                "body": {
                                    "Body": "<p><u><strong>An Error Occured While Updating Margin Request File<br>\n<br>\n</strong></u><u><strong>@{outputs('Compose_Fail-over_Data')}</strong></u><u><strong></strong></u><br>\n</p>",
                                    "Subject": "Margin File Output",
                                    "To": "itops@jkstock.keells.com"
                                },
                                "host": {
                                    "connection": {
                                        "name": "@parameters('$connections')['office365']['connectionId']"
                                    }
                                },
                                "method": "post",
                                "path": "/v2/Mail"
                            },
                            "runAfter": {
                                "For_Error_Listing": [
                                    "Succeeded"
                                ]
                            },
                            "type": "ApiConnection"
                        }
                    }
                },
                "expression": {
                    "and": [
                        {
                            "equals": [
                                "@outputs('CSVTOJSON')['statusCode']",
                                200
                            ]
                        }
                    ]
                },
                "runAfter": {
                    "CSVTOJSON": [
                        "Succeeded"
                    ]
                },
                "type": "If"
            },
            "Get_blob_content": {
                "inputs": {
                    "host": {
                        "connection": {
                            "name": "@parameters('$connections')['azureblob']['connectionId']"
                        }
                    },
                    "method": "get",
                    "path": "/datasets/default/files/@{encodeURIComponent(encodeURIComponent(triggerBody()?['Path']))}/content",
                    "queries": {
                        "inferContentType": true
                    }
                },
                "runAfter": {},
                "runtimeConfiguration": {
                    "staticResult": {
                        "name": "Get_blob_content0",
                        "staticResultOptions": "Disabled"
                    }
                },
                "type": "ApiConnection"
            },
            "[Initialize]_Agent_Name": {
                "inputs": {
                    "variables": [
                        {
                            "name": "var_AgentName",
                            "type": "string",
                            "value": "PLC"
                        }
                    ]
                },
                "runAfter": {
                    "Get_blob_content": [
                        "Succeeded"
                    ]
                },
                "type": "InitializeVariable"
            },
            "[Initialize]_For_Composed_AccountId": {
                "inputs": {
                    "variables": [
                        {
                            "name": "var_ComposeAccountIdSuffix",
                            "type": "string"
                        }
                    ]
                },
                "runAfter": {
                    "[Initialize]_For_Margin_Value_FLoat": [
                        "Succeeded"
                    ]
                },
                "type": "InitializeVariable"
            },
            "[Initialize]_For_Margin_Value_FLoat": {
                "inputs": {
                    "variables": [
                        {
                            "name": "var_MarginVal",
                            "type": "float",
                            "value": 0
                        }
                    ]
                },
                "runAfter": {
                    "[Initialize]_Margin_Value_String": [
                        "Succeeded"
                    ]
                },
                "type": "InitializeVariable"
            },
            "[Initialize]_Margin_Value_String": {
                "inputs": {
                    "variables": [
                        {
                            "name": "var_MarginStr",
                            "type": "string"
                        }
                    ]
                },
                "runAfter": {
                    "[Initialize]_Agent_Name": [
                        "Succeeded"
                    ]
                },
                "type": "InitializeVariable"
            }
        },
        "contentVersion": "1.0.0.0",
        "outputs": {},
        "parameters": {
            "$connections": {
                "defaultValue": {},
                "type": "Object"
            }
        },
        "staticResults": {
            "Get_blob_content0": {
                "outputs": {
                    "headers": {},
                    "statusCode": "OK"
                },
                "status": "Succeeded"
            }
        },
        "triggers": {
            "When_a_blob_is_added_or_modified_(properties_only)": {
                "inputs": {
                    "host": {
                        "connection": {
                            "name": "@parameters('$connections')['azureblob']['connectionId']"
                        }
                    },
                    "method": "get",
                    "path": "/datasets/default/triggers/batch/onupdatedfile",
                    "queries": {
                        "folderId": "JTJmcGxj",
                        "maxFileCount": 1
                    }
                },
                "metadata": {
                    "JTJmcGxj": "/plc"
                },
                "recurrence": {
                    "frequency": "Second",
                    "interval": 3
                },
                "splitOn": "@triggerBody()",
                "type": "ApiConnection"
            }
        }
    },
    "parameters": {
        "$connections": {
            "value": {
                "azureblob": {
                    "connectionId": "/subscriptions/xxxx/resourceGroups/xxx-PRD-PORTAL-01/providers/Microsoft.Web/connections/azureblob-2",
                    "connectionName": "azureblob-2",
                    "id": "/subscriptions/xxxx/providers/Microsoft.Web/locations/southeastasia/managedApis/azureblob"
                },
                "office365": {
                    "connectionId": "/subscriptions/xxxx/resourceGroups/xxx-PRD-PORTAL-01/providers/Microsoft.Web/connections/office365",
                    "connectionName": "office365",
                    "id": "/subscriptions/xxxx/providers/Microsoft.Web/locations/southeastasia/managedApis/office365"
                },
                "sql": {
                    "connectionId": "/subscriptions/xxxx/resourceGroups/xxx-PRD-PORTAL-01/providers/Microsoft.Web/connections/sql-6",
                    "connectionName": "sql-6",
                    "id": "/subscriptions/xxxx/providers/Microsoft.Web/locations/southeastasia/managedApis/sql"
                }
            }
        }
    }
}

默認情況下,當 For Each 運行時,它會同時運行迭代。 不保證變量使用當前迭代的值。 如果您將 For Each 更改為按順序運行,它將與變量一起使用。 在 For Each 設置中,打開並發控制並將並行度設置為 1。如果您希望循環並行運行,另一個選項是刪除循環中變量的使用。

此頁面上的循環 Microsoft 文檔https://docs.microsoft.com/en-us/azure/logic-apps/logic-apps-control-flow-loops

要在每次循環迭代期間從對變量的操作中獲得可預測的結果,請按順序運行這些循環。 例如,當並發運行的循環結束時,遞增、遞減和追加到變量操作會返回可預測的結果。 但是,在並發運行循環中的每次迭代期間,這些操作可能會返回不可預測的結果。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM