0

Как я могу получить список файлов из каталога, упорядоченного по дате в NAV? Я не могу использовать виртуальную таблицу File, потому что нет ключа для даты. Я пробовал с DotNet, но реализация интерфейса IComparer слишком сложна для меня.Список файлов из каталога, упорядоченного по дате

Любые идеи?

Приветствия

ответ

1

В низкотехнологичном раствори (т.е. не требует каких-либо внешних компонентов), как о создании временной переменной записи файла, в котором вы буферную файловые записи, заселения поля Path с сортируемым строковым представлением поля даты и времени файла объединены в DateTime? [Пожалуйста, игнорируйте, что PAGE.RUN - что там было только для целей отладки.]

Code

На моей машине, первый вызов ShowFileOrder отображает это:

Sorted by name

Второй вызов это показывает:

enter image description here

И это является то, что файлы выглядят как в проводнике Windows:

enter image description here

Я надеюсь, что это помогает! :)

+0

вау @uncommonsense свой ник макияж sense now =) –

+0

hi @uncommonsense, это то, что я и сделал. Благодаря! – azatoth

0

И что именно неправильно с ключом таблицы файлов? Насколько я вижу, дата и время сортируются. Протестировано в Nav 2015. Sorting virtual File table

В любом случае, если вы действительно хотите это сделать с помощью .net, вот пример. Базовая таблица: File. Страница собственности SourceTableTemporary = Yes. После того, как вы получите всю информацию о файле в arrey, вы можете использовать ее и отсортировать по своему усмотрению. Или вы можете заполнить таблицу thetemporary файл со значениями из массива и использовать 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

Или вы могли бы даже sort список файлов с .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; 
+1

Вопрос был (также) с тегом «NAV2013»; в этой версии SETCURRENTKEY() по-прежнему требуется существующий ключ таблицы. :-) –

+0

@uncommonsense Это правда. –

+0

Hi @MakSim, спасибо за ответы, но вы сказали, что сортируются по любым полям: да, это в RTC, но не в коде. Я отвечу на ваш второй ответ. Спасибо – azatoth

Смежные вопросы