次の方法で共有


気象拡張機能を記述する方法

このセクションでは、独自の気象拡張機能を記述するためのステップ バイ ステップ ガイドを提供します。

気象拡張機能とは

Data Manager for Agriculture の天気拡張機能は、API の完全な詳細と各 API 応答 (出力) のテンプレートを提供するマニフェスト (JSON) ファイルです。 したがって、拡張ファイルは、API 入力 (要求) と出力 (応答) の特性を理解するために、Data Manager for Agriculture で定義されている API テンプレート構造です。

気象拡張機能の構造

大まかに言えば、拡張ファイルは次の 2 つの要素で構成される JSON です。

  • プロバイダー メタデータ (JSON オブジェクト)
  • API 情報 (JSON 配列)

プロバイダー メタデータ

これは、拡張機能とそのバージョン管理情報を一意に識別するために必要な以下のフィールドの詳細を提供する JSON オブジェクトです。 拡張機能のこのセクションで提供される詳細は、Data Manager for Agriculture マーケットプレースで外部顧客に表示されます。 したがって (簡単に識別するための) extensionId および extensionName と (バリュープロポジションのための) description は、顧客を念頭においたものとする必要があります。

プロバイダー メタデータのサンプル

"provider": {
    "extensionId": "abc.weather", 
    "extensionName": "ABC weather",
    "description": "Get Weather data from ABC weather into Azure Data Manager for Agriculture platform using this extension",
    "dataCategory": "Weather",
    "farmBeatsSchemaVersion": "1.0",
    "extensionVersion": "1.0",
    "supportUrl": "www.abc.com/support",
    "supportEmail": "support@abc.com"
  }
プロバイダー メタデータの詳細
名前 種類 説明
extensionId string 組織名 (Contoso) とサービス (気象) の形式で提供される ID (例: org.service)。 extensionId は拡張機能の一意識別子であり、ユーザーが Data Manager for Agriculture プラットフォーム上でその拡張機能 API とやり取りするために使用する識別子です
extensionName string Data Manager for Agriculture の拡張機能マーケットプレースで使用される拡張機能の名前。
description string 拡張機能によって提供される機能とサービスを示す説明。
dataCategory string 気象拡張機能では、weather を使用します。
farmBeatsSchemaVersion string Data Manager for Agriculture 側のマニフェスト ファイルのバージョン。 既存のマニフェスト ファイルを更新すると、このフィールドが新しいバージョンに更新されます。
extensionVersion string 拡張ファイルのバージョン。 1.0 から始まります。 拡張機能ファイルを更新すると、メジャーおよびマイナー更新の規則に従ってこのバージョン番号が増加します。
supportUrl string サポート クエリおよび FAQ を上げるための Web サイト リンク
supportEmail string サポート クエリで送信する電子メール。

API 情報

API Information JSON 配列 (apiInfos) は、以下の構造要素にまで分解できます。

  • API のメタデータ
  • 認証パラメーター
  • API 入力パラメーター
  • 抽出された API 入力パラメーター
  • 関数型パラメーター
  • 単位システム
  • プラットフォームおよびカスタム パラメーター
  • プラットフォームおよびカスタム テンプレート

API のメタデータ

このセクションは、Data Manager for Agriculture が (ユーザーによって明示的に呼び出される) apiName を識別し、適切な requestType に基づいて API 要求を正しい endpoint にリダイレクトするために使用される API に関する基本的な情報から構成されています。

サンプル API メタデータ
"apiInfos": [
    {
          "apiName": "dailyforecast",
          "description": "The Daily Forecast API",
          "endpoint": "https://ag.us.clearapis.com/v1.1/forecast/daily",
          "requestType": "GET",
          "isLoadAPI": "false",
          "typeOfData": "forecast",
          "granularity": "daily",
          "defaultUnitSystem": "us"
    }
]
API メタデータの詳細
名前 種類 説明
apiInfos array 各 API が apiInfos 配列内のオブジェクトになっているオブジェクトの JSON 配列。
apiName string 拡張機能でサポートされる API 名であり、これがユーザーが拡張機能 API の呼び出しに使用する名前そのものとなります。 API のドキュメントで説明されているのと同じ名前付け規則に従ってください。
description string API の説明
endpoint string apiName を呼び出す Data Manager for Agriculture の API エンドポイント。
requestType string apiName サポートしている GETPOST または PUT の要求の種類。
isLoadAPI boolean apiName が現在の気象データのようなパススルー API の場合は、このキーを false にします。 (履歴および予測に関する) すべての読み込み API で、このフィールドは true のままにします。 isLoadAPI キーが false に指定されている場合、API 応答はユーザーに直接送信され、Data Manager for Agriculture ストレージ サービスには格納されません。
typeOfData string 現在サポートされている値は、Historical または Forecast です。
粒度 (granularity) string 現在サポートされている値は、Daily または Hourly です。
defaultUnitSystem string apiName でサポートされている既定の単位システムの名前を指定します。

認証パラメーター

このセクションは、apiName がサポートしている認証に関連するパラメーターを取り込みます。 Data Manager for Agriculture は API ヘッダー セクションで 2 種類の認証関連キー (x-ms-farmBeats-data-provider-id および x-ms-farmBeats-data-provider-key) をサポートしているため、拡張機能ファイルでは、apiName によって決まるそれぞれの認証キーのキー名を明示的に指定する必要があります。

Data Manager for Agriculture は、(Create Weather Job API 内の) API ヘッダーを介して認証情報を収集します。 認証パラメーターマッピングは、Data Manager for Agriculture が必要に応じて拡張機能に応じてキーを渡すことができるようにするために行われます。

認証パラメーターのサンプル
"apiInfos": [
    "authInputParameters": [
        {
          "farmBeatsAuthMapping": "x-ms-farmBeats-data-provider-id",
          "name": "app_id",
          "isRequired": "true",
          "providerDataType": "string",
          "description": "Provide the APP ID, username etc. that your API supports",
          "location": "apiQuery"
        },
        {
          "farmBeatsAuthMapping": "x-ms-farmBeats-data-provider-key",
          "name": "app_key",
          "isRequired": "true",
          "providerDataType": "string",
          "description": "Provide the API Key or password etc. that your API supports",
          "location": "apiQuery"
        }
      ]
]
認証パラメーターの詳細
名前 種類 説明
authInputParameters array 認証パラメーターの JSON 配列。各オブジェクトは、サポートされている認証の種類を示します。 拡張機能でサポートされている認証の種類に基づいてキーを使用します。
farmBeatsAuthMapping string 現在、2 種類の認証関連キーがサポートされています。 API キー ベースの認証では x-ms-farmBeats-data-provider-key オブジェクトしか使用しませんが、アプリ ID とアプリ キー ベースの認証では x-ms-farmBeats-data-provider-id および x-ms-farmBeats-data-provider-key オブジェクトの両方を使用します。
name string apiName でサポートされている認証キーの名前。
isRequired boolean この名前は apiName に必要なパラメーターですか? true または false の値を指定します。
providerDataType string name パラメーターのデータ型を指定します。
description string Data Manager for Agriculture の各オブジェクト内でそれぞれの farmBeatsAuthMapping の意味の説明。
location string API 内のどこに name パラメーターを送信するべきですか。 現在サポートされている値は apiQuery および apiHeader です。

API 入力パラメーター

このセクションでは、apiName に正常に呼び出される API シグネチャ (入力パラメーター) の詳細について説明します。

API 入力パラメーターのサンプル
"apiInfos": [
    "apiInputParameters": [
        {
          "name": "start",
          "isRequired": "true",
          "providerDataType": "double",
          "description": "Start of time range. Valid start values range from zero to nine. Day zero represents the current day.",
          "location": "apiQuery"
        },
        {
          "name": "end",
          "isRequired": "true",
          "providerDataType": "double",
          "description": "End of time range. Valid end values range from zero to nine.",
          "location": "apiQuery"
        },
        {
          "name": "location",
          "isRequired": "true",
          "providerDataType": "string",
          "description": "User-provided latitude and longitude coordinates. Formatted as location=[(<lat_1>,<lon_1>)].",
          "location": "apiQuery"
        },
        {
          "name": "unitcode",
          "isRequired": "false",
          "providerDataType": "string",
          "description": "Unit conversion set to be used. Default is us-std. Valid values are us-std, si-std.",
          "location": "apiQuery"
        },
      ]
]
API 入力パラメーターの詳細
名前 種類 説明
apiInputParameters array API 入力パラメーターの JSON 配列。各オブジェクトは apiName にサポートされている入力パラメーターを示します。
name string apiName でサポートされている入力パラメーターの名前。
isRequired boolean この名前は apiName に必要なパラメーターですか? true または false の値を指定します。
providerDataType string name パラメーターのデータ型を指定します。
description string name パラメーターの意味の説明を入力します。
location string API 内のどこに name パラメーターを送信するべきですか。 現在サポートされている値は apiQuery および apiHeader です。

抽出された API 入力パラメーター

このセクションは、Data Manager が計算と保存のために API 要求内で渡された入力パラメーターを抽出するためのものです。 この例では、Data Manager for Agriculture は、API 入力要求から位置情報 (緯度と経度) を抽出し、それらを Data Manager for Agriculture の各気象出力の一部として格納します。

そのため、拡張機能では、位置出する方法に関する HandleBars テンプレートを提供する必要があります。 次の例は、"latitude""lat" として、"longitude""lon" として拡張機能 API が位置情報を収集することを示しています。

抽出された API 入力パラメーターのサンプル
"extractedApiInputParameters": [
        {
          "name": "location",
          "template": "{ \"latitude\": \"{{lat}}\", \"longitude\": \"{{lon}}\"  } "
        }
      ]
抽出された API 入力パラメーターの詳細
名前 種類 説明
extractedApiInputParameters 配列 抽出機能の JSON 配列。各オブジェクトはどの情報を抽出する必要があるかを表します。 現在 location がこのような抽出の 1 つです。
name string 抽出の名前。現在サポートされている値は location です。
template string API 入力パラメーターで緯度と経度の情報がどのように収集されるかを示す HandleBars テンプレート。

関数型パラメーター

このセクションでは、Data Manager for Agriculture によって構築される機能について説明します。 気象拡張機能の場合、重心計算がそのような機能の 1 つです。

ユーザーが緯度/経度座標を指定しない場合、Data Manager for Agriculture はフィールドのプライマリ ジオメトリ (ユーザーが渡した ID) を使用して重心を計算します。 計算された重心座標は、緯度と経度として拡張機能 (データ プロバイダー) に渡されます。 そうすることで、Data Manager for Agriculture は、機能パラメーター セクションで使用されている位置座標の使用法を理解できます。

Data Manager for Agriculture が apiName 入力パラメーターでの緯度と経度の使用状況を理解するには、拡張機能によって、位置情報の収集に使用されるキーの name と、緯度と経度の値を渡す方法を示すハンドルバー テンプレートが提供されることが期待されます。

機能パラメーターのサンプル
"apiInfos": [
    "functionalParameters": [
        {
          "name": "CentroidCalculation",
          "description": "Provide names of the parameters used to collect latitude and longitude information",
          "functionalParameterEntities": [
            {
              "name": "lat",
              "template": "{ \"lat\": \"{{latitude}}\" } "
            },
            {
              "name": "lon",
              "template": "{ \"lon\": \"{{longitude}}\" } "
            }
          ]
        }
      ],
]
機能パラメーターの詳細
名前 種類 説明
functionalParameters array 機能の JSON 配列。各オブジェクトは、Data Manager for Agriculture でサポートされている機能を示します。 現在 CentroidCalculation がそのような機能の 1 つです。
name string 機能の名前。現在サポートされている値は CentroidCalculation です。
description string Data Manager for Agriculture の機能の説明。
functionalParameterEntities 配列 オブジェクトの JSON 配列。各オブジェクトは緯度および経度に固有のものです。

単位システム

このセクションは、Data Manager for Agriculture が拡張機能でサポートされているさまざまな種類の単位システムを理解するために使用します。 そのため、拡張機能では、API 入力でユニット情報を収集するために使用される key 名前を指定し、その後 apiName にサポートされているさまざまな単位システム名 (例: us-std) を指定する必要があります。

単位システムのサンプル
"unitSystems": 
    {
        "key": "unitcode",
        "values": [
            "us-std",
            "si-std",
            "us-std-precise",
            "si-std-precise"
            ]
    }
単位システムの詳細
名前 種類 説明
unitSystems object 単位システム情報を収集する JSON オブジェクト。
key string API 入力で単位情報を収集するために使用されるパラメーターの名前。
string 拡張機能でサポートされている単位システム名の一覧。

プラットフォームおよびカスタム パラメーター

各気象 API 応答において、出力の一部として送信される気象測定値 (例: 温度、露点など) はパラメーターとして呼び出されます。

そのため、パラメーターに関しては、Data Manager for Agriculture は内部的に次のパラメーターセットをサポートし、それらを Platform parameters として扱います。

  • cloudCover
  • dateTime
  • dewPoint
  • growingDegreeDay
  • precipitation
  • pressure
  • relativeHumidity
  • soilMoisture
  • soilTemperature
  • 温度
  • visibility
  • wetBulbTemperature
  • windChill
  • windDirection
  • windGust
  • windSpeed

したがって、プラットフォーム パラメーターに該当しない気象パラメーターを送信する拡張機能は、それらを Custom parameters の一部として送信しています。 プラットフォーム パラメーターとカスタム パラメーターの主な違いは、Data Manager for Agriculture の気象 API を使用しているユーザーは、プラットフォーム パラメーターに対してはクエリとフィルター処理を行う (例: 温度 > 30) ことができますが、カスタム パラメーターに対してはこれを行うことができないという点です。 ただし、カスタム パラメーターは気象クエリ出力の一部として送信されます。

このセクションでは、拡張機能は、サポートされているすべての単位システムの各パラメーターの単位情報を提供します。 これを使用することで、Data Manager for Agriculture は、拡張機能のこのセクションによって提供される情報に基づいて各気象パラメーターの根本の測定単位が何であるかを認識します。

Note

  • 単位が適用できない特定のパラメーターの場合は、それ用の単位を指定しないでください (例: weatherDescriptor)
  • 単位がすべての単位システムで同じである特定のパラメーターについては、すべての単位システムで同じように指定してください。 (例: cloudCover)
サンプルのプラットフォームおよびカスタム パラメーター
"apiInfos": [
     "platformParameters": [
        {
          "farmBeatsName": "cloudCover",
          "farmBeatsDataType": "double",
          "description": "The average percentage of sky covered by clouds.",
          "measurementUnits": [
            {
              "unitSystem": "us-std",
              "unit": "%"
            },
            {
              "unitSystem": "us-std-precise",
              "unit": "%"
            },
            {
              "unitSystem": "si-std",
              "unit": "%"
            },
            {
              "unitSystem": "si-std-precise",
              "unit": "%"
            }
          ]
        },
        {
          "farmBeatsName": "dewPoint",
          "farmBeatsDataType": "double",
          "description": "The air temperature at which the air will become saturated, and dew moisture will condense into fog (or dew).",
          "measurementUnits": [
            {
              "unitSystem": "us-std",
              "unit": "F"
            },
            {
              "unitSystem": "us-std-precise",
              "unit": "F"
            },
            {
              "unitSystem": "si-std",
              "unit": "C"
            },
            {
              "unitSystem": "si-std-precise",
              "unit": "C"
            }
          ]
        },
    "customParameters": [
        {
          "providerName": "weatherDescriptor",
          "providerDataType": "string",
          "description": "General weather descriptor data"
        },
        {
          "providerName": "airTempMax",
          "providerDataType": "double",
          "description": "Maximum daily air temperature at two meters above ground level.",
          "measurementUnits": [
            {
              "unitSystem": "us-std",
              "unit": "F"
            },
            {
              "unitSystem": "us-std-precise",
              "unit": "F"
            },
            {
              "unitSystem": "si-std",
              "unit": "C"
            },
            {
              "unitSystem": "si-std-precise",
              "unit": "C"
            }
          ]
        },
]
プラットフォーム パラメーターの詳細
名前 種類 説明
platformParameters array 各オブジェクトが 1 つのプラットフォーム パラメーターであるプラットフォーム パラメーターの JSON 配列。
farmBeatsName string Data Manager for Agriculture によって提供されるパラメーターの名前。
farmBeatsDataType string Data Manager for Agriculture によって提供されるパラメーターのデータ型。
description string Data Manager for Agriculture によって提供されるパラメーターの説明。
measurementUnits string 拡張機能でサポートされている各単位システム values の単位の JSON 配列。
unitSystem string 拡張機能でサポートされている単位システム value
unit string 特定の気象パラメーターの測定単位 (例: dewPoint 用の F)。
カスタム パラメーターの詳細
名前 種類 説明
customParameters object 各オブジェクトが 1 つのカスタム パラメーターであるカスタム パラメーターの JSON 配列。
providerName string 拡張機能によって提供されるパラメーターの名前。
providerDataType string 拡張機能によって提供されるパラメーターのデータ型。
description string 拡張機能によって提供されるパラメーターの説明。
measurementUnits string 拡張機能でサポートされている各単位システム values の単位の JSON 配列。
unitSystem string 拡張機能でサポートされている単位システム value
unit string 特定の気象パラメーターの測定単位 (例: airTempMax 用の F)。

プラットフォームおよびカスタム テンプレート

テンプレートは、拡張機能 API 出力 (JSON 応答) を、Data Manager for Agriculture が想定する形式に変換するために拡張機能によって提供されるマッピング情報です。 これを使用することで、さまざまな API 出力形式を単一の形式へと統一的にマップ/変換することができるようになります。

テンプレート ソリューションは、拡張機能によって提供される JSON 出力を解析する最も効果的な方法の 1 つであることがわかりました。 気象拡張機能の場合、 Data Manager for Agriculture では、HandleBars テンプレートを使用して拡張機能が記述されることを想定しています。 HandleBars は、式を簡単に使用できるオープン ソースのテンプレート言語です。

Note

提供されている例を使用して HandleBars テンプレートを試し、ヘルパー関数を使用して独自の解析ロジックを構築する方法を学習することを強くお勧めします (Data Manager for Agriculture でまだ提供されていない場合)。

大まかに言えば、入力として API 応答を受け取り、Data Manager for Agriculture が想定する形式の出力を生成するというのがテンプレートの仕組みです。

テンプレート フローのスクリーンショット。

上の図に示すように、それぞれの API 応答に対してテンプレートを検証し、拡張機能では検証済みのテンプレートを使用してください。 API 応答と、それぞれのプラットフォーム テンプレートとカスタム テンプレートの例を次に示します。

API 応答のサンプル
{
    "47,-97": {
        "2016-12-15": {
            "overall": {
                "air_temp_avg": {
                    "unit": "F",
                    "value": -3.0
                },
                "air_temp_max": {
                    "unit": "F",
                    "value": 5.0
                },
                "air_temp_min": {
                    "unit": "F",
                    "value": -11.0
                },
                "cloud_cover_avg": {
                    "unit": "%",
                    "value": 26.4
                },
                "descriptors": {
                    "cloud_cover_descriptor": {
                        "code": 21107,
                        "icon": "https://.../cover_partlycloudyday.png",
                        "text": "Increasing Clouds"
                    },
                    "precipitation_descriptor": {
                        "code": 61113,
                        "icon": "https://.../precip_flurries.png",
                        "text": "Slight Chance of Flurries"
                    },
                    "weather_descriptor": {
                        "code": 61113,
                        "icon": "https://.../precip_flurries.png",
                        "text": "Slight Chance of Flurries"
                    },
                    "wind_direction_descriptor": {
                        "code": 51600,
                        "icon": "https://.../direction_sw.png",
                        "text": "Southwest"
                    },
                    "wind_trend_descriptor": {
                        "code": 10500,
                        "icon": "https://.../error_none.png",
                        "text": "None"
                    }
                },
                "dew_point_avg": {
                    "unit": "F",
                    "value": -11.0
                },
                "dew_point_max": {
                    "unit": "F",
                    "value": -4.0
                },
                "dew_point_min": {
                    "unit": "F",
                    "value": -19.0
                },
                "ice_acc_period": {
                    "unit": "in",
                    "value": 0.0
                },
                "liquid_acc_period": {
                    "unit": "in",
                    "value": 0.0
                },
                "long_wave_radiation_avg": {
                    "unit": "W/m^2",
                    "value": 170.0
                },
                "pet_period": {
                    "unit": "in",
                    "value": 0.009
                },
                "precip_acc_period": {
                    "unit": "in",
                    "value": 0.001
                },
                "precip_prob": {
                    "unit": "%",
                    "value": 10.0
                },
                "relative_humidity_avg": {
                    "unit": "%",
                    "value": 68.0
                },
                "relative_humidity_max": {
                    "unit": "%",
                    "value": 77.0
                },
                "relative_humidity_min": {
                    "unit": "%",
                    "value": 61.0
                },
                "short_wave_radiation_avg": {
                    "unit": "W/m^2",
                    "value": 70.0
                },
                "snow_acc_period": {
                    "unit": "in",
                    "value": 0.02
                },
                "sunshine_duration": {
                    "unit": "hours",
                    "value": 6
                },
                "wind_gust_max": {
                    "unit": "n/a",
                    "value": "n/a"
                },
                "wind_speed_2m_avg": {
                    "unit": "mph",
                    "value": 6.0
                },
                "wind_speed_2m_max": {
                    "unit": "mph",
                    "value": 8.0
                },
                "wind_speed_2m_min": {
                    "unit": "mph",
                    "value": 2.0
                },
                "wind_speed_avg": {
                    "unit": "mph",
                    "value": 8.0
                },
                "wind_speed_max": {
                    "unit": "mph",
                    "value": 11.0
                },
                "wind_speed_min": {
                    "unit": "mph",
                    "value": 3.0
                }
            }
        }
    }
}
上記の API 応答のプラットフォームおよびカスタム テンプレートのサンプル
{
"apiInfos": {
    "platformTemplate": "{ {{#each .}}\"value\": [{{#each .}} {\"cloudCover\": \"{{overall.cloud_cover_avg.value}}\" ,\"dewPoint\": \"{{overall.dew_point_avg.value}}\" ,\"precipitation\": \"{{overall.precip_acc_period.value}}\" ,\"relativeHumidity\": \"{{overall.relative_humidity_avg.value}}\" ,\"dateTime\": \"{{convertDateInYYYYMMDDToDateTime @key}}\",      \"temperature\": \"{{overall.air_temp_avg.value}}\" ,\"windSpeed\": \"{{overall.wind_speed_avg.value}}\" ,   },{{/each}}]{{/each}} }",
    "customTemplate": "{ {{#each .}}\"value\": [{{#each .}} {\"air_temp_max\": \"{{overall.air_temp_max.value}}\",\"air_temp_min\": \"{{overall.air_temp_min.value}}\",\"cloudCoverDescriptor\": \"{{overall.descriptors.cloud_cover_descriptor.text}}\",\"precipitationDescriptor\": \"{{overall.descriptors.precipitation_descriptor.text}}\",\"weatherDescriptor\": \"{{overall.descriptors.weather_descriptor.text}}\",\"windDirectionDescriptor\": \"{{overall.descriptors.wind_direction_descriptor.text}}\",\"windTrendDescriptor\": \"{{overall.descriptors.wind_trend_descriptor.text}}\",\"dewPointMax\": \"{{overall.dew_point_max.value}}\",\"dewPointMin\": \"{{overall.dew_point_min.value}}\",\"iceAccPeriod\": \"{{overall.ice_acc_period.value}}\",\"liquidAccPeriod\": \"{{overall.liquid_acc_period.value}}\",\"longWaveRadiationAvg\": \"{{overall.long_wave_radiation_avg.value}}\",\"petPeriod\": \"{{overall.pet_period.value}}\",\"precipProb\": \"{{overall.precip_prob.value}}\",\"relativeHumidityMax\": \"{{overall.relative_humidity_max.value}}\",\"relativeHumidityMin\": \"{{overall.relative_humidity_min.value}}\",\"shortWaveRadiationAvg\": \"{{overall.short_wave_radiation_avg.value}}\",\"snowAccPeriod\": \"{{overall.snow_acc_period.value}}\",\"sunshineDuration\": \"{{overall.sunshine_duration.value}}\",\"windSpeed2mAvg\": \"{{overall.wind_speed_2m_avg.value}}\",\"windSpeed2mMax\": \"{{overall.wind_speed_2m_max.value}}\",\"windSpeed2mMin\": \"{{overall.wind_speed_2m_min.value}}\",\"windSpeedMax\": \"{{overall.wind_speed_max.value}}\",\"windSpeedMin\": \"{{overall.wind_speed_min.value}}\",},{{/each}}]{{/each}} }"
}
}

Note

HandleBars から生成されたテンプレートは、JSON 形式と互換性を持たせるように \"<text>\" を追加することで文字列化されます。

Helper 関数

ヘルパー関数は、ネイティブでサポートされていないデータに対する特定の変換を実行するためにテンプレートによって使用されます。 Data Manager for Agriculture によってサポートされているヘルパー関数を以下に示します。

ヘルパー関数のサンプル
Handlebars.registerHelper('splitAndTake', function(title, char, index) {
  var t = title.split(char);
  return t[index];
});
Handlebars.registerHelper('converttime', function(timestamp) {
    return new Date(timestamp);
});
Handlebars.registerHelper('convertunixtime', function(unix_timestamp) {
    return new Date(unix_timestamp * 1000);
});

これらのヘルパー関数はどのようなアクションを実行しますか?

  • SplitAndTake(object valueObject, string separator, int index) - この関数は、区切り記号 (例: ",") に基づいて文字列 (例: "47,-97") を分割するために使用され、指定されたインデックスで要素を受け取ります (例: index=0 は "47" を与えます)
  • ConvertDateInFormatToDateTime(object dateObject, string format) - この関数は、指定された形式 (例: 2016-12-15) の日付を DateTime 文字列に解析するために使用されます。
  • ConvertUnixTimeToDateTime(object unixTimeStamp) - この関数は、unix タイムスタンプ (例: 1392267600) を datetime 文字列に変換するために使用されます。
  • GetObjectFromListWithKeyValuePair(Array listOfObjects, string key, string value) - オブジェクトのリストを指定すると、キー (type) 値 (RAIN) のペアに基づいてオブジェクトがフェッチされます。 以下の例では、"type": "RAIN" の降水量を取得するためにこの関数が使用されます。
{
"precipitation": [
      {
        "type": "SNOW",
        "amount": 0
      },
      {
        "type": "RAIN",
        "amount": 0.01
      }
    ]
}
  • GetValueFromObject(string jsonString, string key) - JSON オブジェクトを文字列として指定すると、キーに基づいて値が取得されます。

Note

作成している拡張機能で API 応答を解析するために追加のヘルパー関数が必要な場合は、サポート チケットを作成して Microsoft にお問い合わせください。