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

Http запросы

Доброго дня времени.
По задаче нужно делать очень много гет http запросов и на основе ответных данных создавать записи в SF.
Меня интересует если какое грамотное решение для организации кода с этими запросами? Обработка исключений и т.д. Может есть какой паттерн для SF для этого? И как вы это делаете?

Доброго дня времени.
По задаче нужно делать очень много гет http запросов и на основе ответных данных создавать записи в SF.
Меня интересует если какое грамотное решение для организации кода с этими запросами? Обработка исключений и т.д. Может есть какой паттерн для SF для этого? И как вы это делаете?    

DevNull
Доброго дня времени.
По задаче нужно делать очень много гет http запросов и на основе ответных данных создавать записи в SF.
Меня интересует если какое грамотное решение для организации кода с этими запросами? Обработка исключений и т.д. Может есть какой паттерн для SF для этого? И как вы это делаете?

Нужно больше подробностей.
Могут ли запросы выполняться параллельно?
Зависит ли следующий запрос от предыдущего?
Как должен происходить процесс? Real-time, background?

[quote="DevNull"]
Доброго дня времени.
По задаче нужно делать очень много гет http запросов и на основе ответных данных создавать записи в SF.
Меня интересует если какое грамотное решение для организации кода с этими запросами? Обработка исключений и т.д. Может есть какой паттерн для SF для этого? И как вы это делаете?
[/quote]
Нужно больше подробностей.
Могут ли запросы выполняться параллельно?
Зависит ли следующий запрос от предыдущего?
Как должен происходить процесс? Real-time, background?

Gres
Зависит ли следующий запрос от предыдущего?

К сожалению да( И дело в том что по результату одного запроса могут идти несколько запросов дальше, и опять.
Примерная схема:
http://cs622025.vk.me/v622025418/2152d/NuacgrXgZ8g.jpg
Запись в объекте формирует на основе всех уровней, то есть если смотреть по схеме то будет 6 записей где собраны данные из 3 уровней запросов. Причем если ответы на запросы третьего слоя будут пустыми все равно создать записи, но с пустыми полями где должны быть данные из тертьего слоя.
Gres
Как должен происходить процесс? Real-time, background?

Каждую ночь по таймеру

Я думаю надо сделать как-то послойно, и создавать каждый слой данных батчем по предыдущему слою.

[quote="Gres"]Зависит ли следующий запрос от предыдущего? [/quote]
К сожалению да( И дело в том что по результату одного запроса могут идти несколько запросов дальше, и опять.
Примерная схема: 
http://cs622025.vk.me/v622025418/2152d/NuacgrXgZ8g.jpg
Запись в объекте формирует на основе всех уровней, то есть если смотреть по схеме то будет 6 записей где собраны данные из 3 уровней запросов. Причем если ответы на запросы третьего слоя будут пустыми все равно создать записи, но с пустыми полями где должны быть данные из тертьего слоя. 
[quote="Gres"]Как должен происходить процесс? Real-time, background?[/quote]
Каждую ночь по таймеру

Я думаю надо сделать как-то послойно, и создавать каждый слой данных батчем по предыдущему слою.

DevNull
Gres
Зависит ли следующий запрос от предыдущего?

К сожалению да( И дело в том что по результату одного запроса могут идти несколько запросов дальше, и опять.
Примерная схема:
http://cs622025.vk.me/v622025418/2152d/NuacgrXgZ8g.jpg
Запись в объекте формирует на основе всех уровней, то есть если смотреть по схеме то будет 6 записей где собраны данные из 3 уровней запросов. Причем если ответы на запросы третьего слоя будут пустыми все равно создать записи, но с пустыми полями где должны быть данные из тертьего слоя.
Gres
Как должен происходить процесс? Real-time, background?

Каждую ночь по таймеру

Я думаю надо сделать как-то послойно, и создавать каждый слой данных батчем по предыдущему слою.


Сделай цеплочку батчев тогда.

[quote="DevNull"][quote="Gres"]Зависит ли следующий запрос от предыдущего? [/quote]
К сожалению да( И дело в том что по результату одного запроса могут идти несколько запросов дальше, и опять.
Примерная схема: 
http://cs622025.vk.me/v622025418/2152d/NuacgrXgZ8g.jpg
Запись в объекте формирует на основе всех уровней, то есть если смотреть по схеме то будет 6 записей где собраны данные из 3 уровней запросов. Причем если ответы на запросы третьего слоя будут пустыми все равно создать записи, но с пустыми полями где должны быть данные из тертьего слоя. 
[quote="Gres"]Как должен происходить процесс? Real-time, background?[/quote]
Каждую ночь по таймеру

Я думаю надо сделать как-то послойно, и создавать каждый слой данных батчем по предыдущему слою.[/quote]
Сделай цеплочку батчев тогда.

Кст. с новыми лимитами на callouts это будет даже относительно быстро работать.

Кст. с новыми лимитами на callouts это будет даже относительно быстро работать.

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

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

хм, я так понял с батча нельзя делать callouts( Также как и запускать future методы... Что же мне делать то...

хм, я так понял с батча нельзя делать callouts( Также как и запускать future методы... Что же мне делать то... 

DevNull
хм, я так понял с батча нельзя делать callouts( Также как и запускать future методы... Что же мне делать то...

Используй Database.AllowsCallouts

[quote="DevNull"]хм, я так понял с батча нельзя делать callouts( Также как и запускать future методы... Что же мне делать то...[/quote]
Используй Database.AllowsCallouts

Gres
Используй Database.AllowsCallouts

Огромное спасибо! Работает!

[quote="Gres"]Используй Database.AllowsCallouts[/quote]
Огромное спасибо! Работает!

DevNull
Gres
Используй Database.AllowsCallouts

Огромное спасибо! Работает!

@future(AllowsCallouts = true)
Вот еще

[quote="DevNull"][quote="Gres"]Используй Database.AllowsCallouts[/quote]
Огромное спасибо! Работает![/quote]
@future(AllowsCallouts = true)
Вот еще

Хочу из future запустить Батч выдает ошибку - First error: Database.executeBatch cannot be called from a batch start, batch execute, or future method.
future запускается из Scheduled класса.
Почему я использую future из Scheduled? Потому что если используются http запросы в Scheduled то будет ошибка.
Как мне выйти из положения?
Общая схема работы Scheduled --> future --> Batch

Хочу из future запустить Батч выдает ошибку - First error: Database.executeBatch cannot be called from a batch start, batch execute, or future method.
future запускается из Scheduled класса. 
Почему я использую future из Scheduled? Потому что если используются http запросы в Scheduled то будет ошибка.
Как мне выйти из положения?
Общая схема работы Scheduled --> future --> Batch

DevNull
Хочу из future запустить Батч выдает ошибку - First error: Database.executeBatch cannot be called from a batch start, batch execute, or future method.
future запускается из Scheduled класса.
Почему я использую future из Scheduled? Потому что если используются http запросы в Scheduled то будет ошибка.
Как мне выйти из положения?
Общая схема работы Scheduled --> future --> Batch

Почему бы не использовать сразу Scheduled Batch?

[quote="DevNull"]Хочу из future запустить Батч выдает ошибку - First error: Database.executeBatch cannot be called from a batch start, batch execute, or future method.
future запускается из Scheduled класса. 
Почему я использую future из Scheduled? Потому что если используются http запросы в Scheduled то будет ошибка.
Как мне выйти из положения?
Общая схема работы Scheduled --> future --> Batch[/quote]
Почему бы не использовать сразу Scheduled Batch?

Gres
Scheduled Batch

Эмм, тоесть?

[quote="Gres"]Scheduled Batch[/quote]
Эмм, тоесть?
[quote="DevNull"][quote="Gres"]Scheduled Batch[/quote]
Эмм, тоесть?[/quote]
http://www.salesforce.com/us/developer/docs/apexcode/Content/apex_batch_interface.htm#apex_batch_scheduleBatch_section
Just Google It

Вопрос такой, дабы не плодить темы.
Я запускаю future, можно ли как то отследить окончание его выполнения в apex коде?

Вопрос такой, дабы не плодить темы.
Я запускаю future, можно ли как то отследить окончание его выполнения в apex коде?

Вопрос такой, дабы не плодить темы.

1. Я запускаю future, можно ли как то отследить окончание его выполнения в apex коде?
2. Можно ли вообще из Scheduled делать HTTP запросы? Просто так не пускает. Может есть что то типа Database.AllowsCallouts для батча?

Вопрос такой, дабы не плодить темы.

1. Я запускаю future, можно ли как то отследить окончание его выполнения в apex коде?
2. Можно ли вообще из Scheduled делать HTTP запросы? Просто так не пускает. Может есть что то типа  Database.AllowsCallouts для батча?

1. Нет, это асинхронный вызов
2. А что мешает в скедулере запускать батч из которого можно в каждом execute до 100 callouts делать

зачем future собственно?

Может опиши юзкейс, быть может есть другое решение?

1. Нет, это асинхронный вызов
2. А что мешает в скедулере запускать батч из которого можно в каждом execute до 100 callouts делать

зачем future собственно?

Может опиши юзкейс, быть может есть другое решение?

Дима Лисовский
. А что мешает в скедулере запускать батч из которого можно в каждом execute до 100 callouts делать

зачем future собственно?

Может опиши юзкейс, быть может есть другое решение?


Да уже нашел решение.
Раньше сначала запускался класс который делал запрос на внешний сервер и получал парсил вставлял в базу данные. По том по этим данным шел батч которое тоже делал запросы и т.д.
Выход нашел так: Просто поместил весь код начального класса в start метод батча. Тоесть батч теперь сначал вставляет данные, потом уже по ним идет.

[quote="Дима Лисовский"]. А что мешает в скедулере запускать батч из которого можно в каждом execute до 100 callouts делать

зачем future собственно?

Может опиши юзкейс, быть может есть другое решение?[/quote]


Да уже нашел решение.
Раньше сначала запускался класс который делал запрос на внешний сервер и получал парсил вставлял в базу данные. По том по этим данным шел батч которое тоже делал запросы и т.д.
Выход нашел так: Просто поместил весь код начального класса в start метод батча. Тоесть батч теперь сначал вставляет данные, потом уже по ним идет.