JavaScript ワークフローリファレンス
YouTrack を使用すると、JavaScript でワークフローを作成できます。以前のバージョンの YouTrack のワークフローに使用されていたドメイン固有のプログラミング言語は非推奨になり、YouTrack 2020.5 では完全に削除されました。
JavaScript は間違いなく今日世界で最も人気のあるプログラミング言語です。独自がそれに慣れていないのなら、あなたの組織には流暢な人がいる可能性があります。JavaScript に切り替えることで、YouTrack 用のワークフローをこれまで以上にアクセスしやすくしたいと考えています。
そうは言っても、独自のワークフローを作成するためには、いくつかのコードを書く必要があります。これには JavaScript の基本的な知識が必要です。幸いなことに、Web 上にはたくさんのリソースがありますが、そのうちの 1 つは言語の開発を監督し続ける Mozilla Foundation によって提供されています。
これはまた、JavaScript でワークフローを作成するときに、普通のこと以外に何もする必要がないことを意味します。ワークフローを作成するときに JavaScript でサポートされている宣言、変数、定数、データ型、リテラル、関数、式、演算子を使用できます。
ドキュメントのこのセクションでは、ワークフロー API に固有のカスタムプロパティとメソッドを使用する方法を理解するのに役立つガイドラインをいくつか提供します。関数、プロパティ、メソッドの完全なリストについては、YouTrack ワークフロー API を参照してください。
JavaScript の互換性
現在の JavaScript 実装は、最新の ECMAScript 仕様と互換性があります。これは、JavaScript のこの標準化された仕様でサポートされている機能が、YouTrack ワークフローで使用できることを意味します。
以前のバージョンの YouTrack に含まれていた JavaScript ランタイムは、ES6 /JS2015 の限定的なサポートを提供していました。これは、YouTrack でワークフローを作成するときに、完全な JavaScript 機能セットの約 22% に制限されることを意味しました。
レガシーワークフロープログラミング言語からの主な変更
JavaScript に切り替えると、ワークフローを作成するときに特定のエンティティとプロパティを参照する方法が変わります。従来のワークフロー API と比較した主な変更点の短いリストを次に示します。
issue
参照が省略されることはありません。コンテキストから issue を参照すると仮定して issue メソッドを呼び出すことはできません - 明示的に issue を参照する必要があります。プロパティ関連のメソッドのスペルは異なります。また、これらの関数はプロパティになりました。取得メソッドは単純化されています。
MPS ベースの API
JavaScript API
issue.becomesResolved(), issue.becomesReported()
issue.becomesResolved, issue.becomesReported
issue.getId(), issue.getUrl()
issue.id, issue.url
フィールド関連のキーワードがメソッドになりました。
MPS ベースの API
JavaScript API
X.required
issue.fields.required(ctx.X, <message>)
X.changed
issue.fields.isChanged(ctx.X)
X.becomes
issue.fields.becomes(ctx.X, <ctx.X.value>)
X.oldValue
issue.fields.oldValue(ctx.X)
グローバルキーワードと警告文が変更されました。
MPS ベースの API
JavaScript API
message
workflow.message(<message>)
(「@jetbrains/youtrack-scripting-api/workflow」モジュールを参照)assert
workflow.check(<condition>, <message>)
(「@jetbrains/youtrack-scripting-api/workflow」モジュールを参照)loggedInUser
ctx.currentUser
now
Date.now()
(標準 JS 日付 API)いくつかの方法が完全に変更されます。
MPS ベースの API
JavaScript API
loggedInUser.createNewIssue(<project name>)
new entities.Issue(<user>, <project>, <summary>)