Ruby + Lotus Domino oh my!


#1

Hi,

Does anyone have any experience interfacing ruby to Notes/Domino? I
only need to do a data extract, and I absolutely do not want to have to
code up C/Java just to suck the data out of a Notes database.

I could (in theory) hack up a Notes agent to export the database it was
in, but I doubt I’ll be allowed to mess with it in that much detail,
simple ODBC hookup will be about as good as it gets I think

Kev


#2

If you can run Ruby on the same box as Domino, you can do this. This
particular kind of access doesn’t work across systems. (Untested
code, use as directed, etc, etc.)
require ‘win32ole’
SERVER_NAME = ‘example/M/ORG’
USER_NAME = ‘godmode’
NOTES_PASSWORD = ‘supersecret’
DB_NAME = ‘example.nsf’

s = WIN32OLE.new ‘Lotus.NotesSession’
s.InitializeUsingNotesUserName(USER_NAME, NOTES_PASSWORD)
db = s.GetDatabase(SERVER_NAME, DB_NAME)
view = db.GetView “All Documents”
entry = view.GetFirstDocument # I hate the Notes COM interface.
while entry
doc = entry.Document
puts doc.GetFirstItem(“Subject”).Values
puts doc.GetFirstItem(“Categories”).Values
entry = view.GetNextDocument(entry) # Yes, this is weird.
end

Once you’ve gotten that working, you can read up on the various evil
COM methods here:
http://rubyurl.com/Rry

Personally, I find them easier to view them inside Visual Studio’s
“object browser”.

–Wilson.


#3

Kev J. wrote:

Does anyone have any experience interfacing ruby to Notes/Domino? I
only need to do a data extract, and I absolutely do not want to have to
code up C/Java just to suck the data out of a Notes database.

If there’s a Domino server involved (i.e. it’s not just a database on a
Notes client), use Domino’s standard XML facilities.

If there’s no Domino server involved, write a quick LotusScript agent to
export to XML… :slight_smile:

mathew


#4

In my company, we use Lotus Notes, here’s how I extract messages from
one
folder from my mailfile. You can easily modify this to get data from
any
notes database:

require ‘win32ole’

application = WIN32OLE.new(‘Notes.NotesSession’)
database = application.GetDatabase(‘Server’,‘DatabaseFile’)
response = database.GetView(‘Folder’)
count = response.TopLevelEntryCount
index = count

filename = “results.csv”
file = File.new(filename,‘w+’)

count.times do
document = response.GetNthDocument(index)
index -= 1
text = document.GetFirstItem(‘Body’).Text

    machineName = ""
    userAccount = ""
    mappings = []

    text.split("\r\n").each do |line|
        line.chomp
            (key,value) = line.split("=")
            if key == "MachineName"
                machineName = value
            elsif key == "Mapping"
                mappings.push(value)
                    re = /^.*\\(\w{3}\d{5})$/
                    re.match(value)
                    userAccount = $1
    end
    end
    file.puts userAccount + "," + machineName + "," +

mappings.join(",")
end
file.close

Regards,
Sam Dela C.

mathew removed_email_address@domain.invalid
12/16/2005 02:22 PM
Please respond to
removed_email_address@domain.invalid

To
removed_email_address@domain.invalid (ruby-talk ML)
cc

Subject
Re: Ruby + Lotus Domino oh my!
Classification

Kev J. wrote:

Does anyone have any experience interfacing ruby to Notes/Domino? I
only need to do a data extract, and I absolutely do not want to have to
code up C/Java just to suck the data out of a Notes database.

If there’s a Domino server involved (i.e. it’s not just a database on a
Notes client), use Domino’s standard XML facilities.

If there’s no Domino server involved, write a quick LotusScript agent to
export to XML… :slight_smile:

mathew


#5

Sorry, the tab spaces were kind of messed-up, here’s the same code with
tabs adjusted…

require ‘win32ole’

application = WIN32OLE.new(‘Notes.NotesSession’)
database = application.GetDatabase(‘Server’,‘DatabaseFile’)
response = database.GetView(‘Folder’)
count = response.TopLevelEntryCount
index = count

filename = “results.csv”
file = File.new(filename,‘w+’)

count.times do
document = response.GetNthDocument(index)
index -= 1
text = document.GetFirstItem(‘Body’).Text
machineName = “”
userAccount = “”
mappings = []

    text.split("\r\n").each do |line|
            line.chomp
            (key,value) = line.split("=")

            if key == "MachineName"
                    machineName = value
            elsif key == "Mapping"
                    mappings.push(value)
                    re = /^.*\\(\w{3}\d{5})$/
                    re.match(value)
                    userAccount = $1
            end
    end
    file.puts userAccount + "," + machineName + "," +

mappings.join(",")

end
file.close

Regards,
Sam

Sam Dela C. removed_email_address@domain.invalid
12/16/2005 02:31 PM
Please respond to
removed_email_address@domain.invalid

To
removed_email_address@domain.invalid (ruby-talk ML)
cc

Subject
Re: Ruby + Lotus Domino oh my!
Classification

In my company, we use Lotus Notes, here’s how I extract messages from
one
folder from my mailfile. You can easily modify this to get data from
any
notes database:

require ‘win32ole’

application = WIN32OLE.new(‘Notes.NotesSession’)
database = application.GetDatabase(‘Server’,‘DatabaseFile’)
response = database.GetView(‘Folder’)
count = response.TopLevelEntryCount
index = count

filename = “results.csv”
file = File.new(filename,‘w+’)

count.times do
document = response.GetNthDocument(index)
index -= 1
text = document.GetFirstItem(‘Body’).Text

    machineName = ""
    userAccount = ""
    mappings = []

    text.split("\r\n").each do |line|
        line.chomp
            (key,value) = line.split("=")
            if key == "MachineName"
                machineName = value
            elsif key == "Mapping"
                mappings.push(value)
                    re = /^.*\\(\w{3}\d{5})$/
                    re.match(value)
                    userAccount = $1
    end
    end
    file.puts userAccount + "," + machineName + "," +

mappings.join(",")
end
file.close

Regards,
Sam Dela C.

mathew removed_email_address@domain.invalid
12/16/2005 02:22 PM
Please respond to
removed_email_address@domain.invalid

To
removed_email_address@domain.invalid (ruby-talk ML)
cc

Subject
Re: Ruby + Lotus Domino oh my!
Classification

Kev J. wrote:

Does anyone have any experience interfacing ruby to Notes/Domino? I
only need to do a data extract, and I absolutely do not want to have to
code up C/Java just to suck the data out of a Notes database.

If there’s a Domino server involved (i.e. it’s not just a database on a
Notes client), use Domino’s standard XML facilities.

If there’s no Domino server involved, write a quick LotusScript agent to
export to XML… :slight_smile:

mathew