Я думал, что передавать данные из одной странице в другую можно только через ГЕТ параметры, то есть забивая их в УРЛ.
А в VisualForce guide -> Advanced Examples -> Creating a Wizard я увидел путь сохранения данных через кастомный контроллер. Один контроллер на три страницы и он выдает разные странице в зависимости от нажатых кнопок, но при переходе со страницы на страницу данные сохраняются в нем (точнее в StateVIew), так как это все один контроллер. Классно!
Вообще этот принцип постоянно используется. И ты наверное его применял не раз, только выглядел он по другому.
Wizard такие, типо пошаговое заполнение форм, создаются на базе 1 страницы и 1 контроллера.
Просто страница назбита на области, которые рендарятся в зависимости от какого-нибудь параметра (например step) и получается иллюзия перехода между страницами с сохранением введенных данных (а данные реально гоняются через view state).
Простой пример - введение данных в форму с последующим подтверждением - 2 шага. Первый раз заходим на страницу - в конструкторе переменная step инициализируется в 1. ренредится страница на которой показывается первый блок с формой. Потом пользователь сабмитит форму и данные уходят в контроллер и отрабатывает экшен. Экшен возвращает туже страницу, но с параметром step = 2. На странице показывается второй блок, но в этом блоке доступны данные введенные на первом шаге. Та-дам профит - Wizard :)
Вот я тоже думал, что Визард реализуется на стороне клиента с помощью JS (как аккордеон к примеру) или, как ты описал, запиливание-выпиливанием блоков во вью в пределах одной странице.
Но в том примере используются разные страницы без редиректа. В этом мое удивление
// The next three methods control navigation through // the wizard. Each returns a PageReference for one of the three pages // in the wizard. Note that the redirect attribute does not need to // be set on the PageReference because the URL does not need to change // when users move from page to page.
public PageReference step1() { return Page.opptyStep1; }
public PageReference step2() { return Page.opptyStep2; }
public PageReference step3() { return Page.opptyStep3; }
Нет пока возможности проверить, но мне почему-то кажется, что при переходе между этими страницами view state а следовательно все данные (не сохраненные в базе) будут теряться.
Все верно визарды можно писать с одним контроллером и несколькими страничками и все будет хорошо работать, т.к. при
return Page.Page2;
конструктор не будет создавать новый экземпляр так как а таком случае используется POST запрос. Вы можете убедиться в этом посмотрев URL он не будет меняться при переходе на вторую страницу.
Если же все таки нужен GET то нужно это явно прописать.
1.По-мойму видел где то экзотический способ передачи параметров между страницами через статичные переменные это из разряда финты ушами .
2.Теперь о wizard,Летом прошлого года появилась замечательная вещь Флов дизайнер это визуальное конструирование step by step форм, там есть поддержка апекс кода отправка емайлов и т.д. Если интересуют wizard,cмотреть обязательно,Особенно хорошо, когда есть у нас много условий перехода между формами.Пилил пару раз для разных фирм работает хорошо клиенты были довольны.
Flow Designer интересная штука, но мне пока по работе не приходилось с ней сталкиваться. Все же Flow очень хорошо подчеркивает Salesforce style - "работа только мышкой". А также предоставляет гибкий в плане настройки инструмент так сказать "не для программиста".
Полностью согласен, но маленькое "но" очень сильно сокращает время разработки что большой + и там потдерживается apex для форм то есть писать код есть куда и я думаю это будет развиваться дальше .
а где этот демо-пакедж находится? У меня в орге вроде все есть из того, что там на видео показано.
setup--->Create -->Workflow & Approvals -->Flow--> New Flow-->в правом верхним углу есть get started-->после появления окна с видео,в правом углу есть Samples Flow install
Сегодня прям как совпало обсуждался вопрос работы Visualforce страниц и как раз затронули нашу тему.
В общем если 2 и более страницы привязаны к одному контроллеру, то при переходе (pageReference) между ними передается View State, что означает передачу значений переменных между данными страницами.
Из опыта наших разработчиков - данный способ глючный Если делать wizard, то только на одной странице, как я описал выше.
те визарды, страницы, которые разработаны как Flow, они доступны на сайте? на портале?
На сколько я помню они просто добавляются как компоненты VisualForce page.Причин по которым они не могут быть не доступны я не вижу.Хотя точно это не проверял.
те визарды, страницы, которые разработаны как Flow, они доступны на сайте? на портале?
На сколько я помню они просто добавляются как компоненты VisualForce page.Причин по которым они не могут быть не доступны я не вижу.Хотя точно это не проверял.
Работают без проблем. Но там есть другая проблема...досктупен только один язык.
Сталкивался тоже с такой дилемой и планировал использовать Flow на одном из проектов для опросника, но! Опытные товарищи открестились..мол глючное это дело и лучше пойти другими путями....на тот момент меня переубедили...больше не сталкивался с таким вопросом.
wilder, спасибо за еще один ответ по поводу языка.
Может кто-то еще знает практические +/- данного подхода.
Сталкивался тоже с такой дилемой и планировал использовать Flow на одном из проектов для опросника, но! Опытные товарищи открестились..мол глючное это дело и лучше пойти другими путями....на тот момент меня переубедили...больше не сталкивался с таким вопросом.
wilder, спасибо за еще один ответ по поводу языка.
Может кто-то еще знает практические +/- данного подхода.
Спасибо.
+ Можно быстренько сделать страничку с формой и использовать ее. Правда это здорово если форма простая. - Кастомизация чуть меньше чеи никакая в плане дизайна.
Получается что, чтобы использовать такой Flow на сайте, нужно засадить этот Flow в виде Компонента в какую-то кастомную VF страницу. Но как указать этот Flow в разметке? я не вижу сущетсвующих Flows в разделе VF Components.
Получается что, чтобы использовать такой Flow на сайте, нужно засадить этот Flow в виде Компонента в какую-то кастомную VF страницу. Но как указать этот Flow в разметке? я не вижу сущетсвующих Flows в разделе VF Components.
как я вижу "сила" потоков, главное отличие от самопильного визарда заключается в возможности легкого "вилкования" процесса и модульная сборка. Некоторые потоки в примерах являются просто точками входа и выхода из процесса, включая в себе различные другие потоки. Таким образом потоки можно соединять с др другом как элементы Лего. Круто.
Ну а собственно сама разбивка процесса ввода инфы на несколько экранов служит для удобства пользователя и бесшовного перехода от одного потока к другому.
А можно в поточное поле вывести поле какой-то записи так, как это делается в ВФ разметке: просто указываешь поле и оно появляется в разметке в виде правильного элемента, с правильными опциями в случае создания или редактирования.
например на шаге 1 Потока выбирается значение из пик-листа. Мне сейчас нужно полностью воссоздавать этот Пиклист в потоке, назначать его значение в какую-то вновь созданную поточную переменную и позже в момент создания записи передавать эту переменную в пик-листовое поле записи. Двойная работа. Но пока не вижу как это упростить.