Я бы сначала рассмотрел дизайн вашего пакета, чтобы обеспечить эффективную работу с API. Загрузка записей, в частности, требует большого количества ресурсов и занимает очень много времени. Во многих случаях предпочтительнее извлекать информацию с помощью nlapiLookupField или, если у вас много записей, использовать nlapiSearchRecord для извлечения данных по многим записям за один раз.
Однако, если вы считаете, что процесс был асинхронным с первоначальным вызовом, который запрашивает сбор данных, и вторым вызовом, который извлекает данные из переменной сеанса или кэша файлов? Второй вызов можно зацикливать, чтобы периодически проверять, чтобы искать данные. Каждый вызов пакета набора выполняется независимо, поэтому второй обратный вызов не останавливает первый запрос. Вы можете параметризовать второй запрос, чтобы просто проверить кеш переменной сеанса. Если он пуст, верните сообщение не готовое. Если данные доступны, уничтожьте кеш и верните данные.
Альтернативным подходом было бы то, что наборлет A вызывает набор B и запрашивает подготовку данных. По завершении, в наборе B помещаются данные в набор А, который обрабатывает его. Разумеется, вы также можете иметь набор B, чтобы использовать код для пакета А в качестве библиотеки для обработки данных без обратного вызова. Однако это может быть неприменимо ко всем вариантам использования.
Не могли бы вы рассказать мне больше о прецеденте?
Во время таймаута я уже в приложении SSP, поэтому использовать nlapiSetRedirectURL невозможно. – azeem