0

私は何をしたいですか?

あるモジュールの Id を別のモジュールに入れたい。

説明:-

2 つのモジュール 1. 請求書 2. 支払いを作成しました。この 2 つのモジュールの間には、1 対多の関係があります。

現在、ロジックフックを使用して支払いのデータを計算しています。しかし、私の問題は、合計金額フィールドが音声モジュールに存在することです。請求書モジュールのハードコード 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); null 値を返します。

現在のレコードのIDを取得する方法を教えてください。

4

1 に答える 1

1

まず、あなたの文に関するいくつかの言葉:

$bean->id を使用してレコードの ID を取得すると、実際には機能しません var_dump($bean); null 値を返す

私が理解しているように、支払いモジュールでロジックフックを使用しています。したがって、Process::process() の $bean パラメータは Payment モジュールのレコードを参照します。関数パラメーターとして参照によって既に渡されている場合、現在のレコード (つまり、Payment クラスのインスタンス) の ID を取得する必要がある理由を想像できません。あなたの例では、Invoice モジュール レコードの ID をハードコードしました。では、実際に取得する必要があるモジュール レコードはどれでしょうか。Invoice モジュール 1 が本当に必要であることを願っています。したがって、ここでは親レコードを取得するケースがあります。それについては少し後で。

var_dump() 呼び出しが null を返す理由は、 before_save ロジック フックで使用しているためだと思います。「保存前」とは、まだ保存されていないため、フォーカスされた Bean に「id」プロパティがまだないことを意味します。SugarBean::save() メソッドを見ると、'id' プロパティ (実際には UUID の形式) が生成され、そのメソッドで create_guid() 関数が呼び出されていることがわかります。$bean->save() を呼び出さないので、id プロパティがありません。その通りクリア。

親レコードの取得に戻ります。

それを行うにはいくつかの方法があります。

  • 私の古いプロジェクトの 1 つで、SugarBean::get_linked_beans() メソッドを使用して、親レコードの配列 (1 対多の関係で 1 つの要素で構成される) を取得します。
  • ここでは、他の SugarBean クラス メソッドを使用して親レコードを取得する方法についていくつかのアイデアを見つけることができます。
  • $_REQUEST グローバルを探索して、親レコード ID を保持するキーを見つけてください
  • cache/MODULE_NAME/BEAN_NAMEvardefs.php ファイルを見て、1 対多の関係にちなんで名付けられた '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 に答える