概要

SalesforceのデータはSOAP APIを使って外部から参照/更新することができます。PHP用には PHP Toolkit というものが用意されていますが、これをラップする形でより使いやすくしたものがここで紹介するsRecordです。
sRecordは seasar2の S2JDBC, それをまねて作った拙作teeple2のActiveRecordと似たような使い方でSalesforceのデータを取り扱うことができるというすぐれものです。google codeにオープンソースとして公開していますので是非ご利用ください。
http://code.google.com/p/srecord4p/
これから何回かに分けて使い方を説明していきます。

環境:

  • PHP5.2以上
  • Salesforce PHP Toolkit 13.1
  • Salesfoce Partner WSDL

イントロダクション

以下のようなクエリー(SOQL)を実行したい場合のコードを比較してみます。

SELECT Account.Name, Account.Owner.Name FROM Account WHERE Name LIKE '%G%' AND Owner.Username = 'sato'

PHP Toolkitを素で使うと以下のようなコードになります。


<?php
// SOAP_CLIENT_BASEDIR - folder that contains the PHP Toolkit and your WSDL
// $USERNAME - variable that contains your Salesforce.com username (must be in the form of an email)
// $PASSWORD - variable that contains your Salesforce.com password

define("SOAP_CLIENT_BASEDIR", "../../soapclient");
require_once (SOAP_CLIENT_BASEDIR.'/SforcePartnerClient.php');
require_once (SOAP_CLIENT_BASEDIR.'/SforceHeaderOptions.php');

require_once ('../userAuth.php');

try {
  $mySforceConnection = new SforcePartnerClient();
  $mySoapClient = $mySforceConnection->createConnection(SOAP_CLIENT_BASEDIR.'/partner.wsdl.xml');
  $mylogin = $mySforceConnection->login($USERNAME, $PASSWORD);

  $query = "SELECT Account.Name, Account.Owner.Name FROM Account WHERE Name LIKE '%G%' AND Owner.Username = 'sato'";
  $response = $mySforceConnection->query($query);
  $queryResult = new QueryResult($response);

  foreach ($queryResult->records as $record) {
      echo("<td>{$record->Id}</td>");
      echo("<td>{$record->fields->Name}</td>");
      echo("<td>{$record->fields[0]->fields->Name</td>");
  }

} catch (Exception $e) {
  print_r($mySforceConnection->getLastRequest());
  echo $e->faultstring;
}
?>

一方、sRecordを使用した場合は以下のように簡潔に書くことができます。


<?php
require_once ('/path/to/lib/config.php');

$records = Sobject_Account::neu()
  ->join('Owner', 'Name')
  ->contains('Name', 'G')
  ->eq('Owner.Name', 'sato')
  ->select('Name');

foreach ($records as $record) {
      echo("<td>{$record->Id}</td>");
      echo("<td>{$record->Name}</td>");
      echo("<td>{$record->Owner->Name</td>");
}
?>

sRecordには以下のような特徴があります。

  • 直感的な「メソッドチェーン」パターンでSOQLクエリーを構築できる。
  • Salesforceに接続する手続きが隠蔽されているので開発者が意識する必要はない。
  • クエリーの結果がオブジェクトの階層構造になるので、child-parent relationship, parent-child relationship のクエリー結果が扱いやすい。
  • Salesforceに定義された内容にしたがってエンティティクラスが自動生成されるので、エンティティクラスにロジックを追加することも可能。
  • Eclipse PDTでの開発に適するようにコメントを入れてあるのでコードアシストが効く。

次回から少し詳しく解説していきます。

参考

コメントは受け付けていません。