2

JIRA で独自のカスタム フィールド タイプを開発しています。私のクラスは非常に単純で、GenericTextCFType を拡張します。私の目標は、データベースにフィールド値の識別子 (ID) を保存することですが、課題フォームに人間が読めるフィールド値のキャプションを表示することです。

GenericTextCFType クラスのメソッドを検索したところ、getSingularObjectFromString メソッドが見つかりましたが、それが何をするのかわかりません。JIRA javadoc は次のように述べています。「プレゼンテーション層から渡された文字列値を指定すると、特異オブジェクトを返します」

4

1 に答える 1

5

はい、それは素晴らしい名前ではありません。詳しくは「Practical JIRA Plugins」(O'Reilly) に書きました。多くのメソッドを詳細に説明した抜粋を次に示します (フォーマットについて申し訳ありません)。この本には、https://bitbucket.org/mdoar/practical-jira-pluginsで入手できる実用的な例もあります。

CustomFieldType メソッド この例のカスタム フィールド タイプ クラスは、通常どおり CustomFieldType インターフェースを実装しますが、代わりに NumberCFType よりも継承階層の上位にクラスを拡張します。拡張するクラスは AbstractCustomFieldType であり、CustomFieldType を実装するほとんどのクラスのルートにあります。

名前に「SingularObject」が含まれる CustomFieldType インターフェイスのメソッドは、特異なオブジェクト (この例では Carrier オブジェクト) を参照します。オブジェクトを参照する JIRA 4 カスタム フィールドの他のすべてのメソッドは、トランスポート オブジェクト (Carrier オブジェクトのコレクションなど) を参照しています。JIRA 5 では、ほとんどのカスタム フィールド メソッドで Object の使用が削除されました。カスタム フィールドに関する JIRA 5.0 の変更点の詳細については、https://developer.atlassian.com/display/JIRADEV/Java+API+Changes+in+JIRA+5.0#JavaAPIChangesinJIRA5.0-CustomFieldTypesを参照してください。クラス階層にいくつかの大きな変更があり、ほとんどのクラスは、以前のように単にオブジェクトを使用する代わりに、パラメーターとして Java ジェネリックを使用するようになりました。

通常、カスタム フィールド タイプのクラスのコンストラクターに挿入される 2 つのオブジェクトがあります。1 つ目は CustomFieldValuePersister 永続化オブジェクトで、実際にデータベースと対話します。2 つ目は、カスタム フィールドのデフォルト値の保存と取得に使用される GenericConfigManager オブジェクトです。例2-2のDoubleConverterなど、他のオブジェクトが必要に応じてコンストラクタに挿入されます。考慮すべき最初のメソッド セットは、カスタム フィールド タイプが何らかの方法でデータベースと対話するために使用するメソッドです。

getSingularObjectFromString()

このメソッドは、「42.0###The answer」などのデータベースから取得した文字列を Carrier オブジェクトに変換します。null 値は、そのようなオブジェクトが定義されていないことを意味します。

複数の値を持つフィールド

Collection<Carrier> getValueFromIssue(CustomField field, Issue issue)

これは、特定の問題についてフィールドに含まれる内容を抽出するための主な方法です。パーシスタを使用して問題のデータベースから値を取得し、各値を Carrier オブジェクトに変換してから、すべての Carrier オブジェクトをトランスポート オブジェクト Collection に入れます。null 値は、このフィールドに特定の問題に対して格納されている値がないことを意味します。これは、JIRA 5.0 より前にオブジェクトを返すために使用されたメソッドの 1 つです。

createValue(CustomField field, Issue issue, Collection<Carrier> value)
updateValue(CustomField field, Issue issue, Collection<Carrier> value)

これらのメソッドは、指定された課題のフィールドの新しい値を作成するか、既存の値を更新します。これを行うパーシスタは、String の Collection が格納されることを想定しているため、これらのメソッドは両方とも getDbValueFromCollection メソッドを呼び出して、それを支援します。

getDbValueFromCollection()

多くのカスタム フィールド タイプ クラスに見られるプライベート コンビニエンス メソッドで、名前が異なる場合があります。データベースに格納するために、トランスポート オブジェクト (Carrier オブジェクトのコレクションなど) を文字列のコレクションに変換するために使用されます。

setDefaultValue(FieldConfig fieldConfig, Collection<Carrier> value)

トランスポート オブジェクト (キャリア オブジェクトのコレクション) をそのデータベース表現に変換し、データベースのジェネリック構成テーブルに格納します。

Collection<Carrier> getDefaultValue(FieldConfig fieldConfig)

デフォルト値がある場合は、データベースから取得し、トランスポート オブジェクト (Carrier オブジェクトのコレクション) に変換します。FieldConfig オブジェクトは、カスタム フィールドの各デフォルト値のコンテキストを表すものです。

考慮すべき次の一連のメソッドは、何らかの方法で Web ページと対話するものです。Web ページからのすべての値は、HTML 入力要素の値のマップのホルダーである Custom FieldParams オブジェクトの一部として、カスタム フィールド タイプ オブジェクトに到着します。

validateFromParams(CustomFieldParams params, ErrorCollection errors, FieldConfig config)

これは、ユーザーがカスタム フィールドの値を編集した後に呼び出される最初のメソッドです。ここに記録されたエラーは、編集ページのフィールドの横に適切に表示されます。

getValueFromCustomFieldParams(CustomFieldParams customFieldParams)

このメソッドは、validate FromParams によって受け入れられたフィールドの新しい値が消去され、トランスポート オブジェクトに変換される場所です。カスタム FieldParams オブジェクトには、カスタム フィールド ID である name 属性を持つ HTML 要素の文字列のみが含まれます (customfield_10010 など)。null 値は、このフィールドに値がないことを意味します。

getStringValueFromCustomFieldParams(CustomFieldParams parameters)

このメソッドは、文字列、文字列のコレクション、または CustomFieldParams オブジェクトのオブジェクトを返します。第 3 章: 高度なカスタム フィールド タイプ Velocity テンプレートで使用される値変数を設定するために使用されます。また、カスタム フィールド サーチャーによって使用される Provider クラスでも使用されます。

String getStringFromSingularObject(Carrier singularObject)

ご想像のとおり、このメソッドは getSingularObjectFromString の正反対ではありません。代わりに、単一のオブジェクト (Carrier) を、データベースの値ではなく、Web ページで使用される文字列に変換するために使用されます。返された文字列は、検索用に Lucene インデックスに格納されている場合もあります (57 ページの「より複雑なサーチャー」)。JIRA 5.0 より前では、単一のオブジェクトがオブジェクトとしてこのメ​​ソッドに渡されていました。

考慮すべき CustomFieldType メソッドの最終セットは次のとおりです。

Set<Long> remove(CustomField field)

このメソッドは、カスタム フィールドが JIRA インスタンスから完全に削除されたときに呼び出され、削除によって影響を受けた課題 ID を返します。フィールドから値を削除するために使用する正しい方法は updateValue です。

String getChangelogValue(CustomField field, Object value)
String getChangelogString(CustomField field, Object value)

これらのメソッドは、課題の [履歴] タブに表示されるテキストが生成される方法です。このタイプのカスタム フィールドが変更されると、これらのメソッドがフィールドの前後の値で呼び出されます。2 つの方法の違いは、値が後で無効になった場合、代わりに文字列が表示されることです ( https://developer.atlassian.com/display/JIRADEV/Database+Schema#DatabaseSchema-ChangeHistory )。

extractTransferObjectFromString()
extractStringFromTransferObject()

これらのメソッドは CustomFieldType インターフェイスからのものではありませんが、プロジェクトのインポート時に使用する標準の Multi フィールドに存在します。

その他のインターフェース

カスタム フィールド タイプによって一般的に実装されるその他のインターフェイスがいくつかあります。

ProjectImportableCustomField

このインターフェースの getProjectImporter メソッドを使用して、XML バックアップからプロジェクトをインポートする際にカスタム フィールドに値を入力する方法を実装します。このインターフェースを実装しない場合、プロジェクトのインポートはカスタム フィールドの値をインポートしません。

MultipleCustomFieldType
MultipleSettableCustomFieldType

これらの 2 つのインターフェイスは、オプションを持つカスタム フィールドで使用され、さらに複数のオプションを持つことができます。これらのクラスでは、Java List の単純なサブクラスである Options クラスを使用して値にアクセスできます。これらのインターフェイスは、汎用の複数値カスタム フィールド タイプでの使用を意図したものではありません。

複数の値を持つフィールド | 41

SortableCustomField

このインターフェイスには、2 つの特異なオブジェクトを比較するための compare メソッドが含まれています。これは、列の見出しをクリックして問題のページを並べ替えるときに、問題ナビゲーターによって使用されます。これは実際には、サーチャーが関連付けられていないカスタム フィールドの遅いフォールバックです (第 4 章を参照)。

RestAwareCustomFieldType
RestCustomFieldTypeOperations

これら 2 つのインターフェースは、取得または更新できるフィールドを JIRA REST API が認識する方法です。JIRA 5.0 の新機能。

于 2013-07-29T17:38:21.343 に答える