2012-03-15 2 views
0

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

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

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

  2. использование Javascript для вызова метода WebServices

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

Спасибо

+0

К сожалению, я имел в виду вызов вершины из пользовательской кнопки, а не контроллера. отредактировал вопрос – Prady

ответ

4

Это зависит от вашего прецедента. API поддерживает как Controllers and Extensions, так и JavaScript Remoting или JavaScript with Web Services. Все эти методы основаны на определенных стандартах; это действительно зависит от разработчика или команды разработчиков.

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

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

+0

спасибо Мэтью ... насколько безопасно мы используем javascript с точки зрения безопасности данных? – Prady

+0

Если вы используете JavaScript на странице Visualforce прямо на Salesforce, я уверен, что он безопасен, как ваше соединение https. Однако я не специалист по безопасности. –

0

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

+0

Приносим извинения, я исправился, вопрос – Prady

2

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

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

Мне просто нужно обновить одно поле, не более того .. поэтому ваше предложение было бы пойти на sforce.connection инструментария AJAX. Большое спасибо за подробный ответ – Prady

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