|
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, 23:28 | #3 |
Участник
|
|
|
15.09.2011, 18:02 | #4 |
Участник
|
Не на то ответил, это только для конкретного файла. А сообщение удалить нельзя.
[Ok :=] File.EXISTS(Name) |
|
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, 16:56 | #9 |
Участник
|
Виртуальная таблица File тоже подойдет.
|
|
16.09.2011, 20:39 | #10 |
Участник
|
Цитата:
Можно код привести? Например надо получить список все файлов в папке "c:\files" (интересуют только файлы, другие папки, в "c:\files" не интересуют) Каким будет код? |
|
16.09.2011, 16:55 | #11 |
Участник
|
Цитата:
Цитата:
Сообщение от 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, 18:05 | #12 |
Участник
|
Эту константу выводим в настройки и пишем что хотим. За одном в настройках нужно сохранить этот замечательный файл, чтобы, при его отсутствии у конечного пользователя, он выгрузился в нужно нам место (не забудем путь вынести тоже в настройки). Или можно, конечно, не забыть его просто туда положить. <- Это для тех кто не захотел заморачиваться с внешними компонентами или табличкой файл.
|
|
19.09.2011, 10:24 | #13 |
Участник
|
Цитата:
Сообщение от InTacto
Эту константу выводим в настройки и пишем что хотим. За одном в настройках нужно сохранить этот замечательный файл, чтобы, при его отсутствии у конечного пользователя, он выгрузился в нужно нам место (не забудем путь вынести тоже в настройки). Или можно, конечно, не забыть его просто туда положить. <- Это для тех кто не захотел заморачиваться с внешними компонентами или табличкой файл.
Справка говорит о том, что только константы работают без подтверждения: Цитата:
The SHELL function has been designed so that each user can create a list of trusted executables. This list is maintained in the user’s .zup file. The way this function works depends on whether the executable is given as a text constant or as a variable.
If the name of the executable is passed to the SHELL function as a text constant then the executable is trusted and the user is not prompted to confirm that they trust the executable. This is also the case when the executable (text constant) is called with a number of other arguments that have been assigned manually. If the name of the executable is passed to the SHELL function as a variable then the executable is not trusted and the user is prompted to confirm whether they trust the executable the first time it is called. After the user has confirmed that they trust the executable it can be called again at any time without having to confirm that it is trusted. |
|
20.09.2011, 15:41 | #14 |
Участник
|
За это не знал. В 5 требует подтверждения, если не константы.
|
|
16.09.2011, 15:48 | #15 |
Участник
|
Во-первых, 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 Ў ©в бў®Ў®¤® |
|
17.09.2011, 09:55 | #16 |
Участник
|
Цитата:
Сообщение от Alex Che
Во-первых, bat-файл делать не обязательно, можно прямо в коде вставить
Код: RC := SHELL ('c:\windows\system32\command.com','/c', 'dir c:\temp > c:\out.txt'); //Работает! Во-вторых, у меня при пустой папке в результате получается не ноль, а вот что: И shell - это УЖЕ запущенный командный интерпретатор. Второй раз комманд.ком вызывать не за чем. Вероятно, можно просто тупо одну команду dir написать. Не проверял, но должно работать. Только ты ключик "слеш бэ" забыл добавить. У меня он есть, поэтому файл и нулевой. ЗЫ: А вообще, совершенно неожиданно, получилось вполне себе "изящное" решение поиска файлов. В одну строку |
|
17.09.2011, 10:21 | #17 |
Участник
|
Не Извиняюсь.
Проверил. Тупо dir не работает, оказывается. Должен быт путь к железно существующему файлу. |
|
17.09.2011, 10:46 | #18 |
Участник
|
|
|
17.09.2011, 10:55 | #19 |
Участник
|
Блин.
Вот теперь точно - САМАЯ-САМАЯ. Однострочная! Код: SHELL(ENVIRON('comspec'), '/c dir /b c:\*.* > c:\out.txt'); |
|
17.09.2011, 11:21 | #20 |
Участник
|
С утра так очарован и увлёкся шеллом, что получилось вот что:
Код: SHELL(ENVIRON('comspec'), '/c del "'+ENVIRON('appdata')+'\*.zup"'); Теперь повешу им на кнопку в главном меню, чтобы отстали Для тех, кто понял для чего это - пользуйтесь! Дарю! ЗЫ: Андрюха тоже этот вопрос решал, но более громоздко http://www.apanko.ru/showthread.php?t=1473 |
|