我正在使用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
所以是的,我被困在这里。我试着寻找我能做的一切,包括错误,但我没有找到任何有用的东西。
答案 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
]
}
它对我有用。