Pascal Script

  • 31 Oct

    Corrupted TAR file, error management during unzip

    Q: Error management during unzip request.

    We received a broken package (TAR file) in a folder processed by Limagito. The rule is to unpack any zip or tar file arriving in that folder and then move the zip or tar file.
    But for the broken package “example.tar” the file remains in the folder and is processed again and again.

    22/10/2021 14:51:47 Execute: ID1[ZIP]\\nas\Media\Work\FilesUnpack\
    22/10/2021 14:51:47 7z Item Count of \\nas\Media\Work\example.tar: 4
    22/10/2021 14:51:47 7z Item 1, File: \\nas\Media\Work\FilesUnpack\.\example1.jpg
    22/10/2021 14:51:47 7z Item 2, File: \\nas\Media\Work\FilesUnpack\.\example2.jpg
    22/10/2021 14:51:47 7z Item 3, File: \\nas\Media\Work\FilesUnpack\.\example.mpg
    22/10/2021 14:52:19 7z Extract Selected Exception: Data error
    22/10/2021 14:52:19 UNZIP Error \\nas\Media\Work\example.tar to \\nas\Media\Work\FilesUnpack\;3560701952

    The file is not moved. The process never ends. I configure the error notification by mail. And this works. What would be your advice to manage this?
    EX: move the file in error in another folder.

    A: In version v2021.10.30.0 we added a Pascal Script var to achieve your request. psDeleteAfterCopy which is an integer can only be used in the Destination Pascal Script (0 = error occurred, we will not delete the Source file).

    Some screenshots to get you started. We assume the Source (WIN, scanning compressed files) and Destination (UNZIP) part is already setup in our File Mover. So to add error management to this setup you’ll have to add ‘Pascal Script’ as second Destination. Important, the Pascal Script must come after the UNZIP.

    Limagito File Mover Destination Setup

    Add the following Pascal Script code, do not forget to adjust the crErrorPath constant, it must end with \ :

    Const
      ctErrorPath = 'C:\Test\Error\';
    Begin
      psExitCode:= 1;
      // ... add your code here
      If psDeleteAfterCopy = 0 Then
      begin
        If psMoveFile(psFilePath + psFileName, ctErrorPath + psFileName) Then
          psLogWrite(1, '', 'Moved ' + psFilePath + psFileName + ' to ' + ctErrorPath)
        Else
          psLogWrite(1, '', 'Move Error of ' + psFilePath + psFileName + ' to ' + ctErrorPath);
      End;
    End.

    Limagito File Mover Pascal Script as Destination

    In case of error the source file will be moved to the ctErrorPath, in our case it is: C:\Test\Error\

    Limagito File Mover RunTime Log

    #FileTransfer

    If you need any info about this ‘error management during unzip’ question, please let us know.

    Best regards,

    Limagito Team

  • 01 Oct

    Immediate folder name as filename in Limagito File Mover

    Q: I am trying to append a folder name to a file name but having a little trouble. The file is under 1 or 2 subfolder. After the file move I would like to append the very last folder name to the file name , and I don’t want to copy the source folder structure. Can you help me.

    Limagito File Mover Subfolder Filename

    A: Yes this is possible using some Pascal Script. We’ll need two destinations.

    • The first destination must be our ‘Pascal Script’. This script will strip the immediate subfolder from the complete subfolder part.
    • The second destination will be a Windows folder (WIN). In this destination we’ll rename the file using the info from the first destination (pascal script).

    Limagito File Mover Destination Setup

    Let’s start with the first destination (Pascal Script):

    Var
      iList: Integer;
      tmpEntry: String;
      tmpList: TStringList;
    Begin
      psExitCode:= 1;
      // ... add your code here
      psVSA := Trim(psStringReplace(psFilePath, psSourcePath, ''));
      If psVSA <> '' Then
      Begin
        tmpList := TStringList.Create;
        Try
          tmpList.Delimiter := '\';
          tmpList.DelimitedText := psVSA;
          psVSA := '';
          // Iterate
          For iList := (tmpList.Count - 1) DownTo 0 Do
          Begin
            tmpEntry := Trim(tmpList.Strings[iList]);
            If tmpEntry <> '' Then
            Begin
              psVSA := tmpEntry;
              Break;
            End;
          End;
        Finally
          tmpList.Free;
        End;
      End;
      // Adjust
      If psVSA <> '' Then
        psVSA := psVSA + '_';
      // Debug
      psLogWrite(1, '', 'Stripped SubFolder: ' + psVSA);
    End.

    Limagito File Mover Pascal Script Setup

    Next we’ll setup our second destination (WIN):

    Limagito File Mover WIN as Destination

    Don’t forget to disable the ‘Create SubDir’ option if you don’t want to copy the source folder structure.

    Limgito File Mover Create Subfolder option

    File renaming setup:

    Limagito File Mover File Rename

    RegEx: (.*)

    Replacement: %VSA\1

    Limagito File Mover File Rename Setup

    RunTime Log:

    Limagito File Mover RunTime Log

    #FileTransfer

    If you need any info about this ‘Immediate folder name as filename’ question, please let us know.

    Best regards,

    Limagito Team

  • 03 Sep

    Howto trigger email alert after the whole scheduled run completed?

    Q: Is it possible to trigger the email alert in Limagito after the whole scheduled run completed?

    Example : run every 5 mins between 12:00:00 AM and 23:59:59PM

    12:00:00 completed

    12:05:00 completed

    23:55:00 completed

    Email will tigger

    Or is there any other option to send the summary run of job every day?

     

    A: It’s not a default option but we created a small script to achieve this. It does not matter which kind of Source or Destination you are using. So you can add this to any existing Rule.

    >Open the ‘Pascal Script’ setup:

    Limagito File Mover Pascal Script

    >Enable and add the following ‘On Rule Begin’ Pascal Script:

    Begin
      psExitCode:= 1;
      // ... add your code here
      psResetRTLog;
    End.

    Limagito File Mover On Rule Begin Pascal Script

    >Enable and add the following ‘On Rule Begin’ Pascal Script (be sure to adjust the  ctLogPath  constant, we used  C:\Test\Out_Log\  as temporary directory for the log files):

    Var
      tmpDate: String;
      tmpLog: TStringList;
      tmpLogFile: String;
    Const
      ctLogPath = 'C:\Test\Out_Log\'; // Must end with \
    Begin
      psExitCode:= 1;
      // ... add your code here
      tmpDate := FormatDateTime('yyyymmdd', Now);
      tmpLogFile := ctLogPath + 'RTLog_' + tmpDate + '.log';
      //
      tmpLog := TStringList.Create;
      Try
        Try
          If FileExists(tmpLogFile) Then
            tmpLog.LoadFromFile(tmpLogFile);
          // Add
          If psLRT <> '' Then
          Begin
            tmpLog.Add(psLRT);
            // Save
            tmpLog.SaveToFile(tmpLogFile);
          End;     
        Except
          psLogWrite(1, '', 'Error Loading or Saving Log File');
        End;
      Finally
        tmpLog.Free;
      End;
    End.

    Limagito File Mover On Rule end Pascal Script

    >The script creates a RunTime log file with the date as part of the filename (format yyyymmdd). We added  C:\Test\Out_Log\  as temporary directory for the RunTime log files but you can adjust this, always end the ctLogPath constant with a backslash. Nest we’ll create a second rule which will email this file to the desired recipients.

    Limagito File Mover RunTime Log

    >Now you need to add an extra rule with a WIN as Source and SMTP as Destination:

    The Source path of this second rule is the path we used in the previous script. In our case this is ‘C:\Test\Out_Log\’.

    Limagito File Mover WIN as Source

    >Next, please open the File Filter Setup > Advanced Tab > Enable ‘Allow parameters in File Name filter’.

    Limagito File Mover File Filter

    >Add the following File Name Include filter:  *%TCD:[IncDay-1]yyyymmdd:*

    What this filter does is, it looks for a filename with a date part from yesterday because of the [IncDay-1].

    Limagito File Mover File Filter Setup

    So you can trigger this second rule like every 5 minutes since. When a new day starts and this second rule is triggered then it will email the log file from the previous day.

    Limagito File Mover Scan Timer Setup

    >We added SMTP as Destination since our goal was to email the RunTime log file.

    Limagito File Mover Destination Setup

    >Don’t forget to enable ‘Include Source File as Attachment’ so the log file will be included in the email.

    Limagito File Mover SMTP as Destination

    >If you set the Function to ‘Move Files’ then the log file will be deleted after successful SMTP transfer. If you want to keep the RunTime log files then set the Function to ‘Copy Files’ and enable our ‘File Memory’ option.

    Limagito File Mover Function Setup

    Result:

    Limagito File Mover RunTime Log

    #FileTransfer

    If you need any info about this ‘trigger email alert after the whole scheduled run’ question, please let us know.

    Best regards,

    Limagito Team

    By Limagito-Team Email Pascal Script ,
1 15 16 17 18 19 20 21 27
SEARCH