Отображение Attach в представлении

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

  1. mazimaz

    mazimaz Member

    Регистрация:
    2 окт 2009
    Сообщения:
    14
    Симпатии:
    0
    Ребята помогите:
    Есть форма, в которой существуют поля (RTF) - "D", "D1","D2","D3", вопрос?
    Как отобразить в представлении название вложения или хотя бы по каждому полю (есть ли вложение в конкретном поле или нет? меткой).
    Пробовал сам писать агент-ничего не получается :(
    Нужно перебрать в форме все обьекты по всем полям.
    Помогите в написании агента?
     
  2. morpheus

    morpheus скриптописец

    Регистрация:
    7 авг 2006
    Сообщения:
    3.927
    Симпатии:
    0
    @AttachmentNames
     
  3. mazimaz

    mazimaz Member

    Регистрация:
    2 окт 2009
    Сообщения:
    14
    Симпатии:
    0
    Я пробовал использовать эту функцию, но нужно создать агент который пробежиться по всем существующим документам (по всем четерём полям в форме) и отобразить по каждому полю заполненность, не получается
    Можно попробывать "Если в поле найдёт вложение (объект)", то заполнить поле (пустое рядом стоящее на "1"). :( Нюбик
     
  4. nvyush

    nvyush Lotus team
    Lotus team

    Регистрация:
    22 апр 2009
    Сообщения:
    2.317
    Симпатии:
    0
    "Рядом стоящее" оно в форме, в документе лучше ориентироваться на имя. Т.е. если поля с вложениями называются "D", "D1" ..., то поля с признаками наличия вложения назвать, например "FD", "FD1" ... .

    Посмотрите в справке про классы NotesDocument, NotesDocumentCollection, NotesRichTextItem, имеющихся там примеров должно быть достаточно для решения данной задачи.
     
  5. mazimaz

    mazimaz Member

    Регистрация:
    2 окт 2009
    Сообщения:
    14
    Симпатии:
    0
    Ну Вот что Я придумал :(,
    Sub Click(Source As Button)
    Dim session As New notessession
    Dim workspace As New NotesUIWorkspace
    Dim uidoc As NotesUIDocument
    Dim namefield As String
    Dim namefield(8) As String
    names(0)= "D0"
    names(1)= "D1"
    names(2)= "D2"
    names(3)= "D3"
    names(4)= "D4"
    names(5)= "D5"
    names(6)= "D6"
    names(7)= "D7"
    names(8)= "D8"
    Do i1=1 to UBound(namefield,2) - Ошибка ???
    Set rt =doc.getfiestitem(names(i1))
    i=o
    Forall v1 In V
    i=it1
    End
    End Forall
    doc.nrt=i
    End Sub
    Что дальше??

    Этим скриптом Я хочу перебрать в форме поля (D0,D1,D2...D8 RTF) и:
    - если в поле D0
    - если в поле D1.... и тд.
    есть фложение, то рядом у каждого (D0, D1, ......D8) передать значение полю RD0,RD1,RD2,......RD8, "1"
    А потом просто отображать в представлении значения полей RD..,"0" и "1"
    Что не так поправте.


    Добавлено: Ну Вот что Я придумал smile.gif, Посмотрите???

    Sub Click(Source As Button)
    Dim session As New notessession
    Dim workspace As New NotesUIWorkspace
    Dim uidoc As NotesUIDocument
    Dim namefield As String
    Dim namefield(8) As String
    names(0)= "D0"
    names(1)= "D1"
    names(2)= "D2"
    names(3)= "D3"
    names(4)= "D4"
    names(5)= "D5"
    names(6)= "D6"
    names(7)= "D7"
    names(8)= "D8"
    Do i1=1 to UBound(namefield,2) - Ошибка ???
    Set rt =doc.getfiestitem(names(i1))
    i=o
    Forall v1 In V
    i=it1
    End
    End Forall
    doc.nrt=i
    End Sub
    Что дальше??

    Этим скриптом Я хочу перебрать в форме поля (D0,D1,D2...D8 RTF) и:
    - если в поле D0
    - если в поле D1.... и тд.
    есть фложение, то рядом у каждого (D0, D1, ......D8) передать значение полю RD0,RD1,RD2,......RD8, "1"
    А потом просто отображать в представлении значения полей RD..,"0" и "1"
    Что не так поправте.
     
  6. nvyush

    nvyush Lotus team
    Lotus team

    Регистрация:
    22 апр 2009
    Сообщения:
    2.317
    Симпатии:
    0
    <div class="sp-wrap"><div class="sp-head-wrap"><div class="sp-head folded clickable">Раскрывающийся текст</div></div><div class="sp-body"><div class="sp-content">
    Код (LotusScript):
    Dim fieldNames(8) As String
    fieldNames(0)= "D0"
    ...
    fieldNames(8)= "D8"
    Forall fieldName in fieldNames
    Set rt =doc.getfiestitem(fieldName)
    If Isempty(rt.EmbeddedObjects) Then
    doc.ReplaceItemValue("R" + fieldName, "0")
    Else
    doc.ReplaceItemValue("R" + fieldName, "1")
    End IF
    End Forall
    doc.Save True, True
    Как-то так
    P.S. Это если в рт-полях только вложения. Если там могут быть ссылки, а нужны именно вложения, то копать в сторону рт-навигатора.
     
  7. hosm

    hosm * so what *

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

    просто UBound(namefield), если описано Dim namefield(8) As String
    А Dim namefield As String переименуйте
    Внимательней:
    Код (LotusScript):
    Dim doc As NotesDocument
    Dim rtitem As Variant
    Dim Attach as String
    '....
    Set rtitem = doc.GetFirstItem(names(i1))
    Attach = "0"
    If ( rtitem.Type = RICHTEXT ) Then
    if isArray(rtitem.EmbeddedObjects) then
    Forall o In rtitem.EmbeddedObjects
    If ( o.Type = EMBED_ATTACHMENT ) Then
    Attach = "1"
    Exit Forall
    End If
    End Forall
    End If
    End If
    call doc.replaceitemvalue("R" & names(i1), Attach )
    и где-то в конце doc сохранить...
     
  8. turumbay

    Регистрация:
    13 мар 2009
    Сообщения:
    625
    Симпатии:
    2
    <div class="sp-wrap"><div class="sp-head-wrap"><div class="sp-head folded clickable">ну как-то так:</div></div><div class="sp-body"><div class="sp-content">
    Код (Text):
    Sub Initialize
    Dim ws As New NotesUIWorkspace
    Dim doc As NotesDocument
    Set doc = ws.CurrentDocument.Document

    Const FIELD_NUM = 8
    Dim i As Long
    For i = 0 To FIELD_NUM
    Call processItem( doc.GetFirstItem( "D" & i ) )
    Next
    Call doc.Save( False , False )
    End Sub
    Код (Text):
    Private Function processItem( rtitem As NotesRichTextItem )
    Dim flagFieldName As String
    Dim flagFieldValue As String
    flagFieldName = "F" + rtitem.Name
    flagFieldValue = getFlagFieldValue( hasAttachment( rtitem ) )
    Call rtitem.Parent.ReplaceItemValue( flagFieldName , flagFieldValue )
    End Function

    Private Function hasAttachment( rtitem As NotesRichTextItem ) As Boolean
    hasAttachment = False
    If ( rtitem.Type <> RICHTEXT ) Then Exit Function
    Forall eo In rtitem.EmbeddedObjects
    If ( eo.Type = EMBED_ATTACHMENT ) Then
    hasAttachment = True
    Exit Function
    End If
    End Forall 
    End Function

    Private Function getFlagFieldValue( flag As Boolean )
    ' getFlagValue = Cstr(Sgn(Clng( flag ))) ' :-)
    If flag Then
    getFlagFieldValue = "1"
    Else
    getFlagFieldValue = "0"
    End If
    End Function
     
Загрузка...

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