Soap 在sugarcrm中将一个模块的id导入另一个模块

Soap 在sugarcrm中将一个模块的id导入另一个模块,soap,logic,hook,sugarcrm,Soap,Logic,Hook,Sugarcrm,我想要什么? 我想把一个模块的Id转换成另一个模块 说明:- 我创建了两个模块1。发票2。付款这两个模块之间存在一对多关系 现在我使用一个逻辑钩子来计算支付数据。 但我的问题是我的总量字段出现在语音模块中。如果我使用发票模块的硬代码id,它将正常工作 但是我没有从$bean获得当前记录的id var\u dump($bean)返回Null 代码是: <?php // prevents directly accessing this file from a web browser if(!

我想要什么?

我想把一个模块的Id转换成另一个模块

说明:-

我创建了两个模块1。发票2。付款这两个模块之间存在一对多关系

现在我使用一个逻辑钩子来计算支付数据。 但我的问题是我的总量字段出现在语音模块中。如果我使用发票模块的硬代码id,它将正常工作

但是我没有从$bean获得当前记录的id

var\u dump($bean)返回Null

代码是:

<?php

// prevents directly accessing this file from a web browser
if(! defined('sugarEntry') || ! sugarEntry)
  die('Not A Valid Entry Point');


class Process
{

  function process(&$bean, $event, $arguments)
  {

    $focus = new invoi_invoice();
    $id='d5112b7d-2e75-cba5-0e72-51e8ed34dcb7';


    $a=$focus->retrieve($id);
    $b=$a->totalamount;

    // calculate item profit
    $bean->t_remaing_amount_c = ($b - $bean->t_amount_paid_c);

    // calculate sale profit
    if(!empty($bean->t_no_of_rooms_c))
    {
      $bean->t_amount_per_room_c= ($bean->t_total_amount_c / $bean->t_no_of_rooms_c);
    }

  }

}

?>

此代码工作正常,因为id是硬编码的。当我使用$bean->id获取记录的id时,它实际上不起作用;重新运行空值


请帮助我如何获取当前记录的id。

首先,关于您的句子:

当我使用$bean->id获取记录的id时,它实际上不起作用;返回空值

据我所知,您在支付模块中使用逻辑挂钩。因此,Process::Process()中的$bean参数引用了付款模块中的记录。无法想象,如果当前记录(即付款类的实例)已经作为函数参数通过引用传递,为什么需要获取它的id。在您的示例中,您硬编码了发票模块记录的id。那么您实际需要检索哪个模块记录呢?希望你真的需要发票模块一。因此,我们有一个案例来获取父记录。过一会儿再说

我认为您的var_dump()调用返回null的原因是您在save logic hook之前使用它。“保存前”表示聚焦bean仍然没有“id”属性,因为。。。它只是还没有被保存!如果您查看SugarBean::save()方法,您会发现“id”属性(实际上是UUID的形式)是在该方法中调用create_guid()函数时生成的。由于不调用$bean->save(),因此没有id属性。很清楚

回到抓取父记录

有很多方法可以做到这一点

  • 在我以前的一个项目中,我使用SugarBean::get_linked_beans()方法获取父记录的数组(由一对多关系中的1个元素组成)
  • 您可能会发现一些如何使用其他SugarBean类方法来获取父记录的想法
  • 尝试浏览$\u请求全局以查找保留父记录id的密钥
  • 查看cache/MODULE\u NAME/BEAN\u NAMEvardefs.php文件,并尝试查找以一对多关系命名的“type”=>“link”和“relationship”键的字段定义。我的意思是这样的:

    'invoices_s892lyment_ida' =>
    
       array(
    
        'name' => 'invoices_s892lyment_ida',
    
        'type' => 'link',
    
        'relationship' => 'invoices_payments', 
    
        'source' => 'non-db',
    
        ...
    
        );
    
然后,您可以使用以下内容:

$invoice = new Invoice();

$invoice->retrieve($bean->invoices_s892lyment_ida);

首先,谢谢先生给我一个建议,不管你理解什么,一切都是正确的$id=$invoice->retrieve($bean->invoi\u invoice\u t\u hotel\u payment\u 1invoi\u invoice\u ida);它给我一个警告:mysqli_real_escape_string()希望参数2是字符串,第254行/drive2b/current/sugarhotel.devprolive.com/code/include/database/MysqliManager.php中给出的对象可捕获致命错误:第2293行/drive2b/current/sugarhotel.devprolive.com/code/data/SugarBean.php中的Link2类对象无法转换为字符串