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

External entry point in Managed Package

Народ, подскажите по такой проблеме.

Как получить stack trace ошибки из Managed Package.

Смысл моей логики - запустить unmanaged code из managed package и получить ошибки если свалится!

Попытки сделать
- try/catch из unmanaged code - не работает.
- try/catch и возврат простым текстом внутри пакета - не работает
- даже просто попытка записать трейс ошибки в кастомный пакетный объект - не работает

Все время возвращает External entry point(<package_prefix>).

Народ, подскажите по такой проблеме.

Как получить stack trace ошибки из Managed Package.

Смысл моей логики - запустить unmanaged code из managed package и получить ошибки если свалится!

Попытки сделать 
- try/catch из unmanaged code - не работает.
- try/catch и возврат простым текстом внутри пакета - не работает
- даже просто попытка записать трейс ошибки в кастомный пакетный объект - не работает

Все время возвращает External entry point(<package_prefix>).

Нашел такую идею отмеченную как решенная
https://success.salesforce.com/ideaview?id=08730000000GnJKAA0
Но что-то не понял что там за решение.

Нашел такую идею отмеченную как [b]решенная[/b]
https://success.salesforce.com/ideaview?id=08730000000GnJKAA0
Но что-то не понял что там за решение.

Dmitry Shnyrev
Народ, подскажите по такой проблеме.

Как получить stack trace ошибки из Managed Package.

Смысл моей логики - запустить unmanaged code из managed package и получить ошибки если свалится!

Попытки сделать
- try/catch из unmanaged code - не работает.
- try/catch и возврат простым текстом внутри пакета - не работает
- даже просто попытка записать трейс ошибки в кастомный пакетный объект - не работает

Все время возвращает External entry point(<package_prefix>).


точно помню делал отсылку трейса на емаил. Логгер такой был кастомный.

[quote="Dmitry Shnyrev"]Народ, подскажите по такой проблеме.

Как получить stack trace ошибки из Managed Package.

Смысл моей логики - запустить unmanaged code из managed package и получить ошибки если свалится!

Попытки сделать 
- try/catch из unmanaged code - не работает.
- try/catch и возврат простым текстом внутри пакета - не работает
- даже просто попытка записать трейс ошибки в кастомный пакетный объект - не работает

Все время возвращает External entry point(<package_prefix>).[/quote]
точно помню делал отсылку трейса на емаил. Логгер такой был кастомный.

Sergey Prishchepa
точно помню делал отсылку трейса на емаил. Логгер такой был кастомный.

В смысле ты все-таки получал stackTrace из Exception внутри пакета (чтобы потом вложить в письмо)?

[quote="Sergey Prishchepa"]точно помню делал отсылку трейса на емаил. Логгер такой был кастомный.[/quote]
В смысле ты все-таки получал stackTrace из Exception внутри пакета (чтобы потом вложить в письмо)?

Перелопатил кучу ресурсов и походу тут косяк. Нет никакой возможности получить trace ошибки кроме как использовать LMA. Мдя, странные эти разработчики SF, что они курят? В чем сложность сделать мааааааленькую галочку где-нибудь в настройках пакета.

Перелопатил кучу ресурсов и походу тут косяк. Нет никакой возможности получить trace ошибки кроме как использовать LMA. Мдя, странные эти разработчики SF, что они курят? В чем сложность сделать мааааааленькую галочку где-нибудь в настройках пакета.

Dmitry Shnyrev
Перелопатил кучу ресурсов и походу тут косяк. Нет никакой возможности получить trace ошибки кроме как использовать LMA. Мдя, странные эти разработчики SF, что они курят? В чем сложность сделать мааааааленькую галочку где-нибудь в настройках пакета.

Именно все так и было, была галочка в кастом сеттинге.

[quote="Dmitry Shnyrev"]Перелопатил кучу ресурсов и походу тут косяк. Нет никакой возможности получить trace ошибки кроме как использовать LMA. Мдя, странные эти разработчики SF, что они курят? В чем сложность сделать мааааааленькую галочку где-нибудь в настройках пакета.[/quote]
Именно все так и было, была галочка в кастом сеттинге.

Может ты при отправке письма чего нибудь не сделал ?

Может ты при отправке письма чего нибудь не сделал ?

Подожди, ты про какое письмо говоришь?
Я вообще еще никаких писем не отсылал.
Я пока не могу получить STACK TRACE чтобы с ним работать (отсылать в письмах, показывать на странице, сохранять в объект).
Или ты про какие-то стандартные письма говоришь?

Подожди, ты про какое письмо говоришь?
Я вообще еще никаких писем не отсылал. 
Я пока не могу получить STACK TRACE чтобы с ним работать (отсылать в письмах, показывать на странице, сохранять в объект).
Или ты про какие-то стандартные письма говоришь?

Dmitry Shnyrev
Подожди, ты про какое письмо говоришь?
Я вообще еще никаких писем не отсылал.
Я пока не могу получить STACK TRACE чтобы с ним работать (отсылать в письмах, показывать на странице, сохранять в объект).
Или ты про какие-то стандартные письма говоришь?

Полностью кастомный функционал, из менадж пакета я получал stack trace о выполнении кода на продакшене, но в реальных условиях к нам приходили письма только когда чего нибудь падало у клиента. Эту тему здесь юзали уже сотни раз.

[quote="Dmitry Shnyrev"]Подожди, ты про какое письмо говоришь?
Я вообще еще никаких писем не отсылал. 
Я пока не могу получить STACK TRACE чтобы с ним работать (отсылать в письмах, показывать на странице, сохранять в объект).
Или ты про какие-то стандартные письма говоришь?[/quote]

Полностью кастомный функционал, из менадж пакета я получал stack trace о выполнении кода на продакшене, но в реальных условиях к нам приходили письма только когда чего нибудь падало у клиента. Эту тему здесь юзали уже сотни раз.

В кастом сеттинге была галочка нам нужен весь stack trace каждый раз или когда что то падает.

В кастом сеттинге была галочка нам нужен весь stack trace  каждый раз или когда что то падает.

Sergey Prishchepa
Полностью кастомный функционал, из менадж пакета я получал stack trace о выполнении кода

КАК????
У меня это не работает внутри пакета. У тебя работает?
try{
...
} catch(Exception e) {
sendByEmail(e.getStackTraceString())
}

[quote="Sergey Prishchepa"]Полностью кастомный функционал, из менадж пакета я получал stack trace о выполнении кода[/quote]
КАК????
У меня это не работает внутри пакета. У тебя работает?
[code]
try{
    ...
} catch(Exception e) {
   sendByEmail(e.getStackTraceString())
}
[/code]

Раньше точно работало, проверь настройки емайла

Раньше точно работало, проверь настройки емайла 

Если есть пакет - есть LMA. Логинишься через лма и получаешь точно такие же ошибки как и при унманагед коде
Отсылка на емейл никогда не работает - только если через Subscribers залогиниться
Если LMA нет - просишьсуппорт поставить его на орг на каком соббираешь пакеты и пользуешься)

Если есть пакет - есть LMA. Логинишься через лма и получаешь точно такие же ошибки как и при унманагед коде
Отсылка на емейл никогда не работает - только если через Subscribers залогиниться
Если  LMA нет - просишьсуппорт поставить его на орг на каком соббираешь пакеты и пользуешься)

Maxim Elets
Отсылка на емейл никогда не работает - только если через Subscribers залогиниться

Я счас даже код логгера нашел,Это тема здесь юзалась очень много раз, можно даже не через емайлы а через http.

[quote="Maxim Elets"]
Отсылка на емейл никогда не работает - только если через Subscribers залогиниться
[/quote]
Я счас даже код логгера нашел,Это тема здесь юзалась очень много раз, можно даже не через емайлы а через http.

Sergey Prishchepa
Maxim Elets
Отсылка на емейл никогда не работает - только если через Subscribers залогиниться

Я счас даже код логгера нашел,Это тема здесь юзалась очень много раз, можно даже не через емайлы а через http.

В нашем пакете есть такая же хрень
Максимум что приходит - если ты не через сабскрайберс зашел это
Attempt to null-reference - абсолютно бесполезная хрень

[quote="Sergey Prishchepa"][quote="Maxim Elets"]
Отсылка на емейл никогда не работает - только если через Subscribers залогиниться
[/quote]
Я счас даже код логгера нашел,Это тема здесь юзалась очень много раз, можно даже не через емайлы а через http.[/quote]
В нашем пакете есть такая же хрень
Максимум что приходит - если ты не через сабскрайберс зашел это
Attempt to null-reference - абсолютно бесполезная хрень

Maxim Elets
Если есть пакет - есть LMA.

Мне самому лично нафиг не нужны ошибки - мне надо показывать ошибки пользователю.
Потому что я запускаю unmanaged code из managed package. И валится именно unmanaged code.
Это код самого пользователя - в пакете валиться нечему - там 1 строчка кода обернутая в try/catch.

[quote="Maxim Elets"]Если есть пакет - есть LMA.[/quote]
Мне самому лично нафиг не нужны ошибки - мне надо показывать ошибки пользователю.
Потому что я запускаю unmanaged code из managed package. И валится именно unmanaged code.
Это код самого пользователя - в пакете валиться нечему - там 1 строчка кода обернутая в try/catch.

Собственно LMA или login as Subscriber или emails нафиг не нужны. (хотя я все таки надеялся что Сергей косвенно как-то получает на руки stack trace чтобы вставить его в тело письма, но по ходу это не так).

Собственно LMA или login as Subscriber или emails нафиг не нужны. (хотя я все таки надеялся что Сергей косвенно как-то получает на руки stack trace чтобы вставить его в  тело письма, но по ходу это не так).

На сколько я помню getStackTraceString() внутри managed package ничего дельного не возвращает, а вот getLineNumber() по-моему вернёт хотя бы строку

Да и вообще-то если это ошибка из unmanaged code то она прямиком должна попадать в логи в духе EXCEPTION_THROWN или как там.

На сколько я помню getStackTraceString() внутри managed package ничего дельного не возвращает, а вот getLineNumber() по-моему вернёт хотя бы строку :)

Да и вообще-то если это ошибка из unmanaged code то она прямиком должна попадать в логи в духе EXCEPTION_THROWN или как там.

Друзья, у меня случился крайний вывих мозга!!!
Совет Ильи (в очередной раз крайне полезный) сподвиг меня в очередной раз проверить как работает вывод ошибки.
Мля, и он вывел ошибку, причем со стеком, причем с стеком из пакета.
Я ничего не понимаю.
Вот как выглядит

вот код

SYSTEM.DEBUG('XXXXX - '+e.getMessage());
SYSTEM.DEBUG('XXXXX - '+e.getCause());
SYSTEM.DEBUG('XXXXX - '+e.getLineNumber());
SYSTEM.DEBUG('XXXXX - '+e.getTypeName());
SYSTEM.DEBUG('XXXXX - '+e.getStackTraceString());

10:24:20.33 (108513568)|HEAP_ALLOCATE|[40]|Bytes:45
10:24:20.33 (108530428)|USER_DEBUG|[40]|DEBUG|XXXXX - Attempt to de-reference a null object
10:24:20.33 (108535434)|STATEMENT_EXECUTE|[41]
10:24:20.33 (108574763)|HEAP_ALLOCATE|[41]|Bytes:12
10:24:20.33 (108581531)|USER_DEBUG|[41]|DEBUG|XXXXX - null
10:24:20.33 (108584873)|STATEMENT_EXECUTE|[42]
10:24:20.33 (108599829)|HEAP_ALLOCATE|[42]|Bytes:8
10:24:20.33 (108611069)|HEAP_ALLOCATE|[42]|Bytes:2
10:24:20.33 (108617161)|HEAP_ALLOCATE|[42]|Bytes:10
10:24:20.33 (108622339)|USER_DEBUG|[42]|DEBUG|XXXXX - 38
10:24:20.33 (108625325)|STATEMENT_EXECUTE|[43]
10:24:20.33 (108637075)|HEAP_ALLOCATE|[43]|Bytes:27
10:24:20.33 (108642110)|HEAP_ALLOCATE|[43]|Bytes:35
10:24:20.33 (108646913)|USER_DEBUG|[43]|DEBUG|XXXXX - System.NullPointerException
10:24:20.33 (108649684)|STATEMENT_EXECUTE|[44]
10:24:20.33 (108681393)|HEAP_ALLOCATE|[44]|Bytes:166
10:24:20.33 (108687802)|HEAP_ALLOCATE|[44]|Bytes:174
10:24:20.33 (108693600)|USER_DEBUG|[44]|DEBUG|XXXXX -
Class.NG2DemoService.exec: line 38, column 1
External entry point
Class.ng2.GatewayService.exec: line 19, column 1
Class.ng2.GatewayController.init: line 15, column 1

10:24:20.33 (108697032)|STATEMENT_EXECUTE|[45]
10:24:20.33 (108705311)|METHOD_EXIT|[EXTERNAL]|01p6F000007dXqy|NG2DemoService.exec(String, Object)
10:24:20.33 (110501294)|DML_BEGIN|[31]|Op:Insert|Type:ng2__Log__c|Rows:1
10:24:20.33 (154825208)|DML_END|[31]

Вот чтобы не быть голословным - сам пакет логает в кастомный объект
как было когда я создавал тему

{"stack":"()\n\n\nExternal entry point\n(ng2)\n","error":"Attempt to de-reference a null object","input":{"data":{"objectTypes":["Account2"]},"method":"getObjectsMetadata","service":"NG2DemoService"}}

вот как сейчас выглядит запись
{"stack":"Class.NG2DemoService.exec: line 38, column 1\nExternal entry point\nClass.ng2.GatewayService.exec: line 19, column 1\nClass.ng2.GatewayController.init: line 15, column 1","error":"Attempt to de-reference a null object","input":{"data":{},"method":"getRecords","service":"NG2DemoService"}}

Я нихера не понимаю. НО это огромный такой луч надежды что не все потеряно!

Осталось только понять в чем жеж разница!

Друзья, у меня случился крайний вывих мозга!!!
Совет Ильи (в очередной раз крайне полезный) сподвиг меня в очередной раз проверить как работает вывод ошибки.
Мля, и он вывел ошибку, причем со стеком, причем с стеком из пакета. 
Я ничего не понимаю.
Вот как выглядит

вот код
[code]
SYSTEM.DEBUG('XXXXX - '+e.getMessage());
SYSTEM.DEBUG('XXXXX - '+e.getCause());
SYSTEM.DEBUG('XXXXX - '+e.getLineNumber());
SYSTEM.DEBUG('XXXXX - '+e.getTypeName());
SYSTEM.DEBUG('XXXXX - '+e.getStackTraceString());
[/code]

[code]
10:24:20.33 (108513568)|HEAP_ALLOCATE|[40]|Bytes:45
10:24:20.33 (108530428)|USER_DEBUG|[40]|DEBUG|XXXXX - Attempt to de-reference a null object
10:24:20.33 (108535434)|STATEMENT_EXECUTE|[41]
10:24:20.33 (108574763)|HEAP_ALLOCATE|[41]|Bytes:12
10:24:20.33 (108581531)|USER_DEBUG|[41]|DEBUG|XXXXX - null
10:24:20.33 (108584873)|STATEMENT_EXECUTE|[42]
10:24:20.33 (108599829)|HEAP_ALLOCATE|[42]|Bytes:8
10:24:20.33 (108611069)|HEAP_ALLOCATE|[42]|Bytes:2
10:24:20.33 (108617161)|HEAP_ALLOCATE|[42]|Bytes:10
10:24:20.33 (108622339)|USER_DEBUG|[42]|DEBUG|XXXXX - 38
10:24:20.33 (108625325)|STATEMENT_EXECUTE|[43]
10:24:20.33 (108637075)|HEAP_ALLOCATE|[43]|Bytes:27
10:24:20.33 (108642110)|HEAP_ALLOCATE|[43]|Bytes:35
10:24:20.33 (108646913)|USER_DEBUG|[43]|DEBUG|XXXXX - System.NullPointerException
10:24:20.33 (108649684)|STATEMENT_EXECUTE|[44]
10:24:20.33 (108681393)|HEAP_ALLOCATE|[44]|Bytes:166
10:24:20.33 (108687802)|HEAP_ALLOCATE|[44]|Bytes:174
10:24:20.33 (108693600)|USER_DEBUG|[44]|DEBUG|XXXXX - 
[color=red][b]Class.NG2DemoService.exec: line 38, column 1
External entry point
Class.ng2.GatewayService.exec: line 19, column 1
Class.ng2.GatewayController.init: line 15, column 1[/b][/color]
10:24:20.33 (108697032)|STATEMENT_EXECUTE|[45]
10:24:20.33 (108705311)|METHOD_EXIT|[EXTERNAL]|01p6F000007dXqy|NG2DemoService.exec(String, Object)
10:24:20.33 (110501294)|DML_BEGIN|[31]|Op:Insert|Type:ng2__Log__c|Rows:1
10:24:20.33 (154825208)|DML_END|[31]
[/code]

Вот чтобы не быть голословным - сам пакет логает в кастомный объект
как было когда я создавал тему
[code]
{"stack":"()\n\n\nExternal entry point\n(ng2)\n","error":"Attempt to de-reference a null object","input":{"data":{"objectTypes":["Account2"]},"method":"getObjectsMetadata","service":"NG2DemoService"}}
[/code]
вот как сейчас выглядит запись
[code]
{"stack":"Class.NG2DemoService.exec: line 38, column 1\nExternal entry point\nClass.ng2.GatewayService.exec: line 19, column 1\nClass.ng2.GatewayController.init: line 15, column 1","error":"Attempt to de-reference a null object","input":{"data":{},"method":"getRecords","service":"NG2DemoService"}}
[/code]

Я нихера не понимаю. НО это огромный такой луч надежды что не все потеряно!

Осталось только понять в чем жеж разница!

Я тебе про что говорил.

Я тебе про что говорил.

Ты мне говорил про то что вы отсылали ошибки из кастомного логера по email.
Но ты ничего не написал как вы ошибку (stacktrace) получали.

Ты мне говорил про то что вы отсылали ошибки из кастомного логера по email.
Но ты ничего не написал как вы ошибку (stacktrace) получали.


Dmitry Shnyrev
Ты мне говорил про то что вы отсылали ошибки из кастомного логера по email.
Но ты ничего не написал как вы ошибку (stacktrace) получали.

Правильно, я говорил что это в принципе возможно...

[quote="Dmitry Shnyrev"]Ты мне говорил про то что вы отсылали ошибки из кастомного логера по email.
Но ты ничего не написал как вы ошибку (stacktrace) получали.[/quote]
Правильно, я говорил что это в принципе возможно...

Возможно многое
Вопрос КАК ?
Можно и с Marc Benioff договориться - заплатить ему 1 000 000 $ - он тебе включит логи в пакете.

Возможно многое :D
Вопрос КАК :D ?
Можно и с Marc Benioff договориться - заплатить ему 1 000 000 $ - он тебе включит логи в пакете.

:))))

:))))

А вот и косяк обратно приплыл!!!

В коде ничего не менялось. Просто проект давно не трогал с последнего исследования данного вопроса.

Запуск и опять пустой stacktrace:

Гонял страницу, пересохранял страницы/контроллеры - ничего.
Открыл Developer Console - появился stacktrace в коде:

МИСТИКА.

А вот и косяк обратно приплыл!!!

В коде ничего не менялось. Просто проект давно не трогал с последнего исследования данного вопроса.

Запуск и опять пустой stacktrace:
[img]/pics/123/original_2017-03-09_14-32-58.png[/img]

Гонял страницу, пересохранял страницы/контроллеры - ничего.
[b]Открыл Developer Console - появился stacktrace в коде:[/b]

[img]/pics/122/original_2017-03-09_14-34-18.png[/img]

МИСТИКА.

Вот еще доказательства - логи с ошибками + время

Вот еще доказательства - логи с ошибками + время

[img]/pics/124/original_2017-03-09_14-46-57.png[/img]

Вот и думай, глюк это или фича и как оно должно работать в итоге.

Вот и думай, глюк это или фича и как оно должно работать в итоге.