Skip to main content
 
developerWorks
AIX and UNIX
Information Mgmt
Lotus
New to Lotus
Products
How to buy
Downloads
Live demos
Technical library
Training
Support
Forums & community
Events
Rational
Tivoli
WebSphere
Java™ technology
Linux
Open source
SOA and Web services
Web development
XML
My developerWorks
About dW
Submit content
Feedback



developerWorks  >  Lotus  >  Forums & community  >  Notes/Domino 6 and 7 Forum

Notes/Domino 6 and 7 Forum

developerWorks

  

Sign in to participate PreviousPrevious NextNext


Tamara Williams 5.Jan.10 03:58 PM a Web browser
Domino Designer 7.0 Windows Vista


Dear All:

I wrote an agent and I have a form that the user ineracts with. The user enters the person's name, cut-off date and attachment size. The agent finds the Names database from the server and searches in the hidden view ($VIMPeople) which has all names sorted by full name. It finds the document based on value in Name field on the Form and retrieves the person's mailbox path and db. It opens the person's mailbox and searches for documents created after the date specified and with attachment size larger than the amount specified. It then deletes the attachments and saves the document thus reducing storage size.

However, sometimes it finds and delete all attachments but most times it freezes up. I was hoping to delete both attachments and embedded objects but I am having serious problems with the code. The user has rights to all other person's mailbox. In the agent properties I also allow restricted operations with full admin rights. My code is shown below (I left out the variable declarations):

' Initialize
Set session=New NotesSession
Set db=session.CurrentDatabase

' MIME
mimeFlag = session.ConvertMime
If mimeFlag = True Then
Print "MIME items are converted to rich text"
Else
Print "MIME items are not converted to rich text"
End If
' Convert MIME to rich text
session.ConvertMime = True

' Current document
Set queryDocument = workspace.currentdocument

' Set defaults
msgQuery =""
msgResults=""
msgDetails=""
msgEmbedDetails=""
msgTotalDetails=""
docNote=""
attDeleted = False
objDeleted = False
embedDeleted = False
countResult=0
countDocument=0

If Not queryDocument Is Nothing Then
' Clear fields
Call queryDocument.FieldSetText("mqfResult","")
Call queryDocument.Refresh

' Get current database server and path
' Check server name in organization component or organizational unit component
'serverName = Evaluate(|@Left(@Right(@ServerName;"CN=");"/OU=")|)

' Variant values are initialized to EMPTY so test for that value
'If (Isempty(serverName) Or serverName(0) = "") Then
serverName = Evaluate(|@Left(@Right(@ServerName;"CN=");"/O=")|)
'End If
'Print Cstr(serverName(0))+"#2"

' Get Names database from server
namesDbName = "names.nsf"
Set namesDb = New NotesDatabase(serverName(0),namesDbName)

If namesDb.IsOpen = True Then
' Open hidden view ($VIMPeople) which has names
Set namesView = namesDb.GetView("($VIMPeople)")
' Get document based on value in Name field on Query Form
Set userDocument = namesView.GetDocumentByKey(Cstr(queryDocument.FieldGetText("mqfName")))
' Get person's mailbox path and db
userMailboxPath = userDocument.MailFile(0)
Set userMailboxDb = New NotesDatabase(serverName(0),userMailboxPath)

If userMailboxDb.IsOpen = True Then

%REM
options& = FTINDEX_CASE_SENSITIVE
' Indicates whether or not a database has a full-text index.
If userMailboxDb.IsFTIndexed Then
' Updates the database full-text index (valid only for local databases)
Call userMailboxDb.UpdateFTIndex(True)
Else
' Creates the database full-text index (valid only for local databases)
Call userMailboxDb.CreateFTIndex(options&,False)
End If
%END REM

' Get and process results

' 1 MB = 1048576 B
attSize = queryDocument.FieldGetText("mqfAttachmentSize")
bytes = Cdbl(Csng(queryDocument.FieldGetText("mqfAttachmentSize")) * 1048576)
bytes = Round(bytes, 2)
'Print Cstr(bytes)

' @Created uses format dd/mm/yyyy so query={@Created >= [08/10/2009]}
' Format user date to server date format
Set tempDateTime = formatDate(Cstr(queryDocument.FieldGetText("mqfCutoffDate")))
query={@Created <= [}+Cstr(tempDateTime.DateOnly)+{] & @Sum(@Attachments > 0; @AttachmentLengths; 0) >= }+Cstr(bytes)

' Given selection criteria, returns all documents in a database that meet the criteria.
' Parameters are formula$, notesDateTime, maxDocs%
' so specify Nothing for notesDateTime to indicate no cutoff date and specify 0 for maxDocs% to receive all matching documents.
Set queryResultCollection = userMailboxDb.Search(query, Nothing, 0)

' To display to user. Format function formats the date/time.
msgQuery = "Search Criteria: "+ Chr$(13)+"Search "+Cstr(queryDocument.FieldGetText("mqfName"))+"'s mailbox for documents with Creation Date"
msgQuery =msgQuery + " <= " +Cstr(tempDateTime.DateOnly)+" ("+Cstr(Format(tempDateTime.DateOnly,"dd-mmm-yyyy"))+") "+" and total Attachment Size >= "+attSize +" MB"

If queryResultCollection.Count > 0 Then

countResult = queryResultCollection.Count
msgResults =msgResults + "Search Result: "+ Chr$(13)+"There are "+ Cstr(countResult)+ " document(s) found!"

Set queryResultDocument = queryResultCollection.GetFirstDocument
While Not queryResultDocument Is Nothing
' Reset values
attCount = 0
attTotal = 0
objCount= 0
objTotal= 0
msgEmbedDetails=""
msgTotalDetails=""
attDeleted = False
objDeleted = False
embedDeleted = False

' Check if document contains one or more embedded objects, object links, or file attachments.
If queryResultDocument.HasEmbedded Then

If queryResultDocument.HasItem("Subject") Then
Set item = queryResultDocument.GetFirstItem( "Subject" )
'Set item2 = queryResultDocument.GetFirstItem( "From" )
subjectLine = Cstr(item.Text)
Else
subjectLine = ""
End If
Print "Subject: " + subjectLine + " - search document #" + Cstr(countDocument+1)
'msgResults =msgResults +subjectLine+Chr$(9)

' Embedded Objects don't delete properly so accessing them a second time causes a crash so go to next document
' These apply to OLE Storage(Data) because other OLE Storage types are not recognized
If queryResultDocument.HasItem("mailboxQueryAgentObject") Then
'Goto nextLoop
End If

%REM
' The OLE/2 and OLE/1 embedded objects in a document.
' Unlike the EmbeddedObjects property in NotesRichTextItem, this property does not include file attachments,
' nor OLE/1 objects created in Notes Release 3.
' It accesses embedded objects so it requires permission to run so set agent properties security level and sign agent
If Not Isempty(queryResultDocument.EmbeddedObjects) Then
Forall o In queryResultDocument.EmbeddedObjects
Print "Object: "+Cstr(o.Name)
msgEmbedDetails = msgEmbedDetails +"Object Name: "+Cstr(o.Name)+Chr$(13)
Call o.Remove
' Set value because embedded objects don't delete properly and document should not be accessed again
queryResultDocument.mailboxQueryAgentObject="1"
Call queryResultDocument.Save(True, False)
objDeleted = True
embedDeleted = True
objCount = objCount +1
objTotal = objTotal + 1
End Forall
End If
%END REM

' Body field can be RICHTEXT for rich text or MIME_PART for MIME support
Set rtitem = queryResultDocument.GetFirstItem("Body")

' All the embedded objects, object links, and file attachments contained in a rich text item.
If Not rtitem Is Nothing And Not Isempty(rtitem.EmbeddedObjects) Then
Forall o In rtitem.EmbeddedObjects

' Ignore embedded objects and object link in rich text item because it causes agent to crash
' use document embedded objects instead (see above)
If ( o.Type = EMBED_OBJECT) Then
msgEmbedDetails = msgEmbedDetails +"Body Field: Object Name: "+Cstr(o.Name)+ ", Body Field: Object Size: "+Cstr(Round(o.FileSize/1048576,3))+"MB"+ Chr$(13)
Call o.Remove
' Save at the end
'Call queryResultDocument.Save(True, False)
objDeleted = True
embedDeleted = True
objCount = objCount +1
objTotal = objTotal + 1
End If

' Check for file attachments.
If ( o.Type = EMBED_ATTACHMENT) Then
msgEmbedDetails = msgEmbedDetails +"Attachment Name: "+Cstr(o.Source)+ ", Attachment Size: "+Cstr(Round(o.FileSize/1048576,3))+"MB"+ Chr$(13)
Call o.Remove
' Save at the end
'Call queryResultDocument.Save(True, False)
attDeleted = True
embedDeleted = True
attCount = attCount + 1
attTotal = attTotal + 1
End If

End Forall

' Details for each search document
msgDetails = msgDetails + "Subject: "+ subjectLine+Chr$(13)+ "Date Composed: "+ Cstr(queryResultDocument.Created)+Chr$(13)
msgDetails = msgDetails + msgEmbedDetails
If (embedDeleted = True) Then
countDocument = countDocument + 1

' Totals for each documents
If objDeleted = True Then
msgTotalDetails = msgTotalDetails + Cstr(objCount) +" of " + Cstr(objTotal) + " object(s) were successfully removed!" + Chr$(13)
End If
If attDeleted = True Then
msgTotalDetails = msgTotalDetails + Cstr(attCount) +" of " + Cstr(attTotal) + " attachment(s) were successfully removed!" + Chr$(13)
End If
msgDetails = msgDetails + msgTotalDetails + Chr$(13)

' Add note about deletion to each mail document
Call rtitem.AddNewline(3)
docNote = "N.B. Maintenance deletion of files were performed on "+currentDateTime.DateOnly+" at "+currentDateTime.TimeOnly+" for: "
docNote = docNote +Chr$(13) + msgEmbedDetails+ msgTotalDetails
Call rtitem.AppendText(docNote)

'Indicate that this field has attachment deletions and used in replication settings at Documents by selection formula
'SELECT (!@Contains(@DocFields; "mailboxQueryAgentDelete"))
queryResultDocument.mailboxQueryAgentDelete="1"
'Call queryResultDocument.Save(True, False)
End If


End If

End If

nextLoop:
' Get next search result document
Set queryResultDocument = queryResultCollection.GetNextDocument(queryResultDocument)
Wend

msgResults =msgResults + " "+ Cstr(countDocument)+ " of " + Cstr(countResult)+ " document(s) have been processed successfully!"
' This means the documents with embedded objects are ignored so total document count is different
If (countResult <> countDocument) Then
msgResults =msgResults +" (The other document(s) contained Embedded Objects and have been processed already)"
End If

Else
' No documents found
msgResults=msgResults + "Search Result: "+ Chr$(13)+"There are no documents found matching that search criteria!"
End If

Else
' Person's mailbox doesn't exist
msgResults=msgResults + "Search Result: "+ Chr$(13)+Cstr(queryDocument.FieldGetText("mqfName"))+"'s mailbox does not exist!"
End If

Else
' Names database from server doesn't exist
msgResults=msgResults + "Search Result: "+ Chr$(13)+"The Server's names.nsf database does not exist!"
End If

' Restore default MIME settings
session.ConvertMime = mimeFlag
' Display results to user
Call queryDocument.FieldSetText("mqfResult",msgQuery + Chr$(13) +Chr$(13) +msgResults + Chr$(13) +Chr$(13) + msgDetails)
Call queryDocument.Refresh


Else
' The Query Form being used was closed etc
msgResults="The Query Form document does not exist!"
End If

' Display to status bar
Print msgQuery
Print msgResults

Exit Sub

errorn:
Print "Error in Agent mailboxQueryAgent->Initialize line: "+Cstr(Erl)+" error:"+Error$+" error no: "+Cstr(Err)
End






Unable to delete attachments or emb... (Tamara Williams... 5.Jan.10)
. . Create a debug file log... (David Gilmore 6.Jan.10)





  Document options
Print this pagePrint this page

 Search this forum

  Forum views and search
Date (threaded)
Date (flat)
With excerpt
Author
Category
Platform
Release
Advanced search

 Sign In or Register
Sign in
Forgot your password?
Forgot your user name?
Create new registration

 RSS feedsRSS
All forum posts RSS
All main topics RSS
More Lotus RSS feeds

Resources

 Resources
Forum use and etiquette
Native Notes Access
Web site Feedback

Lotus Support

 Lotus Support
IBM Support Portal - Lotus software
Lotus Support documents
Lotus support by product
Lotus support downloads
Lotus support RSS feeds

Wikis

 Wikis
IBM Composite Applications
IBM Mashup Center
IBM Connections
IBM Docs
IBM Forms
IBM Mobile Connect
IBM Sametime
IBM SmartCloud for Social Business
IBM Web Experience Factory
Lotus Domino
Lotus Domino Designer
Lotus Expeditor
Lotus Foundations
Lotus iNotes
Lotus Instructor Community Courseware
Lotus Notes
Lotus Notes & Domino Application Development
Lotus Notes Traveler
Lotus Protector
Lotus Quickr
Lotus Symphony
IBM Web Content Manager
WebSphere Portal

Lotus Forums


 Lotus Forums
Notes/Domino 9.0
Notes/Domino 8.5 + Traveler
Notes/Domino XPages development forum
Notes/Domino 8
Notes/Domino 6 and 7
IBM Connections
IBM Forms
IBM Mobile Connect
IBM Sametime
IBM SmartCloud Notes
IBM Web Content Manager
Lotus Enterprise Integration
Lotus Protector
Lotus Quickr
Lotus SmartSuite