Возникли проблемы с простым скриптом VB

У меня возникают проблемы с запуском следующего сценария VB для создания нового каталога в моем пакете SSIS. Он должен создать следующий новый путь D:\customers\documents\orders\20171205.

Public Sub Main()
    'set dir path
    Dts.Variables("var_DirPath").Value = 
        "D:\customers\documents\orders\" + Date.Today.Year.ToString + 
        Date.Today.Month.ToString + Date.Today.Day.ToString
    Dts.TaskResult = ScriptResults.Success
End Sub

Для параметра ReadWriteVariables редактора задач сценария задано значение User:var_DirPath. Значение переменной: «D:\customers\documents\orders\».

Файловая задача настроена на

UseDirector/Exists = True
Operation = Create directory
IsSourcePathAvailable = True
Source variable = User:var_DirPath

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

Любая помощь приветствуется.


person David F    schedule 05.12.2017    source источник
comment
Что-то кажется подозрительным. Предоставленный вами код должен работать, хотя и не так хорошо, как предложение @jmcihinney. Для меня он устанавливает переменную в D:\customers\documents\orders\2017125. Можете ли вы изменить свой путь или что-то еще, чтобы доказать, что этот код работает?   -  person GMan80013    schedule 06.12.2017
comment
Я думаю, что использование Variable с выражением проще, чем использование задачи Script.   -  person Yahfoufi    schedule 06.12.2017
comment
@DavidF Я дал несколько предложений в своем ответе, но, пожалуйста, уточните, что вы имели в виду под but I do not know why this simple script does not work. ... Почему это не работает? Вы получаете сообщение об ошибке или что?   -  person Hadi    schedule 06.12.2017


Ответы (2)


Некоторые предложения

Вы должны убедиться, что имя переменной введено правильно, потому что имя чувствительно к регистру. Также вы можете использовать Date.Now.ToString("yyyyMMdd") вместо объединения частей даты.

Public Sub Main()
    'set dir path
    Dts.Variables("var_DirPath").Value = 
    "D:\customers\documents\orders\" & Date.Now.ToString("yyyyMMdd")
    Dts.TaskResult = ScriptResults.Success
End Sub

Также убедитесь, что для свойства File System Task Delay Validation установлено значение True

Более простое решение — использование выражения

Кстати, вы можете добиться этого с помощью выражений. Просто перейдите к списку переменных, щелкните переменную var_DirPath, нажмите F4, чтобы отобразить вкладку свойств, установите для свойства Evaluate as expression значение True, щелкните свойство Expression и используйте следующее выражение:

 "D:\\customers\\documents\\orders\\" + (DT_STR, 4, 1252) DATEPART("yyyy" , GETDATE()) + RIGHT("0" + (DT_STR, 2, 1252) DATEPART("MM" , GETDATE()), 2) + RIGHT("0" + (DT_STR, 2, 1252) DATEPART("dd" , GETDATE()), 2)
person Hadi    schedule 06.12.2017

Я не уверен, почему вы не увидите ни одной подпапки даты, но у этого кода есть другие проблемы. Например, 11 января и 1 ноября дадут одно и то же имя папки для одного и того же года. Попробуй это:

Dts.Variables("var_DirPath").Value = String.Format("D:\customers\documents\orders\{0:yyyyMMdd}", Date.Now)

Это лучше, чем конкатенация, и формат обеспечивает уникальные имена папок для всех дат.

person jmcilhinney    schedule 05.12.2017