Тема: Выгрузка документов

При стандартной выгрузке документов из архива выгружается весь файловый состав.

Как средствами API выгрузить отдельный файл из файлового состава документа?

2 (изменено: Дмитрий Гамий, 09-04-2014 16:10:33)

Re: Выгрузка документов

У интерфейса файлового состава документа (IDocFiles2) есть процедура SaveAs, которая  позволяет сохранить текущий файл под любым именем.
Вот пример кода для TechnologiCS в. 6.3

Sub TestSaveFile()
    
    Dim Files ' As IDocFiles Файловый состав документа    
    Dim FolderPath ' As String Папка в которую необходимо выгрузить файл
    
    If TcsApp.Archive.ShowModal("Выберите документ") <> 0 Then
      If Not TcsApp.Archive.IsEmpty Then
        Set Files = TcsApp.Archive.Properties("FILES").AsIDispatch    
        If Files.ShowModal("Выберите файл для выгрузки") <> 0 Then
          If Not Files.IsEmpty Then
            FolderPath = ScriptHelper.SelectFolderDialog("Выберите папку для выгрузки файла", "")
            If Not IsNull(FolderPath) Then
              If Right(FolderPath, 1) <> "\" Then
                FolderPath = FolderPath & "\"    
              End If ' If
              Call Files.SaveAs(FolderPath, 0 )
            End If            

          End If            
        End If        
        Set Files = Nothing          
      End If        
    End If
    
End Sub

Если не использовать выбор папки средствами TechnologiCS (ScriptHelper.SelectFolderDialog),  а задавать как-то по-другому, то код будет работать и на предыдущих версиях.

Спасибо сказали: kondopog20051

3 (изменено: kondopog2005, 10-04-2014 12:45:20)

Re: Выгрузка документов

Sub TMG(TCSActiveModule, TCSExecutionParams)      
'тестовый макрос альтернативной ВЫГРУЗКИ

LogObject.ScriptTimeOut = 0   

CurEvent = TCSExecutionParams.DocExecutionParams.CurrentEvent     'Текущее событие

Select Case CurEvent                                                 'Работа макроса по этапам
    Case CSDN_Const.dceBeforeUnload                                             'Этап до выгрузки
                TCSExecutionParams.DocExecutionParams.StepFlags = CSDN_Const.deSkipAllUnloadSteps 'Пропуск стандартной выгрузки и работы макроса после выгрузки             
                        
'  Определение временной папки (папки выгрузки) типа   C:\unload_docs\V19668\                      
                FileNamePath = TCSExecutionParams.DocExecutionParams.ActiveFileNamePath
                k=len(FileNamePath)-1
                Do While k>0 
                    If mid(FileNamePath,k,1)="\" Then
                    fp2=mid(FileNamePath,1,k)
                    k=0
                    Else
                    k=k-1  
                    End If
                Loop

                
'  Сохранение документа
                   Set fso = CreateObject("Scripting.FileSystemObject")
                   On Error Resume Next
                   Set fldr = fso.GetFolder(fp2)
                       If Err Then
                       Set fldr = fso.CreateFolder(fp2)
                       End If
                   On Error goto 0 
                   
                Call TCSActiveModule.SaveAs (fp2,0)     
                
'Открытие документа
                  Set Shell = CreateObject("Shell.Application")
                  Call Shell.ShellExecute(FileNamePath)                                               
                         If Err Then
                            TCSExecutionParams.ReturnCode = 1
                            TCSExecutionParams.ReturnMessage = "Не могу выполнить команду над выгруженным документом " + QuotedString(FileNamePath) +  ": " +  Err.Description + "#" + Err.Source
                            Err.Clear
                         Else
                           TCSExecutionParams.ReturnCode = 0
                           TCSExecutionParams.ReturnMessage = "Работа закончена!"   
                         End If 


        
    Case Else  
    Call TCSApp.ShowMessageBox("Ошибка", "Ни один шаг макроса по выгрузке и обновлению не отработал!")
        TCSExecutionParams.ReturnCode = 0      
        
 End Select   

End Sub

Спасибо! Получилась приблизительно такая конструкция.

Кусок "Определение временной папки" к сожалению не удачен - но не смог найти переменную, которая отвечает за папку выгрузки, назначенную пользователем в настройках TechnologiCS

Re: Выгрузка документов

kondopog2005 пишет:

Кусок "Определение временной папки" к сожалению не удачен - но не смог найти переменную, которая отвечает за папку выгрузки, назначенную пользователем в настройках TechnologiCS

Попробуйте следующие варианты: первый вариант - у интерфейса IDocCommands метод GetDefaultUnloadPath,
второй - у интерфейса приложения IOCS_Application4 метод UnloadDocsFolder .

Re: Выгрузка документов

Я только не очень понял зачем нужна альтернативная выгрузка? TechnologiCS все равно будет выгружать файлы сам (даже если здесь что-то написать).

В обработчике есть различные стадии работы (EnumDocExecutionEvent) процесса выгрузки, такими образом вы можете выполнить дополнительные операции (но не делать то что TechnologiCS и так делает, и скорей всего лучше чем в скриптах).

Использование скриптов в командах над файлами

IDocExecutionParams

DocExecutionLoadStepFlags

DocExecutionUnloadStepFlags

6

Re: Выгрузка документов

Ну я вообщем всё в первом сообщении изложил. Нужно было выгрузить 1 файл из файлового состава, при чём сделать это таким же способом ( 1 нажатие кнопки) как предусмотрено стандартными средствами.

Всё удалось реализовать с вашей помощью:
1) Действие выгрузки всех файлов из файлового состава отменяется, и кнопка такая ( для заданного типа файла) убирается.
2) Кнопка на выгрузку 1го файла работает как нужно.

Re: Выгрузка документов

Здравствуйте, а возможно ли организовать просмотр документа без выгрузки его файлового состава? И ограничить возможность сохранения документов пользователю на свой компьютер из определенного архива,т.е. просмотрел пользователь документ, закрыл, сохранить не может, к нему в папки документ не выгрузился.

Re: Выгрузка документов

Здравствуйте, а возможно ли организовать просмотр документа без выгрузки его файлового состава?

Не сильно ясно. Можно сделать превью в виде картинки, тогда точно ничего выгружаться не будет.

Для того чтобы посмотреть приложением нужен файл, а значит его нужно приложению отдать. Можно теоретически сделать защищенное хранилище (типа виртуальной файловой системы, в TechnologiCS этого нет), но все равно у приложения есть команда сохранить как, так что это только добавит немного удобства, но никак не решит проблему копирования куда либо. Это надо решать комплексно. Тут самое простое  дать пользователям терминалы без внешних носителей и ограничить сетевое взаимодействие корпоративными приложениями, либо организовать защиту рабочих мест.  Тогда пользователи просто физически не смогут скопировать файл или передать за пределы защищенной зоны.

ограничить возможность сохранения документов пользователю на свой компьютер из определенного архива,т.е. просмотрел пользователь документ, закрыл, сохранить не может, к нему в папки документ не выгрузился

Тут не сильно ясно. TechnologiCS итак разграничивает доступ к каждому документу. И не имея доступа пользователь не сможет документ просмотреть, а тем более сохранить.
Если под словом сохранить имеется ввиду все таки выгрузка на локальный диск, то  мы приходим к ситуации выше.

Что вы пытаетесь реализовать?

Re: Выгрузка документов

Олег Зырянов пишет:

Что вы пытаетесь реализовать?

Пытаемся реализовать пожелания клиента, чтобы его КД никто никуда никак и никогда не мог сохранить к себе. По ответу все понятно, спасибо. Будем организовывать им отдельный архив со строгой организацей доступа. Попытки как то ограничить папку выгрузки - результата не дают- только работе мешают.

Re: Выгрузка документов

Пытаемся реализовать пожелания клиента, чтобы его КД никто никуда никак и никогда не мог сохранить к себе.

Ну это только комплексная защита компьютера и сети. Напрямую из TechnologiCS это никак не решить.