バケット内のオブジェクト
作成したバケットにどのようなファイルがアップロードされているかを表示してみます。APIはData Management APIの「GET buckets/:bucketKey/objects」です。リファレンスによると、必要な情報は
- data:readのアクセストークン
- バケットキー
の二つです。
(1) バケットの一覧を取得し表示
(2) 表示された一覧からバケットを選択
バケットの一覧を表示し「選択」をクリック |
バケット内のオブジェクトを表示 |
ASP.net Webフォームでこのお題を解いてみます。
バケットの一覧を取得してGridViewに表示する
前回はListViewにバケットの一覧を表示しましたが、今回はGridViewに表示します。新なWebフォームを追加して、GridView(gdvBucket)とラベル(lblStatus)を追加します。FORGE APIの部分は前回と同じですが、GridViewにデータを表示するために、新たにデータセット(DataSet)を作成して、GridViewにバインドします。どうもGridViewはデータベースと結びつけないと作動しないようです。
サンプルコード
Public Class WebForm4
Inherits System.Web.UI.Page
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
'**********************************
' アクセストークンを取得
'**********************************
Dim acToken As String = mdlUtils.GetToken("bucket:read")
If acToken = "" Then
Exit Sub
End If
'**********************************
' バケットを取得
'**********************************
'RestSharpでクライアントを作成
Dim url As String = "https://developer.api.autodesk.com"
Dim _client As New RestSharp.RestClient(url)
'RestSharpでリクエストを作成
Dim authReq As New RestSharp.RestRequest()
With authReq
.Resource = "oss/v2/buckets"
'メソッド
.Method = RestSharp.Method.GET
'ヘッダー
.AddHeader("Authorization", "Bearer " + acToken)
End With
'送信
Dim result As RestSharp.IRestResponse = _client.Execute(authReq)
If result.StatusCode = Net.HttpStatusCode.OK Then
'200OKの場合
'データセットを定義
Dim dsBucket As New DataSet("BucketList")
Dim tblBucket As DataTable = dsBucket.Tables.Add("Table1")
tblBucket.Columns.Add("バケットキー", Type.GetType("System.String"))
tblBucket.Columns.Add("作成日", Type.GetType("System.String"))
tblBucket.Columns.Add("ポリシーキー", Type.GetType("System.String"))
Dim responseString As String = result.Content
'Newtonsont.JsonのJSON解読メソッドを使うと便利
'まず以下の構文でオブジェクトを作成します。
Dim jsonObj As Object = Newtonsoft.Json.JsonConvert.DeserializeObject(responseString)
'"items"を取得しjArrayオブジェクトとする
Dim itemArray As Newtonsoft.Json.Linq.JArray = jsonObj("items")
'配列を走査し、データテーブルにデータ行を充てんする
For Each item As Newtonsoft.Json.Linq.JObject In itemArray
'バケットキー
Dim strBucketKey As String = item("bucketKey")
'作成した日付(ミリセカンド)
Dim strCreatedDate As String = item("createdDate")
'ポリシーキー
Dim strPolicyKey As String = item("policyKey")
'タイムスタンプから日付へ変換
Dim intTimeStamp As Int64 = Int64.Parse(strCreatedDate)
Dim dtCreateDate As DateTimeOffset = DateTimeOffset.FromUnixTimeMilliseconds(intTimeStamp)
'データセット
Dim rowBucket As DataRow = tblBucket.NewRow()
rowBucket("バケットキー") = strBucketKey
rowBucket("作成日") = dtCreateDate.ToLocalTime.ToString
rowBucket("ポリシーキー") = strPolicyKey
tblBucket.Rows.Add(rowBucket)
Next
lblStatus.Text = tblBucket.Rows.Count.ToString + "個のバケットが見つかりました。"
gdvBucket.DataSource = New DataView(tblBucket)
gdvBucket.DataBind()
Else
Dim responseString As String = result.Content
Dim jsonObj As Object = Newtonsoft.Json.JsonConvert.DeserializeObject(responseString)
lblStatus.Text = "取得に失敗しました。" + vbTab + jsonObj("reason")
End If
End Sub
End Class
データグリッドに選択列を追加
デザインビューでデータグリッドを選択し、GridViewタスクから「列の編集」を選択します。HyperLinkFieldを追加し、
DataNavigateUrlFields に バケットキー
DataNavigateUrlFormatString に ~/WebForm5.aspx?BucketKey={0}
HeaderText に 詳細表示
Text に 選択
を設定します。
選択列の追加 |
バケット内オブジェクト一覧
あらたなWebフォームを追加し、ラベル(lblBucketKey)とGridView(gdvObjects)を追加します。ページが遷移するときのデータの受け渡しは HttpRequestの Request.QueryStringを使います。(サンプルコードの冒頭の部分)また、バケットの一覧を取得する部分は、バケットキーを使ってURLを作成するだけなので比較的簡単といえるでしょう。
サンプルコード
Public Class WebForm5Inherits System.Web.UI.Page
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
'**********************************
' バケットキーを取得
'**********************************
Dim strBucketKey As String = Request.QueryString("BucketKey")
lblBucketkey.Text = strBucketKey
'**********************************
' アクセストークンを取得
'**********************************
'アクセストークンを取得す部分はこちらを参照してください。
Dim acToken As String = mdlUtils.GetToken("data:read")
If acToken = "" Then
lblBucketkey.Text = "アクセストークンの取得に失敗しました。"
End If
'**********************************
' バケット内のオブジェクト
'**********************************
Dim strClient As String = "https://developer.api.autodesk.com"
Dim _client As New RestSharp.RestClient(strClient)
Dim chkReq As New RestSharp.RestRequest()
With chkReq
.Resource = "oss/v2/buckets/" + strBucketKey + "/objects"
.Method = RestSharp.Method.GET
.AddParameter("Authorization", "Bearer " + acToken, RestSharp.ParameterType.HttpHeader)
.AddParameter("Content-Type", "application/json", RestSharp.ParameterType.HttpHeader)
End With
Dim result As RestSharp.IRestResponse = _client.Execute(chkReq)
'**********************************
' データグリッドに表示
'**********************************
If result.StatusCode = Net.HttpStatusCode.OK Then
'成功した場合
'データセットを定義
Dim dsObjects As New DataSet("BucketList")
Dim tblObjects As DataTable = dsObjects.Tables.Add("Table1")
tblObjects.Columns.Add("オブジェクトキー", Type.GetType("System.String"))
tblObjects.Columns.Add("オブジェクトID", Type.GetType("System.String"))
tblObjects.Columns.Add("ロケーション", Type.GetType("System.String"))
Dim responseString As String = result.Content
'Newtonsont.JsonのJSON解読メソッドを使うと便利
'まず以下の構文でオブジェクトを作成します。
Dim jsonObj As Object = Newtonsoft.Json.JsonConvert.DeserializeObject(responseString)
'"items"を取得しjArrayオブジェクトとする
Dim itemArray As Newtonsoft.Json.Linq.JArray = jsonObj("items")
'配列を走査する
For Each item As Newtonsoft.Json.Linq.JObject In itemArray
'オブジェクトキー
Dim strObjectKey As String = item("objectKey")
'オブジェクトID
Dim strObjectId As String = item("objectId")
'ロケーション
Dim strLoacation As String = item("location")
'データセット
Dim rowObjects As DataRow = tblObjects.NewRow()
rowObjects("オブジェクトキー") = strObjectKey
rowObjects("オブジェクトID") = strObjectId
rowObjects("ロケーション") = strLoacation
tblObjects.Rows.Add(rowObjects)
Next
gdvObjects.DataSource = New DataView(tblObjects)
gdvObjects.DataBind()
End If
End Sub
End Class
GridViewを使うことで、少し見栄えも改善されました。
0 件のコメント:
コメントを投稿