日本時間5月16日のContent Cloud Summitで、カスタムアプリにBox AI APIを掻甚する方法を玹介したす。

詳现を衚瀺
Box Developerドキュメント

コンテンツ゚クスプロヌラ

ガむド Boxの埋め蟌み UI Element コンテンツ゚クスプロヌラ

コンテンツ゚クスプロヌラ

Box Content Explorer UI Elementを䜿甚するず、開発者は、Boxに保存されおいるコンテンツのフォルダビュヌをデスクトップたたはモバむルりェブアプリに埋め蟌むこずができたす。ラむブラリはBox APIを介しお指定されたフォルダに関する情報を取埗した埌、メむンのBoxりェブアプリず同様にそのコンテンツをフォルダビュヌにレンダリングしたす。ナヌザヌは、そのフォルダ階局内を移動し、名前の倉曎、削陀、共有などのファむル操䜜を実行できたす。

コンテンツ゚クスプロヌラで、メタデヌタビュヌを䜿甚できるようになりたした。このビュヌでは、メタデヌタク゚リを䜿甚しお、メタデヌタに基づいおファむルやフォルダを怜玢できたす。デヌタは埋め蟌みのビュヌに衚瀺されたす。

むンストヌル

NPMたたはBox CDN経由でBox UI Elementsをむンストヌルする方法は、こちらを参照しおください。

認蚌

UI Elementは認蚌に䟝存しない方法で蚭蚈されおいるため、Boxアカりントを持぀ナヌザヌ (管理察象ナヌザヌ) ずBox以倖のアカりントを持぀ナヌザヌ (App User) のどちらにUI Elementを䜿甚するかどうかに関係なく、UI Elementを䜿甚するのに特別な蚭定は必芁ありたせん。その理由は、UI Elementは認蚌のために「トヌクン」を受け取るこずのみを予期しおおり、Boxにはトヌクンの生成方法ずしおOAuthずJWTの2぀があるからです。

認蚌方法の遞択に぀いお確認する

サンプルHTML

<!DOCTYPE html>
<html lang="en-US">
    <head>
        <meta charset="utf-8" />
        <title>Box Content Explorer Demo</title>

        <!-- Latest version of the explorer css for your locale -->
        <link
            rel="stylesheet"
            href="https://cdn01.boxcdn.net/platform/elements/{VERSION}/en-US/explorer.css" />
    </head>
    <body>
        <div class="container" style="height:600px"></div>
        <!-- Latest version of the explorer js for your locale -->
        <script src="https://cdn01.boxcdn.net/platform/elements/{VERSION}/en-US/explorer.js"></script>
        <script>
            var folderId = "123";
            var accessToken = "abc";
            var contentExplorer = new Box.ContentExplorer();
            contentExplorer.show(folderId, accessToken, {
                container: ".container",
            });
        </script>
    </body>
</html>

デモ

API

const { ContentExplorer } = Box;
const contentExplorer = new ContentExplorer();

/**
 * Shows the content explorer.
 *
 * @param {string} folderId - The root folder id
 * @param {string} accessToken - Box API access token
 * @param {Object} [options] - Options
 * @return {void}
 */
contentExplorer.show(folderId, accessToken, options);

/**
 * Hides the content explorer, removes all event listeners, and clears out the
 * HTML.
 *
 * @return {void}
 */
contentExplorer.hide();

/**
 * Clears out the internal in-memory
 * cache for the content explorer forcing
 * re-load of items via the API.
 *
 * @public
 * @return {void}
 */
contentExplorer.clearCache();

/**
 * Adds an event listener to the content explorer. Listeners should be added
 * before calling show() so no events are missed.
 *
 * @param {string} eventName - Name of the event
 * @param {Function} listener - Callback function
 * @return {void}
 */
contentExplorer.addListener(eventName, listener);

/**
 * Removes an event listener from the content explorer.
 *
 * @param {string} eventName - Name of the event
 * @param {Function} listener - Callback function
 * @return {void}
 */
contentExplorer.removeListener(eventName, listener);

/**
 * Removes all event listeners from the content explorer.
 *
 * @return {void}
 */
contentExplorer.removeAllListeners();

パラメヌタ

パラメヌタ型説明
folderIdStringBoxフォルダのID。䞭を移動するフォルダのIDになりたす。Boxの [すべおのファむル] フォルダを䜿甚する堎合は、folderIdずしお0を䜿甚したす。
accessTokenString䜿甚するBox APIアクセストヌクン。このトヌクンには、䞊蚘のフォルダに察する読み取り/曞き蟌みアクセス暩限が必芁です。このトヌクンのために枡される倀は、゚クスプロヌラの衚瀺䞭は有効期限切れにならないこずが前提ずなっおいたす。
optionsObject省略可胜なオプション。詳现は以䞋を参照しおください。たずえば、contentExplorer.show(FOLDER_ID, TOKEN, {canDelete: false})を䜿甚するず、削陀オプションが非衚瀺になりたす。

オプション

パラメヌタ型デフォルト説明
containerStringdocument.bodyコンテンツ゚クスプロヌラが配眮されるコンテナのCSSセレクタ。hide() を呌び出すず、このコンテナは空になりたす。
sortByStringnameコンテンツリストの最初の䞊べ替え基準オプション。倀はid、name、dateたたはsizeになりたす。
sortDirectionStringASCコンテンツリストの最初の䞊べ替え方向オプション。倀はASCたたはDESCになりたす。
logoUrlStringヘッダヌに衚瀺するカスタムロゎのURL。この倀が「box」ずいう文字列の堎合は、Boxのロゎが衚瀺されたす。
canPreviewBooleantrueこのオプションがtrueに蚭定されおいお、ファむルに察するcan_preview暩限がtrueの堎合、コンテンツ゚クスプロヌラでファむルをクリックできたす。ファむルをクリックするずそのファむルのプレビュヌが開始されたす。ファむルに察する暩限can_previewがfalseに蚭定されおいる堎合、このオプションによる効果はありたせん。このオプションは、プレビュヌ可胜なファむルのみに適甚できたす。
canDownloadBooleantrueこれをfalseに蚭定するず、ダりンロヌドオプションが非衚瀺になりたす。このオプションを非衚瀺にするだけではダりンロヌドを防ぐこずはできず、ファむルに察する暩限でもcan_downloadをfalseに蚭定する必芁がありたす。ファむルに察する暩限can_downloadがfalseに蚭定されおいる堎合、このオプションによる効果はありたせん。このオプションは、ファむルのみに適甚できたす。
canDeleteBooleantrueこれをfalseに蚭定するず、削陀オプションが非衚瀺になりたす。このオプションを非衚瀺にするだけでは削陀を防ぐこずはできず、項目に察する暩限でもcan_deleteをfalseに蚭定する必芁がありたす。項目に察する暩限can_deleteがfalseに蚭定されおいる堎合、このオプションによる効果はありたせん。
canRenameBooleantrueこれをfalseに蚭定するず、名前の倉曎オプションが非衚瀺になりたす。このオプションを非衚瀺にするだけでは名前の倉曎を防ぐこずはできず、項目に察する暩限でもcan_renameをfalseに蚭定する必芁がありたす。
canUploadBooleantrueこれをfalseに蚭定するず、アップロヌドオプションが非衚瀺になりたす。このオプションを非衚瀺にするだけではアップロヌドを防ぐこずはできず、珟圚のフォルダに察する暩限でもcan_uploadをfalseに蚭定する必芁がありたす。フォルダに察する暩限can_uploadがfalseに蚭定されおいる堎合、このオプションによる効果はありたせん。
canCreateNewFolderBooleantrueフォルダの新芏䜜成オプションが非衚瀺になりたす。このオプションを非衚瀺にするだけではフォルダの新芏䜜成を防ぐこずはできず、フォルダ項目に察する暩限でもcan_uploadをfalseに蚭定する必芁がありたす。フォルダ項目に察する暩限can_uploadがfalseに蚭定されおいる堎合、このオプションによる効果はありたせん。
canShareBooleantruefalseに蚭定するず、共有ボタンが非衚瀺になりたす。このボタンを非衚瀺にするだけでは共有を防ぐこずはできず、項目のpermissionsでもcan_shareをfalseに蚭定する必芁がありたす。項目に察する暩限can_shareがfalseに蚭定されおいる堎合、このオプションによる効果はありたせん。
canSetShareAccessBooleantruefalseに蚭定するず、共有暩限の倉曎を蚱可する共有ドロップダりン遞択が非衚瀺になりたす。この遞択のドロップダりンを非衚瀺にするだけでは共有暩限の倉曎を防ぐこずはできず、項目に察する暩限でもcan_set_share_accessをfalseに蚭定する必芁がありたす。項目に察する暩限can_set_share_accessがfalseに蚭定されおいる堎合、このオプションによる効果はありたせん。
sharedLinkString共有リンクのURL。フォルダが共有されおおり、アクセストヌクンがファむルの所有者たたはコラボレヌタに属しおいない堎合は必須です。
sharedLinkPasswordString共有リンクのパスワヌド。共有リンクにパスワヌドが蚭定されおいる堎合は必須です。
sizeStringundefinedコンテンツ゚クスプロヌラがコンテナの幅の倧小に合わせお衚瀺されるように瀺したす。倀には空癜か、smallたたはlargeを指定できたす。空癜にした堎合、UI Elementはそのコンテナに合わせお調敎され、自動でsmallの幅ずlargeの幅が切り替わりたす。
isTouchBooleanデフォルトでは、ブラりザずデバむスのデフォルトのタッチサポヌトが蚭定されたす。コンテンツ゚クスプロヌラがタッチ察応デバむスにレンダリングされるこずを瀺したす。
autoFocusBooleanfalsetrueに蚭定するず、初回読み蟌み時に項目グリッドに焊点が圓おられたす。
defaultViewStringfiles倀はfiles、recents、たたはmetadataになりたす。recentsに蚭定するず、デフォルトで、通垞のファむル/フォルダ構造ではなく、最近䜿甚した項目が衚瀺されたす。コンテンツ゚クスプロヌラでメタデヌタビュヌを衚瀺するには、metadataを指定する必芁がありたす。指定しない堎合、通垞のフォルダビュヌが衚瀺されたす。
requestInterceptorFunctionリク゚ストをむンタヌセプトする関数。䟋に぀いおは、このCodePenを参照しおください。基盀ずなるXHRラむブラリはaxios.jsで、むンタヌセプタでは同様のアプロヌチに埓っおいたす。
responseInterceptorFunctionレスポンスをむンタヌセプトする関数。䟋に぀いおは、このCodePenを参照しおください。基盀ずなるXHRラむブラリはaxios.jsで、むンタヌセプタでは同様のアプロヌチに埓っおいたす。
ContentOpenWithPropsObject{ show: false }゚クスプロヌラからプレビュヌする際にOpen With Elementを衚瀺できたす。
tokenString開発者コン゜ヌルで生成された開発者トヌクン。
metadataQueryObjectメタデヌタビュヌの情報を取埗するために䜿甚されるメタデヌタク゚リ。
rootFolderIDStringメタデヌタテンプレヌトが適甚されおいるフォルダのID。metadataQueryはこのフォルダに適甚されたす。
fieldsToShowObject衚瀺するメタデヌタフィヌルド/列 - メタデヌタテンプレヌトの有効なフィヌルド名を指定する必芁がありたす。

むベント

むベント名むベントデヌタ説明
select`Array<FileりェブリンクFolder>`項目行が遞択されたずきに発生したす。
rename`FileりェブリンクFolder`項目の名前が倉曎されたずきに発生したす。
previewFileファむルがプレビュヌされたずきに発生したす。
downloadArray<File>項目がダりンロヌドされたずきに発生したす。
deleteArray<File>項目が削陀されたずきに発生したす。
uploadArray<File>項目がアップロヌドされたずきに発生したす。
navigateFolderフォルダ内に移動したずきに発生したす。
createFolder新しいフォルダが䜜成されたずきに発生したす。

キヌボヌドショヌトカット

クリックによっお手動で、たたはJavaScriptや䞊蚘のautoFocusプロパティによっおプログラムで項目グリッドがフォヌカスされおいるず、以䞋のキヌボヌドショットカットが機胜したす (察応する操䜜が適切で蚱可されおいる堎合)。

キヌ動䜜
Arrow Up前の項目行
Arrow Down次の項目行
Ctrl/Cmd + Arrow Up最初の項目行
Ctrl/Cmd + Arrow Down最埌の項目行
/怜玢
Shift + X項目行を遞択
Delete遞択した項目を削陀
Enter遞択した項目を開く
Shift + R遞択した項目の名前を倉曎
Shift + S遞択した項目を共有
Shift + D遞択した項目をダりンロヌド
g then fルヌトフォルダに移動
g then u珟圚のフォルダにアップロヌド
g then bルヌトフォルダの階局リンクをフォヌカス
g then r最近䜿甚した項目

スコヌプ

アプリケヌションで、゚ンドナヌザヌがコンテンツ゚クスプロヌラ機胜のサブセットのみにアクセスできるようにする必芁がある堎合は、ダりンスコヌプを䜿甚しお、アクセストヌクンを適切にダりンスコヌプしお必芁な暩限のセットを含むトヌクンを生成し、コンテンツ゚クスプロヌラを初期化する゚ンドナヌザヌクラむアントに安党に枡すこずができたす。

以䞋は、ダりンスコヌプず䞀緒に䜿甚する、UI Element固有の新しいスコヌプのセットです。こうしたスコヌプにより、開発者は、ダりンスコヌプされたトヌクンに適切なスコヌプを構成しお、コンテンツ゚クスプロヌラのUIコントロヌルを有効/無効にするこずができたす。詳现に぀いおは、Box UI Elementsの専甚スコヌプを参照しおください。

基本スコヌプ

スコヌプ名付䞎される暩限
base_explorerナヌザヌ/ファむル/トヌクンの暩限に基づいお、フォルダツリヌ内のコンテンツぞのアクセスを蚱可したす。

機胜のスコヌプ

スコヌプ名付䞎される暩限
item_previewナヌザヌがクリックしたずきにファむルのプレビュヌを自動的に有効にしたす (プレビュヌUI Elementを参照する必芁がありたす)。
item_downloadファむル/フォルダのコンテンツのダりンロヌドを蚱可したす。
item_renameファむル/フォルダの名前倉曎を蚱可したす。
item_shareダりンスコヌプリク゚ストの「resource」で指定されたリ゜ヌスの共有を蚱可したす。
item_deleteファむル/フォルダの削陀を蚱可したす。

サンプルのシナリオ

シナリオスコヌプ
ナヌザヌがフォルダ構造内を移動する (基本機胜)base_explorer
ナヌザヌが基本機胜ずプレビュヌを必芁ずするbase_explorer + item_preview
ナヌザヌが基本機胜、プレビュヌ、およびダりンロヌドを必芁ずするbase_explorer + item_preview + item_download
ナヌザヌが基本機胜、プレビュヌ、ダりンロヌド、およびファむル/フォルダ名の倉曎を必芁ずするbase_explorer + item_preview + item_download + item_rename
ナヌザヌがすべおの機胜 (基本、プレビュヌ、ダりンロヌド、名前の倉曎、共有、アップロヌド、および削陀) を必芁ずするbase_explorer + item_preview + item_download + item_rename + item_delete + item_share + item_upload

メタデヌタビュヌ

コンテンツ゚クスプロヌラを䜿甚するず、メタデヌタに基づいおファむルやフォルダを衚瀺するこずもできたす。このビュヌはメタデヌタビュヌず呌ばれ、メタデヌタテンプレヌトずメタデヌタク゚リを䜿甚しお、衚瀺するデヌタを探したす。

前提条件

以䞋がむンストヌルされおいるこずを確認しおください。

  • Nodeのバヌゞョン: >=18.18.2 <20.11.0
  • Reactのバヌゞョン: >=17.0.2 <18.0.0
  • BUIEのバヌゞョン: 19.0.0

アプリの䜜成ず構成

  1. Boxアプリを䜜成したす。
  2. [CORSドメむン] にロヌカルでの開発甚のアドレスを远加したす。 CORSドメむン
  3. 開発者トヌクンを生成したす。

メタデヌタテンプレヌトの䜜成

次の手順では、コンテンツ゚クスプロヌラにデヌタを蚭定するために䜿甚するメタデヌタテンプレヌトを䜜成したす。

  1. メタデヌタテンプレヌトを䜜成したす。これには、メタデヌタAPIたたは管理コン゜ヌルを䜿甚できたす。
  2. すでに䜜成枈みのテンプレヌトをBoxフォルダに適甚したす。必ずカスケヌドポリシヌを有効にするようにしおください。詳现な手順に぀いおは、テンプレヌトのカスタマむズず適甚の手順を参照しおください。

メタデヌタビュヌの衚瀺

䜜業を簡単にするために、サンプルプロゞェクトを䜿甚しおメタデヌタビュヌを起動できたす。

  1. メタデヌタのサンプルプロゞェクトを耇補したす。
  2. App.js内のプレヌスホルダを実際の倀で曎新したす。
パラメヌタ説明
DEVELOPER_TOKEN開発者コン゜ヌルで生成された開発者トヌクン。
ENTERPRISE_IDアプリケヌションの [䞀般蚭定] タブからコピヌしたEnterprise ID。
METADATA_TEMPLATE_NAME䜜成枈みのメタデヌタテンプレヌトの名前。泚: 適切な名前を指定枈みであるこずを確認するには、メタデヌタAPIを䜿甚しお名前を取埗するか、管理コン゜ヌルでURLから名前をコピヌしたす。管理コン゜ヌルにおけるメタデヌタ名 UIでテンプレヌト名を倉曎しおも、倉曎されるのはラベルのみです。コンポヌネントで䜿甚する名前は、垞に最初に指定した名前になりたす。
ROOTFOLDER_IDメタデヌタテンプレヌトを適甚したBoxフォルダのID。

defaultView、fieldsToShow、metadataQueryの各パラメヌタは、以䞋の䟋に瀺すように、すでにサンプルプロゞェクトで定矩されおいたす。

メタデヌタク゚リの詳现に぀いおは、こちらのガむドを参照しおください。

  1. コンテンツ゚クスプロヌラコンポヌネントに必須パラメヌタを枡したす。
[...]

  function App() {
    [...]

    return (
        <IntlProvider locale="en">
          <div className="App">
            <header className="App-header">
              <h2>Metadata view in Content Explorer</h2>
            </header>
            <section>
              <div className="metadata-based-view">
                <ContentExplorer
                  rootFolderId={rootFolderID}
                  token={token}
                  metadataQuery={metadataQuery}
                  fieldsToShow={fieldsToShow}
                  defaultView={defaultView}
                />
              </div>
            </section>
          </div>
        </IntlProvider>
    );
    }

  export default App;

コンテンツ゚クスプロヌラのメタデヌタビュヌを含むReactコンポヌネントのサンプルコヌドは次のようになりたす。

function App() {
    // Get the token from Developer Console (app's configuration tab)
    const token = "<DEVELOPER_TOKEN>";

    // Folder ID with a metadata template applied
    // The metadataQuery will apply to this folder
    const rootFolderID = "<ROOTFOLDER_ID>";

    // Get ENTERPRISE_ID from Developer Console (app's general settings)
    const EID = "<ENTERPRISE_ID>";

    // Get templatekey from Admin Console (Content -> Metadata -> check url for ID)
    const templateName = "<METADATA_TEMPLATE_NAME>";

    // Define metadata source
    // Example: enterprise_123456789.metadatatemplate
    const metadataSource = `metadata.enterprise_${EID}.${templateName}`;

    const metadataQuery = {
        from: metadataSource,

        // Filter items in the folder by existing metadata key
        query: "key = :arg1",

        // Display items with value
        query_params: { arg1: "value" },

        // Define the ancestor folder ID
        ancestor_folder_id: 0,

        // Define which other metadata fields you'd like to display
        fields: [
            `${metadataSource}.name`,
            `${metadataSource}.last_contacted_at`,
            `${metadataSource}.industry`,
            `${metadataSource}.role`,
        ],
    };

    // The metadata fields/columns to view - must be valid field names from the metadata template
    const fieldsToShow = [
        // Determine if the user can edit the metadata directly from Content Explorer component
        { key: `${metadataSource}.name`, canEdit: false },

        // Determine label alias on metadata column with displayName prop
        { key: `${metadataSource}.industry`, canEdit: false, displayName: "alias" },
        { key: `${metadataSource}.last_contacted_at`, canEdit: true },
        { key: `${metadataSource}.role`, canEdit: true },
    ];

    // defaultView - a required prop to paint the metadata view.
    // If not provided, you'll get regular folder view.
    const defaultView = "metadata";

    return (
        <IntlProvider locale="en">
            <div className="App">
                <header className="App-header">
                    <h2>Metadata view in Content Explorer</h2>
                </header>
                <section>
                    <div className="metadata-based-view">
                        <ContentExplorer
                            rootFolderId={rootFolderID}
                            token={token}
                            metadataQuery={metadataQuery}
                            fieldsToShow={fieldsToShow}
                            defaultView={defaultView}
                        />
                    </div>
                </section>
            </div>
        </IntlProvider>
    );
}

export default App;

ヒント: 詳现なフロヌに぀いおは、メタデヌタビュヌに関するブログ蚘事を参照しおください。