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

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

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

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

Hide Column If Formula Is True - как получить в Ls?

rinsk

Lotus Team
12.11.2009
1 151
125
BIT
4
Сорри коллеги - может не туда гляжу...
Нужно при экспорте узнать состояние колонки вью, которая скрывается на базе формулы.
Можно конечно через DXL... есть другие варианты?
 
N

nvyush

Гляньте класс NotesViewColumn, может там есть.
 

rinsk

Lotus Team
12.11.2009
1 151
125
BIT
4
Ну получил я формулы колонок...
Код:
Public Class IsViewColumnHide
Public ColumnIsHide() As boolean
Public ColumnIsHideFormula() As String
%REM
Sub New
Description: Comments for Sub
%END REM
Sub New(view As NotesView)
ReDim ColumnIsHide(view.Columncount)
ReDim ColumnIsHideFormula(view.Columncount)
Dim nc As NotesNoteCollection
Dim s As New NotesSession
Dim ex As NotesDXLExporter
Dim par As NotesDOMParser
Dim db As NotesDatabase
Dim k As Integer,ret As Variant
Set db=view.Parent
Set nc =db.CreateNoteCollection(False)
Call nc.Add(view)
Set ex = s.CreateDXLExporter(nc)
Set par =s.CreateDOMParser(ex)
On Event PostDOMParse From par Call ExtractHideColumns
Call ex.Process
For k=0 To Ubound(ColumnIsHide)
If ColumnIsHideFormula(k)<>"" then
ret=Evaluate(ColumnIsHideFormula(k))
ColumnIsHide(k)=(ret(0)="1")
End if
Next
End Sub

Private Sub ExtractHideColumns(Source As NotesDOMParser)
Dim colNodeList As NotesDOMNodeList
Dim colNode As NotesDOMElementNode
Dim codeNodeList As NotesDOMNodeList
Dim codeNode As NotesDOMElementNode
Dim pnode As NotesDOMElementNode
Dim x,y
Set colNodeList=Source.Document.GetElementsByTagName("column")
For x=1 To colNodeList.NumberOfEntries
Set colNode=colNodeList.GetItem(x)
Set codeNodeList=colNode.Getelementsbytagname("formula")
For y=1 To codeNodeList.Numberofentries
Set codeNode=codeNodeList.GetItem(y)
Set pnode=codeNode.Parentnode
If pnode.Getattribute("event")="hidewhen" Then
ColumnIsHideFormula(x-1)=codeNode.Firstchild.Nodevalue
End If
Next
Next
End Sub
End Class

Теперь думаю, как выполнить Evaluate в контексте базы... Ибо в формулах может быть обращение к профильным документам...
 
H

hosm

передать какой-то док из БД?

Добавлено: тот же профайл получить и передать, например?
 

rinsk

Lotus Team
12.11.2009
1 151
125
BIT
4
передать какой-то док из БД?

Добавлено: тот же профайл получить и передать, например?

Неизвестна формула - по этому двигать профили не получится...

Походу - да... придется исполнять Evaluate в конкретной базе через .Run и возвращать результаты...
Костыль однако:(
 
T

TIA

Контекстная БД для Evaluate определяется по переданному контекстному документу. Т.е. создайте в конкретной БД пустой NotesDocument, не сохраняя, и укажите в качестве параметра в Evaluate
 

rinsk

Lotus Team
12.11.2009
1 151
125
BIT
4
Контекстная БД для Evaluate определяется по переданному контекстному документу. Т.е. создайте в конкретной БД пустой NotesDocument, не сохраняя, и укажите в качестве параметра в Evaluate

Точно - спасибо!:(
 

rinsk

Lotus Team
12.11.2009
1 151
125
BIT
4
Допиленный вариант:
Код:
Public Class IsViewColumnHide
Public ColumnIsHide() As boolean
Public ColumnIsHideFormula() As String
Sub New(view As NotesView)
ReDim ColumnIsHide(UBound(view.Columns))
ReDim ColumnIsHideFormula(UBound(view.Columns))
Dim nc As NotesNoteCollection
Dim s As New NotesSession
Dim ex As NotesDXLExporter
Dim par As NotesDOMParser
Dim db As NotesDatabase
Dim k As Integer,ret As Variant
Dim tmpdoc As NotesDocument
Set db=view.Parent
Set tmpdoc=db.Createdocument()
Set nc =db.CreateNoteCollection(False)
Call nc.Add(view)
Set ex = s.CreateDXLExporter(nc)
Set par =s.CreateDOMParser(ex)
On Event PostDOMParse From par Call ExtractHideColumns
Call ex.Process
For k=0 To Ubound(ColumnIsHide)
ColumnIsHide(k)=view.Columns(k).IsHidden
If Not ColumnIsHide(k) And ColumnIsHideFormula(k)<>"" then
ret=Evaluate(ColumnIsHideFormula(k),tmpdoc)
ColumnIsHide(k)=(ret(0)="1")
End if
Next
End Sub

Private Sub ExtractHideColumns(Source As NotesDOMParser)
Dim colNodeList As NotesDOMNodeList
Dim colNode As NotesDOMElementNode
Dim codeNodeList As NotesDOMNodeList
Dim codeNode As NotesDOMElementNode
Dim pnode As NotesDOMElementNode
Dim x as integer,y as integer
Set colNodeList=Source.Document.GetElementsByTagName("column")
For x=1 To colNodeList.NumberOfEntries
Set colNode=colNodeList.GetItem(x)
Set codeNodeList=colNode.Getelementsbytagname("formula")
For y=1 To codeNodeList.Numberofentries
Set codeNode=codeNodeList.GetItem(y)
Set pnode=codeNode.Parentnode
If pnode.Getattribute("event")="hidewhen" Then
ColumnIsHideFormula(x-1)=codeNode.Firstchild.Nodevalue
End If
Next
Next
End Sub
End Class
 
Мы в соцсетях:

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