Всем привет,
Не знаю насколько корректный ли вопрос, тем более прочитав несколько предидущих постов о заданиях новичков, как то аж немного неловко спрашивать, но все же.
Пока ничего так и не смог найти по этой теме.
Делаю страницу в классике в service console. Когда с кейса нажимается кнопка то в сабтабе открывается visualfrorce страница и внутри нее запихан lighthning component, так сделано, чтоб в будущем удобнее было переходить на lighthning service console. Должна быть кнопка cancel в компоненте , которая закроет этот subtab и вернется обратно в главные таб с кейсом.
Нашел как сделать это, если просто visualforce страница и нашел как сделать это в лайтнинговой консоли, но как это сделать из лайтнинг компонента в классике не нашел.
Сталкивался кто нибудь с таким или есть какие нибудь идеи?
Заранее спасибо за помощь!
Не работал с Service Console, но если мне память не изменяет там команды специфические для консоли через JS мутятся.
Давай будем вместе разбираться.
Напиши сюда что за метод.
Одно из предположений - оставить этот рабочий метод в VF странице, но попробовать сделать так чтобы Lighting компонент его вызывал. Получится небольшая цепочка
Lightning -> VF -> Service Console
Те посты касались задания для новичков. Не думаю что твой вопрос можно отнести к этому разряду ![]()
В документации это находил:
https://developer.salesforce.com/docs/atlas.en-us.api_console.meta/api_console/sforce_api_console_closetab.htm
Да, я думал может всю кнопку, которая закрывает сабтаб оставить на странице, но не знаю, насколько красиво это будет смотреться потом и насколько удобно использовать будет.
Вот думаю, если просто js скрипт оставить на странице и вызывать если с lighthning компонента после нажатия, то наверное будет лучше. Но, на самом деле, не знаю даже можно ли вызывать функцию на странице из компонента, оно работает так в обратном порядке?
А, ну все.
оставляешь на VF странице
window.closeSubtab = function closeSubtab(tabId) {
sforce.console.closeTab(tabId);
};А в Lightning ищешь способ как вызвать JS функцию из внешней страницы.
К примеру:
Если Lightning компонент не внутри iframe, то просто вызываешь
window.closeSubtab(<MyTabId>);
Если внутри iframe смотри как между iframes можно JS функции вызывать.
А кстати, чет сейчас и вопрос возник
Если 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 это все запихнуть и посмотрю тогда будет ли работать.
Спасибо
Не надо ничего запихивать.
Тут вся суть в том в iframe/не iframe.
НЕ iframe лучше.
Так а внутри Lightning если сделать sforce.console.closeTab();
оно не работает?
Метод если вызывать вот так
window.closeSubtab(<MyTabId>);
?
Ошибки какие?
Ну если из компонента я вызываю 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
Как вариант попробуй что из этого
https://developer.salesforce.com/blogs/developer-relations/2017/01/lightning-visualforce-communication.html
Дмитрий, спасибо!! Все заработало!
Это я перепутал, sforce.console работает все таки в котролере компонента. Но он например не может найти tabId, по этому я нахожу tabId на странице и потом, когда создаю компонент то просто передаю этот id как параметр и внутри компонента уже могу вызывать sforce.console.closeTab(tabId).
Спасибо за помощь!