2017-12-07 4 views
1

カスタムフィールドが空であるかどうかを確認するにはどうすればよいですか?Bugzilla拡張。カスタムフィールドが空であるかどうかをチェックする方法

たとえば、qa_contactが設定されていないことを確認できます。

sub object_end_of_set_all { 
    my ($self, $args) = @_; 
    my $object = $args->{'object'}; 
    if ($object->{'bug_status'} eq 'RESOLVED') {   
     if ($object->{'qa_contact'} eq "") {    
      ThrowUserError("empty_qa_contact"); 
     } 
    } 
} 

カスタムフィールドには同じ方法がありますか。 cf_test?

私がする必要があり、変数にカスタムフィールドを保存することを知っている:メソッドは、その値を取得したり、それが空でないかどうかを確認するために使用することができ

my $test = new Bugzilla::Field({ name => 'cf_test' }); 

?二つの問題を発見

+0

は私がテーブル「バグ」は、私がカスタムフィールドに書かれたテキストが含まれているDBのmysqlので見つかった:

答えは別のフックを使用することです。この表にはqa_contactとbug_statusが含まれています。 $ args - > {'object'}でカスタムフィールドを返す理由を理解できませんか? – Alexred

+0

どのクラスが '$ object'ですか? Bugzillaのどのバージョン? – ysth

+0

もし私が間違っていないなら、オブジェクトはフックから取っています:Bugzilla :: Hook :: process( 'object_end_of_set_all'、 {object => $ self、params => \%field_values}); このフックは、Bugzilla :: Objectパッケージのset_allサブルーチン内に配置されます。 クラスはオブジェクトです、そうですか? – Alexred

答えて

0

:( "...")ThrowUserErrorを実行した後 1.任意のオブジェクト(cf_testあるいはBugzillaのフィールド)は常にNULLです。 2.カスタムフィールドに「object_end_of_set_all」フックを使用する場合は、カスタムフィールドに対してキャッシュされた値のみが表示されます。

sub bug_end_of_update { 
    my ($self, $args) = @_; 
    my ($bug, $old_bug, $timestamp, $changes) = @$args{qw(bug old_bug timestamp changes)}; 
    if ($bug->bug_status eq 'RESOLVED') { 
     if ($bug->cf_test eq "") { 
      ThrowUserError("test_is_empty"); 
     } 
    } 
} 
関連する問題