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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 15.09.2011, 17:09   #1  
Predatore is offline
Predatore
Участник
 
163 / 17 (1) ++
Регистрация: 29.09.2010
Всем доброго времени суток!

Видимо вопрос у меня совсем простой, т.к. ничего по этой, в общем-то не редкой теме, я ничего не могу найти. А потому прошу направить меня на путь истинный, т.е. подсказать где почитать или что делать.

А суть вот в чём. Никак не могу разобраться как вообще работает NAS. В конечном счёте задача такая: мониторить определённую папку на появление в ней файлов. При появлении оных, сделать импорт данных из этих файлов и удалить/переместить их.

Ситуация такова. Я точно знаю, что на рабочей базе работает NAS, хоть и в глаза его ни разу не видел. Так же, подозреваю, что на тестовой базе его нет, т.к. на тестовом сервере (к нему у меня есть доступ, а к рабочему - нету) я нашёл оснастку Application Server Manager, при её запуске открывается окно NASMSnapIn, в нём есть пункт Application Server for Microsoft Dinamycs NAV Manager и больше ничего. От туда можно попробовать создать Application Server, но этого сделать не получается. Честно говоря я не уверен, что смотрю то что нужно, поэтому и прошу помощи. Интересует, как минимум как вообще взаимодействовать с NAS, т.е. где писать то, что он должен выполнять? Как максимум интересует, как поставить NAS на тестовой базе?

А насчёт "не только", такой вопрос: я представляю себе, как проверить существует ли какой-либо конкретный файл в конкретной папке, но что-то пока не представляю, как узнать существуют ли вообще файлы в конкретной папке?

Спасибо за внимание!
Старый 15.09.2011, 17:28   #2  
Romul is offline
Romul
Участник
 
186 / 11 (1) +
Регистрация: 26.12.2007
Цитата:
Сообщение от Predatore Посмотреть сообщение
Всем доброго времени суток!

Видимо вопрос у меня совсем простой, т.к. ничего по этой, в общем-то не редкой теме, я ничего не могу найти. А потому прошу направить меня на путь истинный, т.е. подсказать где почитать или что делать.

А суть вот в чём. Никак не могу разобраться как вообще работает NAS. В конечном счёте задача такая: мониторить определённую папку на появление в ней файлов. При появлении оных, сделать импорт данных из этих файлов и удалить/переместить их.

Ситуация такова. Я точно знаю, что на рабочей базе работает NAS, хоть и в глаза его ни разу не видел. Так же, подозреваю, что на тестовой базе его нет, т.к. на тестовом сервере (к нему у меня есть доступ, а к рабочему - нету) я нашёл оснастку Application Server Manager, при её запуске открывается окно NASMSnapIn, в нём есть пункт Application Server for Microsoft Dinamycs NAV Manager и больше ничего. От туда можно попробовать создать Application Server, но этого сделать не получается. Честно говоря я не уверен, что смотрю то что нужно, поэтому и прошу помощи. Интересует, как минимум как вообще взаимодействовать с NAS, т.е. где писать то, что он должен выполнять? Как максимум интересует, как поставить NAS на тестовой базе?

А насчёт "не только", такой вопрос: я представляю себе, как проверить существует ли какой-либо конкретный файл в конкретной папке, но что-то пока не представляю, как узнать существуют ли вообще файлы в конкретной папке?

Спасибо за внимание!
Не пользуйтесь стандартной оснасткой (Application Server Manager). Если знаете английский - Крики вот здесь все описал достаточно грамотно:
http://mibuso.com/howtoinfo.asp?FileID=15
Старый 15.09.2011, 18:02   #3  
Alex Che is offline
Alex Che
Участник
 
74 / 10 (1) +
Регистрация: 04.04.2006
Не на то ответил, это только для конкретного файла. А сообщение удалить нельзя.

Ответ на "не только":

[Ok :=] File.EXISTS(Name)
Старый 15.09.2011, 23:28   #4  
alexb_imported is offline
alexb_imported
Участник
 
256 / 12 (1) ++
Регистрация: 25.08.2006
Цитата:
Сообщение от Orwell Посмотреть сообщение
А насчёт "не только", такой вопрос: я представляю себе, как проверить существует ли какой-либо конкретный файл в конкретной папке, но что-то пока не представляю, как узнать существуют ли вообще файлы в конкретной папке?
Смотрите здесь:
Чтение файлов в директории с помощью Automation
Старый 16.09.2011, 09:58   #5  
Alterant is offline
Alterant
Участник
 
378 / 10 (1) +
Регистрация: 31.03.2004
Цитата:
Сообщение от Predatore Посмотреть сообщение
А насчёт "не только", такой вопрос: я представляю себе, как проверить существует ли какой-либо конкретный файл в конкретной папке, но что-то пока не представляю, как узнать существуют ли вообще файлы в конкретной папке?
Используйте виртуальную таблицу File.
Старый 16.09.2011, 11:05   #6  
InTacto is offline
InTacto
Участник
Аватар для InTacto
 
323 / 11 (1) +
Регистрация: 09.08.2005
В этой теме недавно обсуждали вопрос перебора файлов. С примерами.
Старый 16.09.2011, 14:51   #7  
jopagames2 is offline
jopagames2
Участник
 
151 / 11 (1) +
Регистрация: 11.02.2010
Цитата:
Сообщение от Predatore Посмотреть сообщение
А суть вот в чём. Никак не могу разобраться как вообще работает NAS.
Внятная документация (от Майкрософта) на русском
http://www.ms-dynamics.ru/solutions/...gy-nas-example

Цитата:
как проверить существует ли какой-либо конкретный файл в конкретной папке
F:File;

IF F.EXISTS('C:\Files\xxx.txt') THEN...

Цитата:
как узнать существуют ли вообще файлы в конкретной папке?
Самый простой способ:

На диске C: делаем файл list.bat, внутри которого лежит команда
"dir /b c:\Files\*.* > c:\out.txt"

далее из Navision выполняем
SHELL('c:\list.bat');

Затем в Nav анализируем только что созданный файл c:\out.txt
Если размер получившегося файла =0, то в папке c:\Files\ нет файлов.
А если не 0, то читаем сам файл (он текстовый) и там каждая строка - есть имя файла из нашей папочки.

Способ простой, хотя и немного идиотский. Только что придумал и ПРОВЕРИЛ - РАБОТАЕТ!
Это для тех, кто не хочет морочиться с automation и виртуальной таблицей File.
Старый 16.09.2011, 15:46   #8  
alexb_imported is offline
alexb_imported
Участник
 
256 / 12 (1) ++
Регистрация: 25.08.2006
Цитата:
Сообщение от jopagames2 Посмотреть сообщение
Это для тех, кто не хочет морочиться с automation и виртуальной таблицей File.
А если надо просмотреть не всё содержомое в "C:\Files" (файлы и папки) а только файлы в "C:\Files"?
Для этого хорош вариант с automation.
Старый 16.09.2011, 15:48   #9  
Alex Che is offline
Alex Che
Участник
 
74 / 10 (1) +
Регистрация: 04.04.2006
Во-первых, bat-файл делать не обязательно, можно прямо в коде вставить

Код:
RC := SHELL ('c:\windows\system32\command.com','/c', 'dir c:\temp > c:\out.txt');     //Работает!
RC нужно обязательно, чтобы команда завершилась перед возвратом.

Во-вторых, у меня при пустой папке в результате получается не ноль, а вот что:

Код:
 ’®¬ ў гбва®©б⢥ C ­Ґ Ё¬ҐҐв ¬ҐвЄЁ.
 ‘ҐаЁ©­л© ­®¬Ґа ⮬ : 1496-0D55

 ‘®¤Ґа¦Ё¬®Ґ Ї ЇЄЁ c:\temp

16.09.2011  15:16    <DIR>          .
16.09.2011  15:16    <DIR>          ..
               0 д ©«®ў              0 Ў ©в
               2 Ї Ї®Є  98я296я623я104 Ў ©в бў®Ў®¤­®
Ну, на кодировку здесь наплевать (это 866), факт, что там в любом случае есть текст, который нужно анализировать
Старый 16.09.2011, 16:55   #10  
Alterant is offline
Alterant
Участник
 
378 / 10 (1) +
Регистрация: 31.03.2004
Цитата:
Сообщение от jopagames2 Посмотреть сообщение
Цитата:
как проверить существует ли какой-либо конкретный файл в конкретной папке
F:File;

IF F.EXISTS('C:\Files\xxx.txt') THEN...
Объявлять переменную не надо. Функция EXISTS доступна сразу.

Цитата:
Сообщение от jopagames2 Посмотреть сообщение
Цитата:
как узнать существуют ли вообще файлы в конкретной папке?
Самый простой способ:

На диске C: делаем файл list.bat, внутри которого лежит команда
"dir /b c:\Files\*.* > c:\out.txt"

далее из Navision выполняем
SHELL('c:\list.bat');

Затем в Nav анализируем только что созданный файл c:\out.txt
Если размер получившегося файла =0, то в папке c:\Files\ нет файлов.
А если не 0, то читаем сам файл (он текстовый) и там каждая строка - есть имя файла из нашей папочки.

Способ простой, хотя и немного идиотский. Только что придумал и ПРОВЕРИЛ - РАБОТАЕТ!
Это для тех, кто не хочет морочиться с automation и виртуальной таблицей File.
Можно и так, но нужно учитывать, что SHELL начиная с 4-ой версии запрашивает подтверждение и под NASом работать не будет. Чтобы не запрашивала нужно 'c:\list.bat' объявить как текстовую константу, но тогда мы жестко привязаны к имени файла.
Старый 16.09.2011, 16:56   #11  
Alterant is offline
Alterant
Участник
 
378 / 10 (1) +
Регистрация: 31.03.2004
Цитата:
Сообщение от AlexB Посмотреть сообщение
Цитата:
Сообщение от jopagames2 Посмотреть сообщение
Это для тех, кто не хочет морочиться с automation и виртуальной таблицей File.
А если надо просмотреть не всё содержомое в "C:\Files" (файлы и папки) а только файлы в "C:\Files"?
Для этого хорош вариант с automation.
Виртуальная таблица File тоже подойдет.
Старый 16.09.2011, 18:05   #12  
InTacto is offline
InTacto
Участник
Аватар для InTacto
 
323 / 11 (1) +
Регистрация: 09.08.2005
Цитата:
Сообщение от Alterant Посмотреть сообщение
Можно и так, но нужно учитывать, что SHELL начиная с 4-ой версии запрашивает подтверждение и под NASом работать не будет. Чтобы не запрашивала нужно 'c:\list.bat' объявить как текстовую константу, но тогда мы жестко привязаны к имени файла.
Эту константу выводим в настройки и пишем что хотим. За одном в настройках нужно сохранить этот замечательный файл, чтобы, при его отсутствии у конечного пользователя, он выгрузился в нужно нам место (не забудем путь вынести тоже в настройки). Или можно, конечно, не забыть его просто туда положить. <- Это для тех кто не захотел заморачиваться с внешними компонентами или табличкой файл.
Старый 16.09.2011, 20:39   #13  
alexb_imported is offline
alexb_imported
Участник
 
256 / 12 (1) ++
Регистрация: 25.08.2006
Цитата:
Сообщение от Alterant Посмотреть сообщение
Цитата:
Сообщение от AlexB Посмотреть сообщение
А если надо просмотреть не всё содержомое в "C:\Files" (файлы и папки) а только файлы в "C:\Files"?
Для этого хорош вариант с automation.
Виртуальная таблица File тоже подойдет.
И как с помощью виртуальной таблицы File можно узнать, какие файлы содержатся в папке?
Можно код привести?
Например надо получить список все файлов в папке "c:\files" (интересуют только файлы, другие папки, в "c:\files" не интересуют)
Каким будет код?
Старый 17.09.2011, 09:55   #14  
jopagames2 is offline
jopagames2
Участник
 
151 / 11 (1) +
Регистрация: 11.02.2010
Цитата:
Сообщение от Alex Che Посмотреть сообщение
Во-первых, bat-файл делать не обязательно, можно прямо в коде вставить

Код:
RC := SHELL ('c:\windows\system32\command.com','/c', 'dir c:\temp > c:\out.txt');     //Работает!
RC нужно обязательно, чтобы команда завершилась перед возвратом.
Во-вторых, у меня при пустой папке в результате получается не ноль, а вот что:
Угу. Зачёт Это ещё красивее. Можнодажевсёводнустрокувлепить.
И shell - это УЖЕ запущенный командный интерпретатор. Второй раз комманд.ком вызывать не за чем.
Вероятно, можно просто тупо одну команду dir написать. Не проверял, но должно работать.

Только ты ключик "слеш бэ" забыл добавить.
У меня он есть, поэтому файл и нулевой.

ЗЫ: А вообще, совершенно неожиданно, получилось вполне себе "изящное" решение поиска файлов. В одну строку
Старый 17.09.2011, 10:21   #15  
jopagames2 is offline
jopagames2
Участник
 
151 / 11 (1) +
Регистрация: 11.02.2010
Не Извиняюсь.
Проверил. Тупо dir не работает, оказывается.
Должен быт путь к железно существующему файлу.
Старый 17.09.2011, 10:46   #16  
jopagames2 is offline
jopagames2
Участник
 
151 / 11 (1) +
Регистрация: 11.02.2010
Цитата:
Сообщение от jopagames2 Посмотреть сообщение
Не Извиняюсь.
Проверил. Тупо dir не работает, оказывается.
Должен быт путь к железно существующему файлу.
Всё. Вот САМАЯ финальная рабочая версия, без пути к процессору

Код:
s:text[250];

s:=ENVIRON('comspec');
SHELL(s, '/c dir /b c:\*.* > c:\out.txt');
Старый 17.09.2011, 10:55   #17  
jopagames2 is offline
jopagames2
Участник
 
151 / 11 (1) +
Регистрация: 11.02.2010
Блин.
Вот теперь точно - САМАЯ-САМАЯ. Однострочная!

Код:
SHELL(ENVIRON('comspec'), '/c dir /b c:\*.* > c:\out.txt');
ЗЫ: Подглючивает что-то форум. Не даёт только что созданное сообщение отредактировать, приходится новое писать.
Старый 17.09.2011, 11:21   #18  
jopagames2 is offline
jopagames2
Участник
 
151 / 11 (1) +
Регистрация: 11.02.2010
С утра так очарован и увлёкся шеллом, что получилось вот что:

Код:
SHELL(ENVIRON('comspec'), '/c del "'+ENVIRON('appdata')+'\*.zup"');
Давно уже хотел для своих пользоваталей такое написать (ибо задолбали уже), но всё руки не доходили
Теперь повешу им на кнопку в главном меню, чтобы отстали
Для тех, кто понял для чего это - пользуйтесь! Дарю!

ЗЫ: Андрюха тоже этот вопрос решал, но более громоздко
http://www.apanko.ru/showthread.php?t=1473
Старый 17.09.2011, 14:09   #19  
alexb_imported is offline
alexb_imported
Участник
 
256 / 12 (1) ++
Регистрация: 25.08.2006
Цитата:
Сообщение от jopagames2 Посмотреть сообщение
Вот теперь точно - САМАЯ-САМАЯ. Однострочная!
Код:
SHELL(ENVIRON('comspec'), '/c dir /b c:\*.* > c:\out.txt');
И всё-же повторюсь:
что-бы получить список ТОЛьКО файлов команда DIR не годится, т.к. выдаёт всё содержимое (и файлы, и папки).
Как получить список ТОЛьКО файлов? Если с таблицей FILE, то как?
Старый 17.09.2011, 21:55   #20  
zm is offline
zm
Участник
 
44 / 10 (1) +
Регистрация: 15.07.2003
Адрес: Латвия
//Name DataType Subtype Length
//InFiles Record File
//IntegrationSetup."Inbound Document Folder" - какой-то установленный folder
CLEAR(InFiles);
InFiles.RESET;
InFiles.SETFILTER(Path,IntegrationSetup."Inbound Document Folder");
InFiles.SETRANGE("Is a file",TRUE);
IF InFiles.FIND('-') THEN
REPEAT
ImpFileName := InFiles.Path+'\'+InFiles.Name;
CLEARLASTERROR;
........

UNTIL InFiles.NEXT = 0;

Примерно так, используя NAS,мы импортируем *.xml files.
 


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

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

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