我希望在我的 excel 文件中有一个 powerquery,它可以从 jira board 中提取所有问题。 我有:
https://[mycompany].atlassian.net/sr/jira.issueviews:searchrequest-csv-with-bom-all-fields/12170/SearchRequest-12170.csv?atl_token=8e034a3-9a77-484b-9138- a0be45b9ff7b_1aaca7d5e98a798a9df94a3d032ab32e23de3433_lin&tempMax=1000
https://[mycompany].atlassian.net/sr/jira.issueviews:searchrequest-csv-with-bom-all-fields/12170/SearchRequest-12170.csv
我读到基本身份验证已被弃用,并且我无法使用匿名、Windows 或组织身份验证,因此我选择了 webapi。
[错误步骤] - 当我尝试连接时,我收到消息:“只有在提供 Web api 密钥名称时才能指定 Web api 密钥”
-> 我需要做什么? 我假设有些人有很多 api 密钥,而我需要引用我命名为“excel”的密钥? 我该怎么做?
任何见解表示赞赏:)
不同的方法。您为什么不尝试使用插件:Jira Cloud for Excel,它是 Atlassian 的官方产品,它是免费的。您可以使 Excel 与 Jira 问题保持同步(仅从一个方向 Jira -> Excel)。提取问题后(通过 Jira Filter、JQL 或
JIRA.JQL
函数,我更喜欢最后一个选项),您可以使用 Power Query 来转换源、Excel 函数等。
我认为 Jira-Excel 集成是实现这一目标的最佳方法。除非您在 Excel 中阻止了加载项(通常有些公司会这样做),否则这是集成这两个工具的最简单方法。顺便说一句,他们有一个适用于 Google Spreadsheet 的兄弟产品:Jira Cloud for Google Spreadsheet。我已经使用这两个了好几年了。
据我记得他们不需要 API 令牌来进行身份验证。它可以轻松地从您的 Jira 实例安装,转到Issues,输入您想要的查询,然后单击以下图标:
稍后,您可以从 Excel 更改查询,或使用 Jira Filter 或
JIRA.JQL
函数。您还可以指定要在 Excel 中引入的列,它还允许获取 Jira 实例已定义的 Jira 自定义字段。无需拥有管理员权限即可执行此操作。
如果您想遵循最佳实践,我会选择@David Leal 的解决方案。 否则,在公式栏中,通过附加 API 密钥名称作为查询参数来修改 URL。将
&os_username=excel
添加到 URL 末尾。
https://[mycompany].atlassian.net/sr/jira.issueviews:searchrequest-csv-with-bom-all-fields/12170/SearchRequest-12170.csv?atl_token=8e034a3-9a77-484b-9138-a0be45b9ff7b_1aaca7d5e98a798a9df94a3d032ab32e23de3433_lin&tempMax=1000&os_username=excel
当您包含
os_username
参数并将其值设置为 API 密钥名称“excel”时,您可以指定用于身份验证的 API 密钥。
我不认为使用个人访问令牌可以下载问题列表as-csv。
使用 Power Query,您可以执行返回 JSON 的 REST API 搜索,然后使用步骤从 JSON 响应中解压所需的值。
这是一个简单的示例,您可以在 Power Query 高级编辑器中复制/粘贴该示例。当 Power Query 要求您进行连接身份验证时,请指定匿名身份验证。
修改下面的服务器 URL、jql 查询和个人访问令牌即可开始:
let
Source = Json.Document(Web.Contents(
"https://your.jira.server/rest/api/2/search",
[
Query=[
jql="project=SOMEPROJECT",
fields="summary,reporter,status",
maxResults="1000" /* default is 50 */
],
Headers=[Authorization="Bearer YOURPERSONALACCESSTOKEN"]
]
)),
Navigation = Source[issues],
AsTable = Table.FromList(Navigation, Splitter.SplitByNothing(), null, null, ExtraValues.Error),
Headers = Record.FieldNames(AsTable[Column1]{0}),
Result = Table.ExpandRecordColumn(AsTable, "Column1", Headers, Headers),
#"Removed columns" = Table.RemoveColumns(Result, {"self", "expand", "id"}),
#"Expanded fields" = Table.ExpandRecordColumn(#"Removed columns", "fields", {"summary", "reporter", "status"}, {"summary", "reporter", "status"}),
#"Expanded reporter" = Table.ExpandRecordColumn(#"Expanded fields", "reporter", {"name"}, {"reporter_name"}),
#"Expanded status" = Table.ExpandRecordColumn(#"Expanded reporter", "status", {"name"}, {"status_name"})
in
#"Expanded status"