1

Mantisバグトラッカーバージョン1.2.8のインストールをカスタマイズして、バグレポートページに動的なカスタム列挙型フィールドを含めるように取り組んでいます。動的列挙型を設定する方法を理解し、対応する関数を作成して、可能な値を生成することができました。これが私がこれまでに持っているものです:

[管理]->[カスタムフィールドの管理]->[レガシージョブ番号]

名前:「レガシージョブ番号」
タイプ:列挙型
可能な値:= Legacy_job_number
デフォルト値:0
読み取りおよび書き込みアクセス:ビューア
最小。長さ:1
最大。長さ:0
フィルターに追加:チェック
済みジョブ作成時に表示:チェック
済みジョブ更新時に表示:チェック済み

custom_functions_inc.php

function custom_function_override_enum_legacy_job_number() {
    $t_project_name = project_get_name( helper_get_current_project() );
    $t_job_time_code = htmlentities(trim(substr(date('U'), 6, 9)));
    $t_project_description = project_get_field( helper_get_current_project(), 'description', '' );

    $t_project_description = "$t_project_description";
    $t_job_code = $t_project_description . "2012" . $t_job_time_code; 
    $t_possible_values_array = array("", "$t_job_code");

    $t_possible_values = implode( '|', $t_possible_values_array );

    return $t_possible_values;
}

私が抱えている問題は、新しいジョブを送信しようとしたり、「レガシージョブ番号」フィールドをそのまま更新して既存のジョブを更新しようとしたりするたびに、アプリケーションエラー#1303「レガシージョブ」フィールドの値が無効になることです。番号"。'

$ t_job_time_code = htmlentities(trim(substr(date('U')、6、9)));によって生成されたタイムスタンプ値まで問題を追跡しました。-削除すると、バグレポートは正常に送信されます。(ご覧のとおり、日付を$ t_job_codeにハードコーディングしているだけです。これは理想的ではありませんが、機能します。)

私が最終的にやりたいのは、特定のバグを識別するために使用されるため、一意である可能性が99.99%の「レガシージョブ番号」文字列に4桁の番号を追加することです。タイムスタンプを使用すると、タイムスタンプが絶えず増加するため、これにはうまくいくと思いましたが、どうやらMantisはそれを好まないようです。私はこれについていくつかのバリエーションを試しましたが、rand()またはmt_rand()によって生成された乱数を使用したくないのは、それでも重複が発生する可能性があるためです。

誰かが(1)なぜこれが起こっているのか、そして(2)私がそれを修正しようとするかもしれないことを説明するのを手伝ってもらえますか?

ご検討とご協力に感謝いたします。

最高、ピーター

4

1 に答える 1

0

追加の分析を完了した後、私は問題を引き起こしているものについての確かな理論を持っています。date( "Y")とdate( "m")を使用して、フォームの文字列を生成できることがわかりました。

201207

この文字列を含めてバグレポートを送信すると、驚いたことに、問題なく機能しました。最後のハードルは、「ジョブコード」の最後にある一意の番号でした。date('U')、6、9を使用して最後の3つの数値を生成すると、バグレポートの送信が毎回失敗することがわかりました。これは、最後の桁が1秒ごとに変わるためと考えられます。

ただし、date('U')、4、3を使用してバグレポートを送信すると、機能します。私の大まかな計算によると、この文字列の最後の桁(UNIXタイムスタンプ全体のコンテキストでは0000001000)は、16分ごとよりわずかに大きく変化します。最初に述べたように、一意の番号を生成するための何らかの方法が必要でした。バグレポートページが最初に読み込まれたときに1つの「ジョブコード」が作成されたため、最初の方法は機能しなかったと思います。「ADM2012447」だったとしましょう。しかし、Unixタイムスタンプは継続的に増分されるため、バグレポートを送信すると、別の3桁の数字がバグレポートとともに送信され、Mantisはこれを好みませんでした。

繰り返しますが、これは単なる確固たる理論であり、確認された事実ではありません。間違えたら訂正してください。

私の解決策の最後の言葉として、2つ以上のバグレポートが任意の16分のウィンドウで送信された場合、それらは同じジョブコード番号を持っている可能性が高いことを認識しています。これが発生した場合、システムの使用に基づいてかなり分離される可能性があります。そうでない場合でも、Mantis独自のバグ番号付けシステムにより簡単に区別できます。

この問題を読んで考えてくれたすべての人に感謝します。

于 2012-07-04T17:03:13.887 に答える