Не выполняются ли вызовы Schema.getGlobalDescribe () в системном контексте в классах, объявленных как без общего доступа? - PullRequest
1 голос
/ 09 марта 2012

У меня есть профиль пользователя со всем отключенным, кроме API Only и API Enabled. Этому профилю пользователя предоставляется доступ к набору классов, в которых определены службы REST.

Я вижу очень странное поведение при звонке Schema.getGlobalDescribe(). Я получаю разные ответы в зависимости от того, из какого класса я вызываю этот метод, даже если все классы определены одинаково. Вот упрощенная версия проблемы:

global without sharing class WebServiceClass {

  {
    System.debug(WebServiceClass.fieldsContainName()); // THIS RETURNS TRUE
    System.debug(UtilityClass.fieldsContainName()); //THIS RETURNS FALSE!
  }

  global static Boolean fieldsContainName() {
    System.debug(Schema.getGlobalDescribe().get('contact').getDescribe().fields.getMap().keySet().contains('name'));
  }
}

global without sharing class UtilityClass {
  global static Boolean fieldsContainName() {
    System.debug(Schema.getGlobalDescribe().get('contact').getDescribe().fields.getMap().keySet().contains('name'));
  }
}

С чего бы это?

Ответы [ 2 ]

2 голосов
/ 09 марта 2012

without sharing влияет только на общий доступ (т. Е. Какие строки вы видите), он не влияет на системный режим или пользовательский. Обычно в системном режиме работают только триггеры, другие точки входа Apex, такие как веб-службы, работают в пользовательском режиме.

1 голос
/ 09 марта 2012

Schema.getGlobalDescribe(), кажется, ведет себя неожиданным образом, когда пользователь не имеет доступа к классу, содержащему вызов (даже если класс работает в системном режиме). Исправление заключается в добавлении профиля пользователя в список, у которого есть доступ к рассматриваемому классу. Это решает проблему. Я считаю, что это ошибка в Schema.getGlobalDescribe().

Исходя из этого поста в блоге , создается впечатление, что могут быть и другие забавные поведения, связанные с Schema.getGlobalDescribe(), на которые вы тоже должны обратить внимание.

...