ワークフロー API を使用する
このページの情報を使用して、ワークフローリファレンスの他のセクションで説明されていないワークフロー API の特定のエンティティを操作する方法を学習します。
ワークフロースクリプトの記述場所
ワークフロースクリプトは、ワークフローに属する JavaScript モジュールです。YouTrack 内で作成および編集することも、外部の開発環境で管理することもできます。
YouTrack でワークフローを作成し、モジュールを追加するには、Web ベースのワークフローエディターを使用します。ガイド付きの例については、JavaScript ワークフロークイックスタートガイドを参照してください。
IDE でワークフローを作成するには、ワークフロースクリプトパッケージをインストールし、ワークフローを YouTrack にアップロードしてください。セットアップ手順については、外部コードエディターの使用を参照してください。
各モジュールは、1 つのワークフロールールまたは再利用可能なカスタムスクリプトを定義します。コードを実行するタイミング(たとえば、課題が変更されたとき、スケジュールに基づいて実行したとき、ユーザーがアクションを実行したときなど)に合わせて、モジュールタイプを選択してください。
プロパティ、カスタムフィールド、課題リンクへのアクセス
これらのガイドラインに従って、課題のプロパティ、カスタムフィールドの値、課題のリンクにアクセスします。
- 事前定義された課題フィールド
summary、description、reporterのような事前定義された課題フィールドは、すべてissueエンティティのプロパティです。const summary = issue.summary; issue.summary = "Just a bug";- カスタムフィールド値
カスタムフィールドの値への参照は、フィールドが単一の値を保存するか複数の値を保存するかによって異なります。
単一の値を格納するフィールドの場合、値を直接参照できます。
const state = issue.fields.State; if (state && issue.fields.is(ctx.State, ctx.State.Fixed)) { // Do stuff } issue.fields.State = ctx.State.Open;複数の値を格納するフィールドの場合、値はセットとして格納されます。セットで使用できる操作については、次のセクションで詳しく説明します。
const versions = issue.fields["Fix versions"]; versions.forEach(function (v) { subtask.fields["Fix versions"].add(v); });
フィールド定義自体をインスペクションする必要がある場合は、プロジェクトから
ProjectCustomFieldを取得し、そのtypeNameを読み取ってください。複数値のカスタムフィールド型は、user[*]やversion[*]などの[*]接尾辞を使用します。単一値のバンドル、ユーザー、グループフィールド型は[1]を使用します。integerやstringなどのスカラーフィールド型は、カーディナリティ接尾辞を使用しません。const assigneeField = issue.project.findFieldByName('Assignee'); if (assigneeField && assigneeField.typeName.endsWith('[*]')) { // Assignee stores multiple users in this project. }この実行時プロパティは、ルール要件の
multiプロパティとは異なります。ルールでフィールドに複数の値を格納する必要がある場合はmulti: trueを使用し、ルールで既存のフィールドをインスペクションする必要がある場合はtypeNameを使用してください。Workflow API エンティティで表されるカスタムフィールド値を比較する場合は、表示名やオブジェクト参照を比較するのではなく、API ヘルパーメソッドを使用してください。
issue.fields.is(ctx.Field, ctx.Field.Value)メソッドは現在の値をチェックし、issue.fields.was(ctx.Field, ctx.Field.Value)メソッドは前の値をチェックします。issue.fields.becomes(ctx.Field, ctx.Field.Value)メソッドは、現在のトランザクションでフィールドが変更され、その新しい値が期待値と一致する場合にのみtrueを返します。- エイリアス
requirementsステートメントでカスタムフィールドにaliasプロパティを設定した場合、このエイリアスを使用してフィールドの値にもアクセスできます。例: 修正バージョンフィールドのエイリアスがFVに設定されている場合:issue.fields.FV.forEach(function (v) { // Do stuff });- 課題リンク
課題リンクタイプには、内部または外部の名前でアクセスします。例:
relates toまたはparent for課題リンクは常にセットとして扱われます。const parent = issue.links["subtask of"].first(); parent.links["parent for"].add(issue);
スペースまたは他のアルファベット以外の文字を含むカスタムフィールドと課題リンクタイプは、引用符と括弧で設定する必要があることに注意してください。
セットオブジェクトの使用
複数の値(Set <value type> として返される)で実行できる操作のグループがいくつかあります。
それらに直接(
first()、last()、get(index))またはイテレータ(entries()、values())でアクセスします。Set のすべての値を
forEach(visitor)でトラバースします。find(predicate)で値を探し、値がhas(value)で設定されているかどうかを確認します。isEmpty()、isNotEmpty()、sizeプロパティでサイズを確認してください。add(element)、delete(element)、clear()でコンテンツを変更します。added、deleted、isChangedプロパティを使用して設定オブジェクトの現在の変更を取得します。
このオブジェクトの詳細な説明については、設定を参照してください。
メソッドの呼び出し
特定のエンティティを見つける
課題やユーザーなどの特定のエンティティを見つけて、ワークフロースクリプトで使用するには、次の 2 つの方法があります。
要件に追加し、コンテキストで参照します。このアプローチは最も信頼性が高いため、できるだけ頻繁に使用してください。指定されたエンティティがデータベースに見つからない場合、スクリプトは実行されません。
最初のオプションが何らかの理由で適用できない場合、ワークフロー API から
findBy*およびfind*By*メソッドを使用します。
findBy* メソッドを使用して、特定のエンティティの単一出現箇所を検索します。
find*By* メソッドを使用して、子エンティティを検索します。
複数の課題を見つける
場合によっては、特定の基準に一致する一連の課題を検索し、1 つのルールの範囲内で処理したい場合があります。例: 課題のリストを作成し、メールメッセージとして送信できます。このような状況では、検索 API が役に立ちます。簡単な例を次に示します。
ワークフロースクリプトのデバッグ
ワークフロールールの実行中に値をインスペクションするには、スクリプトにログ記録ステートメントを追加します。
ワークフロースクリプトメッセージは、ブラウザーの開発者コンソールではなく、ワークフローエディターのコンソールペインに表示されます。YouTrack サーバーのインストールの場合、これらのメッセージは workflow.log ファイルにも書き込まれます。
コンソールの詳細については、コンソールツールバーを参照してください。追加の診断ガイダンスについては、ワークフローのトラブルシューティングを参照してください。
関連ページ:
Web ベースのワークフローエディター
YouTrack には、JavaScript でワークフローを作成するために使用できる Web ベースのワークフローエディターが組み込まれています。統合開発環境でコードを書くことを好む場合でも、JavaScript をサポートする外部エディターを使用してワークフローを YouTrack にインポートすることができます。Web ベースのワークフローエディターにアクセスするには: アプリケーションヘッダーの管理メニューから、ワークフローを選択します。JavaScript で記述されたワークフローを見つ...
JavaScript ワークフロークイックスタートガイド
このクイックスタートガイドでは、JavaScript でワークフローの操作を開始するために必要な基本概念について説明します。ウォームアップをスキップしたい場合は、API に直接飛び込むことができます。YouTrack でワークフローを使用したことがない場合は、ワークフローリファレンスから始めて、背景情報を確認してください。JavaScript に慣れていない場合は、代わりにワークフローコンストラクターを試してみてください。プログラミングの知識がなくても、コンストラクターを使用してワークフローを構...
外部コードエディターの使用
Web ベースのワークフローエディターを使用して、簡単な編集を行ったり、簡単なルールを記述したりできます。ただし、フル機能の開発環境での作業に慣れている場合は、JavaScript をサポートする IDE でワークフローを実際に作成できます。最も快適な環境で作業できるよう、開発環境にインストールできるパッケージを npm レジストリサービスに公開しました。この機能は特定のプラットフォームに限定されません。JavaScript をサポートする環境であれば、どのような環境でも YouTrack のワー...
Slack との統合の構築
ワークフロー API の http モジュールを使用すると、ワークフローを使用して、Slack とのプッシュスタイルの統合をスクリプト化できます。このタイプの統合により、特定の課題イベントの通知を Slack に投稿できます。ワークフローベースの統合では、受信 Web フックを使用して、Slack と YouTrack の間の統合を可能にします。YouTrack ワークフローは、課題 ID と要約を含む JSON ペイロードを含む通常の HTTP リクエストを送信します。この統合では、Slack...