2011-04-20 94 views
7

我有一個簡單的自定義聯繫人對象(API名稱爲Contact__c),這是我在SalesForce DE站點中創建的,它具有一個字段(用於測試連接)Full_Name__c。SalesForce.com:通過PHP檢索自定義字段

我然後通過PHP試圖找回所有的聯繫人,具體這個字段:

try { 
    $mySforceConnection = new SforcePartnerClient(); 
    $mySoapClient  = $mySforceConnection->createConnection(API_PATH . '/soapclient/partner.wsdl'); 
    $mylogin   = $mySforceConnection->login(API_USER, API_PASS . API_SECURITY_TOKEN); 

    $query = 'SELECT C.Id, C.Full_Name__c 
      FROM Contact__c C'; 
    $result = $mySforceConnection->query($query); 
    $sObject = new SObject($result->records[0]); 
    print_r($sObject); 
} catch(Exception $e) { 
    print_r($e); 
} 

我已經下載了最新的partner.wdsl(雖然作爲合作伙伴WSDL,它是弱類型和不不需要通過創建/添加自定義對象和/或更新字段來進行下載,是否正確?)。我已驗證用戶可以通過ForceExplorer連接並查看自定義字段。但是,當我運行上面的代碼,它連接,但只返回以下內容:

SObject Object ([type] => Contact__c [fields] => [Id] => a) 

我沒有得到任何錯誤,無效的字段錯誤等,但對我的生活不能弄清楚爲什麼這個ISN沒有工作。

我在這裏看到了這個例子,但它似乎特定於Enterprise vs Partner,並且每次更改自定義字段時都需要下載最新的enterprise.wsdl。

任何指針?

回答

4

想通了,我相信,問題與我如何解析正在返回的數據有關。相反餵養返回的數據轉換成的sObject的,我現在只是訪問它直接:

try { 
    $mySforceConnection = new SforcePartnerClient(); 
    $mySoapClient  = $mySforceConnection->createConnection(API_PATH . '/soapclient/partner.wsdl'); 
    $mylogin   = $mySforceConnection->login(API_USER, API_PASS . API_SECURITY_TOKEN); 

    $query = 'SELECT C.Id, C.Full_Name__c 
      FROM Contact__c C'; 
    $result = $mySforceConnection->query($query); 

    for($i = 0; $i < count($result->records); $i++) { 
    print_r($result->records[$i]->fields->Full_Name__c); 
    } 
} catch(Exception $e) { 
    print_r($e); 
} 
+0

我很高興這對你有幫助,但我不認爲這是答案。我正在做一個print_r的結果,我的自定義字段不顯示。 WSDL也被更新。 hmmm – 2013-12-06 17:41:48

+3

ini_set('soap.wsdl_cache_enabled','0');只是固定我的問題! – 2013-12-06 17:43:27

3
ini_set('soap.wsdl_cache_enabled', '0'); 

它的伎倆。

+0

它解決了系統緩存舊WSDL文件(沒有全部創建/更新的對象和字段)的問題。由於這一點,它強制應用程序使用新的更新的WSDL文件,從而允許使用自上次緩存版本以來的新字段和對象。 – Romain 2014-11-21 10:45:26