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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 18.09.2014, 21:54   #1  
alexb_imported is offline
alexb_imported
Участник
 
256 / 12 (1) ++
Регистрация: 25.08.2006
А использовать системную табличку File не пробовали? И для всего автоматизма настроить соответствующий Job Queue (T. 472) и повесить его выполнение на NAS?
Т.е.
1.создаёте один Codeunit для Job Queue.
2. В Codeunit'e проходитетe циклом по табличке File, находите там нужные вам XML-файлы, запускаете для каждого XML-Port (для этого процесса создать второй Codeunit) , в случае успеха/неудачи обработки каждого файла удаляете файл в папку ArchivOK или ArchivNOK.
Т.е что-то типа:
Код:
fileRec.RESET;
fileRec.SETRANGE(Path, 'C:\');
IF fileRec.FINDFIRST THEN;  // -> что-то типа нажатия клавиши F5 в Windows Explorer
fileRec.RESET;
fileRec.SETRANGE(Path, MyDirectory);
fileRec.SETRANGE("Is a file", TRUE);
fileRec.SETFILTER(Name, '*.xml);
IF fileRec.FINDSET THEN BEGIN
  REPEAT
    // обработка фаила вo втором Codeunit'e напр. по имени 'FileProcessing'
    CLEAR(FileProcessing);
    FileProcessing.SetFile(fileRec);   // передача имени фаила в codeunit для обработки оного там хмл-портом
    CLEARLASTERROR();
    COMMIT;
    IF FileProcessing.RUN() THEN BEGIN
      RENAME(fileRec.Name,'C:\ArchivOK\fileRec.Name');
    END ELSE BEGIN
      RENAME(fileRec.Name,'C:\ArchivNOK\fileRec.Name'); 
     // ... так же можно ещё Log написать типа файл такой то не обработан так => смотри GETLASTERRORTEXT
    END;
  UNTIL fileRec.NEXT = 0;
END;
Можно обoйтись и одним Codeunit'ом, если для такой небольшой функциональности тратить два жалко
Старый 19.09.2014, 10:54   #2  
Kirill.Cheremisin is offline
Kirill.Cheremisin
Участник
 
3 / 10 (1) +
Регистрация: 18.09.2014
Спасибо за совет, Алекс, он мне очень помог!

Автозапуск решил при помощи Job Queue, окно убрал запуская ХМЛ-порт через XMLPORT.IMPORT.

Следующий код поместил в codeunit, который использовал в Job Queue:

Код:
SalesSet.GET;
DirectoryInfo := DirectoryInfo.DirectoryInfo(SalesSet."Orders from Customers");
List := DirectoryInfo.GetFiles('*.XML');
enumerator := List.GetEnumerator;

WHILE enumerator.MoveNext DO
BEGIN
FileInfo := enumerator.Current;
XmlFile.OPEN(SalesSet."Orders from Customers" + FileInfo.Name);
XmlFile.CREATEINSTREAM(InputStream);
IF XMLPORT.IMPORT(XMLPORT::"Orders From Web", InputStream) THEN
BEGIN
  FileInfo.CopyTo(SalesSet."Archive Orders from Customers" + FileInfo.Name, TRUE);
  FileInfo.Delete;
END;
XmlFile.CLOSE;
END;
Старый 19.09.2014, 12:38   #3  
alexb_imported is offline
alexb_imported
Участник
 
256 / 12 (1) ++
Регистрация: 25.08.2006
Цитата:
Сообщение от Kirill.Cheremisin Посмотреть сообщение
Спасибо за совет, Алекс, он мне очень помог!
Не за что, если помог, то поставьте +1 />
Я всё-таки советую вынести обработку каждого файла из JobQueue-codeunit'а в отдельный codeunit и вызывать результат обработки посредством IF CODEUNIT.RUN() (т.е. как я уже описал). Как вы в этом новом codeunit'е эти файлы просматриваете / обрабатываете, вашим методом Dot.Net или File.таблицей, XML-Port'ом или ещё как: по барабану, главное: функциональность вынести в в отдельный codeunit и вызывать результат обработки КАЖДОГО файла посредством IF CODEUNIT.RUN(). В этом варианте программа обработает ВСЕ файлы, с положительным или отрицательным результатом, но ВСЕ.
Поверьте моему опыту: в вашем варианте JobQueue примется например за обработку 100 файлов, на 15-ом файле случится какая-нибудь ошибка (XML-Port не сможет его прочитать /обработать или при импорте заказов в NAV-таблицы случилась ошибка при INSERT'е или VALIDATE (я надеюсь вы при импорте валидируете хотя бы самые важные поля!), и.т.д. и.т.п ), ваш JobQueue на этом 15-ом файле остановится и вылетит с соотв. ошибкой и остальные файлы останутся не обработанными.
 

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

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

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

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

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