パネルを作成
Coupaの特定のページ用のパネルアプリの作成方法について説明します。
はじめに
パネルアプリを使用すると、顧客は特定のCoupaページのUIパネル内で外部ソースからのデータを表示できます。このデータはコンテキスト固有であり、自動的または手動で更新できます。たとえば、サプライヤーページがCoupaで読み込まれると、そのページのパネルアプリは、特定のサプライヤーに関連するAPIを介して外部ソースからデータを自動的に取得し、Coupaにデータを表示することができます。
[設定] > [プラットフォーム] > [IFrames and Panels]に移動してパネルアプリを作成し、[ 作成] ボタンをクリックし、オプションをクリックします。 Panel.パネルアプリを作成および構成するための鍵は、アプリのパラメーターのJSON形式セットであるDescriptorを介しています。
これは、Coupaホームページのパネルアプリの例です。
パネルアプリを作成するには、[設定] > [プラットフォーム] > [インストール済みアプリ]に移動します。[作成]ボタンをクリックし、[新しいパネルアプリの作成]を選択します。
要件
R 29以降、パネルアプリでは、サードパーティのAPIへのアウトバウンド接続を行うには、少なくともTLS v1.2が必要です。
Panelアプリの基本
Panelアプリは、JSON形式を使用するアプリ記述子を使用して構築されます。記述子は、データとブロックの2つの主なプロパティで構成されています。データはJQ v1.6を使用して処理されます。
プロパティ | 説明 |
---|---|
スロット |
パネルを表示するページタイプを指定します。現在のオプションは次のとおりです。
パネルアプリごとに指定できるスロットは1つだけです。アプリを複数のページに表示するには、希望する |
|
データ属性は、パネルでレンダリングされる目的のデータを取得する方法を説明します。パネルをレンダリングするために取得するデータを説明するJSONオブジェクト。このオブジェクトの値は、Coupaがデータを取得するためにリクエストを送信するURLになります。これらすべてのデータ要求からの応答は、このオブジェクトで与えられたキー名の下でエイリアスされた1つのハッシュにマージされます。
|
context |
ニューヨーク・タイムズの記事へのAPIコールで、サプライヤーに関する最近の記事を検索すると、次のようになります。
各スロットで使用できるコンテキストデータの更新されたリストについては、Coupaにお問い合わせください。 |
API呼び出し(プロパティ)のパラメータ化 |
パネルアプリを有効にした後、ユーザー/管理者が提供する必要があるプロパティの配列です。アプリ/APIで一意のAPI鍵、またはそれを有効にする各Coupa顧客のログイン/パスワードが必要な場合、そのオプションを提供する方法は次のとおりです。 ブロックの例は次のとおりです。
次に、次のようにデータブロックでプロパティを参照します。
Coupa管理者が新しいパネルアプリを有効にすると、アプリ記述子で指定されているすべての「プロパティ」フィールドに入力するよう求められます。 |
立ち上げ |
パネルアプリをすぐに表示する必要がない場合に使用できる起動ボタンを追加します。パネルアプリは、自動的にサードパーティに連絡してデータをレンダリングするのではなく、エンドユーザーが手動で起動ボタンをクリックした場合にのみ手を差し伸べます。 このJSONオブジェクトには、
|
allow_refresh |
ページ上のデータが変更され、パネルアプリでレンダリングされたデータに影響を与えるときに使用できる更新ボタンを追加します。これは、リクエスト行が更新されたときにカートパネルアプリに便利です。ユーザーは、[更新]ボタンをクリックして、パネルアプリでデータを更新できます。 これはブール値オプションで、アプリディスクリプターのパネルアプリにリフレッシュボタンを表示するために使用します。 "allow_refresh ": true
ボタンをクリックすると、そのアプリのコンテンツが更新されます。このフィールドは、ブロックではなく、「スロット」、「データ」、「起動」などと同じレベルに追加する必要があります。リフレッシュボタンはパネルアプリケーションの上部に表示されます。 |
blocks |
ブロック属性は、パネルでデータをレンダリングする方法を説明します。これは、個別の視覚化を記述するさまざまなタイプのJSONオブジェクト(「ブロック」)の配列です。ブロックには、以前に送信されたデータへのアクセス権があり、それを使用して視覚化を作成します。 |
error_blocks |
Error blocks属性はblocks属性と同様に機能しますが、データの取得またはレンダリングに問題がある場合にエラーメッセージを作成するために使用されます。 |
データの取得中
アプリのデータを取得するために、アプリは最大5つの別々のHTTP呼び出しを行うことができます。これらは、記述子のdata属性を使用して指定されます。APIコールは、JSON (推奨)またはXMLのいずれかを返す必要があります。
Panelアプリブロックタイプ
パネルアプリは、ブロックと呼ばれるさまざまなタイプのUI要素を使用して、既存のCoupaページ上のデータをレンダリングします。Coupaは次のブロックタイプをサポートしています。
- リッチテキスト(画像を含む)
- フィールド(基本的にキーと値のペア)
- 番号
- 貨幣
- 円グラフ
- 折れ線/棒/列グラフ
- 開始
- 再読み込み
- 行
- 動的テーブル
APP設定
属性 | 説明 |
---|---|
|
ブロックのタイプを識別します。たとえば、 |
|
このJSONオブジェクトには、戦略に応じて異なるプロパティがあります。 JQ
JQによるデータ 処理 たとえば、次のJQスクリプトを使用して、いくつかの特定のデータを抽出し、別のJSONオブジェクトに再パッケージ化できます。
これにより、次のJSONオブジェクトが生成されます。
詳細情報: |
|
異なるブロックタイプは、そのブロックタイプに固有の他のプロパティを有することができる。 |
Panelアプリブロックタイプ
テキストブロック
属性 | 説明 |
---|---|
|
同じ |
template |
テキストブロックタイプは、リキッドマークダウンテンプレートを使用します。テンプレートは、最初にLiquidとして解析され、要求から返されるデータを補間します。その後、テンプレートは再びMarkdownとして解析され、HTMLが生成されます。 Markdownは、HTMLを生成する安全な方法を提供し、セキュリティ上の理由から、CoupaはテンプレートでインラインHTMLをブロックします。ブロックの構成を格納するデータ列の最大制限以外の文字制限はありません。 Markdownでは、ヘッダー、インライン強調フォーマット、リスト、画像、リンク、およびブロック引用符を使用できます。Coupaは、構文の強調表示と表もサポートしています。 LiquidとMarkdownの操作の詳細については、Liquidテンプレート言語とMastering Markdownを参照してください。 |
data |
データ戦略は単一のJSONオブジェクトを生成する必要があります。オブジェクト内のすべてのキーは、Liquidテンプレートに変数として使用できます。
|
現在、テキストブロックは、kramdownテーブル形式を使用してテーブルにデータを表示するための最善/唯一の方法です。
フィールドブロック
プロパティ | 説明 |
---|---|
|
同じ |
データ |
データ戦略は、ラベルと値の属性を持つJSONオブジェクトの配列を生成する必要があります。レンダリングすると、ラベルがフィールドラベルとして使用され、値がフィールド値として使用されます。
|
タイトル |
フィールドのリストの下に表示されるオプションのタイトル。 |
バー/ラインブロック
プロパティ | 説明 |
---|---|
|
|
データ |
データ戦略は配列の配列を生成する必要があります。テーブルブロックとは異なり、棒グラフ/折れ線グラフのデータは列指向になります。 各配列は、表示される単一の一連のデータを表します。最初の要素は系列の名前であり、残りの要素は系列の点です。
|
軸 |
X軸とY軸上のラベルの設定を可能にします。 |
タイトル |
グラフの下に表示されるオプションのタイトル。 |
説明 |
グラフの下に小さなテキストで表示されるオプションの説明。 |
円ブロック
プロパティ | 説明 |
---|---|
|
等しい パイにしてください |
データ |
データ戦略は、バー/ラインブロックセクションで説明されているように、列指向の配列を生成する必要があります。
|
タイトル |
グラフの下に表示されるオプションのタイトル。 |
説明 |
グラフの下に小さなテキストで表示されるオプションの説明。 |
マネーブロック
プロパティ | 説明 |
---|---|
|
同額である必要があり ます |
データ |
データ戦略は、次の構造を持つJSONオブジェクトを生成する必要があります。
|
タイトル |
番号の下に表示されるオプションのタイトル。 |
説明 |
小さいテキストで数字の下に表示されるオプションの説明。 |
数値ブロック
プロパティ | 説明 |
---|---|
|
数字に等しくする必要があります |
データ |
データ戦略は、単一のJSON整数またはFloatを生成する必要があります。
|
小数点以下 |
小数点後に表示する小数桁数。デフォルトは0です。 |
タイトル |
番号の下に表示されるオプションのタイトル。 |
説明 |
小さいテキストで数字の下に表示されるオプションの説明。パネルアプリの例 |
カスタムフィールド
コンテキスト依存オブジェクトのカスタムフィールドにアクセスするには、次の一般的な形式に従います<object>。context ..custom_fields。<field_name>
<field_name>
は、カスタムフィールドを作成するときのフィールド名プロンプトです。
Supplierオブジェクトを調べていて、[電話番号]というフィールドがあるので、次のように参照します。context.supplier.custom_fields.phone_number
スロット | カスタムフィールドアクセサ |
---|---|
contracts.show | context.contract.custom_fields。<field_name> |
projects.show | context.project.custom_fields。<field_name> |
quotes/requests.show | context.quote_request.custom_fields。<field_name> |
requisition_headers.edit | context.requisition_header.custom_fields。<field_name> |
suppliers.show | context.supplier.custom_fields。<field_name> |
カスタムフィールドは、次のような特定のオブジェクトを参照していないスロットには適用されません。
user.home
expenses.index
API詳細
認証
Coupaは次の認証タイプをサポートしています。
方法 | 例 |
---|---|
Standard APIキー |
|
基本認証 |
|
「before_data」要求を使用した短命トークンの要求 |
|
API URL
- URLはHTTPSにする必要があります
- URLはCoupaサーバーがアクセスできる必要があります(つまり、HEADリクエストが成功する必要があります)
- URLは、有効なLiquidテンプレートとして正常に解析されなければなりません。これは補間を有効にするためです
APIリクエストの詳細
- Liquidを使用してURLにデータを補間する場合、結果は有効なURLにする必要があります
- 応答コードは200または204にする必要があります
- リモートサーバーは5秒のタイムアウト期間内に応答する必要があります
- レスポンスのコンテンツタイプは、application/jsonまたは
application/xmlのいずれかにする必要があります
ボタン
パネルアプリの起動ボタン(起動
)と更新ボタン( ALLOW_REFRESH
)を設定できます。機能はブロックのように見えますが、技術的にはボタンはブロックではありません。ボタンの詳細については、この記事のパネルアプリの基本セクションを参照してください。詳細については、をご覧ください。
Panelアプリコンテキスト
次のページ用にパネルアプリを構築できます。
- ホームページ:
/
and/user/home
- サプライヤーページ
:/ suppliers /: id/record
- 契約ページ
:/ contracts/show /: id
- カート:
/requisition_headers /{ id }/ edit
- プロジェクトのホームページ:
projects.show
- ソーシングイベント設定ページ:
quotes/requests.show
各パネルアプリタイプに応じてコンテキストペイロードがあります以下は、パネルアプリAPIペイロードで提供されるフィールドで、データの照合と検索にコンテキストとして使用されます。
ページ | 利用可能なフィールド |
---|---|
すべてのパネルアプリ | user_instance (すなわち、[ドメイン名].coupahost.com )がペイロードに含まれます。 |
ホームページ | id , email , fullname , login , employee_number |
請求書の表示/編集 |
|
サプライヤーページ |
custom_fields: |
契約ページ | id , parent_contract_id , name , number , version , supplier_id , start_date , status |
カート | カートパネルアプリペイロードには、申請ヘッダーAPIペイロードと同じフィールドが含まれます |
プロジェクト | すべてのプロジェクトシステムフィールドとカスタムフィールド |
見積イベント |
|
Panelアプリの例
ニューヨークタイムズの記事検索
このアプリは、サプライヤーのページにニューヨークタイムズのサプライヤーに関する最近のニュースを追加します。これを機能させるには、NYT APIキーを取得する必要があります。
これはアプリを駆動するコードです。
{
"properties ": {
"api_key ": {
"type ":" string "
}
},
"SLOT ":" suppliers.show ",
"before_data ": {}、
"data ": {
"nyt_data ": {
"URI ":" https://api.nytimes.com/svc/search/v2/articlesearch.json?q ={ context.supplier.name }& api - key ={ properties.api_key }"
}
},
"BLOCKS ": [
{
"type ":" text ",
"data ": {
"type ":" jq ",
"jq ": "{\" docs \": .nyt_data | .response | .docs }"
},
"TEXT ": "![ nyt logo ]( http://www.transervice.com/wp-content/uploads/2018/06/the-new-york-times-4.png) {: height =\" 100 px \"}"
},
{
"type ":" text ",
"data ": {
"type ":" jq ",
"jq ": "{\" docs \": .nyt_data | .response | .docs }"
},
"text ":"1 .[{{ docs [0 ].headline.main }}]({{ docs [0 ].web_url}})\ n 2 .[{{ docs [1 ].headline.main }}]({{ docs [1 ].web_url}})\ n 3 .[{{ docs [2 ].headline.main }}]({{ docs [2 ].web_url}})\ n 4 .[{{ docs [3 ].headline.main }}]({{ docs [2 ].web_url}})\ n 5 .[{{ docs [2 ].headline.main }}]({{{ docs [4 ].web_url}})\ n"
}
]
}
Weather Panelアプリ
この例示的なアプリは、場所の温度の側面のグラフィカルな表現を示す。これを機能させるには、APIキーを取得する必要があります。
これはアプリを駆動するコードです。
{
"properties ": {},
"SLOT ":" suppliers.show ",
"data ": {
"CHICAGO_DATA ": {
"METHOD ":"取得",
"URI ":" https://api.openweathermap.org/data/2 .5/weather? q = Chicago&appid = 155057 bc 8 e 3 dde 82 a 6482 e 76 bddf 9 c 10 & units = imperial "
}
},
"BLOCKS ": [
{
"type ":" bar ",
"タイトル":"これがシカゴの天気です",
"data ": {
"type ":" jq ",
"jq ": "[{ name :\" Temp \", data :[.chicago_data.main.temp]}, {name :\" Wind Speed \", data :[.chicago_data.wind.speed]}, {name :\" Humidity \", data :[.chicago_data.main.humidity ]}]"
},
"axes ": {
"xAxis ": {
"labels ": {
"enabled ": false
}
},
"yAxis ": {
"title ": {
"TEXT ": ""
},
"max ":100
}
}
},
{
"type ":" line ",
"タイトル":"これがシカゴの天気です",
"data ": {
"type ":" jq ",
"jq ": "[{ name :\" Minimum, Current, max temp for Chicago \", data: [[.chicago_data.main.temp_min], [.chicago_data.main.temp], [.chicago_data.main.temp_max]]}, {name :\" Fake data not from API \", data: [44, 52, 130, 87, 74, 88 ]}]"
},
"axes ": {
"xAxis ": {
"labels ": {
"enabled ": true
},
"categories ": [
"1月",
"2月",
"3月",
"4月",
"5月",
「六月」
]
},
"yAxis ": {
"title ": {
"TEXT ": ""
},
"max ":200
}
}
}
]
}
PanelアプリAPIの例
以下は、自動テストに使用されるアプリ記述子です。APIレスポンスを切り捨てて、正確に次のように返します。
[
{
"DATA_TITLE ":"タイトル",
"data_number ": 42,
"second_score ": 88
}
]
{
#ここで、クライアント固有のフィールドを設定します。ログインやパスワードなど。お客様に入力を促すメッセージが表示されます
#これらの値は、アプリケーションをアクティブ化するときに1回だけ
"properties ": {},
#これはアプリが表示されるページです。使用可能な値については、「slot」プロパティを参照してください。
"SLOT ":" suppliers.show ",
#一部のAPIでは、ベアラートークンまたは2段階のプロセスが必要です。これを処理します。
"before_data ": {}、
"data ": {
"coupa_data ": {
#このAPI呼び出しにコンテキスト固有の値を追加できます。例えば、{{context.contract.supplier_name}}
"URI ":" http://fake.test ",
#これは直感的に機能します。ここでAPIヘッダー、ベアラートークン、パラメータなどを指定するだけです。
"HEADERS ": {}
}
},
"BLOCKS ": [
{
"type ":" number ",
#これはこのブロックのハードコードされたタイトルです。ここではAPIデータやコンテキストデータを使用できません
"タイトル":"番号ブロックのタイトル",
#" coupa_data "は上記のAPI応答でした。[0]は{}のものを返し、".data_number"は値を取得します。
#この場合「42」
"data ": {
"type ":" jq ",
"jq ": ".coupa_data |.[ 0 ]|.data_number"
}
},
#したがって、このブロックは、大きな太字の数字「42」で、特別に書式設定された数字ブロックをレンダリングします。
#と「番号ブロックのタイトル」のテキストラベル/タイトル
{
# Fieldsブロックには、データに対する最も厳格な要件がいくつかあります。すべてのデータをキー->値のペアで表示します
"type ":" fields ",
"data ": {
"type ":" jq ",
"jq ": ".coupa_data |.[]| to_entries | map ({label :.key, value :.value })"
}
},
{
#このブロックでは、[]からハッシュを引き出し、その中の値を使用します。
"type ":" text ",
"data ": {
"type ":" jq ",
"jq ": ".coupa_data |.[ 0 ]"
},
#テキストブロックを使用すると、コンテキスト内でAPIレスポンスからのデータを柔軟に表示できます。
#テキストはマークアップと同じように書式設定できるため、リンク、表、画像のレンダリング/サイズ変更などを行うことができます。
"text ": "{{ data_number}} はDATA_NUMBERです"
},
{
#棒グラフを設定するのはかなり難しいです。このルートに行きたい場合は、私たちと協力してください。
#しかし、この例では、API応答の値に基づいて値/ラベルバーサイズの棒グラフを作成します
"type ":" bar ",
"タイトル":"偽のデータを含む棒グラフ",
"data ": {
"type ":" jq ",
"jq ": "[{ name :\"総合スコア\", data: [.coupa_data |.[ 0 ].data_number]},
{name :\"環境スコア\"、データ: [.coupa_data |.[ 0 ].second_score ]}]"
},
"axes ": {" xAxis ": {" labels ": {" enabled ": false}}," yAxis ": {" title ": {" text ": ""}, "max ":100}}
}
]
}
パートナーのインスタンスでテストする
Coupaでこれをテストするには、バージョンR25.0以上である必要があります。最終的に、アプリはカスタムパネルアプリではなくアプリディレクトリの一部になりますが、これらの手順を使用して、Coupaがアプリをアプリディレクトリに正式に追加する前に独自にテストすることができます。
- [設定]に移動します。
- [プラットフォーム]で[インストール済みアプリ]をクリックします
- [Create]ボタンをクリックし、[Create New Panel App]を選択します。
- アプリを作成する
- 名前を追加
- [記述子]セクションに、上記のコードを含めます。
完了すると、エラーがなければ、パネルアプリが各サプライヤーページに表示されます。
Coupa App Marketplaceからアプリをダウンロードする
Coupa App Marketplaceにアクセスしてパネルをダウンロードし、提供されたインストール手順に従ってください。インストールされているアプリの表示の詳細については、Coupaのアプリマーケットプレイスを参照してください。