PowerBuilder – Reading Outlook Items

Posted on Thursday, September 1st, 2011 at 8:20 pm in

Here is some code which reads data from Outlook (2007 was tested) into PowerBuilder. You basically need to create a window with a multiline edit and a button on it. Put this into the clicked event of the button.

To run it, open Outlook, select something (email message, task, etc.) then click the button on your window. There are many, many more methods and properties you have access to from PB via OLE to Outlook. The MSDN reference online is a big help

integer li_rc
long ll_itemcount, ll_i
oleobject lole_item, lole_outlook, lole_exp, lole_selecteditems
string ls_subject, ls_from, ls_to, ls_body, ls_msg
lole_outlook = CREATE oleobject
lole_exp = CREATE oleobject
lole_selecteditems = CREATE oleobject
li_rc = lole_outlook.ConnectToNewObject("outlook.application")
lole_exp = lole_outlook.ActiveExplorer()
// Outlook has to be running
If IsNull(lole_exp) THEN
	Messagebox('Outlook Error','Is Outlook currently running?')
	GOTO cleanup
END IF
li_rc = lole_exp.class
// caption is window name like "Inbox - Microsoft Outlook" or "Calendar - Microsoft Outlook"
ls_subject = lole_exp.caption

lole_selecteditems = lole_exp.selection
ll_itemcount = lole_selecteditems.count

FOR ll_i = 1 to ll_itemcount
	lole_item = CREATE oleobject
	lole_item = lole_exp.selection.item(ll_i)
	li_rc = lole_item.class
	CHOOSE CASE li_rc
		CASE 26 //appointment
			ls_body = lole_item.body
			ls_msg += '~r~n Appointment No: ' + string(ll_i) + ' of ' + string(ll_itemcount) + '~r~n' + ls_body
			// lots of other stuff could be here
		CASE 40 // contact
			ls_body = lole_item.body
			ls_msg += '~r~n Contact No: ' + string(ll_i) + ' of ' + string(ll_itemcount) + '~r~n' + ls_body
			
		CASE 43 // mail
			ls_subject = lole_item.subject
			ls_from = lole_item.sendername
			ls_to = lole_item.to
			ls_body = lole_item.body
			ls_msg = '~r~nSubject: ' + ls_subject + '~r~nFrom: ' + ls_from + '~r~nTo: ' + ls_to + '~r~nBody: ' + ls_body
			ls_msg += '~r~n Email No: ' + string(ll_i) + ' of ' + string(ll_itemcount) + '~r~n' + ls_msg
			
		CASE 48 // task
			ls_subject = lole_item.subject
			ls_to = lole_item.owner
			ls_body = lole_item.body
			ls_msg = '~r~nSubject: ' + ls_subject + '~r~nOwner: ' + ls_to + '~r~nBody: ' + ls_body
			ls_msg += '~r~n Task No: ' + string(ll_i) + ' of ' + string(ll_itemcount) + '~r~n' + ls_msg
			
	END CHOOSE
	DESTROY lole_item
NEXT
IF Len(ls_msg) > 0 THEN
	mle_1.text = ls_msg
ELSE
	mle_1.text = 'No items processed.'
END IF
cleanup:
DESTROY lole_selecteditems
DESTROY lole_exp
DESTROY lole_outlook

Top