Sekedar untuk mengingat aja, contoh kelas untuk koneksi PHP ke Salesforce dengan API/SOAP.
/**
Class to handle connection to salesforce
*/
require_once("soapclient/SforcePartnerClient.php");
require_once("soapclient/BulkApiClient.php");
define('SOAP_PATH', "soapclient");
define('WSDL_XML_PARTNER', "partner.wsdl.xml");
define('WSDL_XML_ENTERPRISE', "enterprise.wsdl.xml");
define('WSDL_XML_METADATA', "metadata.wsdl.xml");
class SFConnectionClass
{
public $connection;
public $server = 'sand'; // option (sand or prod)
public $username = '';
public $password = '';
public $token = '';
public $sfSessionID = '';
public $sfLocation = '';
/*
constructor
// if parameter empty, use default
*/
public function SFConnectionClass($server = 'sand', $username = '', $password = '', $token = '')
{
if ($server != "") $this->server = $server;
if ($username != "") $this->username = $username;
if ($password != "") $this->password = $password;
if ($token != "") $this->token = $token;
$this->connection = $this->getConnectionSF();
}
/*
get database connection to salesforce
*/
public function getConnectionSF()
{
try {
$username = $this->username;
$password = $this->password;
$token = $this->token;
$SforceConnection = new SforcePartnerClient();
//$wsdl_xml = ($isEnterprise) ? WSDL_XML_ENTERPRISE : WSDL_XML_PARTNER;
$wsdl_xml = SOAP_PATH."/".$this->server."_".WSDL_XML_PARTNER;
$SforceConnection->createConnection($wsdl_xml);
$SforceConnection->login($username, $password.$token);
$this->connection = $SforceConnection;
$this->sfSessionID = $SforceConnection->getSessionID();
$this->sfLocation = $SforceConnection->getLocation();
return $SforceConnection; // soap salesforce
}
catch (Exception $e) {
print_r($e);
die();
}
return null;
}
/*
function to get query result in csv format
*/
public function fetchQueryCSV($strSQL)
{
$queryResult = $this->getQueryResultSF($strSQL);
$strRes = "";
if (isset($queryResult->records) && count($queryResult->records) > 0)
{
// generate header
$arrHeader = array();
$strHeader = "";
foreach($queryResult->records[0]->fields AS $strKey => $objV)
{
$arrHeader[$strKey] = $strKey;
$strHeader .= ($strHeader == "") ? $strKey : ",".$strKey;
}
if (isset($queryResult->records[0]->sobjects))
{
foreach($queryResult->records[0]->sobjects[0]->fields AS $strKey => $objV)
{
$strKey = $queryResult->records[0]->sobjects[0]->type .".".$strKey;
$arrHeader[$strKey] = $strKey;
$strHeader .= ($strHeader == "") ? $strKey : ",".$strKey;
}
}
// generate detail
foreach ($queryResult->records AS $i => $obj)
{
$arrTmp = array();
foreach ($obj->fields AS $strKey => $objV)
{
$arrTmp[$strKey] = (string)$objV;
}
if (isset($obj->sobjects))
{
foreach($obj->sobjects AS $j => $objSO)
{
foreach($objSO->fields AS $strKey => $objV)
$arrTmp[$objSO->type.".".$strKey] = (string)$objV;
}
}
$strDetail = "";
$x = 0;
foreach ($arrHeader AS $key)
{
$strVal = (isset($arrTmp[$key])) ? $arrTmp[$key] : "";
if (strstr($strVal, ",")) $strVal = '"'.$strVal.'"';
$strDetail .= ($x == 0) ? $strVal : ",".$strVal;
$x++;
}
if ($strRes != "") $strRes .= chr(13).chr(10);
$strRes .= $strDetail;
}
$strRes = $strHeader .chr(13).chr(10).$strRes;
}
return $strRes;
}
/*
function to get query result in array of fields=>value
*/
public function fetchQueryArray($strSQL)
{
$queryResult = $this->getQueryResultSF($strSQL);
$arrRes = array();
if (isset($queryResult->records))
{
foreach ($queryResult->records AS $i => $obj)
{
if (isset($obj->Id)) $arrRes[$i]['ID'] = $obj->Id;
if (isset($obj->Id)) $arrRes[$i]['OBJECT_NAME'] = $obj->type;
if (isset($obj->fields))
{
foreach($obj->fields AS $strKey => $objV)
$arrRes[$i][$strKey] = (string)$objV;
}
if (isset($obj->sobjects))
{
foreach($obj->sobjects AS $j => $objSO)
{
$arrRes[$i]['REFERENCES'] = array();
foreach($objSO->fields AS $strKey => $objV)
$arrRes[$i]['REFERENCES'][$objSO->type][$strKey] = (string)$objV;
}
}
}
}
return $arrRes;
}
/*
function to get query result - SOAP
*/
public function getQueryResultSF($strSQL)
{
$response = $this->connection->query($strSQL);
$queryResult = new QueryResult($response);
return $queryResult;
}
/* function to execute delete data based on result of the query
*/
public function deleteResultData($strSQL)
{
$arrData = $this->fetchQueryArray($strSQL);
$strCsv = "";
$strObjectName = "";
foreach ($arrData AS $i => $records)
{
if ($records['OBJECT_NAME'] != "") $strObjectName = $records['OBJECT_NAME'];
if ($records['ID'] != "")
{
if ($strCsv != "") $strCsv .= chr(13).chr(10);
$strCsv .= $records['ID'];
}
}
if ($strCsv == "" || $strObjectName == "") return "ERROR: No Data!";
$strCsv = "Id".chr(13).chr(10).$strCsv;
return $this->processBulkAPI("delete", $strObjectName, $strCsv);
}
/*
function to execute bulkAPI processing data
input : process type (insert/update/delete), object name, csv
output : result
*/
public function processBulkAPI($type, $strObject, $strCsv = '')
{
if ($strCsv == "") return false;
try {
// BulkAPI client
$myBulkApiConnection = new BulkApiClient($this->sfLocation, $this->sfSessionID);
$myBulkApiConnection->setLoggingEnabled(true);
$myBulkApiConnection->setCompressionEnabled(true);
// Hand oops Bulk Jobs :P
$job = new JobInfo();
$job->setObject($strObject);
$job->setOpertion($type);
$job->setContentType("CSV");
$job->setConcurrencyMode("Parallel");
$job = $myBulkApiConnection->createJob($job);
// Result
$result = $myBulkApiConnection->createBatch($job, $strCsv);
$tmp = $myBulkApiConnection->updateJobState($job->getId(), "Closed");
$resultBatch = $myBulkApiConnection->getBatchResults($job->getId(), $result->getId());
return $resultBatch;
}
catch (Exception $e)
{
return $e->getMessage();
}
}
// function to parse csv string to array
public function parseCsv($strCsv)
{
$arrResult = array();
$arrH = array();
$arr = explode("\n", $strCsv);
$i = 0;
foreach($arr AS $j => $str)
{
$arrD = explode(",", $str);
if ($i == 0)
{
$arrH = $arrD;
}
else
{
$arrTmp = array();
foreach($arrD AS $k=>$tmp)
{
$strKey = str_replace("\"", "", $arrH[$k]);
$arrTmp[$strKey] = str_replace("\"", "", $tmp);
}
$arrResult[] = $arrTmp;
}
$i++;
}
return $arrResult;
}
}
?>
Comments