Вы можете сделать это без задачи скрипта и только с 1 переменной User::FILE_NAME
.
Используйте foreach loop
в каталоге, заполните FILE_NAME
из этой задачи. Обработайте файл с помощью преобразования потока данных. Затем переместите файл. Тогда просто позвольте вашему foreach loop
продолжить. Постепенно перемещая файлы, вы будете точно знать, что удалось, а что не удалось, и сможете перезапустить процесс без необходимости откатывать файлы, которые были обработаны правильно, и начинать с нуля.
Если вы хотите подождать, чтобы все переместить, вы можете сделать двухэтапный ход. 1 в той же логике, что и выше, который просто переименовывает в .processed или что-то в исходном каталоге. Затем после завершения этого цикла добавьте еще одну фильтрацию foreach
к обработанным файлам, затем используйте ту же переменную FILE_NAME
и переместите файлы.
Нет необходимости в script task
в любой ситуации.
Если вы действительно хотите использовать script task
. Поместите script task
после DFT
в foreach loop
. Имейте другую переменную типа object
, которая будет содержать datatable
или что-то в этом роде. Заполните это DataTable
именем файла и т. Д. Затем после вашего foreach
вам понадобится another script task
, который загрузит таблицу и получит имя файла, который вы хотите обработать. Честно говоря, на этом последнем этапе проще всего использовать system.io
и перемещать файлы внутри сценария.
Как бы вы использовали переменную, которая является datatable
чем-то вроде (и я пишу это свободно, поэтому, вероятно, потребуются дополнительные шаги и проверка ошибок).
Чтобы заполнить имена файлов в DataTable
, сделайте File_Name
переменную доступной для чтения и DataTableVariableName
доступной для чтения / записи задаче сценария, затем начните с чего-то вроде:
вам, возможно, действительно придется проверить значение null пользователя variable.value
перед этой строкой. Я не уверен.
system.data.datatable dt = (system.data.datatable)Dts.Variables["User::DataTableVariableName"].Value;
if (dt == null)
{
Write code to create your datatable
}
Add new DataRow to table -- lots of results on web about this and creating datatable.
Теперь у вас есть datatable
. После foreach loop
добавьте script task
, чтобы переместить обработанные файлы.
Снова начните с извлечения таблицы из переменной
system.data.datatable dt = (system.data.datatable)Dts.Variables["User::DataTableVariableName"].Value;
затем пропустите datatable
, и я бы также предложил переместить сюда файлы.
foreach (dt datarow in dt.rows)
{
typically I like to suggest copying and then deleting the source file depending on how you over write. so you would do something like.
If (system.io.file.Exists(dr.["FileNameRowLable"].ToString())
{
system.io.file.copy(source, destination);
if (file.exists(destination))
{
file.delete(source);
}
}
}
Я думаю, вам будет удобнее перемещать файл в foreach loop
, чтобы вам не понадобилась задача скрипта.
person
Matt
schedule
19.06.2016