2

我正在使用 SugarCRM Pro 6.5.5

我需要创建一个报价并使用 REST API 向其中添加产品。所有捆绑包 > Prof theset_entry的工作,并且set_relationshipfor ProductBoducts 工作正常。但是,set_relationship对于 Quotes > ProductBundles 不起作用。

这是我对 ProductBundles > Products 的输入:这很好用

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

这是我对 Quotes > 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 代码,发现了一些有趣的东西。

service/core/SoapHelperWebService.php第 735 行,是这样的:

$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

4 回答 4

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 
    ]
}

这个对我有用。

于 2013-09-23T03:51:25.027 回答
1

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

于 2013-03-14T17:36:28.817 回答
1

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

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

于 2012-11-02T14:26:08.717 回答
1

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

'quotes' =>
    array (

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

),

谢谢!

于 2013-08-05T10:08:16.483 回答