From: gregarican Date: 2007-01-13T03:45:09+09:00 Subject: Script Exiting Unexpectedly A script I wrote checks incoming caller ID's against Microsoft Outlook's Contact list. What I've found is that without explicitly including a 'return' line in the conditional routine the script exits unexpectedly. I've commented out the explicit return statement that's required. Any ideas why this is the case? I'm using Ruby 1.8.2 on Win32. I've traced the script and found that it doesn't bomb out with any errors that I can tell. The only difference is the line that's commented with HEADS-UP. Maybe I can't see the forest through the trees :-/ outlookScreenPop.rb snippet ------------------------------------------ # My screen pop method def screenPop(alertingCall) allContacts = getContacts # Continue with the screen pop query if data was passed back from the Outlook OLE link. if allContacts != nil # Iterate through each contact to determine its associated telephone numbers allContacts.each do | contact | cleanHomePhone = clean(contact.HomeTelephoneNumber) cleanBusPhone = clean(contact.BusinessTelephoneNumber) cleanCellPhone = clean(contact.MobileTelephoneNumber) puts "#{Time.now.localtime.strftime("%m/%d/%Y @ %H:%M:%S")} - Testing #{cleanHomePhone} | #{cleanBusPhone} | #{cleanCellPhone} against #{alertingCall}." # Match them up, append the entry to the logfile and display the Contact Record if alertingCall == cleanHomePhone or alertingCall == cleanBusPhone or alertingCall == cleanCellPhone puts "#{Time.now.localtime.strftime("%m/%d/%Y @ %H:%M:%S")} - #{alertingCall} matched against #{contact.FullName} in Outlook Contacts." contact.Display return end # HEADS-UP!!! Here's the explicit return statement that seems to be necessary --- return end else puts "#{Time.now.localtime.strftime("%m/%d/%Y @ %H:%M:%S")} - No records found in Outlook Contacts or OLE link broken." exit end end # My loop that checks for incoming calls begin # Check the monitor every half second for an alerting call. loop do sleep 0.5 if @tsession.ringing? # If the extension has an alerting call, collect the data. @caller=@tsession.callIdMon @callingNum=@tsession.callDevIdMon # If the call isn't originating from the extension itelf, pop up a Windows message box with the caller ID and attempt an Outlook Contact screen pop. if @callingNum != @extension puts "#{Time.now.localtime.strftime("%m/%d/%Y @ %H:%M:%S")} - #{@callingNum} calling." Win32API.new("user32", "MessageBox", ['i','p','p','i'], 'i').call(0, "#{@callingNum} calling on #{Time.now.localtime.strftime("%m/%d/%Y @ %H:%M:%S")}.", "Mojo CTI Link", 0) screenPop(@callingNum) if @callingNum != "" end end end ensure @tsession.close puts "#{Time.now.localtime.strftime("%m/%d/%Y @ %H:%M:%S")} - Closed CTI stream from #{@extension}." exit end