Services_Backlogでxmlrpc_decode()がないとき

PEAR Services_Backlog で Fetal errorが出てしまう

Fatal error: Call to undefined function xmlrpc_decode() in /var/www/vhosts/example.com/httpdocs/php/PEAR/Services/Backlog.php on line 800

oh...

Ext JSと合わせて、社内システム向けにBacklog APIを触ってみていたところ、上のFetal Errorでいきなり挫ける。

Backlog結構いいですよ、プロジェクト管理サービスです。導入障壁も低めな設定で、使えるところから使い始められるバランスなのが素晴らしい。

そいで以下、今回のエラー解決方法。

XML_RPC の xml_rpc_decode()で代用する

返ってきた結果をデコードするxmlrpc_decode関数が無いと怒られます。わりとすぐ試したかったので、応急処置。返ってきたナマの$resultをdumpしたらxvプロパティがソレっぽかったので、Services_Backlogの依存ライブラリであるXML_RPCに含まれていたxml_rpc_decode関数にかけてみたら見事通過。

/**
 * XML-RPCサーバへリクエストを送信する
 *
 * @access private
 * @param  XML_RPC_Message $message
 * @return array
 */
private function _send(XML_RPC_Message $message) {
    $result = $this->client->send($message);
    if ($result->faultCode()) {
        throw new Services_Backlog_Exception($result->faultString(), $result->faultCode());
    }
/*
    $xml = $result->serialize();
    return xmlrpc_decode($xml);
*/
    return xml_rpc_decode($result->xv);
}

上記のコードでコメントアウトしてしまった本来の処理だと、どういう結果が返ってきていたのかは不明。今のところは、うまく動作しちゃってます。xmlrpc_decode自体はphpをコンパイルするときにオプション付けないとダメっぽいすね。レンタル系は入っていない環境もざらにありそう。

Backlog APIとExt JSを組み合わせれば、勝手にインターフェース作り放題!

かゆいところに僅かに手が届かない、じれったさを感じるBacklogのインターフェースですが、APIが提供されているので、作れば好きなカタチに加工できます。各タスクの詳細画面とかは本家のインターフェースに任せる(リンクする)というノリで。

  • 複数タスクのステータス一括変更
  • 複数タスクの担当者とか優先順位など各種設定を一括変更
  • 複数プロジェクト間をタブインターフェースで移動
  • 各項目によるフィルター&ソート完備

自分は、上記のような感じで社内向けに途中まで作ってみたものの、社内でBacklogがあまり人気ないので、日の目を見るのはまだまだ先っぽい。