• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

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

    Запись на курс до 25 апреля. Получить промодоступ ...

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

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

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 941
609
BIT
214
вот (по варианту 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 941
609
BIT
214
поправил код выше и вот:
обратить внимание на разделитель путей ("/" - кроссплатформенно)
 
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 941
609
BIT
214
внес доп. изменения path=Replace(GetNotesTempDirectory(),{\},{/}) & {/}

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



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

Darker

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

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

Akupaka

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

lmike

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

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

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

Darker

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

nvyush

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

lmike

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

Darker

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


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

lmike

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

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