15.09.2011, 17:09 | #1 |
Участник
|
Всем доброго времени суток!
Видимо вопрос у меня совсем простой, т.к. ничего по этой, в общем-то не редкой теме, я ничего не могу найти. А потому прошу направить меня на путь истинный, т.е. подсказать где почитать или что делать. А суть вот в чём. Никак не могу разобраться как вообще работает NAS. В конечном счёте задача такая: мониторить определённую папку на появление в ней файлов. При появлении оных, сделать импорт данных из этих файлов и удалить/переместить их. Ситуация такова. Я точно знаю, что на рабочей базе работает NAS, хоть и в глаза его ни разу не видел. Так же, подозреваю, что на тестовой базе его нет, т.к. на тестовом сервере (к нему у меня есть доступ, а к рабочему - нету) я нашёл оснастку Application Server Manager, при её запуске открывается окно NASMSnapIn, в нём есть пункт Application Server for Microsoft Dinamycs NAV Manager и больше ничего. От туда можно попробовать создать Application Server, но этого сделать не получается. Честно говоря я не уверен, что смотрю то что нужно, поэтому и прошу помощи. Интересует, как минимум как вообще взаимодействовать с NAS, т.е. где писать то, что он должен выполнять? Как максимум интересует, как поставить NAS на тестовой базе? А насчёт "не только", такой вопрос: я представляю себе, как проверить существует ли какой-либо конкретный файл в конкретной папке, но что-то пока не представляю, как узнать существуют ли вообще файлы в конкретной папке? Спасибо за внимание! |
|
15.09.2011, 17:28 | #2 |
Участник
|
Цитата:
Сообщение от Predatore
Всем доброго времени суток!
Видимо вопрос у меня совсем простой, т.к. ничего по этой, в общем-то не редкой теме, я ничего не могу найти. А потому прошу направить меня на путь истинный, т.е. подсказать где почитать или что делать. А суть вот в чём. Никак не могу разобраться как вообще работает NAS. В конечном счёте задача такая: мониторить определённую папку на появление в ней файлов. При появлении оных, сделать импорт данных из этих файлов и удалить/переместить их. Ситуация такова. Я точно знаю, что на рабочей базе работает NAS, хоть и в глаза его ни разу не видел. Так же, подозреваю, что на тестовой базе его нет, т.к. на тестовом сервере (к нему у меня есть доступ, а к рабочему - нету) я нашёл оснастку Application Server Manager, при её запуске открывается окно NASMSnapIn, в нём есть пункт Application Server for Microsoft Dinamycs NAV Manager и больше ничего. От туда можно попробовать создать Application Server, но этого сделать не получается. Честно говоря я не уверен, что смотрю то что нужно, поэтому и прошу помощи. Интересует, как минимум как вообще взаимодействовать с NAS, т.е. где писать то, что он должен выполнять? Как максимум интересует, как поставить NAS на тестовой базе? А насчёт "не только", такой вопрос: я представляю себе, как проверить существует ли какой-либо конкретный файл в конкретной папке, но что-то пока не представляю, как узнать существуют ли вообще файлы в конкретной папке? Спасибо за внимание! http://mibuso.com/howtoinfo.asp?FileID=15 |
|
15.09.2011, 18:02 | #3 |
Участник
|
Не на то ответил, это только для конкретного файла. А сообщение удалить нельзя.
[Ok :=] File.EXISTS(Name) |
|
15.09.2011, 23:28 | #4 |
Участник
|
|
|
16.09.2011, 09:58 | #5 |
Участник
|
|
|
16.09.2011, 11:05 | #6 |
Участник
|
В этой теме недавно обсуждали вопрос перебора файлов. С примерами.
|
|
16.09.2011, 14:51 | #7 |
Участник
|
Внятная документация (от Майкрософта) на русском
http://www.ms-dynamics.ru/solutions/...gy-nas-example Цитата:
как проверить существует ли какой-либо конкретный файл в конкретной папке
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 |
Участник
|
|
|
16.09.2011, 15:48 | #9 |
Участник
|
Во-первых, bat-файл делать не обязательно, можно прямо в коде вставить
Код: RC := SHELL ('c:\windows\system32\command.com','/c', 'dir c:\temp > c:\out.txt'); //Работает! Во-вторых, у меня при пустой папке в результате получается не ноль, а вот что: Код: ’®¬ ў гбва®©б⢥ C Ґ Ё¬ҐҐв ¬ҐвЄЁ. ‘ҐаЁ©л© ®¬Ґа ⮬ : 1496-0D55 ‘®¤Ґа¦Ё¬®Ґ Ї ЇЄЁ c:\temp 16.09.2011 15:16 <DIR> . 16.09.2011 15:16 <DIR> .. 0 д ©«®ў 0 Ў ©в 2 Ї Ї®Є 98я296я623я104 Ў ©в бў®Ў®¤® |
|
16.09.2011, 16:55 | #10 |
Участник
|
Цитата:
Цитата:
Сообщение от 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. |
|
16.09.2011, 16:56 | #11 |
Участник
|
Виртуальная таблица File тоже подойдет.
|
|
16.09.2011, 18:05 | #12 |
Участник
|
Эту константу выводим в настройки и пишем что хотим. За одном в настройках нужно сохранить этот замечательный файл, чтобы, при его отсутствии у конечного пользователя, он выгрузился в нужно нам место (не забудем путь вынести тоже в настройки). Или можно, конечно, не забыть его просто туда положить. <- Это для тех кто не захотел заморачиваться с внешними компонентами или табличкой файл.
|
|
16.09.2011, 20:39 | #13 |
Участник
|
Цитата:
Можно код привести? Например надо получить список все файлов в папке "c:\files" (интересуют только файлы, другие папки, в "c:\files" не интересуют) Каким будет код? |
|
17.09.2011, 09:55 | #14 |
Участник
|
Цитата:
Сообщение от Alex Che
Во-первых, bat-файл делать не обязательно, можно прямо в коде вставить
Код: RC := SHELL ('c:\windows\system32\command.com','/c', 'dir c:\temp > c:\out.txt'); //Работает! Во-вторых, у меня при пустой папке в результате получается не ноль, а вот что: И shell - это УЖЕ запущенный командный интерпретатор. Второй раз комманд.ком вызывать не за чем. Вероятно, можно просто тупо одну команду dir написать. Не проверял, но должно работать. Только ты ключик "слеш бэ" забыл добавить. У меня он есть, поэтому файл и нулевой. ЗЫ: А вообще, совершенно неожиданно, получилось вполне себе "изящное" решение поиска файлов. В одну строку |
|
17.09.2011, 10:21 | #15 |
Участник
|
Не Извиняюсь.
Проверил. Тупо dir не работает, оказывается. Должен быт путь к железно существующему файлу. |
|
17.09.2011, 10:46 | #16 |
Участник
|
|
|
17.09.2011, 10:55 | #17 |
Участник
|
Блин.
Вот теперь точно - САМАЯ-САМАЯ. Однострочная! Код: SHELL(ENVIRON('comspec'), '/c dir /b c:\*.* > c:\out.txt'); |
|
17.09.2011, 11:21 | #18 |
Участник
|
С утра так очарован и увлёкся шеллом, что получилось вот что:
Код: SHELL(ENVIRON('comspec'), '/c del "'+ENVIRON('appdata')+'\*.zup"'); Теперь повешу им на кнопку в главном меню, чтобы отстали Для тех, кто понял для чего это - пользуйтесь! Дарю! ЗЫ: Андрюха тоже этот вопрос решал, но более громоздко http://www.apanko.ru/showthread.php?t=1473 |
|
17.09.2011, 14:09 | #19 |
Участник
|
Цитата:
что-бы получить список ТОЛьКО файлов команда DIR не годится, т.к. выдаёт всё содержимое (и файлы, и папки). Как получить список ТОЛьКО файлов? Если с таблицей FILE, то как? |
|
17.09.2011, 21:55 | #20 |
Участник
|
//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. |
|