Ruby + Lotus Domino oh my!

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

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.

···

On 12/8/05, Kev Jackson <kevin.jackson@it.fts-vn.com> wrote:

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

Kev Jackson 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

···

--
      <URL:http://www.pobox.com/~meta/&gt;
My parents went to the lost kingdom of Hyrule
     and all I got was this lousy triforce.

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 Cruz

mathew <meta@pobox.com>
12/16/2005 02:22 PM
Please respond to
ruby-talk@ruby-lang.org

To
ruby-talk@ruby-lang.org (ruby-talk ML)
cc

Subject
Re: Ruby + Lotus Domino oh my!
Classification

Kev Jackson 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

···

--
      <URL:http://www.pobox.com/~meta/&gt;
My parents went to the lost kingdom of Hyrule
     and all I got was this lousy triforce.

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 Cruz <sam.dela.cruz+FromInternet@philips.com>
12/16/2005 02:31 PM
Please respond to
ruby-talk@ruby-lang.org

To
ruby-talk@ruby-lang.org (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 Cruz

mathew <meta@pobox.com>
12/16/2005 02:22 PM
Please respond to
ruby-talk@ruby-lang.org

To
ruby-talk@ruby-lang.org (ruby-talk ML)
cc

Subject
Re: Ruby + Lotus Domino oh my!
Classification

Kev Jackson 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

···

--
      <URL:http://www.pobox.com/~meta/&gt;
My parents went to the lost kingdom of Hyrule
     and all I got was this lousy triforce.