Wie kann ich eine Liste der Dateien aus dem nach Datum geordneten Verzeichnis in NAV abrufen? Ich kann die virtuelle Datei-Tabelle nicht verwenden, da für das Datum kein Schlüssel vorhanden ist. Ich habe es mit DotNet versucht, aber die Implementierung der IComparer-Schnittstelle ist mir viel zu kompliziert.

Irgendwelche Ideen?

Prost

0
azatoth 23 Dez. 2015 im 18:57

2 Antworten

Beste Antwort

Als Low-Tech-Lösung (dh ohne externe Komponenten) können Sie eine temporäre Dateidatensatzvariable erstellen, in der Sie die Dateidatensätze puffern, und das Feld Pfad mit einer sortierbaren Zeichenfolgendarstellung der Datums- und Uhrzeitfelder der Datei füllen, die in a zusammengefasst sind Terminzeit? [Bitte ignorieren Sie diese PAGE.RUN - das war nur zum Debuggen da.]

Code

Auf meinem Computer zeigt der erste Aufruf von ShowFileOrder Folgendes an:

Sorted by name

Der zweite Aufruf zeigt dies:

enter image description here

Und so sehen die Dateien im Windows Explorer aus:

enter image description here

Ich hoffe das hilft! :) :)

1
Jan Hoek 24 Dez. 2015 im 08:21

Und was genau ist mit dem Schlüssel der Dateitabelle falsch? Soweit ich sehen kann, sind Datum und Uhrzeit sortierbar. Getestet in Nav 2015. Virtuelle Dateitabelle sortieren

Wie auch immer, wenn Sie es wirklich mit .net machen wollen, hier ist ein Beispiel. Die Basistabelle ist File. Seiteneigenschaft SourceTableTemporary = Yes. Nachdem Sie alle Dateiinformationen an arrey gesendet haben, können Sie sie verwenden und nach Ihren Wünschen sortieren. Oder Sie füllen die temporäre Dateitabelle mit Werten aus dem Array und verwenden setcurrentkey LOL

di  DotNet  System.IO.DirectoryInfo.'mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'   
fi  DotNet  System.IO.FileSystemInfo.'mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'  
arr DotNet  System.Array.'mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'  
i   Integer     

di := di.DirectoryInfo('c:\Temp\Tmp');
//arr.CreateInstance(GETDOTNETTYPE(fi),1); //not needed
arr := di.GetFileSystemInfos();
for i := 0 to arr.Length-1 do
 begin
  fi := arr.GetValue(i);
  Name := fi.Name;
  evaluate(Date, format(fi.LastWriteTime,8,1));
  insert;
 end;

Reading file list

Oder Sie können sogar die Dateiliste mit . Net

di  DotNet  System.IO.DirectoryInfo.'mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'   
fi  DotNet  System.IO.FileSystemInfo.'mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'  
arr DotNet  System.Array.'mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'  
arrKey  DotNet  System.Array.'mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'  
i   Integer     
TYPE    DotNet  System.Type.'mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'   
MethodInfo  DotNet  System.Reflection.MethodInfo.'mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'  
Parameters  DotNet  System.Array.'mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'  
Object  DotNet  System.Object.'mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'

di := di.DirectoryInfo('c:\Temp\Tmp');
arr := di.GetFileSystemInfos();
fi := arr.GetValue(0);
arrKey := arrKey.CreateInstance(GETDOTNETTYPE(fi.LastWriteTime), arr.Length);
FOR i := 0 TO arr.Length-1 DO
 BEGIN
  fi := arr.GetValue(i);
  arrKey.SetValue(fi.LastWriteTime, i);
 END;

TYPE := GETDOTNETTYPE(arr);
MethodInfo := TYPE.GetMethods().GetValue(80);
Parameters := Parameters.CreateInstance(GETDOTNETTYPE(Object),2);
Parameters.SetValue(arrKey,0);
Parameters.SetValue(arr,1);
MethodInfo.Invoke(TYPE, Parameters);

FOR i := 0 TO arr.Length-1 DO
 BEGIN
  fi := arr.GetValue(i);
  MESSAGE(FORMAT(fi.LastWriteTime()));
 END;
0
Community 23 Mai 2017 im 12:04