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

Тема в разделе "Lotus - Программирование", создана пользователем rinsk, 6 дек 2010.

  1. rinsk

    rinsk Lotus team
    Lotus team

    Регистрация:
    12 ноя 2009
    Сообщения:
    797
    Симпатии:
    78
    Сорри коллеги - может не туда гляжу...
    Нужно при экспорте узнать состояние колонки вью, которая скрывается на базе формулы.
    Можно конечно через DXL... есть другие варианты?
     
  2. nvyush

    nvyush Lotus team
    Lotus team

    Регистрация:
    22 апр 2009
    Сообщения:
    2.317
    Симпатии:
    0
    Гляньте класс NotesViewColumn, может там есть.
     
  3. hosm

    hosm * so what *

    Регистрация:
    18 май 2009
    Сообщения:
    2.450
    Симпатии:
    7
    NotesViewColumn.IsHidden ?
     
  4. rinsk

    rinsk Lotus team
    Lotus team

    Регистрация:
    12 ноя 2009
    Сообщения:
    797
    Симпатии:
    78
    Не - это если явно гылку поставить - что оно Hidden. А вот если скрывается на основе формулы, NotesViewColumn.IsHidden=False...
     
  5. rinsk

    rinsk Lotus team
    Lotus team

    Регистрация:
    12 ноя 2009
    Сообщения:
    797
    Симпатии:
    78
    Ну получил я формулы колонок...
    Код (LotusScript):
    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 в контексте базы... Ибо в формулах может быть обращение к профильным документам...
     
  6. hosm

    hosm * so what *

    Регистрация:
    18 май 2009
    Сообщения:
    2.450
    Симпатии:
    7
    передать какой-то док из БД?

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

    rinsk Lotus team
    Lotus team

    Регистрация:
    12 ноя 2009
    Сообщения:
    797
    Симпатии:
    78
    Неизвестна формула - по этому двигать профили не получится...

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

    TIA :-)
    Lotus team

    Регистрация:
    15 май 2009
    Сообщения:
    790
    Симпатии:
    0
    Контекстная БД для Evaluate определяется по переданному контекстному документу. Т.е. создайте в конкретной БД пустой NotesDocument, не сохраняя, и укажите в качестве параметра в Evaluate
     
  9. rinsk

    rinsk Lotus team
    Lotus team

    Регистрация:
    12 ноя 2009
    Сообщения:
    797
    Симпатии:
    78
    Точно - спасибо!:(
     
  10. rinsk

    rinsk Lotus team
    Lotus team

    Регистрация:
    12 ноя 2009
    Сообщения:
    797
    Симпатии:
    78
    Допиленный вариант:
    Код (LotusScript):
    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
     
Загрузка...
Похожие Темы - Hide Column Formula
  1. lionk
    Ответов:
    6
    Просмотров:
    1.945
  2. NickProstoNick
    Ответов:
    5
    Просмотров:
    3.412
  3. alik86
    Ответов:
    48
    Просмотров:
    11.573
  4. NickProstoNick
    Ответов:
    9
    Просмотров:
    3.338
  5. PavelT100
    Ответов:
    0
    Просмотров:
    1.527

Поделиться этой страницей