I use ProjectHooks a lot in my day to day VFP development – for a variety of things:
a) copying the completed APP into a test and/or deployment directory
b) ensuring version #s are consistent across our remote development team
But what I’m always missing is a way to ensure the latest code is always checked in.
We deal with a lot of remote programmers so it’s really important that if I finish working on something that it gets checked in so if others have to work on it, they can grab it without worry.
What I have found is that I can call
_VFP.ActiveProject.Files(1).Checkin()
and it will pull up the VSS Check-in utility BUT there’s one gotcha:
it only works if you have the Project Builder open.
If you simply issue a BUILD EXE xxx FROM xxx, it won’t run. Now I suppose, I COULD do a MODIFY PROJECT _VFP.ActiveProject.Name before hand and then let it go but is that really necessary?
I could also force an update by manually calling the internal check-in commands but that’s a kludge. Has anyone else ever come across this – What did you do for a solution?
Warning: Legacy knowledge disclaimer: I haven’t worked in Fox since 2004, and I forgot more than I recall. However, I remember doing quite a bit of work in VSS, and taught a few sessions on ProjectHooks (http://www.tedroche.com/Present/1999/PjxHooks.html)
I always worked from the Project Manager, but there’s a neat hack: The PJX is just a table, and tables can be part of databases. Add the table to a database, and enable database events for the database. DBC_BeforeOpenTable gives you the “OnOpen()” method they didn’t want to add to ProjectHooks.
You can open the project with a NOSHOW clause if you don’t want to see the Project Manager. The projecthook will be instantiated, and you will have the ActiveProject reference you need for the CheckIn method.
Rick,
I know the NOSHOW SHOULD work – but it messes things up if you’re in the middle of a build while doing it.
Example:
Build exe xxx from xxx
(Starts the build hook)
In the build hook, I want to ensure we get all the latest code so I would have to do a
MODIFY PROJ xxx NOSHOW
_VFP.Activeproject.files(1).getlatest()
and that somehow breaks it for some strange reason.