2013-07-20 45 views
0

我想要什么?在sugarcrm中获取一个模块的ID到另一个模块

我想将一个模块的Id插入另一个模块。

描述: -

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

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

,但我没有从$豆

的var_dump($豆)获取当前记录的ID返回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); retun空值。

请帮我拿取当前记录的id。

回答

1

首先关于你的句子都有些词:

when I use $bean->id to fetch id of record it does not work actually var_dump($bean); return null value

据我所知你在付款模块使用逻辑挂钩。因此,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()方法获取父记录的数组(由一对多关系中的一个元素组成)。
  • Here您可能会发现如何使用其他SugarBean类方法获取父记录的一些想法。
  • 尝试探索$ _REQUEST全球找到保留父记录ID的密钥
  • 查看缓存/ 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); 
+0

首先感谢主席先生给我一个建议,无论你了解所有的事情是正确的。 – ajaykumar

+0

当我使用$ invoice = new invoi_invoice(); $ id = $ invoice-> retrieve($ bean-> invoi_invoice_t_hotel_payment_1invoi_invoice_ida);它给了我警告:mysqli_real_escape_string()期望参数2是字符串,对象在第254行在/drive2b/current/sugarhotel.devprolive.com/code/include/database/MysqliManager.php中给出 可捕获致命错误:类Link2的对象无法转换为2293行的/drive2b/current/sugarhotel.devprolive.com/code/data/SugarBean.php中的字符串 – ajaykumar

+0

感谢您完成$ _REQUEST。 – ajaykumar

相关问题