CftClub.ru
Клуб специалистов ЦФТ-Банк

Загрузка нескольких файлов на сервер из локального каталога

 
Ответить на тему    Клуб специалистов ЦФТ-Банк (IBSO) -> Справочник PL/PLUS: Функции, примеры, приёмы
Предыдущая тема :: Следующая тема  
Автор Сообщение
German
Профи


Вступление в Клуб: 25.06.2007
СообщениеСб Июн 23, 2007 11:00   Загрузка нескольких файлов на сервер из локального каталога Ответить с цитатой
Полезность: 1
Создадим две строковые переменные V_PATH_LOCAL и V_FILE_LIST, которые выведем на экранную форму,
присвоив идентификаторы PATH_LOCAL и FILE_LIST соответственно.

Далее в "Клиент-скрипт" вносим конструкцию:

Код:
Public Function Main(LastControl)
   If LastControl Is Nothing Then
      ' Действия при загрузке формы
      ' Действия при потере фокуса валидируемого контрола LastControl       
   ElseIf LastControl Is OK Then
      Set fso = CreateObject("Scripting.FileSystemObject")
      if fso.FolderExists(PATH_LOCAL) then
         Set f = fso.GetFolder(PATH_LOCAL)
         Set fc = f.Files
          ' Выберем файлы
         On Error Resume Next ' Предохранимся от ошибок
         For Each f1 in fc
            FILE_LIST = FILE_LIST & f1.name & chr(10)
         Next
         nErr = Err.Number
         Err.Clear
         On Error GoTo 0
      end if
   end If

   Main = True 'Результат валидатора (True, False, NULL)
end Function


А в "Тело" операции добавляем код:

Код:
   V_PATH_SERVER   varchar2(512);
   fName      varchar2(512);
   pos      integer;
   n_file      integer;

begin
   V_PATH_SERVER := [SYSTEM_PARAMS]::[GET]('PATH', null);

   debug_pipe('Файлы из каталога '||V_PATH_LOCAL||' загружаются на сервер в каталог '||V_PATH_SERVER , 0);
   
   n_file            := 0;
   [DOCUMENT]::[COPYFILES].idx   := 0;
   
   while V_FILE_LIST is not null loop

      pos := InStr(V_FILE_LIST, chr(10));
      if pos = 0 then
         fName      := V_FILE_LIST;
         V_FILE_LIST   := '';
      else
         fName      := substr(V_FILE_LIST, 1, pos - 1);
         V_FILE_LIST   := substr(V_FILE_LIST, pos + 1);
      end if;
   
      n_file   := n_file + 1;
      [DOCUMENT]::[COPYFILES].tbl_F$L(n_file).[SRC_NAME]   := fName;
      [DOCUMENT]::[COPYFILES].tbl_F$L(n_file).[SRC_PATH]   := V_PATH_LOCAL;
      [DOCUMENT]::[COPYFILES].tbl_F$L(n_file).[SRC_TYPE]   := false;      -- Забирать с клиента
      [DOCUMENT]::[COPYFILES].tbl_F$L(n_file).[SRC_DELETE]   := true;      -- Удалить
      [DOCUMENT]::[COPYFILES].tbl_F$L(n_file).[DST_NAME]   := fName;
      [DOCUMENT]::[COPYFILES].tbl_F$L(n_file).[DST_PATH]   := V_PATH_SERVER;
      [DOCUMENT]::[COPYFILES].tbl_F$L(n_file).[DST_TYPE]   := true;      -- На сервер
      [DOCUMENT]::[COPYFILES].tbl_F$L(n_file).[DST_DELETE]   := false;      -- Не удалять
      
       stdio.put_line_buf(' <% CALL DOCUMENT COPYFILES ' || nvl(::[SYSTEM]%id, 1) || ' %> ');
      
      debug_pipe('Загружен файл '||fName , 0);
         
   end loop;
      
   debug_pipe('Всего загружено на сервер '||n_file||' файлов' , 0);
end;


В "Свойствах" операции на закладке "Дополнительные свойства" не забудьте указать проверки при загрузке операции "Сервер, Клиент".
_________________
Homo homini
maestro
Профи


Вступление в Клуб: 12.10.2010
СообщениеЧт Окт 28, 2010 13:25    Ответить с цитатой
Полезность: Нет оценки
Решал подобную задачу тем же самым способом.
Столкнулся с проблемой: После выполнения операции Папка, из которой производилось копирование, оказалась залоченой.
Её не получается удалить до тех пор, пока не закроешь Навигатор.

Добавка в хвост скрипта
Код:

Set fso = nothing
Set f = nothing

не помогла.

Может кто-нибудь сталкивался с подобным?
Показать сообщения:   
Ответить на тему    Клуб специалистов ЦФТ-Банк (IBSO) -> Справочник PL/PLUS: Функции, примеры, приёмы Часовой пояс: GMT + 3
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Рейтинг@Mail.ru