У меня есть простой пользовательский контактный объект (с именем API Contact__c), который я создал на моем сайте SalesForce DE, который имеет одно поле (для тестирования подключения) Full_Name__c.
Затем я пытаюсь получить все контакты, в частности это поле через 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 )
Я не получаю никаких ошибок, неверных ошибок поля и т. Д., Но для жизни меня не может понять, почему это не работает.
Я видел этот пример здесь, но, похоже, он специфичен для Enterprise vs Partner, и необходимо загружать последнюю версию enterprise.wsdl каждый раз, когда вы меняете настраиваемые поля.
Любые указатели?
Полагаю, я считаю, что проблема связана с тем, как я разбирал данные, которые возвращались. Вместо того, чтобы подавать возвращенные данные в 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); }
ini_set('soap.wsdl_cache_enabled', '0');
Это трюк.