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
2 Antworten
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.]
Auf meinem Computer zeigt der erste Aufruf von ShowFileOrder Folgendes an:
Der zweite Aufruf zeigt dies:
Und so sehen die Dateien im Windows Explorer aus:
Ich hoffe das hilft! :) :)
Und was genau ist mit dem Schlüssel der Dateitabelle falsch? Soweit ich sehen kann, sind Datum und Uhrzeit sortierbar. Getestet in Nav 2015.
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;
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;
Neue Fragen
microsoft-dynamics
Microsoft Dynamics ist eine Reihe von ERP- und CRM-Anwendungen. Dieses Tag kann alle Produkte der Dynamics-Familie abdecken (CRM, AX, GP, NAV, SL, C5). Diese Produkte haben neben dem Namen wenig gemeinsam. Verwenden Sie dieses Tag NICHT.