Array
(
)

Problema com Script Task do projeto de ETL da Edição 107 da SQL Magazine

Ivan Ferro
   - 18 mai 2013

Olá!
Estou com problema com o Script Task que converte pdf em txt, eu testei a conversão na linha de comando e está funcionando corretamente mas ao executar o projeto aparece a seguinte mensagem:
A Tarefa de Script DTS encontrou uma exceção no código de usuário:
Nome do proj ST_407da516120945bfa596a98564ad5ed0
Não é possível carregar script para execução.
Eu executei o build do código e nenhum erro é apresentado, tenho a impressão de que o projeto não está conseguindo nem chegar ao script.
Alguém pode me ajudar?

Ivan Ferro
   - 18 mai 2013

Bom eu mesmo consegui a solução, o script estava dando erro pq o exemplo do artigo continha alguns erros e a forma de executar o PDF2TXT estava diferente do que é exibido na documentação atual do aplicativo, acredito que a versão do usado no artigo deva ser mais antiga.

Segue o código final funcionando:

#region Namespaces
using System;
using System.Data;
using Microsoft.SqlServer.Dts.Runtime;
using System.Windows.Forms;
using System.IO;
using System.Diagnostics;
using System.Threading;
#endregion

namespace ST_191686f452934d5891bb66d01a66bb16
{
/// <summary>
/// ScriptMain is the entry point class of the script. Do not change the name, attributes,
/// or parent of this class.
/// </summary>
[Microsoft.SqlServer.Dts.Tasks.ScriptTask.SSISScriptTaskEntryPointAttribute]
public partial class ScriptMain : Microsoft.SqlServer.Dts.Tasks.ScriptTask.VSTARTScriptObjectModelBase
{

/// <summary>
/// This method is called when this script task executes in the control flow.
/// Before returning from this method, set the value of Dts.TaskResult to indicate success or failure.
/// To open Help, press F1.
/// </summary>
public void Main()
{
TextWriter tw = new StreamWriter(@"E:\devmedia\1aFase\exec.bat");

string varexec = @"PDF2Text.exe /inlist E:\devmedia\FTPLocal\arquivos.lst /outdir ""E:\devmedia\1aFase\TXT\""";

tw.WriteLine(varexec);
tw.WriteLine("exit");
tw.Close();

Thread.Sleep(1000);

ProcessStartInfo start = new ProcessStartInfo();

start.UseShellExecute = false;
start.RedirectStandardOutput = true;

start.FileName = @"CMD";

start.Arguments = @"/cstart E:\devmedia\1aFase\exec.bat";

Process.Start(start);

Dts.TaskResult = (int)ScriptResults.Success;
}

#region ScriptResults declaration
/// <summary>
/// This enum provides a convenient shorthand within the scope of this class for setting the
/// result of the script.
///
/// This code was generated automatically.
/// </summary>
enum ScriptResults
{
Success = Microsoft.SqlServer.Dts.Runtime.DTSExecResult.Success,
Failure = Microsoft.SqlServer.Dts.Runtime.DTSExecResult.Failure
};
#endregion

}
}