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 ответ

Решение

Вы не можете получить идентификатор сеанса, подобный этому, в пакетном апексе, так как он работает в системном контексте и поэтому не имеет конкретной пользовательской информации для извлечения.

ОБНОВИТЬ:

У вас есть следующие варианты:

  1. Попробуйте запустить веб-сервисы wsdl из вашей организации Salesforce через генератор wsdl to apex в вашей организации, чтобы сгенерировать некоторые классы, которые могут позволить вам войти в систему. Вам разрешается только один запрос веб-службы на вызов выполнения.
  2. Вы можете создать страницу сайтов, к которой вы отправляете HTTP-запрос на получение, в своем пакетном апексе. Для этого необходимо получить идентификаторы элементов, для которых вы хотите отправить PDF-файлы, и указать, какой конкретный пользователь должен использовать, чтобы вы использовали метод System.runAs(user). Вы можете передать эти параметры в заголовке HTTPRequest или в пользовательской настройке.

Обратите внимание, что ни одно из этих решений не является идеальным, вы можете пересмотреть, почему вы в первую очередь используете Batch apex, и посмотреть, сможете ли вы переопределить его другим способом.

Другие вопросы по тегам