2013-07-31 2 views
1

Я изучил это, и кажется, что нет прямой связанной функции, поскольку Apex настолько сильно набрана, но мне было интересно, нашел ли кто-нибудь обходной путь. Я разрабатываю объект кредитного риска, и мой клиент хочет иметь возможность добавлять выражения, такие как «150 + 3» вместо «153» при обновлении полей, чтобы ускорить работу с ее конца. К сожалению, я новичок в salesforce, поэтому у меня возникают проблемы с идеями. Возможно ли это?Есть ли эквивалент eval() в вершине/Salesforce?

ответ

1

Вы можете разрешить ввод команд SOQL вручную, а затем использовать динамический SOQL для их обработки. Но для этого потребуется немного больше, чем «150 + 3».

В противном случае вы можете сделать это в JavaScript и передать значение обратно в Apex как уже рассчитанное число.

+0

Отличная идея. Спасибо, я попробую. – grantb747

1

Можно воспроизвести Javascript eval() в Apex, сделав выноску метода executeAnonymous API либо в Инструментах, либо в API Apex.

Фокус в том, что вам нужно передать любые требуемые входные параметры в тело элемента eval. Если требуется ответ, вам нужен механизм для его извлечения.

Существует два распространенных способа ответа от executeAnonymous.

  1. Выведите преднамеренное исключение в конце выполнения и включите ответ. Кевин использует этот подход в EVAL() in Apex. Secure Dynamic Code Evaluation on the Salesforce1 Platform.
  2. Я использовал вариант этого подхода, но возвратил ответ через журнал отладки, а не преднамеренное исключение. См. Adding Eval() support to Apex.

Используя мой пример апекса будет что-то вроде:

integer sum = soapSforceCom200608Apex.evalInteger(
       'integer result = 150 + 3; System.debug(LoggingLevel.Error, result);'); 

Вы не могли бы быть в состоянии выполнить выноски при инициализации члена или в конструкторе.

Кстати, Salesforce Stackexchange site - отличное место, чтобы задать конкретные вопросы Salesforce.

+0

Ты рок! Никогда не было известно, что это возможно в Apex !!!! У вас есть мой голос! – Patlatus

Смежные вопросы