1

这段代码有什么问题:

$query = "email1 = '{$email}'";
    Mage::log($query);
    $account = $client->get_entry_list($session_id, 'Accounts', $query);

我无法弄清楚为什么它不起作用并给我一个错误:

looks like we got no XML document

Trace:
#0 /var/www/empresam/app/code/local/Empresam/SugarIntegration/Helper/Methods.php(147): SoapClient->__call('get_entry_list', Array)
#1 /var/www/empresam/app/code/local/Empresam/SugarIntegration/Helper/Methods.php(147): SoapClient->get_entry_list('v12adkskr9va2pe...', 'Accounts', 'email1 = 'magag...')
#2 /var/www/empresam/app/code/local/Empresam/Helloworld/controllers/IndexController.php(17): Empresam_SugarIntegration_Helper_Methods->addAccount('v12adkskr9va2pe...', Object(SoapClient), Object(Mage_Customer_Model_Customer))
#3 /var/www/empresam/app/code/core/Mage/Core/Controller/Varien/Action.php(419): Empresam_Helloworld_IndexController->indexAction()
#4 /var/www/empresam/app/code/core/Mage/Core/Controller/Varien/Router/Standard.php(250): Mage_Core_Controller_Varien_Action->dispatch('index')
#5 /var/www/empresam/app/code/core/Mage/Core/Controller/Varien/Front.php(176): Mage_Core_Controller_Varien_Router_Standard->match(Object(Mage_Core_Controller_Request_Http))
#6 /var/www/empresam/app/code/core/Mage/Core/Model/App.php(354): Mage_Core_Controller_Varien_Front->dispatch()
#7 /var/www/empresam/app/Mage.php(683): Mage_Core_Model_App->run(Array)
#8 /var/www/empresam/index.php(89): Mage::run('', 'store')
#9 {main}

我敢打赌,查询格式错误,但我对“潜在客户”执行了相同的程序,我可以成功返回潜在客户。

Lead 代码是这个:

   $oldname = $oldfirstname . ' ' . $oldlastname;
$query = "account_name = '{$oldname}'";

$lead = $client->get_entry_list($session_id, 'Leads', $query);

该值{$email}是正确的,我已确认将其打印到日志中。我几乎可以肯定错误出在查询格式上,但正如我所说,它适用于 LEAD 为什么它在这里不起作用?

我尝试在查询中使用“account_name”,但结果是一样的。'account_name' 和 'email1' 两个参数都是有效的,因为我可以成功创建帐户,但不能检索它们!

4

1 回答 1

2

在每个模块中,电子邮件地址都存储在另一个数据库中。所以,为了让这个查询工作,因为 SugarCRM Soap 方法“省略”了这部分Select * from Account Where,当我们寻找时email1,他没有找到它,就好像它是表的一个字段一样Accounts。为简单起见,当我们向表 Accounts 添加电子邮件时,Sugar 不关心该字段是否属于另一个数据库,默认情况下,他会让您引入电子邮件地址。但是,在查询时,我们不能这样做:

$query = "email1 = '{$email}'";

因为电子邮件存储在不同的表中。为了得到我想要的,我必须这样做:

public function getAccount($session_id, $client, $email){

    $query = "accounts.id in ( select bean_id from email_addr_bean_rel inner join email_addresses where email_addr_bean_rel.email_address_id = email_addresses.id and email_addr_bean_rel.deleted = 0 and email_addresses.deleted = 0 and bean_module = 'Accounts' and email_addresses.email_address = '{$email}' )";

    $acc = $client->get_entry_list($session_id, 'Accounts', $query);
    return $acc;   
}

在查询中,只需替换Accounts为您的模块名称,它将适用于所有其他模块。

于 2013-04-16T12:35:40.913 回答