リクエストトラッカーのプログラミングのニュアンスを掘り下げます

こんにちは、Habrauser!

このトピックでは、プログラミングの観点からリクエストトラッカーシステムを構築する原理について、次のように説明します。 これは非常に優れたアプリケーション会計システムであり、大企業ではヘルプデスクシステムとして使用できます。



誰が気にします-猫へようこそ。



システムの概要または少し:



システムはperlで記述されており、任意の(2でチェックした)httpサーバーで動作します。 システムが使用できる広範なデータベースセット。 十分な速度で、ページ生成がオンザフライで行われ、コンテンツの更新にブレーキはかかりません。 最後の2つの安定ブランチ、3.8および4.11を詳細に調査しました。

ブランチ間の主な違いはインターフェイスに関係しており、コード内のコンストラクターの同じセットはわずかな変更が加えられています。 ただし、プロトタイプフレームワークは3.8で使用され、ajaxはほとんど使用されませんが、jqueryは4.11で使用され(私の意見でははるかに便利です)、ajaxコンストラクトが使用されます。



コードを詳しく見てみましょう。



システムは、ドキュメントにperlコードを埋め込むことができるMasonパッケージを使用します。

use HTML::Mason
      
      





ここでメイソン構造について読んでください

また、システムは深刻なキャッシングモードを使用します。これは、RTの初期段階でプログラミングするときに拒否を引き起こす可能性があります。 コードを変更するたびに、RTセッションを「強制終了」し、キャッシュをクリアし、httpサーバーを再起動する必要があります。 もちろん、これらのアクションはスクリプトに組み合わせることができますが、別のオプションがあります-RT_Config.pm構成ファイルでオプションを設定する必要があります。



 Set($DevelMode,"1")
      
      





このオプションはオブジェクトのキャッシングを無効にします。これにより、ajaxを使用してRTで書き込むことができます。



詳細なディレクトリ構造RTは、オブジェクトのカテゴリに基づいて名前が付けられたディレクトリのグループです。 例:

チケットオブジェクト(アプリケーション)の場合、構造は次のようになります。



各要素ディレクトリには、この要素タイプのコンストラクタを含むElementsフォルダがあります。

例を挙げます。

 <& /Elements/Header, Title => $title, onload => "function() { ... } " &>
      
      





このコンストラクトは、パラメーターを使用してヘッダーファイルをクラスとして呼び出します。 jqueryに似ているように思えました。 十分に快適ですよね?

プログラミングするときは、独自の要素を作成してクラスとして接続できるという事実を考慮する必要があります。 または、既製の設計ソリューションを活用してください。



ローカライズについて



システムはほとんどの言語をサポートしています。 言語パックを見つけるのは難しくありません。ここにあります:

{%RTHOME%} / lib / RT / I18N / *。Po-RT 3.8の場合

{%RTHOME%} / share / po / *。Po-RT 4。

ローカライズファイルの構造は非常にシンプルで、独自の変数を入力したり、既存の変数を変更したりすることは難しくありません。 変数を接続するには、オペランドが使用されます。



 <% loc("param") %>
      
      







アヤックス



Ajax構造を構築する際の1つの落とし穴に注意する必要があります。メイソンを使用しているため、インタープリターはメインのjquery関数$を受け入れません。 したがって、RT 4では次を使用する必要があります。

 jQuery.ajax(...)
      
      





およびRT 3.8(prototype.jsが使用されているため):

 new Ajax.Request(....)
      
      







Mysqlの操作について簡単に説明します





システムには、データベースにアクセスするためのインターフェースがあります。 私の場合、これはmysqlベースです。 現在のRTデータベースに接続するには、変数を定義する必要があります。

 my $dbname = RT->Config->Get('DatabaseName'); #   my $dbhost = RT->Config->Get('DatabaseRtHost'); #  my $dbuser = RT->Config->Get('DatabaseUser'); #      my $dbpass = RT->Config->Get('DatabasePassword'); #    
      
      







変数を受け取ったら、すでに(データベースにアクセスするためにRTインターフェースを使用しなくても)mysqlに接続できます。 たとえば、



 use DBI::mysql; my $dbh = DBI->connect(...)
      
      







そして結論として、民俗の知恵



ここでは、RTプログラミングの分野で、上記のシステムを完成させるプロジェクトの実装の結果として得られた小さな知識(ニュアンス)のみを考慮します。 このトピックが興味深い場合は、将来、API RTに関するより深い知識を作成します。

ご清聴ありがとうございました。



All Articles