以下でアプリカードの作成に関する参照情報を紹介します。
プロジェクトの構成
プロジェクトのコンテキストでは、アプリカードのコンポーネントはapp/内のcardsディレクトリーで定義されています。cardsディレクトリーには以下が含まれている必要があります。
各カードタイプのJSONスキーマ定義ファイル(*-hsmeta.json)。
カードのフロントエンドをレンダリングするReactファイル。.jsxファイルまたは.tsxファイルを使用できます。
必要なすべての依存関係を処理するためのpackage.jsonファイル。
project-folder/
└── src/
└── app/
├── app-hsmeta.json
└── cards/
└── my-app-card-hsmeta.json
└── my-app-card.jsx
└── package.json
アプリカードのスキーマ
アプリカードの*-hsmeta.json設定ファイルに以下のプロパティーを指定します。
{
"uid" : "example-card" ,
"type" : "card" ,
"config" : {
"name" : "Hello Example App" ,
"description" : "A description of the card's purpose." ,
"location" : "crm.record.tab" ,
"entrypoint" : "/app/cards/ExampleCard.jsx" ,
"objectTypes" : [ "contacts" ]
}
}
* でマークされたフィールドは必須です。
フィールド 型 説明 uid* 文字列 カードの固有ID。任意の文字列を指定できますが、カードを識別できる意味のある文字列である必要があります。HubSpotではこのIDでカードが識別されるため、CRMレコードの位置などの履歴データやステートフルデータを削除することなく、カードのタイトルを変更できます。 type文字列 コンポーネントのタイプ。この場合はcardにする必要があります。 configオブジェクト 設定の詳細を含むオブジェクト。 name* 文字列 HubSpotのUIに表示されるカードのタイトル。 description文字列 カードの説明。 previewImageオブジェクト fileフィールドとaltTextフィールドを含むオブジェクト。fileフィールドは、プレビュー画像の相対パスです。有効なファイル拡張子はpng、jpeg、jpg、gifです。最大ファイルサイズは5.0MBです。altTextフィールドは、画像の簡単な説明です。entrypoint* 文字列 カードのフロントエンドReactコードのファイルパス。 location* crm.record.tab | crm.record.sidebar | crm.preview |helpdesk.sidebarHubSpotのUIでカードが表示される場所。場所(location)の値は1つしか指定できませんが、locationとobjectTypesの組み合わせによっては、複数の場所がサポートされることもあります。詳細については、後述の__サポートされる場所 セクションをご確認ください。 objectTypes* 配列 このカードが表示されるCRMレコードのタイプ。詳細については、後述のサポートされるオブジェクト__ セクションをご確認ください。
サポートされるオブジェクト
カードの*-hsmeta.json設定ファイルのobjectTypes配列により、カードが表示されるCRMレコードのタイプが指定されます。現在サポートされているCRMオブジェクトとそのobjectType値、およびアプリに追加する最小スコープ を以下に示します。
HubSpotの標準オブジェクトの場合、objectTypeの値では大文字と小文字が区別されず、単数形と複数形の両方がサポートされています。例えば、"CONTACT"と"contacts"はどちらも有効です。
CRMオブジェクト objectTypeの値 関連スコープ コンタクト CONTACTcrm.objects.contacts.read会社 COMPANYcrm.objects.companies.read取引 DEALScrm.objects.deals.readチケット TICKETSticketsカスタムオブジェクト p_objectName(大文字小文字の区別あり)crm.objects.custom.readアプリオブジェクト app_object_uidアプリオブジェクトのスコープ を参照
また、以下のCRMオブジェクトがオブジェクトライブラリーで有効化 されている場合は、これらのオブジェクトもサポートされます。
CRMオブジェクト objectTypeの値 関連スコープ アポイントメント APPOINTMENTScrm.objects.appointments.readコース COURSEScrm.objects.courses.read掲載情報 LISTINGScrm.objects.listings.readサービス SERVICEScrm.objects.services.read
サポートされる場所
カードの*-hsmeta.json設定ファイルのlocationフィールドに、HubSpotでカードが表示される場所を指定します。現在サポートされている場所を以下に示します。
crm.record.tab:HubSpotの既定のタブの1つ、またはカスタムタブのいずれかで、CRMレコードページの中央列に拡張機能が表示されます。objectTypeがCOMPANIESに設定されている場合、カードは営業ワークスペースのターゲットアカウントのプレビューパネル にも表示されます。
crm.preview:CRMでアクセスできるプレビューパネルにアプリカードが表示されます。この場所を使用する場合、JSON設定ファイル で指定されているobjectTypesをプレビューするときに拡張機能が利用可能になります。これには、CRMレコードページ、インデックスページ、ボードビュー、リストツール内でのレコードのプレビューが含まれます。プレビューのカスタマイズ の詳細をご確認ください。
helpdesk.sidebar:ヘルプデスク内のチケットサイドバーにカードが表示されます。これには、ヘルプデスク ホーム ページのチケット プレビュー パネルとヘルプデスクの右サイドバーの両方が含まれます。この場所にカードを追加するには、ヘルプデスク設定を構成して カードを含める必要があります。
Reactフロントエンドの作成
アプリカードのUIは、Reactコンポーネントファイル(.jsxまたは.tsx)により作成されます。このファイルは、カードのJSON設定ファイル (*-hsmeta.json)と共にcards/ディレクトリーに含まれています。カード設定ファイルのentrypointフィールドに、Reactファイルのパスを指定します。
シンプルなアプリカードの例を以下に示します。この例には、カードのコンテンツを表示するUIコンポーネント であるTextおよびButtonと、レイアウトを管理するためのFlexコンポーネントが含まれています。
import React from "react" ;
import { Text , Button , Flex , hubspot } from "@hubspot/ui-extensions" ;
// Define the extension to be run within the Hubspot CRM
hubspot . extend (() => < Extension /> );
// Define the Extension component
const Extension = () => {
return (
< Flex direction = "column" gap = "medium" >
< Text > This is a simple getting started UI extension with static text. </ Text >
< Button onClick = { () => console . log ( "Button clicked!" ) } > Click me! </ Button >
</ Flex >
);
};
カードの外観と機能の作成に関しては、以下の参照ドキュメントが提供されています。
依存関係の管理
cards/ディレクトリー内にあるpackage.jsonファイルにアプリカードの依存関係を指定できます。hs project addコマンドでアプリカードを追加すると、既定では次の依存関係を持つpackage.jsonファイルが作成されます。
@hubspot/ui-extensions
react
typescript
package.jsonファイルを使用してプロジェクトコンポーネントの依存関係をインストールするには、プロジェクトディレクトリーでhs project install-depsコマンドを実行できます。
{
"name" : "hubspot-example-extension" ,
"version" : "0.1.0" ,
"license" : "MIT" ,
"dependencies" : {
"@hubspot/ui-extensions" : "latest" ,
"react" : "^18.2.0"
},
"devDependencies" : {
"typescript" : "^5.3.3"
}
}