azure devops vsts 扩展动态上下文菜单,子菜单未正确加载

Posted

技术标签:

【中文标题】azure devops vsts 扩展动态上下文菜单,子菜单未正确加载【英文标题】:azure devops vsts extensions dynamic context-menu with child menu not loading properly 【发布时间】:2021-11-30 19:44:46 【问题描述】:

我正在尝试开发一个扩展程序,允许我打开工作项上下文菜单并查看新菜单项/控件“查看测试结果”,当我将鼠标悬停在“查看测试结果”上时,将打开一个子菜单,其中包含配置可用。就像上下文菜单中的“移动到迭代”菜单一样。

我的 vss-extension.json 的贡献部分是

"contributions": [
    
        "id": "change-status.contextmenu",
        "type": "ms.vss-web.action-provider",
        "description": "Change state selected items",
        "targets": [
            "ms.vss-work-web.work-item-context-menu",
            "ms.vss-work-web.backlog-item-menu"
        ],
        "properties": 
            "group": "contributed",
            "uri": "configMenu.html"
        
    
]

HTML页面

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <script src="lib/VSS.SDK.min.js"></script>
</head>
<body>
    <script type="text/javascript">
         VSS.init(
            explicitNotifyLoaded: true,
            usePlatformScripts: true,
            configureModuleLoader: true
        );
        
        // Load main entry point for extension
        VSS.require(["src/app"], function () 
            // Loading succeeded
            VSS.notifyLoadSucceeded();
        );
    </script>
</body>

app.ts 文件

import MenuHandler from "./logic/menuHandler";
VSS.register(VSS.getContribution().id, new MenuHandler().menuHandler);

最后是 menuHandler 函数

menuHandler= (context: any) : IContributedMenuSource => 
    return <IContributedMenuSource> 
        getMenuItems: (actionContext: any)  => 
            return this.buildConfigurationMenu(actionContext).then(
            subMenus => return this.buildMainMenuWithPromise(subMenus);
            );
    ;

buildConfigurationMenu 函数调用 azure devops TestManagement api 并通过 TestCaseId 获取套件,然后 foreach 套件我们获取点,我们从点获取配置名称并返回名称数组以构建菜单项和 buildConfigurationMenu 返回一个承诺,然后 buildMainMenuWithPromise 调用它返回主菜单和 buildConfigurationMenu 函数返回的子菜单。

buildConfigurationMenu 和 buildMainMenuWithPromise 工作正常并返回所需的结果,正如我在调试时在控制台中看到的那样。

问题是当我第一次单击上下文菜单(...按钮)时,我看不到新添加的菜单“查看测试结果”,但是当我第二次单击上下文菜单时,我看到了“查看测试”结果”菜单,悬停时在子菜单中显示相关配置项。我希望它在第一次点击时显示。

我认为这与 api 调用延迟和承诺返回有关。我怎样才能解决这个问题或任何解决方法来避免这个问题?

谢谢

【问题讨论】:

【参考方案1】:

我通过用 for 循环替换 foreach 循环解决了这个问题。我想从导致问题的 foreach 循环中调用 promise。谢谢

【讨论】:

以上是关于azure devops vsts 扩展动态上下文菜单,子菜单未正确加载的主要内容,如果未能解决你的问题,请参考以下文章

微软改名部又出动啦!微软宣布VSTS改名为Azure DevOps

Azure Devops (VSTS) 代理池和部署池之间的区别

MS AppCenter 和 Azure DevOps(前 VSTS)之间的主要区别是啥?

如何获取从 Azure Devops / VSTS / TFS 中的“Windows 机器文件复制”任务复制的文件总数?

多目标 .NET Core 控制台的 Azure DevOps (VSTS) 托管 macOS 代理失败

Azure Devops/TFS测试管理(上)