Salesforce: вход через SOAP от Salesforce к Salesforce
Я реализовал пакетное задание, которое выполняет вызов веб-службы в том же экземпляре salesforce, который затем должен отправлять электронные письма с вложением в формате pdf, поскольку вы не можете отправлять вложения в формате PDF непосредственно из пакетного задания. Мой вызов веб-сервиса выглядит так:
public static void callOut(List ids){
InvoiceAttachmentConnector.InvoiceAttachmentService ws = new InvoiceAttachmentConnector.InvoiceAttachmentService();
ws.SessionHeader = new InvoiceAttachmentConnector.SessionHeader_element();
ws.SessionHeader.sessionId = UserInfo.getSessionId();
ws.handleInvoicePdfAttachment(ids);
}
Однако в пакетных заданиях UserInfo.getSessionId() возвращает значение NULL, поэтому я получаю исключение INVALID_SESSION_ID.
Как я могу войти, чтобы получить SessionId? До сих пор я не нашел решения для входа из Salesforce в Salesforce. Если бы вы могли помочь, я был бы признателен! Спасибо!
1 ответ
Вы не можете получить идентификатор сеанса, подобный этому, в пакетном апексе, так как он работает в системном контексте и поэтому не имеет конкретной пользовательской информации для извлечения.
ОБНОВИТЬ:
У вас есть следующие варианты:
- Попробуйте запустить веб-сервисы wsdl из вашей организации Salesforce через генератор wsdl to apex в вашей организации, чтобы сгенерировать некоторые классы, которые могут позволить вам войти в систему. Вам разрешается только один запрос веб-службы на вызов выполнения.
- Вы можете создать страницу сайтов, к которой вы отправляете HTTP-запрос на получение, в своем пакетном апексе. Для этого необходимо получить идентификаторы элементов, для которых вы хотите отправить PDF-файлы, и указать, какой конкретный пользователь должен использовать, чтобы вы использовали метод System.runAs(user). Вы можете передать эти параметры в заголовке HTTPRequest или в пользовательской настройке.
Обратите внимание, что ни одно из этих решений не является идеальным, вы можете пересмотреть, почему вы в первую очередь используете Batch apex, и посмотреть, сможете ли вы переопределить его другим способом.