Вызов метода вершины с помощью пользовательской кнопки

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

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

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

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

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

Спасибо


person Prady    schedule 15.03.2012    source источник
comment
Извините, я имел в виду вызов вершины с пользовательской кнопки, а не с контроллера. отредактировал вопрос   -  person Prady    schedule 16.03.2012


Ответы (3)


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

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

Я бы рекомендовал набор инструментов AJAX вместо < href="http://www.salesforce.com/us/developer/docs/pages/index_CSH.htm#pages_js_remoting.htm" rel="nofollow">JavaScript Remoting для этой задачи. Он лучше подходит для обновления одного поля; Удаленное взаимодействие JavaScript лучше подходит для доступа к методам Apex через JavaScript. Однако того же результата можно добиться и тем, и другим.

person Matt K    schedule 15.03.2012
comment
спасибо Мэтью ... насколько безопасно мы используем javascript с точки зрения безопасности данных? - person Prady; 16.03.2012
comment
Если вы используете JavaScript на странице Visualforce непосредственно в Salesforce, я уверен, что это так же безопасно, как и ваше https-подключение. Хотя я не специалист по безопасности. - person Matt K; 16.03.2012

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

  1. Используйте sforce.connection.[update|insert|delete] инструментария AJAX для выполнения стандартных операций 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 или пользовательских конечных точек REST Apex. Используйте методы jQuery $.get() или $.ajax(), чтобы выполнить GET/POST для этих конечных точек. Это работает, потому что REST API всегда будет находиться в том же домене, что и любой стандартный макет страницы, содержащий вашу пользовательскую кнопку.
  4. Перенаправьте пользователя на страницу Visualforce, после чего вы сможете делать в Apex все, что захотите, с помощью контроллера страницы, а затем отправьте пользователя обратно на исходную страницу. Наименее предпочтителен, поскольку требует двойного перенаправления пользователя.
person zachelrath    schedule 15.03.2012
comment
мне просто нужно обновить одно поле, не более того ... так что вы можете предложить использовать sforce.connection инструментария AJAX. Большое спасибо за подробный ответ - person Prady; 16.03.2012

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

person Anup    schedule 15.03.2012