YouTrack および Hub ヘルプの開発者ポータル

拡張機能のプロパティ

アプリは、カスタムプロパティを使用してコア YouTrack エンティティを拡張できます。これらは拡張プロパティと呼ばれます。拡張プロパティを使用すると、コア YouTrack エンティティのカスタム値を保存できます。アプリは、JavaScript ベースのモジュールでこれらのカスタムプロパティとその値を操作できます。

拡張プロパティは、entity-extensions.json という名前の別のファイルで宣言されます。

アプリは、自身で宣言したプロパティにのみアクセスできます。アプリは他のアプリの拡張プロパティにアクセスすることはできません。

YouTrack からアプリを削除すると、アプリの拡張プロパティのすべての値が削除されます。拡張プロパティの一部を削除または名前変更した後にアプリを再インポートすると、古い値も削除されます。

サポートされているタイプ

拡張プロパティで使用できるすべてのタイプのリストは次のとおりです。

タイプ

許容値

integer

-9223372036854775808 から 9223372036854775807

float

4.94065645841246544e-324d から 1.79769313486231570e+308d (肯定的か否定的か)

boolean
string

YouTrack エンティティ

ワークフロー API によってサポートされる任意の YouTrack エンティティ

"multi": true パラメーターを追加することで、複数の値を格納する拡張プロパティを宣言できます。このパラメーターで宣言された拡張プロパティは、設定を返します。

拡張プロパティ宣言のサンプル

ここでは、entity-extensions.json ファイルの例を見ることができます。この例では、すべての可能なタイプの拡張プロパティの宣言を見ることができます。これらのプロパティは、課題エンティティに対して宣言されています。他の YouTrack エンティティに対しても同様の拡張プロパティを宣言できます。拡張プロパティを宣言できるエンティティの完全なリストについては、YouTrack エンティティを参照してください。

{ "entityTypeExtensions": [ { "entityType": "Issue", "properties": { "stringProp": { "type": "string" }, "integerProp": { "type": "integer" }, "floatProp": { "type": "float" }, "booleanProp": { "type": "boolean" }, "issueProp": { "type": "Issue" }, "issuesProp": { "type": "Issue", "multi": true } } } ] }

JavaScript スクリプトでは、エンティティの拡張プロパティを entityName.extensionProperties.propertyName として参照できます。次に例を示します。

  • ctx.issue.extensionProperties.stringProp
  • entities.Issue.findById("DEMO-1").extensionProperties.stringProp

拡張プロパティを使用する JavaScript コードサンプルについては、拡張プロパティの使用方法を参照してください。

アプリのグローバルストレージ

アプリは、これらのプロパティを特定のエンティティにリンクせずに、グローバルアプリレベルで拡張プロパティを宣言できます。アプリ内の任意の JavaScript ベースモジュールのスクリプトコンテキスト (ctx) を通じて、グローバル拡張プロパティにアクセスできます。この種類の拡張プロパティを宣言するには、エンティティタイプとして AppGlobalStorage を使用します。

{ "entityTypeExtensions": [ { "entityType": "AppGlobalStorage", "properties": { "globalCounter": { "type": "integer" }, "globalIssuesSet": { "type": "Issue", "multi": true } } } ] }

グローバル拡張プロパティは ctx.globalStorage.extensionProperties.propertyName として参照できます。

グローバル拡張プロパティを使用する JavaScript コードサンプルについては、以下のコードサンプルを参照してください。

拡張プロパティの使用方法

JavaScript スクリプトでは、エンティティの拡張プロパティを entityName.extensionProperties.propertyName として参照できます。次に例を示します。

  • ctx.issue.extensionProperties.stringProp
  • entities.Issue.findById("DEMO-1").extensionProperties.stringProp

以下は、JavaScript アプリスクリプトで上記のサンプルで宣言された拡張プロパティにアクセスする方法を示したコードサンプルです。

const entities = require('@jetbrains/youtrack-scripting-api/entities'); exports.rule = entities.Issue.action({ command: 'test', action: function (ctx) { const printValues = () => { return 'stringProp:' + ctx.issue.extensionProperties.stringProp + ';' + 'integerProp:' + ctx.issue.extensionProperties.integerProp + ';' + 'booleanProp:' + ctx.issue.extensionProperties.booleanProp + ';' + 'issueProp:' + ctx.issue.extensionProperties.issueProp?.id + ';' + 'issuesProp:' + ctx.issue.extensionProperties.issuesProp?.first()?.id + ';' } ctx.issue.addComment(printValues()); } });

グローバル拡張プロパティは ctx.globalStorage.extensionProperties.propertyName として参照できます。

以下は、JavaScript アプリスクリプトで上記のサンプルで宣言されたグローバル拡張プロパティにアクセスする方法の例です。

const entities = require('@jetbrains/youtrack-scripting-api/entities'); exports.rule = entities.Issue.action({ command: 'test', action: function (ctx) { ctx.globalStorage.extensionProperties.globalCounter++; ctx.globalStorage.extensionProperties.globalIssuesSet.add(ctx.issue); } });