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

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

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

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

Экспорт выделенных документов в Xml

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

DFO

Помогите, я новичек в Lotus'e. Нужно сделать следующее:
В базе данных выделяю галочками нужные документы для экспорта.
Создаю кнопку и при нажатии на кнопку выделенные документы должны экспортироватся в xml формат.
Как это сделать на Lotus Script? может ктото скинуть код.
И если не сложно скиньте код для импорта этих созданных xml документов обратно в базу.
 
A

alik86

Гляньте в дизайнерском хелпе примеры на NotesDXLImporter и CreateDXLExporter - почти то что надо.
Только вот если вы полный новичек в лотусе, то, как мне так кажется, не с того начинаете его освоение.
 
D

DFO

Спасибо большое=)
С Экспортом xml разобрался, остался импорт
 
A

alik86

Быстро Вы.
А тут Вам поможет NotesDXLImporter. ;)
ПримерчЫк:
Код:
Dim Session As New NotesSession
Dim Wsp As New NotesUIWorkspace
Dim db As NotesDatabase
Dim Stream As NotesStream 
Dim DXLImporter As NotesDXLImporter

filename$ = "D:\DXL\FileName.xml"
Set Db = Session.CurrentDatabase
Set Stream = Session.CreateStream 
If Not Stream.Open(filename$) Then
Messagebox "Невозможно открыть файл " & filename$,, "Ошибка"
Exit Sub
End If
Set DXLImporter = Session.CreateDXLImporter(stream, Db)
%REM
Dim values(5) As Variant
values(0) = DXLIMPORTOPTION_IGNORE
values(1) = DXLIMPORTOPTION_CREATE
values(2) = DXLIMPORTOPTION_REPLACE_ELSE_IGNORE
values(3) = DXLIMPORTOPTION_REPLACE_ELSE_CREATE
values(4) = DXLIMPORTOPTION_UPDATE_ELSE_IGNORE
values(5) = DXLIMPORTOPTION_UPDATE_ELSE_CREATE
Dim DocImportOption As Variant
Set DocImportOption = Wsp.Prompt (PROMPT_OKCANCELLIST, "Выбор DocumentImportOption", "Выбирай:", values(0), values)
%ENDREM
DXLImporter.DocumentImportOption = DXLIMPORTOPTION_REPLACE_ELSE_IGNORE
DXLImporter.Process
Msgbox "Готово! Документ " & filename$ & " импортирован."
End Sub
 

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 940
609
BIT
210
ну яб еще убрал абсолютные пути и юзал временные файлы (а то коряенько как-то)
 
A

alik86

lmike, ну дык это ж просто примерчик... ;)
 
D

DFO

Получилось=)
только вот вопрос, что это?:
%REM
Dim values(5) As Variant
values(0) = DXLIMPORTOPTION_IGNORE
values(1) = DXLIMPORTOPTION_CREATE
values(2) = DXLIMPORTOPTION_REPLACE_ELSE_IGNORE
values(3) = DXLIMPORTOPTION_REPLACE_ELSE_CREATE
values(4) = DXLIMPORTOPTION_UPDATE_ELSE_IGNORE
values(5) = DXLIMPORTOPTION_UPDATE_ELSE_CREATE
Dim DocImportOption As Variant
Set DocImportOption = Wsp.Prompt (PROMPT_OKCANCELLIST, "Выбор DocumentImportOption", "Выбирай:", values(0), values)
%ENDREM

Только при импорте почемуто он заменяет старые документы, а не создает новые. Да еще и работает только с верхним уровнем документов, а с дочерними отказывается работать( пишет что импортировано но документ не заменяется(
 
A

alik86

Коментарий ;).
Делал когда постигал премудрости импорта, вот и пробовал разные DXLIMPORTOPTION.
Только при импорте почемуто он заменяет старые документы, а не создает новые.
А вот для этого и служит DXLIMPORTOPTION.
 
D

DFO

Коментарий ;).
Делал когда постигал премудрости импорта, вот и пробовал разные DXLIMPORTOPTION.

А вот для этого и служит DXLIMPORTOPTION.
Все, пофиксил, огроменное спасибо) если бы не помоги сидел бы я до 3го прихода=)
 
D

DFO

Осталась последняя проблема, которую не могу решить, импорт файлов
Код:
Sub Click(Source As Button)
Dim Session As New NotesSession
Dim Wsp As New NotesUIWorkspace
Dim db As NotesDatabase
Dim Stream As NotesStream 
Dim DXLImporter As NotesDXLImporter
Dim i As Integer
Dim swch As Boolean
swch = True
i = 0
While swch = True
filename$ = "D:\Temp\Document" & i+1 & ".xml"
Set Db = Session.CurrentDatabase
Set Stream = Session.CreateStream 
If Not Stream.Open(filename$) Then
swch = False
Messagebox "Импорт файлов завершен"
Exit Sub
End If
Set DXLImporter = Session.CreateDXLImporter(stream, Db)
DXLImporter.DocumentImportOption = DXLIMPORTOPTION_REPLACE_ELSE_CREATE
DXLImporter.Process
i = i + 1
Wend
Msgbox "Готово! Все документы импортированы."
End Sub
Как сделать теперь так, чтобы сохранить иерархию документов.т.е. чтобы после импорта дочерние и родительские документы сохранили свою иерархию.
Ибо после экспорта и импорта, только самые верхние документы импортируются, дочерние теряют свою иерархию.
 

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 940
609
BIT
210
я не знаю как при импорте..., возможно что чайлды без парента становятся новыми доками
у вас последовательность соблюдена, при импорте ?
 

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 940
609
BIT
210
очередь откуда берется? не факт, что экпорт осущ. в порядке соответ. иерархии
 
D

DFO

Код:
Sub Click(Source As Button)
Dim session As New NotesSession
Dim db As NotesDatabase
Dim strm As NotesStream
Dim doc As NotesDocument
Dim col As Notesdocumentcollection
Dim i As Integer
Dim ex As NotesDXLExporter
i = 0
Set db = session.CurrentDatabase
Set col=db.UnprocessedDocuments
Set doc = col.GetFirstDocument
While i < db.UnprocessedDocuments.Count
Set strm=session.CreateStream
file$="d:\Temp\Document" & i+1 & ".xml"
Call strm.Open(file$)
Call strm.Truncate
Set ex = session.CreateDXLExporter(doc ,strm)
i = i + 1
Call ex.Process
Call strm.Close
Set doc=col.GetNextDocument(doc)
Wend
Messagebox"Созданно " & i & " xml файла"
End Sub
Можно ли какнибудь сделать из этого кода экспорта, чтобы он при экспорте, если выделен галочкой дочерний документ то он проверял бы выделен ли родительский если нет выдовал сообщение: "Для экспорта выделен дочерний докумен, для экспорта требуется выделить и родительский" и выдовал варианты ответов выделить или нет. если нет то дочерний документ игнорируется если да, то ставится галочка выделения напротив родительского и дочерний экспортируется вместе с родительским.
 
T

turumbay

Можно ли какнибудь сделать из этого кода экспорта, чтобы он при экспорте, если выделен галочкой дочерний документ то он проверял бы выделен ли родительский если нет выдовал сообщение: "Для экспорта выделен дочерний докумен, для экспорта требуется выделить и родительский" и выдовал варианты ответов выделить или нет. если нет то дочерний документ игнорируется если да, то ставится галочка выделения напротив родительского и дочерний экспортируется вместе с родительским.
Получить родителя: Set parentDoc = doc.ParentDatabase.GetDocumentByUNID( doc.ParentDocumentUNID )
Убрать документ из коллекции: collection.deleteDocument( doc )
Проверить наличие родителя в коллекции: not collection.getDocument( parentDoc ) is nothing
Поставить галочку: Call notesUIView.SelectDocument( notesdocument )
 
Мы в соцсетях:

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