Box アカウントのネストされたフォルダ内のファイルにアクセスする
この記事では、CData Box ドライバーを使用して、指定したフォルダ内のファイル情報を取得する方法を説明します。 「フォルダ内」と言っても、サブフォルダを含めるか含めないかなど、さまざまなケースが考えられます。 そこで、この記事では以下の3つのケースについて、ファイル情報を取得する方法を解説します。
- 指定したフォルダの直下にあるファイル情報のみを取得する
- 指定したフォルダ内のサブフォルダを含むすべてのファイル情報を取得する
- 指定したフォルダのサブフォルダ直下にあるファイル情報のみを取得する
説明のシナリオとして、Box に以下のようにフォルダとファイルが配置されているとします。ルート直下に FolderA というフォルダがあり、 その直下には3つのファイルと2つのフォルダがあります。2つのフォルダは SubFolderA と SubFolderB で、それぞれ3つのファイルを含んでいます。 FolderA の ID は「123」であり、この ID を使用してドライバーでファイル情報を取得します。
FolderA (ID: 123)
- test_FolderA1.txt
- test_FolderA2.txt
- test_FolderA3.txt
SubFolderA
- test_SubFolderA1.txt
- test_SubFolderA2.txt
- test_SubFolderA3.txt
SubFolderB
- test_SubFolderB1.txt
- test_SubFolderB2.txt
- test_SubFolderB3.txt

1. 指定したフォルダの直下にあるファイル情報のみを取得する
Box に保存されているファイル情報は、Files テーブルから取得します。例えば、「SELECT * FROM Files」というクエリを実行すると、Box 内のすべてのファイル情報を取得できます。FolderA 直下の3つのファイルのみを取得するには、 以下のように ParentId フィルタ条件に FolderA の ID を指定します。
SELECT Name, Path FROM Files WHERE ParentId = '123';
上記のクエリを実行すると、FolderA 直下の以下のファイル情報が取得されます。
| Name | Path |
|---|---|
| test_FolderA1.txt | /All Files/FolderA/test_FolderA1.txt |
| test_FolderA2.txt | /All Files/FolderA/test_FolderA1.txt |
| test_FolderA3.txt | /All Files/FolderA/test_FolderA1.txt |
2. 指定したフォルダ内のサブフォルダを含むすべてのファイル情報を取得する
FolderA 内のサブフォルダを含むすべてのファイル情報を取得するには、以下のように SearchRootId フィルタ条件に FolderA の ID を指定します。
SELECT Name, Path FROM Files WHERE SearchRootId = '123';
上記のクエリを実行すると、FolderA 内の3つのファイルと、サブフォルダ SubFolderA および SubFolderB 内のすべてのファイルを含む以下のファイル情報が取得されます。 検索するサブフォルダの階層数は、DirectoryRetrievalDepth 接続プロパティで指定できます。
| Name | Path |
|---|---|
| test_FolderA1.txt | /All Files/FolderA/test_FolderA1.txt |
| test_FolderA2.txt | /All Files/FolderA/test_FolderA2.txt |
| test_FolderA3.txt | /All Files/FolderA/test_FolderA3.txt |
| test_SubFolderA1.txt | /All Files/FolderA/SubFolderA/test_SubFolderA1.txt |
| test_SubFolderA2.txt | /All Files/FolderA/SubFolderA/test_SubFolderA2.txt |
| test_SubFolderA3.txt | /All Files/FolderA/SubFolderA/test_SubFolderA3.txt |
| test_SubFolderB1.txt | /All Files/FolderA/SubFolderB/test_SubFolderB1.txt |
| test_SubFolderB2.txt | /All Files/FolderA/SubFolderB/test_SubFolderB2.txt |
| test_SubFolderB3.txt | /All Files/FolderA/SubFolderB/test_SubFolderB3.txt |
3. 指定したフォルダのサブフォルダ直下にあるファイル情報のみを取得する
FolderA 直下のファイル情報を除外し、サブフォルダ内のファイル情報のみを取得するには、以下のようにサブクエリを使用します。 このクエリを実行すると、サブクエリ SELECT Id FROM Folders WHERE ParentId = '123' で FolderA 内の2つのフォルダの ID を取得し、 それをフィルタ条件 SELECT Name, Path from Files WHERE ParentId = ? に渡します。 つまり、ドライバーは SELECT Name, Path from Files WHERE ParentId = SubFolderA の ID と SELECT Name, Path from Files WHERE ParentId = SubFolderB の ID を実行し、結果を結合します。
SELECT Name, Path from Files WHERE ParentId IN (SELECT Id FROM Folders WHERE ParentId = '123');
上記のクエリを実行すると、以下のファイル情報(FolderA 内のサブフォルダ SubFolderA と SubFolderB 内のファイルのみ)が取得されます。
| Name | Path |
|---|---|
| test_SubFolderA1.txt | /All Files/FolderA/SubFolderA/test_SubFolderA1.txt |
| test_SubFolderA2.txt | /All Files/FolderA/SubFolderA/test_SubFolderA2.txt |
| test_SubFolderA3.txt | /All Files/FolderA/SubFolderA/test_SubFolderA3.txt |
| test_SubFolderB1.txt | /All Files/FolderA/SubFolderB/test_SubFolderB1.txt |
| test_SubFolderB2.txt | /All Files/FolderA/SubFolderB/test_SubFolderB2.txt |
| test_SubFolderB3.txt | /All Files/FolderA/SubFolderB/test_SubFolderB3.txt |
無料トライアル & 製品の詳細
CData の接続ソリューションにより、Box ファイルデータの操作がこれまで以上に簡単になりました。CData ドライバーおよびコネクタをぜひお試しください。30日間の無料トライアルをダウンロードいただけます。