プロジェクトの JSON

通常、プロジェクトはグラフィカル インターフェイスを使用して ArcGIS QuickCapture デザイナーで構成しますが、プロジェクトの JSON コードを変更することもできます。

プロジェクトの JSON を編集するときに、次のプロパティを変更できます。

  • basemap - データの確認時に表示されるマップ。
  • dataSources - プロジェクト内のボタンに使用されるフィーチャ レイヤーを一覧表示します。
  • preferences - プロジェクト内の取得されたすべてのレコードに適用可能です。
  • templateGroups - ボタンのグループの表現。
  • templates - ボタンの表現。
    • cameraInfo - レコードに関する写真およびビデオの取得方法。
    • captureInfo - ボタンが選択されたときのデータの取得方法。 取得後に (位置の編集のために) マップを表示したり、マップ ページに表示される表示テキストとヒントをカスタマイズしたりするために構成します。
    • displayInfo - ボタンの外観。
    • fieldInfos - レコードに関して取得される属性値。
  • tracking - プロジェクトが使用する位置情報の共有レイヤーを表します。
  • userInput - レコードの属性を入力するために使用可能なユーザー指定文字列。

これらのプロパティの一部は追加のプロパティの配列です。 以降のサブセクションでプロパティ配列について詳しく説明します。

ベースマップ

デフォルトでは、新しいプロジェクトのマップは、組織のデフォルト ベースマップと一致します。 組織のアカウントを使用してアプリにサイン インすると、該当プロジェクトに組織の現在のデフォルト ベースマップが表示まれます。 アプリからサイン アウトすると、Esri の地形図 (World Topographic Map) が表示されます。

次のプロパティがプロジェクトで使用されるマップの識別に使用されます。

プロパティ説明フィールド タイプ
type

WebMap、MMPK、VTPK、または TPK。 null の場合は、Esri の地形図が使用されます。

String

itemId

マップのアイテム ID。

String

useDefaultBasemap

true (デフォルト) または false。

Boolean

プロジェクト作成者は、好みのオンライン マップまたはオフライン マップを選択して、デフォルトの振舞いをオーバーライドできます。 useDefaultBasemap が false に設定されていて、itemId が null の場合、プロジェクトは、Esri の地形図を使用します。

次の例は、ダウンロードしたユーザーだけが使用できる必須 Web マップを示しています。

{
   "basemap":{
      "type":"WebMap",
      "itemId":fae788aa91e54244b161b59725dcbb2a,
      "useDefaultBasemap":false,
      "required":true,
      "zoomLevel":null
   }
}

プロジェクト内のマップ上で過去に送信されたデータをユーザーに表示するために、プロジェクト データを含む Web マップを構成して、それをベースマップとして指名することができます。

  • Web マップには少なくともプロジェクトと同じレイヤーを含める必要があります。 それ以外のレイヤーを含めることもできます。
  • Web マップで定義されたシンボル体系は、送信済みのフィーチャをシンボル表示するために使用されます。
  • 送信されなかったデバイス上で取得されたデータは、デフォルトの QuickCapture シンボル体系を使用してシンボル表示されます。 たとえば、ポイントは青色のマーカーを使用してシンボル表示されます。

注意:

Web メルカトル空間参照を使用したマップのみがサポートされます。

データ ソース

次のプロパティがプロジェクト内のフィーチャ レイヤーの識別に使用されます。

プロパティ説明フィールド タイプ
dataSourceId

配列内のこのレイヤーを識別するために QuickCapture によってこのプロジェクトに割り当てられた一意の数値。 これは、フィーチャ サービス内のレイヤーのインデックスではありません。 1 つのプロジェクトに複数のフィーチャ サービスのレイヤーを含めることができます。

Integer

featureServiceItemId

このレイヤーを含むフィーチャ サービスのアイテム ID。

String

URL

フィーチャ レイヤー REST エンドポイントの URL (…/FeatureServer/0)。 この URL には、レイヤー インデックスまでの完全な URL を含める必要があります。

String

1 つ以上のデータ ソースを dataSource プロパティで列挙できます。 次の例では、2 つの異なるフィーチャ サービスに含まれる 2 つのレイヤーが列挙されています。

{
   "basemap":{

   },
   "dataSources":[
      {
         "featureServiceItemId":"1f683747c06c4a7e9843a477b2ab41e0",
         "dataSourceId":0,
         "url":"https://services1.arcgis.com/e7dVfn25KpfE6dDd/arcgis/rest/services/LayerOne/FeatureServer/0"
      },
      {
         "featureServiceItemId":"2b313747c06c4a7e9843a477b2ab41e0",
         "dataSourceId":1,
         "url":"https://services1.arcgis.com/b45KpfE6dEf121/arcgis/rest/services/LayerTwo/FeatureServer/1"
      }
   ],
   "itemId":"",
   "preferences":{

   },
   "templateGroups":[

   ],
   "userInputs":[

   ],
   "version":""
}

初期設定

次のプロパティをプロジェクトまたはプロジェクト内の取得されたすべてのレコードに適用できます。

プロパティ説明フィールド タイプ
backgroundColor

HTML 16 進値としてのプロジェクト背景色。

String

splitScreen

ボタンとマップを並べて表示します。

Boolean

horizontalAccuracyWarning

水平精度が十分考慮されなくなる推奨閾値を定義する、メートル単位の小数値。 これは、プロジェクト ページ上の水平精度表示の色を変更するために使用します。 このプロパティには、999 メートルの最大値を指定できます。

Decimal

horizontalAccuracyError

水平精度が十分考慮されなくなる必須閾値を定義する、メートル単位の小数値。 これは、閾値が満たされなかった場合にユーザーがレコードや頂点を取得できないようにするために使用します。 このプロパティには、999 メートルの最大値を指定できます。

Decimal

allowEditLocation

取得してから制限時間内に、ポイントの位置情報を更新できるようにします。

Boolean

distanceThreshold

新しい頂点またはポイントを取得するための、取得された最後の頂点またはポイントからの最小移動距離 (メートル単位)。 デフォルトの距離は 10 メートルです。

Decimal

undoThreshold

レコードを削除できるまたは位置を更新できる取得後の時間 (秒単位)。

Decimal

adminEmail

モバイル アプリによって生成されたデータ復旧ファイルの受信者を指定します。

String

coordinateNotationFormat

モバイル アプリに表示されるプロジェクトの座標表記形式を設定します。サポートされている値は、UTM、USNG、MGRS、DD、DDM、DMS です。 デフォルトは DD です。

Double

閾値は horizontalAccuracyWarninghorizontalAccuracyError のどちらにも設定できますが、horizontalAccuracyWarning 値は常にエラーより小さくする必要があります。 たとえば、推奨水平精度を 10 メートルに、必須水平精度を 30 メートルに設定して、デバイスから 20 メートルの精度が返された場合は、警告が表示されます。 デバイスから 40 メートルの精度が返された場合は、レコードを取得できなくなります。

次の例は、灰色の背景、10 メートルの推奨水平精度、距離閾値なし、および quickcapture@esri.com の管理者電子メール アドレスで設定された基本設定を示しています。

{
   "basemap":{

   },
   "dataSources":[

   ],
   "itemId":"",
   "preferences":{
      "splitScreen":false,
      "backgroundColor":"#f3f3f4",
      "horizontalAccuracyError":null,
      "horizontalAccuracyWarning":10,
      "distanceThreshold":null,
      "undoThreshold":10,
      "adminEmail":"quickcapture@esri.com"
   },
   "templateGroups":[

   ],
   "userInputs":[

   ],
   "version":""
}
注意:

小数値では小数点の記号としてピリオドを使用し、3 桁ごとの区切り文字は使用しないでください。 JSON エディターではカンマが許容されません。

テンプレート グループ

次のプロパティがプロジェクト内のボタンのグループの表示方法の定義に使用されます。 ボタンのグループごとに別々のプロパティを使用できます。

プロパティ説明フィールド タイプ
name

グループの名前。

String

label

グループのプロジェクト内に表示されるラベル。

String

columns

グループ内の列数。

Integer

columnSpacing

列間の間隔。

Decimal

rowSpacing

行間の間隔。

Decimal

backgroundColor

HTML 16 進値としてのグループの背景色。

String

outlineColor

HTML 16 進値としてのグループのアウトライン色。

String

expanded

デフォルトは true です。

Boolean

labelColor

HTML 16 進値としてのグループ ラベルの色。

String

テンプレート

次のプロパティがボタンに関連したフィーチャ レイヤーの識別に使用されます。

プロパティ説明フィールド タイプ
id

ボタンの UUID。

テキスト

dataSourceId

データが保存されているターゲット レイヤーを参照します。 この ID は、データ ソース配列内のデータ ソースを参照します。

Integer

captureInfo

次のプロパティでデータの取得方法を指定します。

プロパティ説明フィールド タイプ
exclusivityGroup

排他性グループを定義する値。 同じ値を持つすべてのテンプレートがグループ化され、排他的が true に設定されます。 設定すると、値を持つ 1 つのボタンしかアクティブにできなくなります。

テキスト

type

esriGeometryPoint、esriGeometryPolyline、または esriGeometryPolygon。

String

continuous

ラインとポリゴンでは常に true です。

Boolean

editMap

マップの編集のためのオプション。 取得後に表示 (デフォルトは false)、マップ タイトルのカスタマイズ (デフォルトは NULL)、またはマップ ヒントのカスタマイズ (デフォルトは NULL) を行うために選択します。

String

displayInfo

次のプロパティでボタンの外観を指定します。

プロパティ説明フィールド タイプ
label

ボタン上のラベル。

String

shape

Rectangle、rounded、circle。

String

size

Small、medium、large、xlarge、xxlarge。

String

color

HTML 16 進値としてのボタン背景の色。

String

outlineColor

HTML 16 進値としてのボタン アウトラインの色。

String

outlineWidth

ボタン アウトラインの幅。

Decimal

labelColor

HTML 16 進値としてのボタン ラベルの色。

String

labelFontSize

ボタン ラベルのフォント サイズ。

Integer

labelFontWeight

Bold または regular。

String

shadowColor

値が指定されなかった場合は、アプリがグループと同じ backgroundColor を使用します。 これは、影が表示されないことを意味します。

String

image

PNG、JPG、SVG 形式のボタンと一緒に表示される画像。 すべての画像がアイテムのリソースとして画像フォルダー内に保存されます。

String

fieldInfos

次のプロパティでボタンのタップ時にフィーチャ サービスに入力される属性情報を指定します。 通常、プロジェクト作成者は、事前に定義されたテキストまたはフィールド変数を使用して、収集されたレコードのフィールドに値を入力します。

プロパティ説明フィールド タイプ
fieldName

フィールドの名前。

String

value

このトピックで一覧表示された任意のプロパティを含めることができます。

String

cameraInfo

次のプロパティで写真またはビデオの取得方法とプロジェクトへの保存方法を指定します。 デフォルトで、ボタンに対して写真の取得を有効にした場合は、写真が常に必須になります。 写真の取得をオプションにするには、required プロパティを false、minMedia を 0 に変更します。 また、imageSize プロパティを変更して、写真の品質を指定することもできます (ビデオのデフォルトの最大長は 10 秒です)。

プロパティ説明フィールド タイプ
mode

None (デフォルト) - 写真またはビデオがフィーチャに関連付けられません。

Automatic - ボタンが選択されるとユーザーの確認なしに写真が撮影されます。

Manual - カメラ プレビューが表示され、ユーザーが写真の取得を制御します。

String

imageSize

Small (最長エッジのピクセル数: 320)、medium (デフォルト、最長エッジのピクセル数: 640)、large (最長エッジのピクセル数: 1280)、unrestricted (サイズ制限なし)。 画像がアプリによってサイズ変更される場合、取得した画像の縦横比は維持されます。

String

required

true (デフォルト) または false。

Boolean

captureVideo

true または false (デフォルト)。

Boolean

capturePhoto

true (デフォルト) または false。

Boolean

maxMedia

ボタンで取得した写真またはビデオの最大数。 最大制限は、写真の場合は 5、ビデオの場合は 1 です。

Integer

minMedia

ボタンで取得した写真やビデオの最小数。

Integer

次の例では、サイズ制限がないオプションの写真がプレビューの確認なしで撮影されます。

{
   "cameraInfo": {
      "mode": "automatic",
      "imageSize": "unrestricted",
      "required": false,
      "captureVideo": false,
      "capturePhoto": true,
      "maxMedia": 1,
      "minMedia": 0
   },

notificationsInfo

次のプロパティがプロジェクト内の通知の構成に使用されます。 現在、サポートされている通知は Webhook のみです。

プロパティ説明フィールド タイプ
id

Webhook の一意の ID (プロジェクト内)。

String

name

Webhook の名前。

String

active

true または false (デフォルト)。

Boolean

created

Webhook の作成日時。

Date

modified

Webhook が最後に変更された日時。

Date

events

Webhook をトリガーしたイベントのタイプ。 addData イベントのみがサポートされています。

String

targetLayerUrl

Webhook が構成されたフィーチャ サービス レイヤー (レイヤー インデックスを含む)。 このレイヤーの更新により addData イベントがトリガーされます。

String

webhookUrl

ペイロードが送信される Webhook URL。

String

includePortalInfo

true (デフォルト) または false。

Boolean

includeProjectInfo

true (デフォルト) または false。

Boolean

includeServiceRequest

true (デフォルト) または false。

Boolean

includeServiceResponse

true (デフォルト) または false。

Boolean

次の例では、1 つの Webhook が表示されますが、複数の Webhook を 1 つのプロジェクトに構成できます。

 "notificationsInfo": {
    "webhooks": [
      {
        "active": true,
        "created": 1502880915000,
        "events": [
          "addData"
        ],
        "id": "ByCjvHpPz",
        "includePortalInfo": true,
        "includeProjectInfo": true,
        "includeServiceRequest": true,
        "includeServiceResponse": true,
        "includeUserInfo": true,
        "modified": 1502881754000,
        "name": "Display name",
        "targetLayerUrl": "https://<serviceurl including layer index>",
        "webhookUrl": "https://<webhookserviceurl>"
      }
    ]
  }

フィールド変数

この変数を JSON エディターで使用する場合は、変数名を ${variable_name} の形式で入力する必要があります。 次の例では、username 変数が NameOfUser という名前のフィールドに割り当てられています。

"fieldInfos": [
 {
   "fieldName": "NameOfUser",
   "value": "${username}"
 },

ユーザー入力変数

userInput 変数値は、アプリの利用者によって入力され、プロジェクト内の 1 つ以上のボタンに適用できます。 アプリの利用者が値を入力しますが、プロジェクト作成者は変数を適用するボタンとフィールドを定義する必要があります。

プロジェクト JSON では、ユーザー入力は userInputs 配列で定義され、"fieldInfos"id プロパティを使用して参照されます。

プロパティ説明フィールド タイプ
Id

ユーザー入力の一意の ID。

String

label

想定されるエンド ユーザーからの入力値に関するラベルがモバイル アプリに表示されます。 たとえば、RouteNo、CostCenter、RouteNo-CostCenter などのラベルが付けられます。

String

fieldType

ユーザー入力値を書き込み可能なフィールドのタイプ。 オプションは esriFieldTypeStringesriFieldTypeDoubleesriFieldTypeInteger に制限されます。

String

required

モバイル アプリのエンド ユーザーがユーザー入力値を入力する必要があるのは、ボタンを押す前 (プロジェクト モード) か、ボタンを押した後 (ボタン モード) かを指定します。

Boolean

domain

ユーザー入力を制御します。数値範囲 (range)、事前に定義された値のリスト (codedValue)、またはオプションで入力マスクを使用したテキスト入力 (userDefined) に制限されています。

String

mode

ユーザーが入力を求められるのは、プロジェクトの起動時 (project) か、ボタンの押下時 (button) かを制御します。

String

multiline

複数行のテキストの入力を許可します。 これは、domain が userDefined の場合にのみ適用されます。

Boolean

autoCompleteMaxEntries

プロジェクト ユーザー入力のためにキャッシュされる、ユーザーが入力した値の数を指定します。

Integer

showEvent

ボタン ユーザー入力ダイアログ ボックスがレコード取得の最初に表示されるか、最後に表示されるかを制御します。 オプションは onStart と onEnd です。 デフォルトは onEnd です。 これは、domain が userDefined の場合にのみ適用されます。

String

showScanner

バーコード スキャナーがユーザー入力に表示されるかどうかを制御します。 デフォルトは false です。 これは、domain が userDefined の場合にのみ適用されます。

Boolean

dateTime

日時の入力を制御します。 これは、domain が userDefined の場合にのみ適用されます。 defaultValue、displayTime、maxValue、minValue で制限されることがあります。

Date

各モードを使用するタイミングを確認するには、「プロジェクト ユーザー入力変数」または「ボタン ユーザー入力変数」をご参照ください。

ドメインはフィーチャ サービス内で管理することをお勧めします。 Web デザイナーは、フィーチャ サービスから直接ドメイン情報を読み取って、ユーザー入力を作成します。 ドメイン情報は、プロジェクトの JSON に自動的に書き込まれません。

モバイル アプリは、フィーチャ サービスから直接ドメイン情報を読み取って、それをデバイスにローカルに保存します。 フィーチャ サービス内のドメイン値を追加または変更した場合は、プロジェクトを再保存して、ユーザーにプロジェクトの更新と変更の確認を促す必要があります。

注意:

プロジェクト作成者は、プロジェクトの JSON を使用して、ドメイン情報を手動で直接定義することもできます。 この場合は、フィーチャ サービスから読み取られた内容が無視されます。 定義した値がフィーチャ サービスで定義された制限内に収まっていることを確認するのは作成者の責任です。 たとえば、フィーチャ サービス内の非常に長いリストからプロジェクト内のコード値のサブセットを定義する場合などに、この方法が選択されます。

次の例で、range ドメイン ユーザー入力を定義し、データ入力を 1 ~ 100 の数値に制限する方法を示します。

{
   "userInputs":[
      {
         "autoCompleteMaxEntries":5,
         "id":"001",
         "label":"Enter route number",
         "fieldType":"esriFieldTypeInteger",
         "required":true,
         "mode":"project",
         "domain":{
            "type":"range",
            "name":"route no",
            "range":[
               1,
               100
            ]
         }
      }
   ]
}

次の例で、codedValue ドメイン ユーザー入力を定義し、データ入力を 3 つの値のいずれかに制限する方法を示します。

{
   "userInputs":[
      {
         "autoCompleteMaxEntries":5,
         "id":"001",
         "label":"Enter class",
         "fieldType":"esriFieldTypeString",
         "required":true,
         "mode":"project",
         "domain":{
            "type":"codedValue",
            "name":"Class",
            "codedValues":[
               {
                  "name":"Principle",
                  "code":"Principle"
               },
               {
                  "name":"Classified (Non-principle)",
                  "code":"Classified"
               },
               {
                  "name":"Unclassified",
                  "code":"Unclassified"
               }
            ]
         }
      }
   ]
}

次の例は、userDefined テキスト ユーザー入力を定義し、行の取得の開始時に QR コードをスキャンできるよう許可する方法を示します。

{
   "userInputs":[
      {
         "id":"001",
         "label":"Scan QR code",
         "fieldType":"esriFieldTypeString",
         "required":true,
         "mode":"button",
         "domain":{
            "type":"userDefined",
            "name":"line identifier",
            "multiline":false,
            "showScanner":true,
            "showEvent":"onStart"
            "hint":"Scan QR code or type the identifier of the line to be captured"
         }
      }
   ]
}

次の例は、userDefined ドメイン ユーザー入力を定義し、2022 年 6 月から 12 月までの日付のデータ入力を可能にする方法を示します。

{
   "userInputs":[
      {
         "id":"001",
         "label":"Enter date",
         "fieldType":"esriFieldTypeDate",
         "required":true,
         "mode":"button",
         "domain":{
            "type":"userDefined",
            "name":"followup date",
            "multiline":false,
            "hint":"Enter date between June and December 2022",
            "dateTime": {
               "defaultValue": "${captureTime}",
               "displayTime": true,
               "maxValue": "2022-06-01T00:00:00.000Z",
               "minValue": "2022-12-31T24:59:00.000Z"
            }
         }
      }
   ]
}

次の例は、userDefined ドメイン ユーザー入力を定義し、データ入力を 4 桁のルート ID に制限する方法を示します。

{
   "userInputs":[
      {
         "id":"001",
         "label":"Enter route number",
         "fieldType":"esriFieldTypeString",
         "required":true,
         "mode":"button",
         "domain":{
            "type":"userDefined",
            "name":"route no",
            "inputMask":"9999",
            "multiline":false,
            "hint":"Enter a four digit route id"
         }
      }
   ]
}

userInput を定義したら、プロジェクト作成者はそれをフィールドで使用するために割り当てることができます。 routeNo という名前のフィールドに値を入力するために使用される ID が 001 の userInput を以下に示します。

{
   "fieldInfos":[
      {
         "fieldName":"routeNo",
         "value":"${userInput:001}"
      }
   ]
}

入力マスク

入力マスクは、ユーザー入力変数の一部として文字とシンボルを使用することで、データ入力の形式を定義します。 入力マスクをユーザー入力変数に適用する場合、ユーザーが入力した値は、入力マスクによって定義された特定のパターンに従っていなければなりません。

入力マスクをユーザー入力変数に適用するには、userInputs.domain.inputMask プロパティでマスクを定義します。

ユーザー入力変数に適用可能なすべてのマスクと例のリストについては、「入力マスク」をご参照ください。

位置情報の共有

次のプロパティが位置情報の共有レイヤーの識別に使用されます。

プロパティ説明フィールド タイプ
enabled

プロジェクトでトラッキングを有効化します。 デフォルトは false です。

Boolean

required

プロジェクトを使用するには、トラッキングが有効である必要があります。 デフォルトは false です。

Boolean

lastKnownLocationsUpdateInterval

最新位置レイヤーが更新される頻度 (秒)。 デフォルト値は 60 秒です。 最小値は 5 秒です。

Decimal

tracksUploadInterval

トラック レイヤーが更新される頻度 (秒)。 デフォルト値は -1 (オフ) です。 または、600 秒に設定できます。

Decimal

tracksCategory

トラック レイヤーのカテゴリ フィールドに書き込まれる値を定義します。 プロジェクト名、固定値、プロジェクト ユーザー入力を使用できます。 デフォルトはプロジェクト名です。

テキスト

lastKnownLocationsCategory

最新位置レイヤーのカテゴリ フィールドに書き込まれる値を定義します。 プロジェクト名、固定値、プロジェクト ユーザー入力を使用できます。 デフォルトはプロジェクト名です。

テキスト

次の例は、位置情報の共有が有効になっていますが、プロジェクトを使用するために必要でないことを示しています。 最新位置は 60 秒ごとに更新され、トラックは 600 秒ごとに更新されます。 プロジェクト名は、最新位置レイヤーとトラック レイヤーのカテゴリ フィールドに書き込まれます。

{
   "tracking": {
      "enabled": true,
      "required": false,
      "lastKnownLocationsUpdateInterval": 60,
      "tracksUploadInterval": 600,
      "tracksCategory": "${projectName}",
      "lastKnownLocationsCategory": "${projectName}"
   }
}