• 最終編集日時: 11 August 2022

パネルを作成

Coupaの特定のページ用のパネルアプリの作成方法について説明します。

はじめに

パネルアプリを使用すると、顧客は特定のCoupaページのUIパネル内で外部ソースからのデータを表示できます。このデータはコンテキスト固有であり、自動的または手動で更新できます。たとえば、サプライヤーページがCoupaで読み込まれると、そのページのパネルアプリは、特定のサプライヤーに関連するAPIを介して外部ソースからデータを自動的に取得し、Coupaにデータを表示することができます。

[設定] > [プラットフォーム] > [IFrames and Panels]に移動してパネルアプリを作成し、[ 作成] ボタンをクリックし、オプションをクリックします。 Panel.パネルアプリを作成および構成するための鍵は、アプリのパラメーターのJSON形式セットであるDescriptorを介しています。

これは、Coupaホームページのパネルアプリの例です。

Coupaのホームページにあるパネルアプリの例

パネルアプリを作成するには、[設定] > [プラットフォーム] > [インストール済みアプリ]に移動します。[作成]ボタンをクリックし、[新しいパネルアプリの作成]を選択します。

要件

R 29以降、パネルアプリでは、サードパーティのAPIへのアウトバウンド接続を行うには、少なくともTLS v1.2が必要です。

Panelアプリの基本

Panelアプリは、JSON形式を使用するアプリ記述子を使用して構築されます。記述子は、データとブロックの2つの主なプロパティで構成されています。データはJQ v1.6を使用して処理されます。

プロパティ 説明
スロット

パネルを表示するページタイプを指定します。現在のオプションは次のとおりです。

  • user.home (Coupaのホームページ:/and/user/home )
  • suppliers.show (サプライヤー詳細ページ:/suppliers /: id/record )
  • supplier_order_headers.show
  • items.show (アイテム詳細ページ:/items /{ id })
  • contracts.show (契約の詳細ページ:/contracts/show /: id )
  • requisition_headers.edit (Coupaショッピングカート:/requisition_headers /{ id }/ edit )
  • invoices.show (請求書の詳細ページ、次世代の請求書UIでの請求書の編集を含む:/ invoices /{ id}および/invoices /{ id }/ show_for_approval
  • receipts.full_receipt (詳細領収ページ:/receipts /{ id }/ full_receipt )
  • expenses.index (経費ランディングページ:/expenses )
  • projects.show (プロジェクトの詳細ページ:/projects /{ id })
  • quotes/requests.show (ソーシングイベントの詳細ページ:/quotes/requests /{ id })
  • asn/headers.show (事前出荷明細通知詳細ページ:/asn/headers /{ id })
  • asn/supplier_headers.show
  • budget_lines.show (予算明細ページ:/budget_lines /{ id})
{

	 "slot ":" user.home "

 }

パネルアプリごとに指定できるスロットは1つだけです。アプリを複数のページに表示するには、希望するスロット値でアプリを再度作成します。

データ

データ属性は、パネルでレンダリングされる目的のデータを取得する方法を説明します。パネルをレンダリングするために取得するデータを説明するJSONオブジェクト。このオブジェクトの値は、Coupaがデータを取得するためにリクエストを送信するURLになります。これらすべてのデータ要求からの応答は、このオブジェクトで与えられたキー名の下でエイリアスされた1つのハッシュにマージされます。

"data ": {

		"study_queue ":" https://www.wanikani.com/api/user/{ user_ID }/ study - queue ",

		"LEVEL_PROGRESSION ":" https://www.wanikani.com/api/user/{ USER_ID }/ LEVEL - PROGRESSION "

	}

}
context


スロットは、表示されているページに関するコンテキストの詳細を提供します。たとえば、サプライヤーショーページに表示されているパネルアプリは、その特定のサプライヤーに関するコンテキストデータにアクセスできます。このコンテキスト情報はデータオブジェクトで使用できますが、ブロックでは使用できません。したがって、パネルアプリが「ACME Supplier」のショーページでレンダリングされると、APIコールはサプライヤーの名前、クーパID、カスタムフィールド値、およびそのサプライヤーのその他のプロパティに基づいてカスタマイズできます。

ニューヨーク・タイムズの記事へのAPIコールで、サプライヤーに関する最近の記事を検索すると、次のようになります。

"data ": {

		"nyt_data ": {

			"URI ":" https://api.nytimes.com/svc/search/v2/articlesearch.json?

			q ={ context.supplier.name }& api - key ={ properties.api_key }"

	}

}			

各スロットで使用できるコンテキストデータの更新されたリストについては、Coupaにお問い合わせください。

API呼び出し(プロパティ)のパラメータ化

パネルアプリを有効にした後、ユーザー/管理者が提供する必要があるプロパティの配列です。アプリ/APIで一意のAPI鍵、またはそれを有効にする各Coupa顧客のログイン/パスワードが必要な場合、そのオプションを提供する方法は次のとおりです。

ブロックの例は次のとおりです。

"properties ": {

		"USERNAME ": {

			"type ":" string "

		},

		"password ": {

			"type ":" string "

		}

	}

次に、次のようにデータブロックでプロパティを参照します。

"data ": {

		"my_data ": {

			"METHOD ":"投稿",

			"URI ":" https://someurl.com/EVToken ",

			"body ":" grant_type = password&username = {{properties.username }}&

			password = {{properties.password }}"

		}

	}

Coupa管理者が新しいパネルアプリを有効にすると、アプリ記述子で指定されているすべての「プロパティ」フィールドに入力するよう求められます。

立ち上げ

パネルアプリをすぐに表示する必要がない場合に使用できる起動ボタンを追加します。パネルアプリは、自動的にサードパーティに連絡してデータをレンダリングするのではなく、エンドユーザーが手動で起動ボタンをクリックした場合にのみ手を差し伸べます。

    このJSONオブジェクトには、description、button_text、およびhelp_textが含まれます。例:

    "launch ": {
    
    		"description ":"PretendCo税計算機サービス",
    
    		"button_text ":"電卓を起動",
    
    		"help_text ":"税金計算機はCoupaと統合されており、国際的な 
    
    		カートの中に税金が入っています」
    
    	}

    ローンチの使い方 :

    • パネルアプリのデータがページ内の特定のビジネスケースにのみ関連する場合に使用します
    • スロットデータなどと同じレベルで追加しますがブロックでは追加しません
    allow_refresh

    ページ上のデータが変更され、パネルアプリでレンダリングされたデータに影響を与えるときに使用できる更新ボタンを追加します。これは、リクエスト行が更新されたときにカートパネルアプリに便利です。ユーザーは、[更新]ボタンをクリックして、パネルアプリでデータを更新できます。

    これはブール値オプションで、アプリディスクリプターのパネルアプリにリフレッシュボタンを表示するために使用します。

    "allow_refresh ": true
    
    

    Allow_ refreshの使用方法 :

    • アプリで必要なデータをユーザーが更新でき、アプリに新しいデータが必要な場合に使用します

    ボタンをクリックすると、そのアプリのコンテンツが更新されます。このフィールドは、ブロックではなく、「スロット」、「データ」、「起動」などと同じレベルに追加する必要があります。リフレッシュボタンはパネルアプリケーションの上部に表示されます。

    blocks

    ブロック属性は、パネルでデータをレンダリングする方法を説明します。これは、個別の視覚化を記述するさまざまなタイプのJSONオブジェクト(「ブロック」)の配列です。ブロックには、以前に送信されたデータへのアクセス権があり、それを使用して視覚化を作成します。

    error_blocks Error blocks属性はblocks属性と同様に機能しますが、データの取得またはレンダリングに問題がある場合にエラーメッセージを作成するために使用されます。

    データの取得中

    アプリのデータを取得するために、アプリは最大5つの別々のHTTP呼び出しを行うことができます。これらは、記述子のdata属性を使用して指定されます。APIコールは、JSON (推奨)またはXMLのいずれかを返す必要があります。

    Panelアプリブロックタイプ

    パネルアプリは、ブロックと呼ばれるさまざまなタイプのUI要素を使用して、既存のCoupaページ上のデータをレンダリングします。Coupaは次のブロックタイプをサポートしています。

    • リッチテキスト(画像を含む)
    • フィールド(基本的にキーと値のペア)
    • 番号
    • 貨幣
    • 円グラフ
    • 折れ線/棒/列グラフ
    • 開始
    • 再読み込み
    • 動的テーブル

    APP設定

    属性 説明

    タイプ

    ブロックのタイプを識別します。たとえば、フィールドテキストバーなどです。これにより、UIのパネルでブロックがどのようにレンダリングされるか、およびデータに必要な形式が決定されます。

    data

    このJSONオブジェクトには、戦略に応じて異なるプロパティがあります。

    JQ

    • typeは"jq"と等しい

    • jqは、JQスクリプトを含む文字列です。JQスクリプトは、データ属性からマージされたデータ構造を入力として与えられ、ブロックタイプに必要な形式に適合するJSON構造を生成する必要があります。

    JQによるデータ 処理

    たとえば、次のJQスクリプトを使用して、いくつかの特定のデータを抽出し、別のJSONオブジェクトに再パッケージ化できます。

    {
    
    	 "USERNAME ": ".study_queue.user_information.username ",
    
    	 "radicals ": ".level_progression.requested_information.radicals_progress ",
    
    	 "kanji ": ".level_progression.requested_information.kanji_progress"
    
    }

    これにより、次のJSONオブジェクトが生成されます。

    {
    
    	 "USERNAME ":" EXAMPLE_USER ",
    
    	 "radicals ":0,
    
    	 "kanji ":0
    
    }

    詳細情報:

    その他の物件

    異なるブロックタイプは、そのブロックタイプに固有の他のプロパティを有することができる。

    Panelアプリブロックタイプ

    テキストブロック

    属性 説明

    タイプ

    同じ テキストにする必要があります

    template

    テキストブロックタイプは、リキッドマークダウンテンプレートを使用します。テンプレートは、最初にLiquidとして解析され、要求から返されるデータを補間します。その後、テンプレートは再びMarkdownとして解析され、HTMLが生成されます。

    Markdownは、HTMLを生成する安全な方法を提供し、セキュリティ上の理由から、CoupaはテンプレートでインラインHTMLをブロックします。ブロックの構成を格納するデータ列の最大制限以外の文字制限はありません。

    Markdownでは、ヘッダー、インライン強調フォーマット、リスト、画像、リンク、およびブロック引用符を使用できます。Coupaは、構文の強調表示と表もサポートしています。

    LiquidとMarkdownの操作の詳細については、Liquidテンプレート言語Mastering Markdownを参照してください

    data

    データ戦略は単一のJSONオブジェクトを生成する必要があります。オブジェクト内のすべてのキーは、Liquidテンプレートに変数として使用できます。

    {
    
    	 "foo ":" bar ",
    
    	 "fizz ": {
    
    			"buzz ":"バズ"
    
    	 }
    
    }
    ヒント

    現在、テキストブロックは、kramdownテーブル形式を使用してテーブルにデータを表示するための最善/唯一の方法です。

    フィールドブロック

    プロパティ 説明

    タイプ

    同じ フィールドにする必要があります

    データ

    データ戦略は、ラベルと値の属性を持つJSONオブジェクトの配列を生成する必要があります。レンダリングすると、ラベルがフィールドラベルとして使用され、値がフィールド値として使用されます。

    [
    
    	 {
    
    			"label ":"フーバー",
    
    			"value ":" fizzbuzz "
    
    	 },
    
    	 {
    
    			"label ":"Lorem Ipsum ",
    
    			"value ":42
    
    	 }
    
    ]
    タイトル フィールドのリストの下に表示されるオプションのタイトル。

    バー/ラインブロック

    プロパティ 説明

    type

    バーまたはラインと等しくする必要があります

    データ

    データ戦略は配列の配列を生成する必要があります。テーブルブロックとは異なり、棒グラフ/折れ線グラフのデータは列指向になります。

    各配列は、表示される単一の一連のデータを表します。最初の要素は系列の名前であり、残りの要素は系列の点です。

    [{
    
    		"name ":"1800年",
    
    		"data ": [107, 31, 635, 203, 2]
    
     }, {
    
    		"name ":"1900年",
    
    		"data ": [133, 156, 947, 408, 6]
    
     }, {
    
    		"name ":"2000年",
    
    		"data ": [814, 841, 3714, 727, 31]
    
     }, {
    
    		"name ":"2016年",
    
    		"data ": [1216, 1001, 4436, 738, 40]
    
    }]
    X軸とY軸上のラベルの設定を可能にします。
    タイトル グラフの下に表示されるオプションのタイトル。
    説明 グラフの下に小さなテキストで表示されるオプションの説明。

    円ブロック

    プロパティ 説明

    タイプ

    等しい パイにしてください

    データ

    データ戦略は、バー/ラインブロックセクションで説明されているように、列指向の配列を生成する必要があります。

    [{
    
    		名前:'Chrome ',
    
    		年:20.41、
    
    		スライス:真、
    
    		選択済み:正
    
    	}, {
    
    		名前:'Internet Explorer ',
    
    		年:11.84
    
    	}, {
    
    		名前:'Firefox ',
    
    		年:10.85
    
    	}, {
    
    		名前:'Edge ',
    
    		年:4.67
    
    	}, {
    
    		名前:'サファリ',
    
    		年:4.18
    
    	}, {
    
    		名前:'そごうエクスプローラー',
    
    		年:1.64
    
    	}, {
    
    		名前:'Opera ',
    
    		年:2.8
    
    	}, {
    
    		名前:'その他',
    
    		年:2.61
    
    }]
    タイトル グラフの下に表示されるオプションのタイトル。
    説明 グラフの下に小さなテキストで表示されるオプションの説明。

    マネーブロック

    プロパティ 説明

    タイプ

    同額である必要があり ます

    データ データ戦略は、次の構造を持つJSONオブジェクトを生成する必要があります。
    • 通貨の量を決定するためのJSON浮動小数点数。
    • 通貨通貨のISO 4217通貨コードを含む文字列。
    {
    
    	"AMOUNT ":42.0、
    
    	"通貨":"USD"
    
    }
    タイトル 番号の下に表示されるオプションのタイトル。
    説明 小さいテキストで数字の下に表示されるオプションの説明。

    数値ブロック

    プロパティ 説明

    タイプ

    数字に等しくする必要があります

    データ

    データ戦略は、単一のJSON整数またはFloatを生成する必要があります。

    42.0
    小数点以下 小数点後に表示する小数桁数。デフォルトは0です。
    タイトル 番号の下に表示されるオプションのタイトル。
    説明 小さいテキストで数字の下に表示されるオプションの説明。パネルアプリの例

    カスタムフィールド

    コンテキスト依存オブジェクトのカスタムフィールドにアクセスするには、次の一般的な形式に従います<object>。
    context ..custom_fields。<field_name>

    <field_name> は、カスタムフィールドを作成するときのフィールド名プロンプトです。

    cf_fields.png

    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キー
    "data ": {
    
    		"nyt_data ": {
    
    			"URI ":" https://api.nytimes.com/svc/search/v2/articlesearch.json?q = {context.supplier.name}
    
    						& api - key ={ properties.api_key }"
    
    		}
    
    	}
    基本認証
    "data ": {
    
    		"trip_data ": {
    
    			"URI ":" https://someurl.net/trips ",
    
    			"HEADERS ": {" Authorization ":" BASIC YOUR_BASE 64_ENCODED_TOKEN_HERE "}
    
    		}
    
    	}
    「before_data」要求を使用した短命トークンの要求
    "before_data ": {
    
    		"auth ": {
    
    			"METHOD ":"投稿",
    
    			"URI ":" https://someurl.com/MYToken ",
    
    			"body ":" grant_type = password&username ={{ properties.username }}& password ={{ properties.password }}"
    
    		}
    
    	},
    
    	"data ": {
    
    		"RISK_DATA ": {
    
    			"URI ":" https://someurl.com/MYData?integration_id=%22ID {context.supplier.id }% 22 ",
    
    			"HEADERS ": {
    
    				"Authorization ":" bearer {{before_data.auth.access_token }}"
    
    			}
    
    		}
    
    	}

    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
    請求書の表示/編集

    invoice_id, invoice_date, invoice_number, supplier_name, supplier_number, supplier_id

    サプライヤーページ

    id, name, display_name, duns, number, tax_id, website, status

    custom_fields: object.supplier.custom_field_values_hash

    契約ページ id, parent_contract_id, name, number, version, supplier_id, start_date, status
    カート カートパネルアプリペイロードには、申請ヘッダーAPIペイロードと同じフィールドが含まれます
    プロジェクト すべてのプロジェクトシステムフィールドとカスタムフィールド
    見積イベント

    idevent_nameevent_commodityproject_idsupplier_id、および任意のカスタムフィールドとタグ

    Panelアプリの例

    ニューヨークタイムズの記事検索

    このアプリは、サプライヤーのページにニューヨークタイムズのサプライヤーに関する最近のニュースを追加します。これを機能させるには、NYT APIキーを取得する必要があります。

    nyt-article-search.png

    これはアプリを駆動するコードです。

    {
    
    	"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キーを取得する必要があります。

    weather-app-example.png

    これはアプリを駆動するコードです。

    {
    
    	"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がアプリをアプリディレクトリに正式に追加する前に独自にテストすることができます。

    1. [設定]に移動します。
    2. [プラットフォーム]で[インストール済みアプリ]をクリックします
    3. [Create]ボタンをクリックし、[Create New Panel App]を選択します。
    4. アプリを作成する
    5. 名前を追加
    6. [記述子]セクションに、上記のコードを含めます。

    完了すると、エラーがなければ、パネルアプリが各サプライヤーページに表示されます。

    Coupa App Marketplaceからアプリをダウンロードする

    Coupa App Marketplaceにアクセスしてパネルをダウンロードし、提供されたインストール手順に従ってください。インストールされているアプリの表示の詳細については、Coupaのアプリマーケットプレイスを参照してください。