Библиотека скриптов процесса фильтрации - PullRequest
0 голосов
/ 28 февраля 2011

У меня есть форма с именем Approver в базе данных "Approver".

Форма имеет два редактируемых текстовых поля: Офис и Группа ,В нем также есть поле списка диалога superior1 .

В поле списка диалога superior1 должны отображаться сведения о сотрудниках, отфильтрованные по офису и группе:

если office = TSP & group = HR из формы утверждающего, то следует отфильтровать персонал на основе этих полей группы "&" office "с представлением" Информация о персонале "другой базы данных" TSP_Staff "и показать в superior1 .

Но он не фильтруется для меня. :(

Я новичок в этой технологии, поэтому я запутался, и мне не с кем помочь. Это сценарий, который я использовал:

для поля superior1:

Sub Entering(Source As Field)
    Dim s As New NotesSession
    Dim db As NotesDatabase
    Dim view As NotesView
    Dim uidoc As NotesUIDocument
    Dim doc As Notesdocument
    Dim work As  New NotesUIWorkspace
    Dim workspace As  New NotesUIWorkspace
    Dim sname As String
    Dim consr As String
    Dim cview As notesview

    Set db = s.CurrentDatabase
    Set uidoc = work.CurrentDocument
    Set uidocs = workspace.currentdocument  
    Set cview = db.getview("(Application)")

    'etype = uidoc.FieldGetText("Office") 
    'ftype = uidoc.FieldGetText("Group") 

    etype = "TSP"
    ftype = "TSP1-G"

    If(etype <> "" And ftype <> "")  Then
        Call filter  
    End If

    Set view = db.getview("(x_search_staff)")
    Set doc = view.GetDocumentByKey (uidoc.fieldgettext("Superior1"),True)

    If doc Is Nothing Then
        Msgbox "There is no previous transaction please select new trasaction.", 16, "Information"
        Call uidoc.FieldClear("Superior1")
        Call uidoc.gotofield ("Group")
        Call uidoc.gotofield ("Office")
        continue = False
        Exit Sub
    End If

    Call uidoc.Refresh 
End Sub

из библиотеки сценариев ...

Sub filter
    Dim s As New notessession
    Dim w As New notesuiworkspace
    Dim uidoc As notesuidocument
    Dim doc As notesdocument, newdoc As notesdocument, d As notesdocument, dd As notesdocument
    Dim doc1 As NotesDocument, newdoc1 As NotesDocument
    Dim dc As notesdocumentcollection
    Dim bc As notesdocumentcollection
    Dim view As notesview, v As notesview
    Dim db As notesdatabase
    Dim nextdoc As NotesDocument
    Dim cview As notesview
    Dim cnview As NotesView
    Dim get_db As New notesdatabase(gsserver2, gspath2 & "Master\TSP_Staff.nsf")

    Set db = s.currentdatabase

    Set view = get_db.getview("(Staff Info)")
    Set cview = db.getview("(x_search_staff)")
    Set cnview = db.getview("(x_superior)")
    Set uidoc=w.CurrentDocument 

    'To delet searched previous datas from form2 ----------------------------------------
    Print "Please wait ..."

    key = "Approver2"
    Set v = db.getview("(x_delete_2)")
    Set dc = v.GetAlldocumentsByKey(key,True)
    'Set bc = v.GetAlldocumentsByKey(key,True)

    'Call bc.RemoveAll(True)
    Call dc.RemoveAll(True)
    Call cview.Refresh

    Call view.Refresh
    Call cnview.Refresh
    Call v.Refresh

    'To start searching process based on Superior1 --------------------------------------

    'f1= uidoc.FieldGetText("Office") 
    f1= uidoc.FieldGetText("Group") 
    'f1 = "TSP1-G"

    Set dc = view.getalldocumentsbykey(f1, True) 
    'Set bc = view.getalldocumentsbykey(f2, True)

    For b =1 To dc.count
        Set doc = dc.getnthdocument(b)
        Set newdoc = doc.copytodatabase(db)
        'For c =1 To bc.count
        'Set doc1 = bc.getnthdocument(b)
        'Set newdoc1 = doc.copytodatabase(db)


        If doc.form(0) = "Approver" Then
        'If doc1.form(0) = "Approver" Then
            newdoc.form = "Approver2"
            'newdoc1.form = "Approver2"
            'End If 

        End If 
        newdoc.save True, True 
         ' Next
         'newdoc.save True, True
         'Next

        Call w.viewrefresh
        Call cview.Refresh
        Call v.Refresh
        Call cnview.Refresh
        Call view.Refresh

        Print "Process Completed....."
End Sub

, если у вас есть другой способ выполнить это требование в пошаговом режиме... или еще ... chk out ma script для ошибок ... надеюсь, вы поможете мне :( сегодня срок выполнения этой задачи ...

Ответы [ 2 ]

0 голосов
/ 09 мая 2011

За вашим кодом очень трудно следовать, но если я пойму ваше намерение и части функции filter (она даже компилируется?), Вы можете заменить весь код этим @ dblookup - на основе формулы в разделе «Использовать формулу для выбора» superior1 свойства:

@dblookup("":"ReCache";"ServerName":"foo\Master\TSP_Staff.nsf";"(Staff Info)";Group;NameOfInterestingField);

Возможно, вы захотите добавить @ sort и / или @ unique вокруг него, если представление содержит повторяющиеся значения, и вы можете добавить ключевое слово [FAILSILENT ] если некоторые группы должны привести к пустому списку.

Еще более простой способ может состоять в том, чтобы настроить superior1 на использование диалогового окна просмотра для выбора .

0 голосов
/ 28 февраля 2011

Я не уверен, насколько разумно фильтровать документы, показанные в представлении, удаляя документы из базы данных:)

Мое предложение - сначала правильно опубликовать код. Это просто нечитабельно.

Как отобразить только подмножество документов в вашем диалоговом списке?

Создайте скрытое поле в вашей форме (вы заполните его значениями, которые вы хотите отобразить в списке, используя ваш код). А затем в свойствах полей диалогового списка на второй вкладке установите для параметра «Варианты» значение «Использовать формулу для вариантов» и задайте для него имя скрытого поля.

Спросите, нужна ли вам дополнительная помощь ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...