Вызов метода apex с пользовательской кнопки - PullRequest
0 голосов
/ 15 марта 2012

я хочу вызвать метод apex с пользовательской кнопки

Я понимаю, что мы можем достичь этого двумя способами

  1. Вызов страницы VF, которая, в свою очередь, вызывает метод атрибута страницы
    <apex:page standardController="Opportunity" extensions="oppExt" action="{!changeStatus}"/>

  2. использовать javascript для вызова метода веб-сервисов

У меня вопрос о том, что является наилучшей практикой для этого сценария.

Спасибо

Ответы [ 3 ]

4 голосов
/ 15 марта 2012

Это зависит от вашего варианта использования.API поддерживает контроллеры и расширения и JavaScript Remoting или JavaScript с веб-службами .Все эти методы основаны на определенных стандартах;это действительно зависит от разработчика или команды разработчиков.

JavaScript больше подходит для интерфейсов, отображающих меньшие объемы данных, но, как правило, он более удобен для пользователя.

Я бы порекомендовал AJAX Toolkit вместо JavaScript Remoting для этой задачи.Это лучше подходит для обновлений одного поля;JavaScript Remoting лучше подходит для доступа к методам Apex через JavaScript.Тем не менее, тот же результат может быть достигнут с любой.

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

Prady, ваш вопрос сформулирован до смешного, но если я правильно вас понял из заголовка вашего поста, вы пытаетесь вызвать Apex из JavaScript OnClick пользовательской кнопки.В этом случае ваша оценка ваших вариантов почти завершена.Вот параметры в порядке от наиболее предпочтительного до наименее предпочтительного:

  1. Используйте sforce.connection из набора инструментов AJAX. [Update | insert | delete] для выполнения стандартных операций DML с записями, с которыми вы работаете.Если действие, которое вам нужно предпринять, не очень простое (например, если вы делаете больше, чем просто обновляете некоторые поля, вставляете новые записи или удаляете записи), тогда у вас может быть специальное поле «триггера» для рассматриваемых записей, которое выможно использовать инструментарий AJAX для обновления, а затем он, в свою очередь, сбросит некоторый код запуска Apex на бэкенде, который будет выполнять более сложную логику.
  2. Используйте метод sforce.apex.execute () инструментария AJAX для выполнения пользовательского метода Apex WebService.Я испытываю желание поставить этот третий, потому что это требует написания WebService, который основан на SOAP и поэтому немного медленнее, чем подход на основе REST.Однако в JS Custom Button On-Click проще использовать левую кнопку, и это проверенная временем стандартная практика для разработчиков, работающих со стандартными макетами страниц.Кроме того, если вы включаете этот код пользовательской кнопки в управляемый пакет, это будет предпочтительнее методов на основе REST-API, поскольку для использования REST API администраторы должны настроить удаленный сайт, соответствующий их конкретному экземпляру SFDC, а неЭто большая проблема, но, тем не менее, небольшая проблема.
  3. Используйте JavaScript / AJAX для асинхронного вызова REST API или пользовательских конечных точек Apex REST.Используйте методы jQuery $ .get () или $ .ajax (), чтобы выполнить GET / POST для этих конечных точек.Это работает, потому что REST API всегда будет находиться в том же домене, что и стандартный макет страницы, содержащий вашу пользовательскую кнопку.
  4. Перенаправьте пользователя на страницу Visualforce, после чего вы сможете делать все, что захотите, в Apex с помощью контроллера страницы, а затем отправить пользователя обратно на исходную страницу.Наименее предпочтителен, поскольку требует двунаправленного перенаправления пользователя.
0 голосов
/ 15 марта 2012

Я не слежу за вашим вопросом. Вызвать методы apex из контроллера так же просто, как набрать controllerObj.methodName (при условии, что метод находится в другом контроллере) или просто набрать methodName, если метод находится в том же контроллере. Или я, возможно, неправильно понял ваш вопрос. Можете ли вы добавить более подробную информацию, пожалуйста?

...