0

在争取获得 20 多个条目之后get_entry_list,我现在尝试使用 SugarCRM 6.5 上的 SOAP API 来设置两个元素之间的关系,这些元素是从用户登陆网站上的表单创建的。

set_relationship方法在开发者博客中描述如下:

$response = set_relationship(session, module_name, module_id, link_field_name, related_ids, name_value_list, delete);

所以这里是处理请求的代码,假设代码的另一部分处理安全性。

$values = array(    'id_frame' => $_POST['id_frame'],
                    'id_battery' => $_POST['id_battery'],
                    'reseller' => $_POST['reseller'],
                    'date_purchase' => $_POST['date_purchase'],
                    'products_versionning' => $_POST['product_purchased'],
                    'first_name' => $_POST['first_name'],
                    'last_name' => $_POST['name'],
                    'phone_home' => $_POST['phone'],
                    'email' => $_POST['email'],
                    'primary_address_street' => $_POST['address'],
                    'primary_address_street_2' => $_POST['address2'],
                    'primary_address_street_city' => $_POST['city'],
                    'primary_address_street_postalcode' => $_POST['zip'],

);

try{
    $prod_register = $soapClient->set_entry(
    $sessid,
    'myco_product_register',
    array(  array('name' => 'id_frame',                         'value' => $values['id_frame']),
            array('name' => 'id_battery',                       'value' => $values['id_battery']),
            array('name' => 'date_purchase',                    'value' => $values['date_purchase']),
            array('name' => 'first_name',                       'value' => $values['first_name']),
            array('name' => 'last_name',                        'value' => $values['last_name']),
            array('name' => 'phone_home',                       'value' => $values['phone_home']),
            array('name' => 'email',                            'value' => $values['email']),
            array('name' => 'primary_address_street',           'value' => $values['primary_address_street']),
            array('name' => 'primary_address_street_city',      'value' => $values['primary_address_street_city']),
            array('name' => 'primary_address_street_postalcode','value' => $values['primary_address_street_postalcode']),
            array('name' => 'description','value' => "Modèle : " . $values['products_versionning'] . "\nAcheté le " . $values['date_purchase'] . " à " . $values['reseller']),
        )
    );

    $client = $soapClient->set_entry(
    $sessid,
    'Accounts',
    array(  array('name' => 'name',                             'value' => $values['first_name'] . ' ' . $values['last_name']),
            array('name' => 'billing_address_street',           'value' => $values['primary_address_street']),
            array('name' => 'billing_address_city',             'value' => $values['primary_address_street_city']),
            array('name' => 'billing_address_postalcode',       'value' => $values['primary_address_street_postalcode']),
        )
    );

    $entry_id = $prod_register->id;

    $relationship_parameters = array(
        "module1" => "myco_product_register",
        "module1_id" => array($entry_id),
        "module2" => "myco_products_versionning",
        "module2_id" => array($values['products_versionning'])
    );


    //Now i'm setting the relationships
        $response = $soapClient->set_relationship($sessid, "myco_product_register", $entry_id,
                'myco_products_versionning_id_c', $values['products_versionning'], array(), 0);

        $response = $soapClient->set_relationship($sessid, "myco_product_register", $entry_id,
                'myco_resellers_id_c', $values['reseller'], array(), 0);

两个set_entry请求都有效并返回一个有效的 id,但没有一个关系有效($responses包含failed等于 1)。所以这不是连接问题或类似问题。

谈到关系,开发博客中的一个人说

  • 两个模块之间必须有关系
  • 模块中必须至少有一个related field处理关系,您可以在模块的vardefs.php

我有

  • 模块和两者之间的One-to-one关系和product_registerproducts_versionningresellers
  • 每个related field相关product_register模块都有一个。

我可能缺少什么?

4

1 回答 1

0

尝试检查 SugarCRM 的日志文件,您应该会发现一些错误。我使用此 API 在联系人和帐户之间创建关系,并正常工作。在日志上可能会找到问题的答案。

    try {
        $result = $this->soapClient->set_relationship($this->sessionId,
                $accountModuleName, $accountId, $relationName, $contactsId);
        $this->doEvent(self::EVENT_WS_OPERATION_CALL);

        if ($result->created > 0 && $result->failed === 0) {
            return true;
        } else {
            return false;
        }
于 2013-09-03T12:48:05.167 回答