Azure LogicApps: преобразование из String в Float возвращает ноль - PullRequest
0 голосов
/ 06 марта 2020

Я удивлен, увидев это, но я вижу, что в некоторых случаях строковые значения не конвертируются, как ожидается, чтобы плавать; в основном возвращает ноль.

На следующем рисунке показано, что происходит. Как видите, у меня в приложении Logi c есть 2 переменные, а именно var_MarginStr типа string и var_MarginValues типа float. Я присваиваю var_MarginVal следующим образом:

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

enter image description here

enter image description here

В моей работе, когда я запускаю свое приложение logi c после добавления нового BLOB-объекта в учетную запись хранения BLOB-объектов. Содержимое (*. Csv) большого двоичного объекта передается в функцию Azure, которая возвращает объект JSON. Затем объект JSON зацикливается на каждом элементе и отправляется в мою БД через Stored Pro c.

. Я проверил мою функцию 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"
                }
            }
        }
    }
}

1 Ответ

1 голос
/ 09 марта 2020

Когда For Each запускается по умолчанию, он запускает итерации одновременно. Переменным не гарантируется использование значения для текущей итерации. Если вы измените параметр «Для каждого» на последовательный запуск, он будет работать с переменными. В настройках «Для каждого» включите управление параллелизмом и установите для параметра «Степень параллелизма» значение 1. Другой вариант - отменить использование переменных в l oop, если вы хотите, чтобы он работал параллельно.

Документация Microsoft для l oop на этой странице https://docs.microsoft.com/en-us/azure/logic-apps/logic-apps-control-flow-loops говорит

Чтобы получить предсказуемые результаты от операций с переменными во время каждого l oop итерации, запустите эти циклы последовательно. Например, когда одновременно запущенный l oop заканчивается, приращение, уменьшение и добавление к переменным операциям возвращают предсказуемые результаты. Однако во время каждой итерации в параллельно выполняемой l oop эти операции могут возвращать непредсказуемые результаты.

...