I should've posted this earlier, but I’ve been running into some health issues lately that precluded me from doing it.
I was wrong when I said before that the RSS API (events interface) was not working with VFP; as a matter of fact, Alan Griver indicated in my previous post that he had it working and was about to do a presentation with it, so to me that was the confirmation of my previous suspicions, i.e., that I was not using the right code.
Using the correct events interface invocation “made the trick” to make it work.
There is still an outstanding issue that I have to figure out: I get the same error described in previous posts that pops up after I try to download several feeds individually, I have a couple of things in mind that I am going to try.
Here’s a sample of the code that will allow you to see on the VFP screen the RSS activity and also record it to a csv file for later review in a table format (for example you could use these 2 lines of code
CREATE TABLE feedslog (Occurred t,EventMess c(150),FeedPath c(200),FeedOldpat c(200),ItemCount n(9),ErrorNo n(9))
APPEND FROM FeedEventsLog.CSV TYPE csv):
* RSS Events
CLEAR
#DEFINE FES_ALL 0
#DEFINE FES_SELF_ONLY 1
#DEFINE FES_SELF_AND_CHILDREN_ONLY 2
#DEFINE FEM_FOLDEREVENTS 0x00000001
#DEFINE FEM_FEEDEVENTS 0x00000002
PUBLIC FeedErrors
DIMENSION FeedErrors(13,2)
FeedErrors(1,1)= 0
FeedErrors(1,2)= "OK"
FeedErrors(2,1)= 1
FeedErrors(2,2)= "DOWNLOAD FAILED"
FeedErrors(3,1)= 2
FeedErrors(3,2)= "INVALID FEED FORMAT"
FeedErrors(4,1)= 3
FeedErrors(4,2)= "NORMALIZATION FAILED"
FeedErrors(5,1)= 4
FeedErrors(5,2)= "PERSISTENCE FAILED"
FeedErrors(6,1)= 5
FeedErrors(6,2)= "DOWNLOAD BLOCKED"
FeedErrors(7,1)= 6
FeedErrors(7,2)= "CANCELED"
FeedErrors(8,1)= 7
FeedErrors(8,2)= "UNSUPPORTED AUTHENTICATION"
FeedErrors(9,1)= 8
FeedErrors(9,2)= "BACKGROUND DOWNLOAD DISABLED"
FeedErrors(10,1)= 9
FeedErrors(10,2)= "Feed Does NOT EXIST"
FeedErrors(11,1)= 10
FeedErrors(11,2)= "UNSUPPORTED MSXML"
FeedErrors(12,1)= 11
FeedErrors(12,2)= "UNSUPPORTED DTD"
FeedErrors(13,1)= 12
FeedErrors(13,2)= "DOWNLOAD SIZE LIMIT EXCEEDED"
oFeedMgr = NEWOBJECT("Microsoft.FeedsManager")
oRootFolder = oFeedMgr.RootFolder
oFeeds=oRootFolder.Feeds
x=NEWOBJECT("myFolderEvents")
IF EVENTHANDLER(oRootFolder.GetWatcher(FES_SELF_AND_CHILDREN_ONLY ,FEM_FEEDEVENTS ),x)
Wait window nowait "Feeds Interface Instantiated!"
ELSE
Wait window nowait "Feeds Interface Instantiation FAILED!"
ENDIF
RETURN
DEFINE CLASS myFolderEvents AS session OLEPUBLIC
IMPLEMENTS IFeedFolderEvents IN "c:\windows\system32\msfeeds.dll"
PROCEDURE IFeedFolderEvents_Error() AS VOID;
HELPSTRING "Occurs when a feed folder event error occurs."
* add user code here
EventsLogger("Folder Event Error","")
ENDPROC
PROCEDURE IFeedFolderEvents_FolderAdded(Path AS STRING) AS VOID;
HELPSTRING "Occurs when a folder or subfolder is added."
EventsLogger("Folder "+PATH+" Added",PATH)
PROCEDURE IFeedFolderEvents_FolderDeleted(Path AS STRING) AS VOID;
HELPSTRING "Occurs when a folder or subfolder is removed."
EventsLogger("Folder/subfolder "+PATH+"removed.",PATH)
PROCEDURE IFeedFolderEvents_FolderRenamed(Path AS STRING, oldPath AS STRING) AS VOID;
HELPSTRING "Occurs when a folder or subfolder is renamed."
EventsLogger("Folder/subfolder "+oldPath+ " RENAMED to "+PATH,PATH,oldPath)
PROCEDURE IFeedFolderEvents_FolderMovedFrom(Path AS STRING, oldPath AS STRING) AS VOID;
HELPSTRING "Occurs when a folder or subfolder is moved from this folder."
EventsLogger("Folder/subfolder MOVED FROM "+oldPath+" to "+PATH,PATH,oldPAth)
PROCEDURE IFeedFolderEvents_FolderMovedTo(Path AS STRING, oldPath AS STRING) AS VOID;
HELPSTRING "Occurs when a folder or subfolder is moved to this folder."
EventsLogger("Folder/subfolder "+oldPath+" MOVED TO "+PATH,PATH,oldPAth)
PROCEDURE IFeedFolderEvents_FolderItemCountChanged(Path AS STRING, itemCountType AS Number) AS VOID;
HELPSTRING "Occurs when the aggregated item count of a feed folder changes."
EventsLogger("Folder ITEM COUNT for Folder "+PATH+" Changed to "+ALLTRIM(STR(itemCountType)),PATH,,itemCountType)
PROCEDURE IFeedFolderEvents_FeedAdded(Path AS STRING) AS VOID;
HELPSTRING "Occurs when a feed is added to the folder."
EventsLogger("Feed "+PATH+" Added",PATH)
PROCEDURE IFeedFolderEvents_FeedDeleted(Path AS STRING) AS VOID;
HELPSTRING "Occurs when a feed is deleted from the folder."
EventsLogger("Feed "+PATH+" Deleted",PATH)
PROCEDURE IFeedFolderEvents_FeedRenamed(Path AS STRING, oldPath AS STRING) AS VOID;
HELPSTRING "Occurs when a feed is renamed."
EventsLogger("Feed "+PATH+" Renamed",PATH)
PROCEDURE IFeedFolderEvents_FeedUrlChanged(Path AS STRING) AS VOID;
HELPSTRING "Occurs when the URL of a feed is changed."
EventsLogger("Feed "+PATH+" URL Changed",PATH)
PROCEDURE IFeedFolderEvents_FeedMovedFrom(Path AS STRING, oldPath AS STRING) AS VOID;
HELPSTRING "Occurs when a feed is moved from this folder."
EventsLogger("Feed MOVED FROM "+oldPath+" TO "+PATH, PATH, oldpath )
PROCEDURE IFeedFolderEvents_FeedMovedTo(Path AS STRING, oldPath AS STRING) AS VOID;
HELPSTRING "Occurs when a feed is moved to this folder."
EventsLogger("Feed MOVED TO "+oldPath+" FROM "+PATH, PATH, oldpath )
PROCEDURE IFeedFolderEvents_FeedDownloading(Path AS STRING) AS VOID;
HELPSTRING "Occurs when a feed starts to download."
EventsLogger("Feed Download "+PATH+" STARTS",PATH)
PROCEDURE IFeedFolderEvents_FeedDownloadCompleted(Path AS STRING, Error AS VARIANT) AS VOID;
HELPSTRING "Occurs when a feed has finished or failed downloading."
lcErrorMessage=FeedErrors(ASCAN(FeedErrors,Error)+1)
EventsLogger("Feed "+PATH+" Download "+IIF(error=0,"FINISHED ","FAILED "+lcErrorMessage),PATH,,,Error)
PROCEDURE IFeedFolderEvents_FeedItemCountChanged(Path AS STRING, itemCountType AS Number) AS VOID;
HELPSTRING "Occurs when the item count of a feed changed."
EventsLogger("Feed "+PATH+" ITEM COUNT Changed to "+ALLTRIM(STR(itemCountType)),PATH,,itemCountType)
ENDDEFINE
**********************
PROCEDURE eventslogger
LPARAMETERS tcEventMEssage, tcPAth,tcOldPath,tnItemCountType, tErr
lcLogMessage=TTOC(DATETIME())+[,]+;
tcEventMEssage+[,]+;
tcPath+[,]+;
IIF(VARTYPE(tcOldPath)=[L],[],tcOldPath)+[,]+;
IIF(VARTYPE(tnItemCountType)=[L],[],ALLTRIM(STR(tnItemCountType)))+[,]+;
IIF(VARTYPE(tErr)=[L],[],ALLTRIM(STR(tErr)))
?lcLogMessage
STRTOFILE(lcLogMessage+CHR(13),"FeedEventsLog.CSV",1)
RETURN .t.
[UPDATED 10-02-06] I've added 2 flash videos of about 3 mins each showing this code working on XP SP2 and Vista RC1.
Remember Me
Page rendered at 3/18/2010 1:57:57 AM (Eastern Daylight Time, UTC-04:00)
Disclaimer The opinions expressed herein are my own personal opinions and do not represent my employer's view in anyway.