C# の勉強がてらプログラムから Trac を操作するアプリを作ることにする。
とりあえずわかっているのは、Trac を外部から操作するためには XmlRpcPlugin を入れて XML-RPC という形で操作するらしいということ。
いろいろ調べたところ、XML-RPC.NET という C# のオープンソースライブラリがあるようなのでこれを使ってみる。
試行錯誤しながらやってたけど、どんぴしゃなサイトを見つけてしまった^^;
確か以前にもやろうと思って放置してたやつ。
それでも、自分でやることに意義があるのでめげずにやってみることにする。
環境
- Windows XP Pro SP3
- Visual Studio 2008 Pro (C#)
- XML-RPC.NET 2.3.2
- TracLightning 2.0.8
前提条件
サンプルプログラム
時間の関係で説明は後日^^;
とりあえずソースのみ
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Net; using System.Collections; using CookComputing.XmlRpc; namespace TracXmlRpcPluginConsole { // TracXmlRpcPlugin 用コマンド public interface ITracXmlRpcPlugin : IXmlRpcProxy { // チケットのクエリを取得する [XmlRpcMethod( "ticket.query" )] int[] TicketQuery( string qstr ); // 指定されたチケット番号の詳細を取得する [XmlRpcMethod( "ticket.get" )] object[] TicketGet( int id ); // チケットを新規作成する [XmlRpcMethod( "ticket.create" )] int TicketCreate( string summary, string description ); } class Program { static void Main( string[] args ) { try { // XML-RPC オブジェクトのインスタンス ITracXmlRpcPlugin trac = (ITracXmlRpcPlugin)XmlRpcProxyGen.Create(typeof(ITracXmlRpcPlugin)); // 接続する URL及びユーザ名、パスワードを設定 trac.Url = "http://localhost:5080/trac/SampleProject/login/xmlrpc"; trac.PreAuthenticate = true; trac.Credentials = new NetworkCredential( "username", "password" ); // チケットを登録する for ( int i = 0; i < 10; ++i ) { trac.TicketCreate( "remote create test No." + i, "test TEST テスト" ); } // アクティブなチケット一覧を取得 int[] query = trac.TicketQuery( "status!=closed" ); foreach ( int i in query ) { // チケットの詳細を取得して表示 object[] ret = trac.TicketGet( i ); Console.WriteLine( "チケット番号:" + ret[0] ); XmlRpcStruct attributes = (XmlRpcStruct)ret[3]; foreach ( DictionaryEntry obj in attributes ) { Console.WriteLine( obj.Key + ":" + obj.Value ); } Console.WriteLine( "" ); } Console.WriteLine( "正常終了" ); } catch ( Exception ex ) { Console.WriteLine( ex.Message ); } } } }
事前準備
using System.Net; // NetworkCredential 用 using System.Collections; // DictionaryEntry 用 using CookComputing.XmlRpc; // XmlRpc 用
Trac インタフェースの作成
IXmlRpcProxy から継承した Trac インタフェースを作成する。
このインタフェースが Trac との通信を行う。
インフェースメソッドを作成し、XmlRpcMethod でメソッドに関連付けるする RPC 名を設定する。
メソッドの引数及び戻り値はhttp://<サーバ名>/trac/<プロジェクト名>/login/xmlrpcで確認する。
今回はチケットの登録、チケットの一覧、チケットの詳細の3機能を実装する。
Trac インタフェースのインスタンス生成とログイン情報設定
// XML-RPC オブジェクトのインスタンス ITracXmlRpcPlugin trac = (ITracXmlRpcPlugin)XmlRpcProxyGen.Create(typeof(ITracXmlRpcPlugin)); // 接続する URL及びユーザ名、パスワードを設定 trac.Url = "http://localhost:5080/trac/SampleProject/login/xmlrpc"; trac.PreAuthenticate = true; trac.Credentials = new NetworkCredential( "username", "password" );