0

我想要的是?

我想要一个模块的 ID 到另一个模块。

描述:-

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

现在我正在使用逻辑挂钩来计算付款数据。但我的问题是我的总金额字段存在于语音模块中。如果我使用发票模块的硬编码 ID,它可以正常工作。

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

var_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 时,它实际上不起作用 var_dump($bean); 返回空值。

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

4

1 回答 1

1

首先是关于你的句子的一些话:

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

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

我认为您的 var_dump() 调用返回 null 的原因是您在 before_save 逻辑挂钩中使用它。“保存前”意味着焦点 bean 仍然没有 'id' 属性,因为......它还没有被保存!如果您查看 SugarBean::save() 方法,您会发现“id”属性(实际上是 UUID 的形式)是通过在该方法中调用 create_guid() 函数生成的。由于您不调用 $bean->save() 您没有 id 属性。就这么清楚。

回到抓取父记录。

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

  • 在我的一个旧项目中,我使用 SugarBean::get_linked_beans() 方法来获取父记录的数组(由一对多关系中的 1 个元素组成)。
  • 在这里,您可能会找到一些如何使用其他 SugarBean 类方法获取父记录的想法。
  • 尝试探索 $_REQUEST 全局以查找密钥保留父记录 ID
  • 查看 cache/MODULE_NAME/BEAN_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);
于 2013-07-20T21:32:24.903 回答