GDI Import im Workflow mit Anhang eines Tasks

Willkommen in unserer deutschsprachigen Anwendergemeinde.
Stellen Sie ruhig ihre Fragen oder teilen Sie ihr Wissen mit anderen.

Moderator: hdroege

Post Reply
blackwell1988
Posts: 15
Joined: 30. Aug 2019, 08:38
Contact:

GDI Import im Workflow mit Anhang eines Tasks

Post by blackwell1988 » 16. Sep 2021, 10:40

Hallo,

ich hoffe das Thema gab es nicht bereits und ich bekomme es sauber erklärt.

Mein Ziel:
Anhang eines Tasks wird mittels Workflow automatisch in einen Import eingesetzt.

Bisheriger Schritte:
Ich habe einen Workflow, der mittels Assistent im Task gestartet wird. Ich bekomme über ein paar "Get Single Records" alle benötigen ID´s und EOID´s raus. Mit einem "ExecuteSQLQuery" bekomme ich auch die FileID aus der File DB raus, welche ID mein Anhang des Tasks hat.
Sprich ich habe an sich alles. Wenn ich nun aber im WF einen GDI Import auswähle will dieser als String den "Path" also Pfad zu Datei welche importiert werden soll. Kann ich dem hier irgendwie erzählen, dass er die Datei aus der FileDB nehmen soll??
Oder ist das gar nicht möglich? Erkennt er seine eigene FileDB als Pfad gar nicht an?
Oder muss ich ggf nur einen Assign dazwischen setzen?

Danke

blackwell1988
Posts: 15
Joined: 30. Aug 2019, 08:38
Contact:

Re: GDI Import im Workflow mit Anhang eines Tasks

Post by blackwell1988 » 17. Sep 2021, 20:58

Hallo,
ich antworte mir selber mal, aus dem Grund, dass ich mir denke, dass es vllt. auch mal jemand anders gibt, der genau das Thema hat und ich Ihm meine Lösung nicht vorenthalten will.

Ziel: Mittels Workflow, welchen in aus einem Assistenten aus einem Task starte, soll ein definierter Import gestartet werden, mit der Datei im Journal des Tasks.

Ich habe nun im Workflow alle meine ID´s gesammelt und mittels "ExecuteSQLQuery" mir die FileGuid aus der dbo.Files geholt. Damit kann man schonmal die Datei aus dem Task eindeutig in der DB finden.
Ein GDI Import direkt aus der DB ist so leider nicht möglich.
Ich habe nun ein Powershell Script geschrieben (google geklaut) welches mir diese Datei aus der DB holt und an einem Pfad abspeicher.
Hier kann ich nun den GDI Import ansetzen lassen und die Datei importieren.

Sollte jemand eine bessere Idee haben oder ggf das gleiche Thema habe und Hilfe brauchen sagt bescheid.

Hier mal das Powershellscript

param(
[parameter(Mandatory=$FALSE)] [String]$FileGuid
)


$Server = "servername\DB";
$Database = "M42Production";
$Dest = "Pfad wo er die Datei hinlegen soll";
$bufferSize = 8192;


$Sql = "SELECT [name], [Data]
FROM [dbo].[Files] where [FileGuid] = '$FileGuid'
";




$con = New-Object Data.SqlClient.SqlConnection;
$con.ConnectionString = "Data Source=$Server;" +
"Integrated Security=True;" +
"Initial Catalog=$Database";
$con.Open();

# Write-Output ((Get-Date -format yyyy-MM-dd-HH:mm:ss) + ": Export FILESTREAM objects Started ...");

$cmd = New-Object Data.SqlClient.SqlCommand $Sql, $con;
$rd = $cmd.ExecuteReader();

$out = [array]::CreateInstance('Byte', $bufferSize)

while ($rd.Read())
{
try
{
Write-Output ("Exporting Objects from FILESTREAM container: {0}" -f $rd.GetString(0));
# New BinaryWriter
$fs = New-Object System.IO.FileStream ($Dest + $rd.GetString(0)), Create, Write;
$bw = New-Object System.IO.BinaryWriter $fs;

$start = 0;
# Read first byte stream
$received = $rd.GetBytes(1, $start, $out, 0, $bufferSize - 1);
while ($received -gt 0)
{
$bw.Write($out, 0, $received);
$bw.Flush();
$start += $received;
# Read next byte stream
$received = $rd.GetBytes(1, $start, $out, 0, $bufferSize - 1);
}
$bw.Close();
$fs.Close();
}
catch
{
Write-Output ($_.Exception.Message)
}
finally
{
$fs.Dispose();
}
}


$rd.Close();
$cmd.Dispose();
$con.Close();

Write-Output ("Finished");
#Read-Host -Prompt "Press Enter to exit"

Post Reply

Return to “Deutsch”

Who is online

Users browsing this forum: No registered users and 9 guests