Всем привет,
Не знаю насколько корректный ли вопрос, тем более прочитав несколько предидущих постов о заданиях новичков, как то аж немного неловко спрашивать, но все же.
Пока ничего так и не смог найти по этой теме.
Делаю страницу в классике в service console. Когда с кейса нажимается кнопка то в сабтабе открывается visualfrorce страница и внутри нее запихан lighthning component, так сделано, чтоб в будущем удобнее было переходить на lighthning service console. Должна быть кнопка cancel в компоненте , которая закроет этот subtab и вернется обратно в главные таб с кейсом.
Нашел как сделать это, если просто visualforce страница и нашел как сделать это в лайтнинговой консоли, но как это сделать из лайтнинг компонента в классике не нашел.
Сталкивался кто нибудь с таким или есть какие нибудь идеи?
Заранее спасибо за помощь!
Всем привет, Не знаю насколько корректный ли вопрос, тем более прочитав несколько предидущих постов о заданиях новичков, как то аж немного неловко спрашивать, но все же. Пока ничего так и не смог найти по этой теме. Делаю страницу в классике в service console. Когда с кейса нажимается кнопка то в сабтабе открывается visualfrorce страница и внутри нее запихан lighthning component, так сделано, чтоб в будущем удобнее было переходить на lighthning service console. Должна быть кнопка cancel в компоненте , которая закроет этот subtab и вернется обратно в главные таб с кейсом. Нашел как сделать это, если просто visualforce страница и нашел как сделать это в лайтнинговой консоли, но как это сделать из лайтнинг компонента в классике не нашел. Сталкивался кто нибудь с таким или есть какие нибудь идеи? Заранее спасибо за помощь!
Не работал с Service Console, но если мне память не изменяет там команды специфические для консоли через JS мутятся.
Давай будем вместе разбираться.
Напиши сюда что за метод.
Одно из предположений - оставить этот рабочий метод в VF странице, но попробовать сделать так чтобы Lighting компонент его вызывал. Получится небольшая цепочка
Lightning -> VF -> Service Console
Не работал с Service Console, но если мне память не изменяет там команды специфические для консоли через JS мутятся. Давай будем вместе разбираться. [quote="AntonB"]Нашел как сделать это, если просто visualforce страница[/quote] Напиши сюда что за метод. Одно из предположений - оставить этот рабочий метод в VF странице, но попробовать сделать так чтобы Lighting компонент его вызывал. Получится небольшая цепочка Lightning -> VF -> Service Console
Те посты касались задания для новичков. Не думаю что твой вопрос можно отнести к этому разряду
[quote="AntonB"]Не знаю насколько корректный ли вопрос, тем более прочитав несколько предидущих постов о заданиях новичков, как то аж немного неловко спрашивать, но все же. [/quote] :D Те посты касались задания для новичков. Не думаю что твой вопрос можно отнести к этому разряду :D
В документации это находил:
https://developer.salesforce.com/docs/atlas.en-us.api_console.meta/api_console/sforce_api_console_closetab.htm
Да, я думал может всю кнопку, которая закрывает сабтаб оставить на странице, но не знаю, насколько красиво это будет смотреться потом и насколько удобно использовать будет.
Вот думаю, если просто js скрипт оставить на странице и вызывать если с lighthning компонента после нажатия, то наверное будет лучше. Но, на самом деле, не знаю даже можно ли вызывать функцию на странице из компонента, оно работает так в обратном порядке?
[quote="Dmitry Shnyrev"] Напиши сюда что за метод [/quote] В документации это находил: https://developer.salesforce.com/docs/atlas.en-us.api_console.meta/api_console/sforce_api_console_closetab.htm [quote="Dmitry Shnyrev"] Одно из предположений - оставить этот рабочий метод в VF странице, но попробовать сделать так чтобы Lighting компонент его вызывал. [/quote] Да, я думал может всю кнопку, которая закрывает сабтаб оставить на странице, но не знаю, насколько красиво это будет смотреться потом и насколько удобно использовать будет. Вот думаю, если просто js скрипт оставить на странице и вызывать если с lighthning компонента после нажатия, то наверное будет лучше. Но, на самом деле, не знаю даже можно ли вызывать функцию на странице из компонента, оно работает так в обратном порядке?
А, ну все.
оставляешь на VF странице
window.closeSubtab = function closeSubtab(tabId) {
sforce.console.closeTab(tabId);
};
А в Lightning ищешь способ как вызвать JS функцию из внешней страницы.
К примеру:
Если Lightning компонент не внутри iframe, то просто вызываешь
window.closeSubtab(<MyTabId>);
Если внутри iframe смотри как между iframes можно JS функции вызывать.
А, ну все. оставляешь на VF странице [code] window.closeSubtab = function closeSubtab(tabId) { sforce.console.closeTab(tabId); }; [/code] А в Lightning ищешь способ как вызвать JS функцию из внешней страницы. К примеру: Если Lightning компонент не внутри iframe, то просто вызываешь window.closeSubtab(<MyTabId>); Если внутри iframe смотри как между iframes можно JS функции вызывать.
А кстати, чет сейчас и вопрос возник
Если Lightning не внутри iframe, то по идее он должен иметь доступ к sforce.console
А кстати, чет сейчас и вопрос возник Если Lightning не внутри iframe, то по идее он должен иметь доступ к sforce.console
Ну у меня компонент со страницы вот так вот вызывается:
<apex:page controller="" id="">
<apex:includeLightning />
<div id="lightning"></div>
<script>
$Lightning.use("c:lighthningApp", function() {
$Lightning.createComponent("c:LighthningComponent",
{ "id": "{!id}"},
"lightning");
});
</script>
</apex:page>
Думаю, можно попробовать в iframe это все запихнуть и посмотрю тогда будет ли работать.
Спасибо
[quote="Dmitry Shnyrev"]Если Lightning не внутри iframe, то по идее он должен иметь доступ к sforce.console[/quote] Ну у меня компонент со страницы вот так вот вызывается: <apex:page controller="" id=""> <apex:includeLightning /> <div id="lightning"></div> <script> $Lightning.use("c:lighthningApp", function() { $Lightning.createComponent("c:LighthningComponent", { "id": "{!id}"}, "lightning"); }); </script> </apex:page> Думаю, можно попробовать в iframe это все запихнуть и посмотрю тогда будет ли работать. Спасибо
Не надо ничего запихивать.
Тут вся суть в том в iframe/не iframe.
НЕ iframe лучше.
Так а внутри Lightning если сделать sforce.console.closeTab();
оно не работает?
Метод если вызывать вот так
window.closeSubtab(<MyTabId>);
?
Ошибки какие?
Не надо ничего запихивать. Тут вся суть в том в iframe/не iframe. НЕ iframe лучше. Так а внутри Lightning если сделать sforce.console.closeTab(); оно не работает? Метод если вызывать вот так window.closeSubtab(<MyTabId>); ? Ошибки какие?
Ну если из компонента я вызываю sforce.console.closeTab() то оно ругается, что не знает, что такое sforce.console, его надо как то импортить туда? Тоже самое с window.closeSubtab, говорит, что не знает такого, даже когда на странице есть функция window.closeSubTab = function closeTab(){}
Ну если из компонента я вызываю sforce.console.closeTab() то оно ругается, что не знает, что такое sforce.console, его надо как то импортить туда? Тоже самое с window.closeSubtab, говорит, что не знает такого, даже когда на странице есть функция window.closeSubTab = function closeTab(){}
Вот! Значит у тебя iframe!
Посмотри в Element Inspector (Dev Console браузера) где у тебя Lightning component сидит. Есть ли выше тег(и) iframe.
Мне кажется что ты его найдешь.
Попробуй из lighting component не window.closeSubtab() вызвать
parent.closeSubtab()
или
top.closeSubtab()
Конечно есть у меня еще одно подозрение!
Не помню деталей, но где-то упоминалось, что Salesforce замутил такую штуку чтобы Lightning Components выполнялись в своебразной песочнице (Но это пока далекие догадки)
Пока проверь с iframe
Вот! Значит у тебя iframe! Посмотри в Element Inspector (Dev Console браузера) где у тебя Lightning component сидит. Есть ли выше тег(и) iframe. Мне кажется что ты его найдешь. Попробуй из lighting component не window.closeSubtab() вызвать parent.closeSubtab() или top.closeSubtab() Конечно есть у меня еще одно подозрение! Не помню деталей, но где-то упоминалось, что Salesforce замутил такую штуку чтобы Lightning Components выполнялись в своебразной песочнице (Но это пока далекие догадки) Пока проверь с iframe
Как вариант попробуй что из этого
https://developer.salesforce.com/blogs/developer-relations/2017/01/lightning-visualforce-communication.html
Как вариант попробуй что из этого https://developer.salesforce.com/blogs/developer-relations/2017/01/lightning-visualforce-communication.html
Дмитрий, спасибо!! Все заработало!
Это я перепутал, sforce.console работает все таки в котролере компонента. Но он например не может найти tabId, по этому я нахожу tabId на странице и потом, когда создаю компонент то просто передаю этот id как параметр и внутри компонента уже могу вызывать sforce.console.closeTab(tabId).
Спасибо за помощь!
Дмитрий, спасибо!! Все заработало! Это я перепутал, sforce.console работает все таки в котролере компонента. Но он например не может найти tabId, по этому я нахожу tabId на странице и потом, когда создаю компонент то просто передаю этот id как параметр и внутри компонента уже могу вызывать sforce.console.closeTab(tabId). Спасибо за помощь!