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

02.10.2009
14
0
#1
Ребята помогите:
Есть форма, в которой существуют поля (RTF) - "D", "D1","D2","D3", вопрос?
Как отобразить в представлении название вложения или хотя бы по каждому полю (есть ли вложение в конкретном поле или нет? меткой).
Пробовал сам писать агент-ничего не получается :(
Нужно перебрать в форме все обьекты по всем полям.
Помогите в написании агента?
 
02.10.2009
14
0
#3
Я пробовал использовать эту функцию, но нужно создать агент который пробежиться по всем существующим документам (по всем четерём полям в форме) и отобразить по каждому полю заполненность, не получается
Можно попробывать "Если в поле найдёт вложение (объект)", то заполнить поле (пустое рядом стоящее на "1"). :( Нюбик
 

nvyush

Lotus team
22.04.2009
2 317
0
#4
"Если в поле найдёт вложение (объект)", то заполнить поле (пустое рядом стоящее на "1")
"Рядом стоящее" оно в форме, в документе лучше ориентироваться на имя. Т.е. если поля с вложениями называются "D", "D1" ..., то поля с признаками наличия вложения назвать, например "FD", "FD1" ... .

Посмотрите в справке про классы NotesDocument, NotesDocumentCollection, NotesRichTextItem, имеющихся там примеров должно быть достаточно для решения данной задачи.
 
02.10.2009
14
0
#5
"Рядом стоящее" оно в форме, в документе лучше ориентироваться на имя. Т.е. если поля с вложениями называются "D", "D1" ..., то поля с признаками наличия вложения назвать, например "FD", "FD1" ... .

Посмотрите в справке про классы NotesDocument, NotesDocumentCollection, NotesRichTextItem, имеющихся там примеров должно быть достаточно для решения данной задачи.
Ну Вот что Я придумал :(,
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"
Что не так поправте.
 

nvyush

Lotus team
22.04.2009
2 317
0
#6
<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">
Код:
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. Это если в рт-полях только вложения. Если там могут быть ссылки, а нужны именно вложения, то копать в сторону рт-навигатора.
 

hosm

* so what *
18.05.2009
2 442
6
#7
Dim namefield As String
Dim namefield(8) As String
так нельзя - одно и то же имя у массива и строки

просто UBound(namefield), если описано Dim namefield(8) As String
А Dim namefield As String переименуйте
Внимательней:
Код:
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 сохранить...
 
13.03.2009
625
1
#8
Ну Вот что Я придумал :(,
<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">
Код:
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
Код:
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