Remote Actions and Iframe

Remote Actions and Iframe

Привет.
Сегодня столкнулся с одним непонятным и неприятным ограничением Salesforce.
Делаю страницу для пакета с remote actions. Все отлично, разработка полным ходом, результат как всегда радует и тут последний штрих - вставить страницу в iframe в другую страницу. И о чудо, мля. Выскакивает такое замечательное предупреждение:
Javascript proxies were not generated for controller myController : may not use public remoted methods inside an iframe
Что это? Моя страница не может использовать свои же remote actions если находится внутри iframe. Как это понимать?
Пошел гуглить и оказалось - это стандартное ограничение SF

Решение простое - сделать global и забыть о проблеме. Не тут то было - теперь надо решать это с заказчиком, потому что он против глобальных классов и методов в пакете (по вполне понятным причинам).
Вот такой геморрой очередной раз подкинул SF.

Dmitry Shnyrev
Вот такой геморрой очередной раз подкинул SF.

По этой причине так же отказался от Remote Action в пакете.

Dmitry Shnyrev
Привет.
Сегодня столкнулся с одним непонятным и неприятным ограничением Salesforce.
Делаю страницу для пакета с remote actions. Все отлично, разработка полным ходом, результат как всегда радует и тут последний штрих - вставить страницу в iframe в другую страницу. И о чудо, мля. Выскакивает такое замечательное предупреждение:
Javascript proxies were not generated for controller myController : may not use public remoted methods inside an iframe
Что это? Моя страница не может использовать свои же remote actions если находится внутри iframe. Как это понимать?
Пошел гуглить и оказалось - это стандартное ограничение SF

Решение простое - сделать global и забыть о проблеме. Не тут то было - теперь надо решать это с заказчиком, потому что он против глобальных классов и методов в пакете (по вполне понятным причинам).
Вот такой геморрой очередной раз подкинул SF.


Тебе нужен именно RemoteAction?

Догадывался что ты этот вопрос задашь
Ну я привык их использовать, до этого момента проблем не испытывал
Плюс не стоит беспокоиться о лимитах на API calls в случае web services.

Вообще iframe крайне редко использую, если он есть, значит уже страница на костылях. Но тут приходится мириться с решениями заказчика. Вот хочет он запихнуть сложную страницу в Modal popup (js решение). Самый простой вариант чтобы не смешивать две страницы - iframe. Но по ходу неудачно. Решил проблему с помощью <apex:include> теперь будем надеяться что злой JS двух страниц не сломается (пока с виду все работает)

Dmitry Shnyrev
Догадывался что ты этот вопрос задашь
Ну я привык их использовать, до этого момента проблем не испытывал
Плюс не стоит беспокоиться о лимитах на API calls в случае web services.

Вообще iframe крайне редко использую, если он есть, значит уже страница на костылях. Но тут приходится мириться с решениями заказчика. Вот хочет он запихнуть сложную страницу в Modal popup (js решение). Самый простой вариант чтобы не смешивать две страницы - iframe. Но по ходу неудачно. Решил проблему с помощью <apex:include> теперь будем надеяться что злой JS двух страниц не сломается (пока с виду все работает)


Я просто я в последнее время использую обычный контроллер для ajax запросов.

Это как? Что значит обычный контроллер для ajax запросов?
Ну и я использую обычный контроллер - складываю туда remote actions и использую их для запросов.

Dmitry Shnyrev
Это как? Что значит обычный контроллер для ajax запросов?
Ну и я использую обычный контроллер - складываю туда remote actions и использую их для запросов.

Gres наверное имеет ввиду REST

Мне больше кажется что Gres имел в виду стандартный rerender.

Dmitry Shnyrev
Это как? Что значит обычный контроллер для ajax запросов?
Ну и я использую обычный контроллер - складываю туда remote actions и использую их для запросов.

Я уже писал где-то.
Создаешь пустую страничку с content-type = 'application/json', добавляешь туда outputText.
Создаешь контроллер к ней.

Теперь ты можешь сделать ajax запрос

$.post( 

"{!Page.MyAjaxPage}",
{ method: "firstMethod", param1: "Test", param2: 1 }
);

В контроллере ты можешь поймать переданные параметры и забиндить ответ на твой outputText.
В итоге ты получаешь удобный инструмент для ajax запросов, который не затрагивает лимиты по API Call.
А чтобы в контроллере не писать ветвление по методам стоит воспользоваться преимуществами наследования.
Если кому-то интересно, могу написать статью с примером такой архитектуры.

Maxim Elets
Gres наверное имеет ввиду REST

Нет)

Dmitry Shnyrev
Мне больше кажется что Gres имел в виду стандартный rerender.

И снова нет)

Gres
$.post(
"{!Page.MyAjaxPage}",
{ method: "firstMethod", param1: "Test", param2: 1 }
);

а, дада, пользовался таким когда-то, на новом проекте прижилось, а вот на старых все по старинке)

Млин, а не помню я этого метода!!! Может пропустил мимо ушей.
Если не сложно, напиши статью. Я могу помочь ее здесь опубликовать.
Ну или дай ссылку, если сам куда выложишь.
У меня руки уже зачесались этим воспользоваться.
Но хочу сперва увидеть твой пример, особенно с "преимуществами наследования"

Maxim Elets
Gres
$.post(
"{!Page.MyAjaxPage}",
{ method: "firstMethod", param1: "Test", param2: 1 }
);

а, дада, пользовался таким когда-то, на новом проекте прижилось, а вот на старых все по старинке)


А все потому что это гибко, просто, расширяемо :)

Меня единственно смущает.
А POST запрос Visualforce странице разве не используется для внутренних целей самим SF? Ну там для передачи view state и восстановления состояния контроллера? Вроде же нельзя напрямую делать POST запросы к страницам.
Или ты просто проверил и заработало и так и пользуешься?

Dmitry Shnyrev
Меня единственно смущает.
А POST запрос Visualforce странице разве не используется для внутренних целей самим SF? Ну там для передачи view state и восстановления состояния контроллера? Вроде же нельзя напрямую делать POST запросы к страницам.
Или ты просто проверил и заработало и так и пользуешься?

POST запросы прекрасно работают

А как данные из пост запроса в контроллере получить?
Нужна статья от тебя :))))))))) Пока я открыл для себя новую тему - post запросы в SF.
До этого я думал что их не существует для меня как разработчика в VF страницах.

Dmitry Shnyrev
А как данные из пост запроса в контроллере получить?
Нужна статья от тебя :))))))))) Пока я открыл для себя новую тему - post запросы в SF.
До этого я думал что их не существует для меня как разработчика в VF страницах.

Параметры? - getParameters()

Пользуйся)

??? ну я знаю про это
Returns a map of the query string parameters that are included in the page URL
А как же параметры в теле POST запроса? Или ты передаешь параметры как GET?

Dmitry Shnyrev
??? ну я знаю про это
Returns a map of the query string parameters that are included in the page URL
А как же параметры в теле POST запроса? Или ты передаешь параметры как GET?

в getparameters лежат и пост параметры и гет праметры, так что никаких проблем)

даже можно вытягивать данные из формы при post. можно напилять тупо стандартных тегов инпут с name="" и доставать из этой мапы по name параетры

Maxim Elets
Dmitry Shnyrev
??? ну я знаю про это
Returns a map of the query string parameters that are included in the page URL
А как же параметры в теле POST запроса? Или ты передаешь параметры как GET?

в getparameters лежат и пост параметры и гет праметры, так что никаких проблем)


Максим абсолютно прав

Maxim Elets
даже можно вытягивать данные из формы при post. можно напилять тупо стандартных тегов инпут с name="" и доставать из этой мапы по name параетры

Сабмит формы - обычный пост запрос

Gres
Maxim Elets
даже можно вытягивать данные из формы при post. можно напилять тупо стандартных тегов инпут с name="" и доставать из этой мапы по name параетры

Сабмит формы - обычный пост запрос

ну я про это и говорю

круто! не знал!!! Теперь у меня куча идей в голове зарождается.
Прямо руки развязали, парни! Спасибо!

Dmitry Shnyrev
:D круто! не знал!!! Теперь у меня куча идей в голове зарождается.
Прямо руки развязали, парни! Спасибо!

Мы сделали твой день?

Однозначно!!!! :))))))))

Жаль по интернет нельзя пиво передать

Вот в чем польза таких форумов! Сегодня опять столкнулся с этой проблемой и вспомнил что когда-то уже на форуме обсуждали. 10 сек поиска и рефреш в памяти А тема аж 2015 года Во время летит. Все новое хорошо забытое старое

Interesting information? Help us, post link to social media..