Quote和ProductBundles之间的SugarCRM REST API set_relationship

时间:2012-10-30 15:36:12

标签: php sugarcrm

我正在使用SugarCRM Pro 6.5.5

我需要创建一个Quote并使用REST API向其添加产品。所有捆绑包>教授set_entry的工作,以及ProductBoducts的set_relationship工作正常。但是,set_relationship用于报价> ProductBundles不起作用。

以下是我对ProductBundles的输入>产品:此工作正常

{
   "session":"5qklti658f0ooou135vt8fkbi4",
   "module":"ProductBundles",
   "module_id":"50b71673-b555-9d68-04c9-508ef9582f47",
   "link_field_name":"products",
   "related_ids":[
      "a9615ab1-cd89-1549-f9b8-508f00c6fa84"
   ]
}

以下是我对报价的输入> ProductBundles:这不起作用

{
   "session":"jqodi1pu8u2l8basca1hhcbt27",
   "module":"Quotes",
   "module_id":"bc01a88a-35c9-25ed-dfac-508ef206a264",
   "link_field_name":"product_bundles",
   "related_ids":[
      "50b71673-b555-9d68-04c9-508ef9582f47"
   ]
}

但它仍然会返回:

{
   "created":1,
   "failed":0,
   "deleted":0
}

但是, product_bundle_quote 表中没有创建记录。

我稍微挖了Sugar代码,发现了一些有趣的东西。

在第735行的service/core/SoapHelperWebService.php中,是:

$mod->$link_field_name->add($related_ids, $name_value_pair);

在第118行调用文件add中的data/Relationships/M2MRelationship.php方法。有趣的是,$lhsLinkName为NULL,导致该方法返回false。这是一个片段:

public function add($lhs, $rhs, $additionalFields = array())
{
    $lhsLinkName = $this->lhsLink;
    $rhsLinkName = $this->rhsLink;

    if (empty($lhs->$lhsLinkName) && !$lhs->load_relationship($lhsLinkName))
    {
        $lhsClass = get_class($lhs);
        $GLOBALS['log']->fatal("could not load LHS $lhsLinkName in $lhsClass");
        return false;
    }
    if (empty($rhs->$rhsLinkName) && !$rhs->load_relationship($rhsLinkName))
    {
        $rhsClass = get_class($rhs);
        $GLOBALS['log']->fatal("could not load RHS $rhsLinkName in $rhsClass");
        return false;
    }

它在第一个if()块中返回FALSE,这意味着永远不会创建记录。

此外,这显示在我的日志中: [2139][1][FATAL] could not load LHS in ProductBundle

所以是的,我被困在这里。我试着寻找我能做的一切,包括错误,但我没有找到任何有用的东西。

4 个答案:

答案 0 :(得分:1)

这是一个Sugar bug,将在6.7版本中修复。在此期间,请查看此论坛帖子以获取代码修复。

http://forums.sugarcrm.com/f6/create-quote-line-items-web-service-api-83183/

答案 1 :(得分:1)

这确实是一个Sugar Bug,但不是另一个答案中的那个。它实际上与这个错误相关:Bug 32064。他们能够为我提供一个自定义模块,我可以上传并激活这个模块,以便在发布6.7之前解决问题,这个模块将被正式解决。您可能希望直接联系SugarCRM以获取此解决方法,具体取决于您的时间范围。

答案 2 :(得分:1)

我遇到了同样的问题,为了解决这个问题,我在产品包vardef中添加了下面提到的代码,它开始正常工作。

'quotes' =>
    array (

     'name' => 'quotes',
     'type' => 'link',
     'vname'=>'LBL_PRODUCT_BUNDLES',
     'relationship' => 'product_bundle_quote',
     'source'=>'non-db',

),

谢谢!

答案 3 :(得分:1)

您还必须将报价链接到产品。 在你的报价中确保vardef有以下内容:

'products' =>
    array (
      'name' => 'products',
      'type' => 'link',
      'relationship' => 'quote_products',
      'vname' => 'LBL_PRODUCTS',
      'source'=>'non-db',
),

并在您的网络服务中,设置报价和产品之间的关系

{
    "session":$session_id,
    "module":"Quotes",
    "module_id":$quote_id,
    "link_field_name":"products",
    "related_ids":[
       $product_id 
    ]
}

它对我有用。