объект bean в хуках: каковы правила, разрешающие доступ к полю как свойству или как в array (), принадлежащему свойству - PullRequest
0 голосов
/ 09 мая 2018

В suitecrm 7.8 я исследовал функциональность after_save логического хука ( см. Ответ на этот вопрос ).

У меня была небольшая проблема, чтобы получить с согласованным шаблоном значение существующего поля из объекта SugarBean в after_save_class_method, реализованного для данного модуля в [suitecrm folder]/custom/modules/<module name>/<after save class name>.php.

Я объясняю: В AOS_Quotes чтобы получить значение поля date_entered мне пришлось сделать: $date_entered = $bean->fetched_row['date_entered'];

Если бы я попытался $bean->date_entered, свойство не существовало бы для объекта, в то время как другие свойства были бы полями, к которым можно напрямую получить доступ через этот шаблон.

В то время как в AOS_Products_Quotes, если бы я попытался получить значение поля через свойства $bean->fetched_row[{field_name}], это не сработало бы, и мне пришлось бы получить поле, используя этот шаблон: $bean->{field_name}.

Чтобы понять, что происходит, я поместил var_dump($bean) в оба моих <after save class name>, один относительно AOS_Quotes и один относительно AOS_Products_Quotes:

<code><?php

    if (!defined('sugarEntry') || !sugarEntry) die('Not A Valid Entry Point');

    class <after save class name>
    {
        function after_save_method($bean, $event, $arguments)
        {
            //logic
            echo '<pre>';
            var_dump($bean);
            echo '
'; выход; } } ?>

В том, что касается AOS_Quotes, результат var_dump дает:

object(AOS_Quotes)#46 (141) {
    ...
    ["fetched_row"]=>
    array(51) {
      ["id"]=>
      string(36) "<some id>",
      ....
    }
    ...
}

Это подтверждает, что свойство fetched_row существует на объекте AOS_Quotes. Я мог получить доступ к большинству полей с шаблоном $bean->{field_name}, за исключением одного с именем date_entered, (я предполагаю, что date_entered не должен изменяться пользователем в ловушке after_save, поэтому не должен быть доступен как свойство )

В том, что касается «AOS_Products_Quotes», результат var_dump дает:

object(AOS_Products_Quotes)#428 (94) {
...
  ["fetched_row"]=>
  bool(false)
...
}

подтверждает, что fetched_row объекта AOS_Products_Quotes.

не существует.

Интересно, каковы были правила и настройки для настройки доступности в объекте SugarBean:

  • в свойстве fetched_row, содержащем <field_name> в array();

  • Или иметь <field_name> непосредственно в качестве свойства SugarBean?

1 Ответ

0 голосов
/ 09 мая 2018

Так SugarCRM / SuiteCRM обрабатывает NEW против существующих bean-компонентов.

Выбранная строка используется для получения предыдущего значения перед обновлением. Если он пуст, это означает, что бин создается.

$date_entered = $bean->fetched_row['date_entered'];

Это значение будет сохранено.

$date_entered = $bean->date_entered;

На самом деле, чтобы обнаружить, что вы имеете дело со СОЗДАНИЕМ, а не РЕДАКТИРОВАТЬ, вы можете проверить наличие пустого $bean->fetched_row['id'] для пустых вновь созданных сущностей.

...