• Курсы Академии Кодебай, стартующие в мае - июне, от команды The Codeby

    1. Цифровая криминалистика и реагирование на инциденты
    2. ОС Linux (DFIR) Старт: 16 мая
    3. Анализ фишинговых атак Старт: 16 мая Устройства для тестирования на проникновение Старт: 16 мая

    Скидки до 10%

    Полный список ближайших курсов ...

Быстрый способ сохранить все вложения из выделенных документов

  • Автор темы phantom76
  • Дата начала

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 947
609
BIT
246
вот (по варианту Darker) как-то так, для одного дока:
Код:
Function DetachDocFiles(objdoc As NotesDocument, filter As String, filesList List As String) As String
Dim file As String, path As String
Dim fNames As Variant
Dim o As NotesEmbeddedObject

On Error Goto ErrorHandler
Erase filesList

path=Replace(GetNotesTempDirectory(),{\},{/}) & {/}
file=""

fNames=Evaluate("@AttachmentNames(0)", objdoc)
Dim detach As Boolean
Forall a In fNames
Set o=objdoc.GetAttachment(a)
detach=True
If (filter<>"") Then
If Not (Lcase(o.Name) Like filter) Then
detach=False
End If
End If
If detach Then
file=o.Name
filesList(file)=path
Call o.ExtractFile(path & file)
End If
End Forall
If file<>"" Then DetachDocFiles=path & file
Quit:
Exit Function
ErrorHandler:
Call RaiseError()
Erase filesList
Resume Quit
End Function

Добавлено: к path можно добавлять unid
 

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 947
609
BIT
246
поправил код выше и вот:
обратить внимание на разделитель путей ("/" - кроссплатформенно)
 
D

Darker

немного подправил код Imike
Код:
Function DetachDocFiles(objdoc As NotesDocument, filter As String) As String
Dim file As String, path As String
Dim fNames As Variant
Dim o As NotesEmbeddedObject
On Error Goto ErrorHandler

'Это можно вынести за цикл коллекции
'path=GetNotesTempDirectory()

fNames=Evaluate("@AttachmentNames(0)", objdoc)
Dim detach As Boolean
Forall a In fNames
Set o=objdoc.GetAttachment(a)
file=o.Name
If Iselement(filesList(file)) Then filesList(file)=filesList(file)+1: file=Cstr(filesList(file))+"_"+file' для повторов
If (filter<>"") And (Not (Lcase(o.Name) Like filter)) Then
Call o.ExtractFile(path+file)
'Exit Forall а как же остальные аттачи?
End If
End Forall
If file<>"" Then DetachDocFiles=path & file
Quit:
Exit Function
ErrorHandler:
'	Call RaiseError()
Erase filesList
Resume Quit
End Function
 
D

Darker

RAJ, предполагалось что она глобальная и была описана вне коллекции, зачем ее постоянно определять в цикле
 

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 947
609
BIT
246
внес доп. изменения path=Replace(GetNotesTempDirectory(),{\},{/}) & {/}

Добавлено:
тогда корректнее сделать ее параметром функции
именно - или не трогать (оставить как написал :) )



Добавлено:
'Exit Forall а как же остальные аттачи?
выдирал код из др. ф-ции - остались хвосты :newconfus:
 
D

Darker

тогда корректнее сделать ее параметром функции
По мне, передавать в качестве параметра всякий хлам.....
А если другая функция(процедура) будет нуждаться в path

P.S. filter тоже надо было сделать глобальной
 
A

Akupaka

Darker
глобализация - вредный процесс, как в экономике и политике, так и в программировании
 

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 947
609
BIT
246
иногда накладными расходами (время исполнения, память) можно пренебречь, а вот отлаживать код с глобальными переменными - это "цирк с конями"
выносить filter, в ф-ции общего назначения - это нонсенс

Добавлено:
представляю процедуру call mySub(var1,var2,var3,........,var30), и где-то не совпадение типов
строгой типизацией не пробовали пользоваться? :)

а еще есть понятия необходимого и достаточного кол-ва аргументов, и корректного разбиения кода на блоки
рефакторинг (есть такое понятие)
 
D

Darker

lmike, нужно заменить 19-й параметр из процедуры, сидеть и считать?
 
N

nvyush

Darker
А зачем создавать процедуры с тридцатью параметрами? Если число параметров переваливает за разумные пределы, не лучше ли передавать ссылку на объект класса, а необходимые значения указывать в его свойствах?
 

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 947
609
BIT
246
nvy
я пытаюсь подвести к такой мысли :)
 
D

Darker

я ведь образно... зря указал предел))), думал так внушительнее
nvy, поддерживаю


Akupaka, не было бы моего листинга, не стал бы спорить со старожилами)))
 

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 947
609
BIT
246
If (filter<>"") And (Not (Lcase(o.Name) Like filter)) Then Call o.ExtractFile(path+file) 'Exit Forall а как же остальные аттачи? End If
и вот в этом куске - не будет выгружаться если фильтр пустой - а это плохо, фильтр для шаблонов отличных от "*", хотя и его позволяет (но like в цикле лишне делать)...
др. словами - излишняя оптимизация, кот. регресивно скажется на производительности
притом - не следует закладываться на оптимизацию if в LDN
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!