如何从 NAV 中按日期排序的目录中获取文件列表?我不能使用 File 虚拟表,因为没有日期键。我尝试过使用 DotNet,但实现 IComparer 接口对我来说太复杂了。
有任何想法吗?
干杯
如何从 NAV 中按日期排序的目录中获取文件列表?我不能使用 File 虚拟表,因为没有日期键。我尝试过使用 DotNet,但实现 IComparer 接口对我来说太复杂了。
有任何想法吗?
干杯
File 表的键到底有什么问题?据我所见,日期和时间都是可排序的。于 2015 年导航测试。
无论如何,如果你真的想用 .net 来做,这里就是例子。基表是File
。页面属性SourceTableTemporary = Yes
。将所有文件信息获取到 arrey 后,您可以使用它并按照您喜欢的方式对其进行排序。或者您可以使用数组中的值填充临时文件表并使用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;
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;