Регистрация  |  Вход

Visualforce Pages with AngularJS for Lightning Experience

Наконец настал тот день, когда у меня дошли руки до Lightning Experience.
Встала задача заставить работать мои мега страницы на AngularJS под Lightning UI.
Думаю будет интересный скил.
Быстрый обзор показал что под Lightning UI напрочь не работает все что касается работы с адресной строкой браузера. Это в принципе ожидаемо так как работают страницы в контейнере one.app.

Вот нашел хороший мануал для старта
https://developer.salesforce.com/trailhead/en/lex_dev_visualforce/lex_dev_visualforce_process

Изучаем и применяем!

Наконец настал тот день, когда у меня дошли руки до Lightning Experience.
Встала задача заставить работать мои мега страницы на AngularJS под Lightning UI.
Думаю будет интересный скил. 
Быстрый обзор показал что под Lightning UI напрочь не работает все что касается работы с адресной строкой браузера. Это в принципе ожидаемо так как работают страницы в контейнере one.app.

Вот нашел хороший мануал для старта
https://developer.salesforce.com/trailhead/en/lex_dev_visualforce/lex_dev_visualforce_process

Изучаем и применяем!

А вот собственно как происходят редиректы в Lightning

$A.get("e.force:navigateToURL").setParams({"url": "/apex/pageName"}).fire();

А вот собственно как происходят редиректы в Lightning
[code]
$A.get("e.force:navigateToURL").setParams({"url": "/apex/pageName"}).fire();
[/code]

Dmitry Shnyrev
А вот собственно как происходят редиректы в Lightning
$A.get("e.force:navigateToURL").setParams({"url": "/apex/pageName"}).fire();

Ужас какой :-) Я теперь понимаю, почему на собеседованиях про Лайтнинг спрашиваю. В нем без 100 грамм не разобраться :-)

[quote="Dmitry Shnyrev"]А вот собственно как происходят редиректы в Lightning
[code]
$A.get("e.force:navigateToURL").setParams({"url": "/apex/pageName"}).fire();
[/code][/quote]
Ужас какой :-) Я теперь понимаю, почему на собеседованиях про Лайтнинг спрашиваю. В нем без 100 грамм не разобраться :-)

У меня такой вопрос если смысл учить AngularJS или сразу лучше перейти на AngularJs2 ?

У меня такой вопрос если смысл учить AngularJS или сразу лучше перейти на AngularJs2 ?

upd: к AngularJS это конечно не имеет отношения, но тема вроде подходящая

При работе с Lightning надо еще обязательно учитывать LockerService.

Почитать про него можно тут.

Очень важны вот эти Critical Updates:
- Enforce Lightning Components Access Checks
- Enable Lightning LockerService Security
- Enable Lightning LockerService Security for Communities

В результате компоненты которые работали, после включения LockerService должны быть зарефакторены в соответствии с требованиями иначе ниче не будет работать. Это вот прямо случай из жизни.

Если компоненты пойдут в пакет, они должны быть отсканированы этим.
Под капотом у LightningCLI обычный jslinter с уже созданными SF правилами.

upd: к AngularJS это конечно не имеет отношения, но тема вроде подходящая :)

При работе с Lightning надо еще обязательно учитывать LockerService.

Почитать про него можно [url=https://developer.salesforce.com/blogs/developer-relations/2016/04/introducing-lockerservice-lightning-components.html]тут[/url].

Очень важны вот эти Critical Updates:
- Enforce Lightning Components Access Checks
- Enable Lightning LockerService Security
- Enable Lightning LockerService Security for Communities

В результате компоненты которые работали, после включения LockerService должны быть зарефакторены в соответствии с требованиями иначе ниче не будет работать. Это вот прямо случай из жизни.

Если компоненты пойдут в пакет, они должны быть отсканированы [url=https://developer.salesforce.com/docs/atlas.en-us.lightning.meta/lightning/cli_intro.htm]этим[/url].
Под капотом у LightningCLI обычный jslinter с уже созданными SF правилами.



Ну блин, только и думаю как усложнит себе жизнь.
Вот взяли и запилили разделение зон доступа на уровне страницы.
Понимаю что красиво, но привет все разработчикам, которые теперь будут выдумывать костыли
Благо я пока даже близко не собираюсь лезть в эти дебри Ligntning Components. Меня мой велосипед на Ангуляр сильно устраивает и единственный недостаток что ему теперь придется жить внутри Lightning container

Но за инфу отдельное спасибо. Не знал про такую фичу.

Ну блин, только и думаю как усложнит себе жизнь.
Вот взяли и запилили разделение зон доступа на уровне страницы. 
Понимаю что красиво, но привет все разработчикам, которые теперь будут выдумывать костыли :D
Благо я пока даже близко не собираюсь лезть в эти дебри Ligntning Components. Меня мой велосипед на Ангуляр сильно устраивает и единственный недостаток что ему теперь придется жить внутри Lightning container :)

Но за инфу отдельное спасибо. Не знал про такую фичу.

Sergey Prichepo
если смысл учить AngularJS или сразу лучше перейти на AngularJs2 ?

Хороший вопрос. Лично мне Ангуляр2 кажется еще слишком сырой и слишком сложный.
Ангуляр 1 подключаешь на страницу (как тот же jQuery) и все - работай.
Ангйляр 2 там все сложнее - во первых это TypeScript который надо компилировать в JS, потом это все надо заливать на SF. Тут без танцев с бубнами и автоматизированными сборщиками пакетов не обойтись.
Второй ангуляр подходит для масштабных серьезных проектов, а когда надо взять и сделать за вечер страничку, то пока только первый ангуляр только поможет.

Как вариант - можно посмотреть в сторону ReactJS. По идеологии он ближе ко второму Ангуляру (компонентная система), но по использованию ближе к первому. НО все-таки ангуляр мне нравится свои набором функционала - буквально одной строчкой кода можно сделать сложную логику, хотя с другой стороны эта магия связывает руки :(.

[quote="Sergey Prichepo"]если смысл учить AngularJS или сразу лучше перейти на AngularJs2 ?[/quote]
Хороший вопрос. Лично мне Ангуляр2 кажется еще слишком сырой и слишком сложный. 
Ангуляр 1 подключаешь на страницу (как тот же jQuery) и все - работай.
Ангйляр 2 там все сложнее - во первых это TypeScript который надо компилировать в JS, потом это все надо заливать на SF. Тут без танцев с бубнами и автоматизированными сборщиками пакетов не обойтись.
Второй ангуляр подходит для масштабных серьезных проектов, а когда надо взять и сделать за вечер страничку, то пока только первый ангуляр только поможет.

Как вариант - можно посмотреть в сторону ReactJS. По идеологии он ближе ко второму Ангуляру (компонентная система), но по использованию ближе к первому. НО все-таки ангуляр мне нравится свои набором функционала - буквально одной строчкой кода можно сделать сложную логику, хотя с другой стороны эта магия связывает руки :(.

Dmitry Shnyrev
$A.get("e.force:navigateToURL").setParams({"url": "/apex/pageName"}).fire();

Товарищи, а оказывается эта хрень и не работает!
Visualforce страница вставляется внутрь one.app контейнера в виде iframe и доступа к родительской странице где вся магия в виду $A находится не имеет из-за нашей старой знакомой фичи SF - Same-origin policy.
Короче про все прелести Lightning можете забыть когда пилите VF страницу обычную а не компонент.

А вот теперь 2 новости хорошая и плохая:
- js редирект типа location.href не работает - iframe перегружается remote actions перестают работать (известное ограничение)
- это можно оказывается легко побороть - по ходу SF девелоперы сделали себе небольшой хук

[quote="Dmitry Shnyrev"]$A.get("e.force:navigateToURL").setParams({"url": "/apex/pageName"}).fire();[/quote]
Товарищи, а оказывается эта хрень и не работает!
Visualforce страница вставляется внутрь one.app контейнера в виде iframe и доступа к родительской странице где вся магия в виду $A находится не имеет из-за нашей старой знакомой фичи SF - Same-origin policy. 
Короче про все прелести Lightning можете забыть когда пилите VF страницу обычную а не компонент.

А вот теперь 2 новости хорошая и плохая: 
:( - js редирект типа location.href не работает - iframe перегружается remote actions перестают работать (известное ограничение)
:) - это можно оказывается легко побороть - по ходу SF девелоперы сделали себе небольшой хук

Dmitry Shnyrev
Sergey Prichepo
если смысл учить AngularJS или сразу лучше перейти на AngularJs2 ?

Хороший вопрос. Лично мне Ангуляр2 кажется еще слишком сырой и слишком сложный.
Ангуляр 1 подключаешь на страницу (как тот же jQuery) и все - работай.
Ангйляр 2 там все сложнее - во первых это TypeScript который надо компилировать в JS, потом это все надо заливать на SF. Тут без танцев с бубнами и автоматизированными сборщиками пакетов не обойтись.
Второй ангуляр подходит для масштабных серьезных проектов, а когда надо взять и сделать за вечер страничку, то пока только первый ангуляр только поможет.

Как вариант - можно посмотреть в сторону ReactJS. По идеологии он ближе ко второму Ангуляру (компонентная система), но по использованию ближе к первому. НО все-таки ангуляр мне нравится свои набором функционала - буквально одной строчкой кода можно сделать сложную логику, хотя с другой стороны эта магия связывает руки :(.


Cпасибо!

[quote="Dmitry Shnyrev"][quote="Sergey Prichepo"]если смысл учить AngularJS или сразу лучше перейти на AngularJs2 ?[/quote]
Хороший вопрос. Лично мне Ангуляр2 кажется еще слишком сырой и слишком сложный. 
Ангуляр 1 подключаешь на страницу (как тот же jQuery) и все - работай.
Ангйляр 2 там все сложнее - во первых это TypeScript который надо компилировать в JS, потом это все надо заливать на SF. Тут без танцев с бубнами и автоматизированными сборщиками пакетов не обойтись.
Второй ангуляр подходит для масштабных серьезных проектов, а когда надо взять и сделать за вечер страничку, то пока только первый ангуляр только поможет.

Как вариант - можно посмотреть в сторону ReactJS. По идеологии он ближе ко второму Ангуляру (компонентная система), но по использованию ближе к первому. НО все-таки ангуляр мне нравится свои набором функционала - буквально одной строчкой кода можно сделать сложную логику, хотя с другой стороны эта магия связывает руки :(.[/quote]
Cпасибо!

Dmitry Shnyrev
:) - это можно оказывается легко побороть - по ходу SF девелоперы сделали себе небольшой хук

не расскажите как побороли?:) Смогли ли подступиться к функциям $A различных контроллеров Lightning Components?

[quote="Dmitry Shnyrev"]:) - это можно оказывается легко побороть - по ходу SF девелоперы сделали себе небольшой хук[/quote]

не расскажите как побороли?:) Смогли ли подступиться к функциям $A различных контроллеров Lightning Components?

Руслан Курченко
не расскажите как побороли?:)

Вот такой параметр добавляй в URL и RemoteActions начинают магически работать из iframe
isdtp=p1
параметр недокументированный и может в любой момент перестать работать

Руслан Курченко
Смогли ли подступиться к функциям $A различных контроллеров Lightning Components?

С этим без понятия. У нас дальше проб не ушло дело. В очередной раз отказались от этого кастыльного Lightning даже в таком минимальном варианте как использование кастомной VF страницы внутри iframe. Про Lightning компоненты и подавно не думаем.

Совет - лучше потратьте силы и ресурсы чтобы придумать архитектуру и прикрутить к дев процессам Angular2 (который наконец-то вышел недавно в релиз). Усилий потратите на начальном этапе столько же зато потом профита будет в 100 нет в 1000 раз больше. Если клиенту так нравится Lightning UI - используйте Ligtning Design System (это единственное что с приставкой Lightning заслуживает внимание в SF)

[quote="Руслан Курченко"]не расскажите как побороли?:)[/quote]
Вот такой параметр добавляй в URL и RemoteActions начинают магически работать из iframe
isdtp=p1 
параметр недокументированный и может в любой момент перестать работать

[quote="Руслан Курченко"]Смогли ли подступиться к функциям $A различных контроллеров Lightning Components?[/quote]
С этим без понятия. У нас дальше проб не ушло дело. В очередной раз отказались от этого кастыльного Lightning даже в таком минимальном варианте как использование кастомной VF страницы внутри iframe. Про Lightning компоненты и подавно не думаем. 

Совет - лучше потратьте силы и ресурсы чтобы придумать архитектуру и прикрутить к дев процессам Angular2 (который наконец-то вышел недавно в релиз). Усилий потратите на начальном этапе столько же зато потом профита будет в 100 нет в 1000 раз больше. Если клиенту так нравится Lightning UI - используйте Ligtning Design System (это единственное что с приставкой Lightning заслуживает внимание в SF)