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, 23:28   #3  
alexb_imported is offline
alexb_imported
Участник
 
256 / 12 (1) ++
Регистрация: 25.08.2006
Цитата:
Сообщение от Orwell Посмотреть сообщение
А насчёт "не только", такой вопрос: я представляю себе, как проверить существует ли какой-либо конкретный файл в конкретной папке, но что-то пока не представляю, как узнать существуют ли вообще файлы в конкретной папке?
Смотрите здесь:
Чтение файлов в директории с помощью Automation
Старый 15.09.2011, 18:02   #4  
Alex Che is offline
Alex Che
Участник
 
74 / 10 (1) +
Регистрация: 04.04.2006
Не на то ответил, это только для конкретного файла. А сообщение удалить нельзя.

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

[Ok :=] File.EXISTS(Name)
Старый 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, 16:56   #9  
Alterant is offline
Alterant
Участник
 
378 / 10 (1) +
Регистрация: 31.03.2004
Цитата:
Сообщение от AlexB Посмотреть сообщение
Цитата:
Сообщение от jopagames2 Посмотреть сообщение
Это для тех, кто не хочет морочиться с automation и виртуальной таблицей File.
А если надо просмотреть не всё содержомое в "C:\Files" (файлы и папки) а только файлы в "C:\Files"?
Для этого хорош вариант с automation.
Виртуальная таблица File тоже подойдет.
Старый 16.09.2011, 20:39   #10  
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" не интересуют)
Каким будет код?
Старый 16.09.2011, 16:55   #11  
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, 18:05   #12  
InTacto is offline
InTacto
Участник
Аватар для InTacto
 
323 / 11 (1) +
Регистрация: 09.08.2005
Цитата:
Сообщение от Alterant Посмотреть сообщение
Можно и так, но нужно учитывать, что SHELL начиная с 4-ой версии запрашивает подтверждение и под NASом работать не будет. Чтобы не запрашивала нужно 'c:\list.bat' объявить как текстовую константу, но тогда мы жестко привязаны к имени файла.
Эту константу выводим в настройки и пишем что хотим. За одном в настройках нужно сохранить этот замечательный файл, чтобы, при его отсутствии у конечного пользователя, он выгрузился в нужно нам место (не забудем путь вынести тоже в настройки). Или можно, конечно, не забыть его просто туда положить. <- Это для тех кто не захотел заморачиваться с внешними компонентами или табличкой файл.
Старый 19.09.2011, 10:24   #13  
Alterant is offline
Alterant
Участник
 
378 / 10 (1) +
Регистрация: 31.03.2004
Цитата:
Сообщение от InTacto Посмотреть сообщение
Цитата:
Сообщение от Alterant Посмотреть сообщение
Можно и так, но нужно учитывать, что SHELL начиная с 4-ой версии запрашивает подтверждение и под NASом работать не будет. Чтобы не запрашивала нужно 'c:\list.bat' объявить как текстовую константу, но тогда мы жестко привязаны к имени файла.
Эту константу выводим в настройки и пишем что хотим. За одном в настройках нужно сохранить этот замечательный файл, чтобы, при его отсутствии у конечного пользователя, он выгрузился в нужно нам место (не забудем путь вынести тоже в настройки). Или можно, конечно, не забыть его просто туда положить. <- Это для тех кто не захотел заморачиваться с внешними компонентами или табличкой файл.
А как вы константы в настройки выводите? Поля и переменные раньше не прокатывали - все равно спрашивает подтверждение, или сейчас уже работают?
Справка говорит о том, что только константы работают без подтверждения:

Цитата:
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  
InTacto is offline
InTacto
Участник
Аватар для InTacto
 
323 / 11 (1) +
Регистрация: 09.08.2005
Цитата:
Сообщение от Alterant Посмотреть сообщение
А как вы константы в настройки выводите? Поля и переменные раньше не прокатывали - все равно спрашивает подтверждение, или сейчас уже работают?
Справка говорит о том, что только константы работают без подтверждения:
За это не знал. В 5 требует подтверждения, если не константы.
Старый 16.09.2011, 15:48   #15  
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), факт, что там в любом случае есть текст, который нужно анализировать
Старый 17.09.2011, 09:55   #16  
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   #17  
jopagames2 is offline
jopagames2
Участник
 
151 / 11 (1) +
Регистрация: 11.02.2010
Не Извиняюсь.
Проверил. Тупо dir не работает, оказывается.
Должен быт путь к железно существующему файлу.
Старый 17.09.2011, 10:46   #18  
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   #19  
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   #20  
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
 

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра
Комбинированный вид Комбинированный вид

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

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

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 01:48.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.