今回は設定などのデータをVSTSのサービス上に保存する仕組みを紹介します。
前回までと違って、今回はこのサイトに載っている情報の通りで動きます。
Data and Setting Storage | Extensions for Visual Studio Team Services
VSTS拡張はVSTSのサービス上にデータを保存・取得ができます。保存できるデータは
- Key-Value 型の単純な設定の保存
- JSON オブジェクトといったドキュメントの保存
の2通りが選べ、またデータ保存のスコープとして、
- Project Collection単位。デフォルト。
- ログインしているユーザー単位
の2通りが選べます。
Key-Value型の管理
setValue
とgetValue
メソッドでキーの取得と保存ができます。Keyの名前は文字列で指定します。また、第3引数に{scopeType: "User"}
を指定することでデータ保存のスコープがユーザー単位になります。
VSS.getService(VSS.ServiceIds.ExtensionData).then(function(dataService) { dataService.setValue("userSettingKey1", 12345, {scopeType: "User"}).then(function(value) { console.log("User scoped key value is " + value); }); }); VSS.getService(VSS.ServiceIds.ExtensionData).then(function(dataService) { dataService.getValue("userSettingKey1", {scopeType: "User"}).then(function(value) { console.log("User scoped key value is " + value); }); });
Document単位の管理
JSON型のオブジェクトを保存できます。ドキュメントを複数格納するコレクションというものに名前を付けることができ、その下に保存するドキュメントはid
で管理します。idは保存するドキュメントのプロパティとして渡すことができるのですが、呼び出すメソッドによって次のように挙動が変わります。
メソッド | idを指定して、そのidが存在しない | idを指定して、そのidがすでに存在する | idを指定しない |
---|---|---|---|
createDocument |
指定したidで、そのドキュメントを保存する | エラー | 新規にidを指定してそのドキュメントを保存する |
setDocument |
指定したidで、そのドキュメントを保存する | 既存のドキュメントを指定したドキュメントで更新する | 新規にidを指定してそのドキュメントを保存する |
updateDocument |
エラー | 既存のドキュメントを指定したドキュメントで更新する | エラー |
setDocument
はUpsertみたいな動きをします。
保存して、さらに取得するコードはこんな感じになります。
VSS.getService(VSS.ServiceIds.ExtensionData).then(function(dataService) { var newDoc = { values : [{ name: "group1", definitions: [1,3,4] },{ name: "group2", definitions: [2,5] }, ]}; dataService.createDocument("BuildGroups", newDoc).then(function(doc) { console.log("Doc id: " + doc.id); VSS.getService(VSS.ServiceIds.ExtensionData).then(function(dataService) { dataService.getDocument("BuildGroups", doc.id).then(function(doc) { console.log(doc); }); }); }); });
コレクション名を指定して保存されているドキュメント一覧を取得することはできます。
VSS.getService(VSS.ServiceIds.ExtensionData).then(function(dataService) { dataService.getDocuments("BuildGroups").then(function(docs) { console.log("There are " + docs.length + " in the collection."); docs.forEach(function(doc){ console.log(doc); }) }); });
その一方、そのプロジェクトに保存してあるコレクション一覧というものはqueryCollectionNames
といったメソッドで取得できそうですが、このメソッドは引数に名前を指定しないといけないので、一覧を取得することはできなさそうです。