2012-03-01 3 views
0

Я реализовал пакетное задание, которое вызывает вызов webservice в том же экземпляре salesforce, который затем должен отправлять электронные письма с вложением в pdf, , поскольку вы не можете отправлять вложения PDF напрямую из пакета работа. Мой вебсервис вызов выглядит следующим образом:Salesforce: SOAP Логин от Salesforce TO Salesforce

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() возвращает нуль, поэтому я получаю исключение INVALID_SESSION_ID.

Как я могу войти в систему, чтобы получить SessionId? До сих пор я не нашел решения для входа от salesforce к salesforce. Если вы можете помочь, я был бы признателен! Благодаря!

ответ

2

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

UPDATE:

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

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

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

+0

Я знаю, поэтому я хочу найти другой способ получить идентификатор сеанса. Должен быть способ вызвать другой веб-сервис salesforce из кода apex. И если u может вызывать sf webservice с вершины, должна быть возможность входа в систему и, следовательно, получить идентификатор сеанса. – Phil

+0

См. Обновленный ответ. – pbattisson

+0

Я получил его на прошлой неделе с опцией 1. Эта ссылка http://developer.force.com/cookbook/recipe/calling-salesforce-web-services-using-apex мне очень помогла. Причина, по которой нам нужно использовать пакетное задание, заключается в том, что мы хотим запланировать задание для автоматической отправки счетов-фактур клиентам. – Phil