ちぐログ

メモ書きです

Azure DevOps カスタムプロセスで追加した項目の取得

Azure DevOps オンライン #2 に参加しました

Stay Home な ゴールデンウィークでしたが、ありがたいことに TFSUG でオンライン勉強会を開催していたので参加させていただきました。

tfsug.connpass.com

内容はこちら kkamegawa.hatenablog.jp

Azure DevOps を実践で使い始めたので、非常に勉強になりました。
ありがとうございます。


カスタム項目が REST API で取得できない?

上記のブログの中には記載されていませんが、当日以下の質問をさせていただきました。

プロセスをカスタマイズして追加した項目について、REST API の作業項目取得で追加項目は含まれますか?
(以前検証したときは取得できない気がしました)


黄色く囲った部分(デフォルトでは存在しない)を REST API でとりたいという話です。 f:id:chiguniiita:20200510151704p:plain

私もさすがにこれはできると思っていましたが、ぱっと試した時には取れなかったので、
特殊な取得方法があるのかと思って質問させていただきました。

勉強会のタイミングでは「取れるはず。取れなければバグ。」と回答頂いたので、再度検証しました。


結論

以下のAPIを使って、追加項目も普通に取得できました。 docs.microsoft.com

ただし、注意が必要なのが 「値が入っているフィールドしか結果に入ってこない」 ということです。
これは既存プロセスの既存項目でも同じでした。


以下はフィールドに値を入れなかった時と入れたときの結果(json)の違いです。
値がない場合は、結果に入ってきません。 f:id:chiguniiita:20200510152519p:plain

以前試した時は、値を入れてなかった気がするので、これが取得できないと思った原因でした。


特に変わったことはしていませんが、REST API で項目取得をするのに使ったコードも載せておきます。 gist.github.com

Azure DevOps Server の REST API エラーでハマった

Azure DevOps Server (オンプレの方) が必要になったので、REST APIの検証していたのですが、
叩く API によって、エラーが返ってくるので悩んでいました。

エラーになる API と 実行結果

例えば、エラーになる REST API はこちらです。 docs.microsoft.com

API の結果がこちら。

{"$id":"1","innerException":null,"message":"searchPlatformConnectionString","typeName":"System.ArgumentException, mscorlib","typeKey":"ArgumentException","errorCode":0,"eventId":0}

こちらの REST API はエラーになりません。 docs.microsoft.com

原因

管理コンソールで検索サービスの構成がされていなかったのが原因でした。 f:id:chiguniiita:20200502052017p:plain

画像は構成済ですがエラーが出る場合は、ここが未構成状態になっています。
エラーになる API は クエリを POST していたので、クエリを使うものがエラーの対象となる可能性が高いです。(未検証)

検索サービスを使わずに運用回避

やりたいことは作業項目を特定の条件で取得することだったので、事前に Boards のクエリで作成しておいて、REST API で叩くことにしました。 docs.microsoft.com

まとめ

大半の人は、Azure DevOps Services(クラウドの方)を使うと思うので、このエラーには遭遇しないと思いますが、誰かの助けになれば・・・