AXForum  
Вернуться   AXForum > Microsoft Dynamics NAV > NAV: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 29.08.2011, 16:28   #1  
kudrenko is offline
kudrenko
Участник
 
17 / 10 (1) +
Регистрация: 11.11.2010
Ребят, подскажите, пожалуйста, кто сталкивался подобной ситуацией.
Необходимо выполнить вывод всех файлов (их название), которые указаны в соответствующей директории, используя Automation.
Собственно я создал указанные ниже две переменные:
FileSystem Automation 'Microsoft Scripting Runtime'.FileSystemObject
Folder Automation 'Microsoft Scripting Runtime'.Folder

Код:
CREATE(FileSystem);
IF NOT FileSystem.FolderExists("Path") THEN
  ERROR(‘Нет такой директории’);

Folder := FileSystem.GetFolder(“Path”);
А вот как дальше сделать перебор, возможно с помощь цикла WHILE, к сожалению не могу понять. Помогите плиз…
Старый 29.08.2011, 18:15   #2  
romeo is offline
romeo
Участник
Аватар для romeo
 
564 / 10 (2) +
Регистрация: 31.03.2004
Использовать автомейшен обязательно? Вроде есть виртуальная таблица File, которую легко можно использовать в навижене как и обычную таблицу..
Старый 29.08.2011, 21:22   #3  
kudrenko is offline
kudrenko
Участник
 
17 / 10 (1) +
Регистрация: 11.11.2010
Цитата:
Сообщение от romeo Посмотреть сообщение
Использовать автомейшен обязательно? Вроде есть виртуальная таблица File, которую легко можно использовать в навижене как и обычную таблицу..
Да, обязательно (по крайней мере мне так кажется). Просто папка с файлами лежит не на локальной машине, а в расшаренной папке в сети. Насколько я знаю, виртуальная таблица File тут не поможет (по крайней мере пробовал - не помогло, с локальными файлами замечательно работает).
Старый 30.08.2011, 10:58   #4  
InTacto is offline
InTacto
Участник
Аватар для InTacto
 
323 / 11 (1) +
Регистрация: 09.08.2005
Пример браузера в Navе.
В ОпенФорм укажите свой путь к сетевой папке, используя имя компьютера или его IP.
Вложения
Тип файла: fob browser.fob (13.8 Кб, 447 просмотров)
Старый 30.08.2011, 11:15   #5  
kudrenko is offline
kudrenko
Участник
 
17 / 10 (1) +
Регистрация: 11.11.2010
Цитата:
Сообщение от InTacto Посмотреть сообщение
Пример браузера в Navе.
В ОпенФорм укажите свой путь к сетевой папке, используя имя компьютера или его IP.
InTacto, а Вы бы могли предоставить файлик в текстовом виде, а не fob? Просто моя лицензия не позволяет открывать форму 83767 и еще он требует кодеюнит 77711.
Спасибо заранее.
Старый 30.08.2011, 11:21   #6  
InTacto is offline
InTacto
Участник
Аватар для InTacto
 
323 / 11 (1) +
Регистрация: 09.08.2005
kudrenko
а какой номер Вас устроит?
Старый 30.08.2011, 11:24   #7  
kudrenko is offline
kudrenko
Участник
 
17 / 10 (1) +
Регистрация: 11.11.2010
Цитата:
Сообщение от InTacto Посмотреть сообщение
kudrenko
а какой номер Вас устроит?
Любой, в пределах 50001-50099.
Старый 30.08.2011, 11:28   #8  
InTacto is offline
InTacto
Участник
Аватар для InTacto
 
323 / 11 (1) +
Регистрация: 09.08.2005
Все поправил.
Вложения
Тип файла: txt browser.txt (9.5 Кб, 657 просмотров)
Старый 30.08.2011, 12:01   #9  
kudrenko is offline
kudrenko
Участник
 
17 / 10 (1) +
Регистрация: 11.11.2010
Цитата:
Сообщение от InTacto Посмотреть сообщение
Все поправил.
InTacto, спасибо Вам огромное за помощь - все просто замечательно работает!!! Спасибо - Вы мне очень помогли!!!
Старый 30.08.2011, 12:04   #10  
Alterant is offline
Alterant
Участник
 
378 / 10 (1) +
Регистрация: 31.03.2004
Если хотите использовать Automation, то 2 варианта.

1. С Microsoft Scripting Runtime простого пути нет. Получить данные можно через функцию-итератор, которых в NAV нет. На mibuso народ путем хитрых извращений использования 'Microsoft Script Control 1.0'.ScriptControl и кусков кода на VB Script, вызываемых из NAV добились таки нужного результата. Копайте тут, если интересно:
http://mibuso.com/forum/viewtopic.php?f=5&t=7855

2. Те кто ищет пути полегче могут использовать Microsoft Shell Controls And Automation.
Код:
CREATE(ShellCtrls);
ShellFolder := ShellCtrls.NameSpace('C:\Temp');
ShellItems := ShellFolder.Items;
FOR i := 0 TO ShellItems.Count - 1 DO BEGIN
 IF NOT ShellItems.Item(i).IsFolder OR ShellItems.Item(i).IsBrowsable THEN BEGIN
	INIT;
	"Row No." := i;
	"Cell Value as Text" := ShellItems.Item(i).Path;
	INSERT;
 END;
END;
где
ShellCtrls - 'Microsoft Shell Controls And Automation'.Shell
ShellFolder - 'Microsoft Shell Controls And Automation'.Folder
ShellItems - 'Microsoft Shell Controls And Automation'.FolderItems

можно еще использовать 'Microsoft Shell Controls And Automation'.FolderItem напрямую, добавив соответсвующее присвоение в цикле. Но можно и неявно, как в примере.

Со свойствами FolderItem есть некоторые заморочки. При тестировании выяснилось, что FolderItem = TRUE не только для папок, но и для zip архивов. К счастью, для архивов IsBrowsable = TRUE, в то время как для обычных папок FALSE. Возможны еще какие-то ньюансы. Можно, конечно, использовать свойство Type, но оно локализовано (на русской винде для папок выдает "Папка с файлами", что чревато проблемами.
Старый 30.08.2011, 14:27   #11  
kudrenko is offline
kudrenko
Участник
 
17 / 10 (1) +
Регистрация: 11.11.2010
Alterant,спасибо большое, что нашли время и поделились своими советам по вопросу - очень за это признателен! Даже и не предполагал, что это так "извращенно" делается... (особенно по первому варианту ))) Теперь хоть буду иметь представление как это делается с помощью Automation. Спасибо.
 


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 21:14.