Ever have an email go out to everyone in the company that you really wanted to delete? You can use message recall, but what if that doesn't work (you can turn it off) or the message came in from outside your network?
Below is the code to remove these documents. Just fill in the server name and the mail file folder name in the application. Set the agent properties to run from the actions menu and set the target to none. The biggest thing to remember is that you must have manger-like access to the mail files in order to delete the document
%REM
Agent Delete Across System by UNID
Created Nov 20, 2014 by David
Description: Given a UNID, this agent will search for and delete a document that has that ID
%END REM
Option Public
Option Declare
Sub Initialize
'<Initialization>
Dim ses As New NotesSession
Dim dbdir As New NotesDbDirectory("")
Dim db As NotesDatabase
Dim thisdb As NotesDatabase
Dim doc As NotesDocument
Dim mailfolder As String
Set thisdb = ses.currentdatabase
Dim servers(1 To 1) As String 'What server(s) to run on
servers(1)="MailServer/Name"
Dim doc_id(1 To 1) As String
doc_id(1) = "F000E656739BFECD1A1D2D04FA1E56FD"
'<Set value to the variables mailfolder>
mailfolder = "mail"
ForAll v In servers
Set dbdir = ses.GetDbDirectory(v)
Set db = dbdir.GetFirstDatabase(DATABASE)
Print Left(db.Filepath,Len(mailfolder))
'<Prints out current database>
While Not(db Is Nothing)
If Left(db.Filepath,Len(mailfolder)) = mailfolder Then
db.Open "",""
'<Check if the database is in the current specified mail folder>
If InStr(db.filepath, mailfolder+"\") > 0 Then
'This is code for deleting all id at one shot
ForAll w In doc_id
On Error 4091 Resume Next 'Trap for not finding the UNID
Set doc = db.GetDocumentByUNId(w)
If (Not doc Is Nothing) Then
Print "Found and removed the document in " + db.title+" on "+ db.server
Call doc.remove(True)
End If
End ForAll
End If
'<Next database.........>
End If
Set db = dbdir.GetNextDatabase
Wend
End ForAll
Print "Completed removing the document from mail files in " + mailfolder
End Sub
I hope this helps you out as much as it has me. If you find any bugs or anything please let me know so I can fix my code.
If it's tech related...I'll post it here. Lotus Notes/Domino, AS400 or iSeries, PC's, PDA's, iPods, Android -- Whatever.
Thursday, November 20, 2014
Tuesday, July 15, 2014
Open Lotus Notes email in the "old" format
If you're having issues with your Notes email, try opening it in the older format! You can open your mail file and press CTRL-ALT at the same time to get the old style. At times, all the graphical/Java stuff can cause some issues. This is a quick way to open email with that disabled.
Friday, May 30, 2014
Calculate Bytes to GB, MB,KB, B in an Excel Worksheet Cell
Have you ever needed to enter storage information into a worksheet and the data was in bytes... but you wanted to convert it to something else? I'm working on an analysis on my disk utilization on my Domino servers and copied the data into an Excel worksheet. The storage for the files is shown in bytes. Using the below formula, it will take that number and show it as bytes, kilobytes, megabytes or gigabytes (I'll eventually have it show terabytes as well). It's short, simple and works just as I needed it.
=IF((F3>=POWER(2,30)),
TEXT((F3/POWER(2,30)),"##0.00\G"),
IF((F3>=POWER(2,20)),
TEXT((F3/POWER(2,20)),"##0.00\M"),
IF((F3>=1024),
TEXT((F3/1024),"##0.00\K"),
TEXT((F3),"##0.00\B")
)
)
)
Thursday, February 20, 2014
Copy Notes URL Link to Clipboard
Ever had the need to embed a link to the current document into a non-Notes email or product? I don't mean an HTTP URL. I'm talking about a URL that will open the document in your Lotus Notes client al-la "notes://server/db/view/document". Here is some code that can be added to an action button to do just that. Once you've clicked the button, a URL will be in the clipboard read for pasting into another application!
%REM
Copy Data to Clipboard
%END REM
Option Declare
Const GMEM_MOVEABLE = &H40
Const GMEM_ZEROINIT = &H2
Const CF_TEXT = &H01
Declare Function OpenClipboard Lib "user32" Alias "OpenClipboard" (Byval hwnd As Long) As Long
Declare Function CloseClipboard Lib "user32" Alias "CloseClipboard" () As Long
Declare Function EmptyClipboard Lib "user32" Alias "EmptyClipboard" () As Long
Declare Function GetClipboardData Lib "user32" Alias "GetClipboardData" (Byval wFormat As Long) As Long
Declare Function SetClipboardData Lib "user32" Alias "SetClipboardData" (Byval wFormat As Long, Byval hMem As Long) As Long
Declare Function IsClipboardFormatAvailable Lib "user32" Alias "IsClipboardFormatAvailable" (Byval wFormat As Long) As Long
Declare Function GlobalAlloc Lib "kernel32" Alias "GlobalAlloc" (Byval wFlags As Long, Byval dwBytes As Long) As Long
Declare Function GlobalLock Lib "kernel32" Alias "GlobalLock" (Byval hMem As Long) As Long
Declare Function GlobalUnlock Lib "kernel32" Alias "GlobalUnlock" (Byval hMem As Long) As Long
Declare Function GlobalSize Lib "kernel32" Alias "GlobalSize" (Byval hMem As Long) As Long
Declare Function lstrcpy Lib "kernel32" Alias "lstrcpyA" (Byval lpString1 As Long, Byval lpString2 As String) As Long
Declare Function NEMGetCurrentSubprogramWindow Lib "nnotesws.dll" () As Long
Sub SetClipboardText(Text As String)
Dim hwnd As Long
Dim hGlobalMemory As Long
Dim lpGlobalMemory As Long
Dim ret As Long
On Error Goto error_handler
' Get a handle to current window
hwnd = NEMGetCurrentSubProgramWindow()
If hwnd Then
' Allocate memory
hGlobalMemory = GlobalAlloc(Clng(GMEM_MOVEABLE Or GMEM_ZEROINIT), Clng(Len(Text)+1))
If hGlobalMemory Then
lpGlobalMemory = GlobalLock(hGlobalMemory)
If lpGlobalMemory Then
ret = lstrcpy(lpGlobalMemory, Text)
Call GlobalUnlock(hGlobalMemory)
If OpenClipboard(hwnd) Then
ret = EmptyClipboard()
ret = SetClipboardData(CF_TEXT, hGlobalMemory)
ret = CloseClipboard()
End If
Else
Msgbox "Can't allocated global memory pointer.", 32, "Error"
End If
Else
Msgbox "Can't allocated global memory handle.", 32, "Error"
End If
Else
Msgbox "Can't get window handle.", 32, "Error"
End If
Exit Sub
error_handler:
Print "Error: " + Error$(Err)
Resume Next
End Sub
Sub Click(Source As Button)
Dim s As New NotesSession
Dim ws As New NotesUIWorkspace
Dim db As NotesDatabase
Dim uiDoc As NotesUIDocument
Dim plainText As String
Dim x As String
Set db = s.CurrentDatabase
Set uiDoc = ws.CurrentDocument
plainText = uiDoc.Document.NotesURL 'Get the Notes URL for the Document
setclipboardtext(plainText)
Msgbox "Document URL copied to clipboard.", 0+64, "Successful"
End Sub
%REM
Copy Data to Clipboard
%END REM
Option Declare
Const GMEM_MOVEABLE = &H40
Const GMEM_ZEROINIT = &H2
Const CF_TEXT = &H01
Declare Function OpenClipboard Lib "user32" Alias "OpenClipboard" (Byval hwnd As Long) As Long
Declare Function CloseClipboard Lib "user32" Alias "CloseClipboard" () As Long
Declare Function EmptyClipboard Lib "user32" Alias "EmptyClipboard" () As Long
Declare Function GetClipboardData Lib "user32" Alias "GetClipboardData" (Byval wFormat As Long) As Long
Declare Function SetClipboardData Lib "user32" Alias "SetClipboardData" (Byval wFormat As Long, Byval hMem As Long) As Long
Declare Function IsClipboardFormatAvailable Lib "user32" Alias "IsClipboardFormatAvailable" (Byval wFormat As Long) As Long
Declare Function GlobalAlloc Lib "kernel32" Alias "GlobalAlloc" (Byval wFlags As Long, Byval dwBytes As Long) As Long
Declare Function GlobalLock Lib "kernel32" Alias "GlobalLock" (Byval hMem As Long) As Long
Declare Function GlobalUnlock Lib "kernel32" Alias "GlobalUnlock" (Byval hMem As Long) As Long
Declare Function GlobalSize Lib "kernel32" Alias "GlobalSize" (Byval hMem As Long) As Long
Declare Function lstrcpy Lib "kernel32" Alias "lstrcpyA" (Byval lpString1 As Long, Byval lpString2 As String) As Long
Declare Function NEMGetCurrentSubprogramWindow Lib "nnotesws.dll" () As Long
Sub SetClipboardText(Text As String)
Dim hwnd As Long
Dim hGlobalMemory As Long
Dim lpGlobalMemory As Long
Dim ret As Long
On Error Goto error_handler
' Get a handle to current window
hwnd = NEMGetCurrentSubProgramWindow()
If hwnd Then
' Allocate memory
hGlobalMemory = GlobalAlloc(Clng(GMEM_MOVEABLE Or GMEM_ZEROINIT), Clng(Len(Text)+1))
If hGlobalMemory Then
lpGlobalMemory = GlobalLock(hGlobalMemory)
If lpGlobalMemory Then
ret = lstrcpy(lpGlobalMemory, Text)
Call GlobalUnlock(hGlobalMemory)
If OpenClipboard(hwnd) Then
ret = EmptyClipboard()
ret = SetClipboardData(CF_TEXT, hGlobalMemory)
ret = CloseClipboard()
End If
Else
Msgbox "Can't allocated global memory pointer.", 32, "Error"
End If
Else
Msgbox "Can't allocated global memory handle.", 32, "Error"
End If
Else
Msgbox "Can't get window handle.", 32, "Error"
End If
Exit Sub
error_handler:
Print "Error: " + Error$(Err)
Resume Next
End Sub
Sub Click(Source As Button)
Dim s As New NotesSession
Dim ws As New NotesUIWorkspace
Dim db As NotesDatabase
Dim uiDoc As NotesUIDocument
Dim plainText As String
Dim x As String
Set db = s.CurrentDatabase
Set uiDoc = ws.CurrentDocument
plainText = uiDoc.Document.NotesURL 'Get the Notes URL for the Document
setclipboardtext(plainText)
Msgbox "Document URL copied to clipboard.", 0+64, "Successful"
End Sub
Labels:
Domino,
Lotus Script
Subscribe to:
Posts (Atom)