Solved

Can I send an email when a document is deleted from LN database?

Posted on 2008-06-13
10
257 Views
Last Modified: 2013-12-18
I would like to send out an email from a lotus notes database when a document is deleted. The email would contain information from the deleted document. I am running Lotus Notes 7.0.2.
0
Comment
Question by:amjava
  • 5
  • 3
  • 2
10 Comments
 
LVL 22

Accepted Solution

by:
mbonaci earned 400 total points
Comment Utility
Of course you can.
Locate in Designer:
Other - Database Resources - Database Script.

There you have event
Sub Postdocumentdelete(Source As Notesuidatabase).

The sample code is bellow:
	Dim db As Notesdatabase

	Dim doc As NotesDocument, profiledoc As NotesDocument

	Dim c As NotesDocumentCollection
 

	Set db = Source.Database

	Set c = Source.Documents

	

	

	Set doc = c.GetFirstDocument

	Do Until doc Is Nothing		

		'here you handle one by one doc being deleted

		Call SendMail( doc )		'create function that sends mail using values from the doc as information in the mail's subject and body fields.
 

		Set doc = c.GetNextDocument( doc )

	Loop

Open in new window

0
 
LVL 17

Assisted Solution

by:fgrushevsky
fgrushevsky earned 100 total points
Comment Utility
You also will need to check user access to prevent false emails, as the script is executed even if user does not have enough access to delete documents.

If db.CurrentAccessLevel < 4 Then Continue = False ' user has no access to delete documents

Also, the script will not report on documents that are deleted through domino backend - i.e. if a document was deleted through API application (adminp could be example of that) or a backend agent      
0
 
LVL 22

Expert Comment

by:mbonaci
Comment Utility
And the SendMail sub could be like this:


Sub SendMail( to As Variant, Subject As String, doc As NotesDocument )

	On error Goto ErrHandler

	Dim s As New NotesSession

	Dim db As NotesDatabase

	Dim rtitem As NotesRichTextItem

	Dim CurrentUser As String

	

	Set db = s.CurrentDatabase

	Set doc = db.CreateDocument

	

	CurrentUser = s.CommonUserName

		

	Set maildoc = New NotesDocument(db) 

	Set rtitem = New NotesRichTextItem(maildoc, "Body")

	Call rtitem.AppendText( "Document " + doc.TheFieldName(0) + " deleted by " + CurrentUser + "." )

	

	maildoc.Form = "Memo"

	Call maildoc.AppendItemValue("SendTo", doc.TheFieldNameInDeletedDoc(0)) 'if the doc holds the intended recipient

	

	maildoc.Subject = Subject

	

	Call maildoc.Send( True )

	

out:

	Exit Function	

ErrHandler:

	Messagebox "SendMail - error: " & Str(Err) & ": " & Error$

	Resume out

End Function

Open in new window

0
 
LVL 22

Expert Comment

by:mbonaci
Comment Utility
The event is PostDocumentDelete, not QueryDocumentDelete!
So it will execute only after actual deletion of the document.
0
 
LVL 17

Expert Comment

by:fgrushevsky
Comment Utility
Mbonaci, it does not matter.
PostDocumentDelete script will be executed even if the user does not have rights to delete document (and help warns you about that).
So it will look this way:
user clicks delete key, querydocumentdelete is executed, user clicks F9 to actually delete document, postdocumentdelete is executed, then Notes tells user that user has no rights to delete the document, document stays
0
Top 6 Sources for Identifying Threat Actor TTPs

Understanding your enemy is essential. These six sources will help you identify the most popular threat actor tactics, techniques, and procedures (TTPs).

 
LVL 17

Expert Comment

by:fgrushevsky
Comment Utility
So you have to check ACL in the script

 db.CurrentAccessLevel is a quick a dirty way,  you would be better using something like this:


accPriv  = db.QueryAccessPrivileges( EffectiveUserName )

If (accPriv And DBACL_DELETE_DOCUMENTS) = 0 Then Continue = False ' user has no access to delete documents

0
 

Author Comment

by:amjava
Comment Utility
Thanks that looks like it will work great. One last thing can I send the email out based on the form that was used to create it? I only want to send out the email when one certain type of document is deleted from the database.

Thanks
0
 
LVL 22

Expert Comment

by:mbonaci
Comment Utility
Come on, this one you could've done yourself...
        Do Until doc Is Nothing

                If doc.Form(0) = "YourForm" Then

                        'here you handle one by one doc being deleted

                        Call SendMail( doc )

                End if

 

                Set doc = c.GetNextDocument( doc )

        Loop

Open in new window

0
 
LVL 22

Expert Comment

by:mbonaci
Comment Utility
fgrushevsky you're right, my mistake, it is actually stated in the help of the event that it's triggered before verification of authorization to delete.
(You are welcome to join LinkedIn EE group - see my profile).


So amjava, you're going to need this function:
(Call it from Postdocumentdelete Sub, like this:
        ...
        Dim c As NotesDocumentCollection
 
        'Add these two lines here (or you can change the code to remember that the user can't delete
        'and log unauthorized deletion attempt for each document, or something like that)
        Dim s As New NotesSession
        If Not CanUserDeleteDocument( s.CommonUserName ) Then Exit Sub

        Set db = Source.Database
        ...

Function CanUserDeleteDocument( UserName as String ) As Boolean

	Dim s As New NotesSession

	Dim db As NotesDatabase

	Dim acl As NotesACL

	Dim entry As NotesACLEntry
 

	Set db = s.CurrentDatabase

	Set acl = db.ACL

	Set entry = acl.GetEntry( UserName )
 

	If entry.CanDeleteDocuments Then CanUserDeleteDocument = True
 

'add error handling when you get there...

End Function

Open in new window

0
 

Author Closing Comment

by:amjava
Comment Utility
Thanks a bunch. Got it working and running just fine. Thanks for the tip on preventing false emails if the user doesn't have access to delete docs!
0

Featured Post

How your wiki can always stay up-to-date

Quip doubles as a “living” wiki and a project management tool that evolves with your organization. As you finish projects in Quip, the work remains, easily accessible to all team members, new and old.
- Increase transparency
- Onboard new hires faster
- Access from mobile/offline

Join & Write a Comment

Suggested Solutions

  In today’s Arena we can’t imagine our lives without Internet as we are highly used to of it. If we consider our life style just for only 2 min we found that face to face communication is swapped by e-communication.  Every Where from Works place to…
This article covers general Notes 8.5 troubleshooting information including recreating the Notes\Data folder.
Excel styles will make formatting consistent and let you apply and change formatting faster. In this tutorial, you'll learn how to use Excel's built-in styles, how to modify styles, and how to create your own. You'll also learn how to use your custo…
Access reports are powerful and flexible. Learn how to create a query and then a grouped report using the wizard. Modify the report design after the wizard is done to make it look better. There will be another video to explain how to put the final p…

772 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

11 Experts available now in Live!

Get 1:1 Help Now