SSIS — пакетное выполнение в задаче скрипта

#ssis #dynamics-365 #script-component

#ssis #dynamics-365 #скрипт-компонент

Вопрос:

Мне нужно выполнить определенное действие в Dynamics 365 для каждой записи, которая создается в сущности. я могу сделать это через компонент скрипта (на C #).

Проблема в том, что компонент скрипта открывает соединение с CRM, выполняет действие и закрывает соединение для каждой записи из моего ввода. Входными данными для компонента скрипта является один столбец (результат из FetchXML), содержащий идентификатор GUID записи, для которой мне нужно выполнить действие.

То, что я делаю сейчас, — это добавить идентификатор GUID записи в методе Input0_ProcessInputRow() в список и выполнить соответствующее действие в пакете из 10 записей в postExecute().

Я понимаю, что postExecute() обычно используется для очистки.

Я ищу лучший / чистый способ сделать это?

Комментарии:

1. Единственный другой подход, который я могу придумать, — это установить компонент как асинхронный, а затем вы можете вызвать вызов в методе OnProcessCurrentRow (имя приблизительное). Псевдологика ~ Add GUID to list, if list size >= 10, CallCRM() list.Clear() и вам нужно будет иметь метод CallCRM() в postExecute, чтобы позаботиться о последних 0-9 отставших

2. @billinkc это звучит разумно, но мне все равно нужно вызвать CallCRM() в postExecute. Он хорошо справляется с нагрузкой на выполнение всех записей за один раз, всего 0-9, чтобы позаботиться. Хотите избежать любого вызова логики / функции при postExecute

3. Исправьте, это или вы можете обрабатывать только исходные строки «размера пакета». Единственное, что даст вам вышеупомянутый подход, это то, что вы получите данные, поступающие в течение всего ETL, вместо крупномасштабной активности в конце. Нажатие одной кнопки вниз приводит к появлению другой, но, возможно, это чистый выигрыш для операции. Трудно сказать, не зная конкретных деталей.