VSS.getService(VSS.ServiceIds.ExtensionData)
// the callback on the next line returns a promise, which the JavaScript engine will follow, so you don't need to nest the next `then`
.then((dataService) => dataService.getDocuments('MyCollection2'))
.then((docs) => { ...
这是我们以VSTS扩展名访问数据存储的方式。
MyCollection2
是我们正在使用的存储的名称。
但是,这并非项目独有。当我尝试从同一组织内的另一个项目访问集线器扩展时,仍然可以看到数据。
我尝试根据访问的项目动态命名集合,但是没有明确的方法来在扩展端获取项目名称。
如何使数据存储对于同一组织内的项目而言是唯一的?
答案 0 :(得分:0)
您可以从getWebContext()获取项目名称。然后将DocumentId值设置为ProjectName:
// Get data service
VSS.getService(VSS.ServiceIds.ExtensionData).then(function(dataService) {
// Set value (default is project collection scope)
dataService.setValue("ProjectName", "DocumentId").then(function(value) {
console.log("Key value is " + value);
});
});
然后,获取设置值:
// Get data service
VSS.getService(VSS.ServiceIds.ExtensionData).then(function(dataService) {
// Get value in user scope
dataService.getValue("ProjectName").then(function(value) {
console.log("User scoped key value is " + value);
});
});
最后,当您从DocumentId获取文档时,它将从项目中获取:
// Get data service
VSS.getService(VSS.ServiceIds.ExtensionData).then(function(dataService) {
// Get document by id
dataService.getDocument("MyCollection", "DocumentId").then(function(doc) {
// Assuming document has a property named foo
console.log("Doc foo: " + doc.foo);
});
});
答案 1 :(得分:0)
我实际上是通过Promise修复的。
// Sets unique data storage name for each project
function setDBName() {
return new Promise(function(resolve, reject) {
VSS.ready(function(){
let web = VSS.getWebContext();
resolve(web);
})
})
}
然后
setDBName()
.then(function(res){
console.log('res', res)
}
.catch(function(err){
console.log('err', err)
}
每当VSS准备好获取时,这将返回Web上下文。