如何在VSTS扩展中使数据存储对项目唯一?

时间:2018-08-08 21:21:16

标签: azure-devops azure-devops-extensions

    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是我们正在使用的存储的名称。 但是,这并非项目独有。当我尝试从同一组织内的另一个项目访问集线器扩展时,仍然可以看到数据。

我尝试根据访问的项目动态命名集合,但是没有明确的方法来在扩展端获取项目名称。

如何使数据存储对于同一组织内的项目而言是唯一的?

2 个答案:

答案 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上下文。