But if he could call the 3rd party code directly, he could just call his own
methods right after. Is that right Clarkee? I was assuming that the
framework itself is calling method1() and that his code is not.

On Jan 18, 2008 9:02 AM, Sam Larbi <[EMAIL PROTECTED]> wrote:

> That's how I would do it.   Instead of using the 3rd party code directly,
> provide your own derived version of it that simply adds hooks and calls the
> 3rd party code.
>
> Sam
>
>
>
> On Jan 18, 2008 7:56 AM, Marc Esher < [EMAIL PROTECTED]> wrote:
>
> > In that code I posted (which probably won't work anyway), there's no
> > editing of the 3rd party code. he's injecting methods into objects, not
> > literally modifying code.
> >
> > best.
> >
> > marc
> >
> >
> > On Jan 18, 2008 8:36 AM, Alan Livie <[EMAIL PROTECTED]>
> > wrote:
> >
> > >
> > > The problem with this is he would still have to edit the 3rd party
> > > code to use the new cfc.
> > >
> > > If the cfc's are managed by a factory / Coldspring then its less of a
> > > problem as the change would only need to happen in the factory / 
> > > coldspring
> > > xml config file
> > >
> > > The new cfc could extend the 3rd party one and polymorphism can be
> > > used to override the method as suggested below.
> > >
> > > If the cfc's are not managed by a factory then 3rd party code would
> > > need to change to call the new cfc in which case the original cfc may as
> > > well be changed.
> > >
> > > It's not an easy one!
> > > ________________________________________
> > > From: [email protected] [ [email protected] ] On Behalf Of
> > > Marc Esher [EMAIL PROTECTED]
> > > Sent: 18 January 2008 13:19
> > > To: [email protected]
> > > Subject: [CFCDEV] Re: Running a child method without a parent knowing
> > > - Can it be done?
> > >
> > > this is probably way out there, and it's certainly far more confusing
> > > and probably less maintainable and overall a bigger pain in the butt than
> > > your proposed solution, but it's friday so what the hell:
> > >
> > > i think you technically could do something like this:
> > >
> > > you could have a new component that had these functions:
> > >
> > > <cfcomponent hint="something i'm gonna inject">
> > >
> > >  <cffunction name="method1">
> > >     ....args same as original method1's arguments ...
> > >
> > >    <cfset originalMethod1(arg1=arg1, arg2=arg2....)>
> > >
> > >   <cfset doMyDateStuff()>
> > >
> > >  </cffunction>
> > >
> > >  <cffunction name="doMyDateStuff">
> > >     ... do my date stuff here ...
> > >  </cffunction>
> > >
> > >
> > > </cfcomponent>
> > >
> > >
> > >
> > > i'm assuming you at least have an instance of the original component
> > > containing method 1, or access to that component, so:
> > >
> > > in your code somewheres:
> > >
> > > <cfset myInjector = createObject("component","MyInjector")>
> > >
> > >
> > >
> > > Now's where it gets weird:
> > >
> > > <!--- 'copy' method 1 into a new function --->
> > > <cfset thirdPartyObject["originalMethod1"] =
> > > thirdPartyObject["method1"]>
> > >
> > > <!--- override original method 1 with the method1 from your injector
> > > --->
> > > <cfset thirdPartyObject["doMyDateStuff"] =
> > > myInjector["doMyDateStuff"]>
> > > <cfset thirdPartyObject["method1"] = myInjector["method1"]>
> > >
> > >
> > > when method1 is called, it's going to call the original method 1 that
> > > you created by "copy", then it's going to call your date function.
> > >
> > > Now, what I don't know is: A) whether this will work at all. probably
> > > not.  B) whether when you overwrite method1 it also technically overwrites
> > > originalMethod1 since originalMethod1 just points to method 1. That's my
> > > suspicion.
> > >
> > > But hey, if you have nothing else to do and want to futz around with
> > > creating hard to understand, unmaintainable method injection stuff that 
> > > will
> > > break whenever ThirdParty releases a new version, it might be fun to at
> > > least give it a shot.
> > >
> > > have a great day.
> > >
> > > marc
> > >
> > >
> > >
> > >
> > > On Jan 18, 2008 6:47 AM, Clarkee21 <[EMAIL PROTECTED]<mailto:[EMAIL 
> > > PROTECTED]>>
> > > wrote:
> > >
> > > Hi Marc,
> > >
> > > Yeah we did consider that but there was a few twists and turns to that
> > > solution which would have resulted in us basically rewritting the core
> > > method as a database script.
> > >
> > > I've actually just had a bit of a brainstorm with one of the guys here
> > > and I think we might have come up with a solution in that we just
> > > leave the dates and run a scheduled task to wipe any redundant data at
> > >
> > > a later stage.
> > >
> > > Cheers,
> > > James
> > >
> > > On Jan 18, 11:30am, "Marc Esher" < [EMAIL PROTECTED]<mailto:[EMAIL 
> > > PROTECTED]>>
> > > wrote:
> > > > I've never heard of anything native in CF for doing this.
> > > >
> > > > I'm going to assume that if you're asking this there isn't much use
> > > in going
> > > > back to the 3rd party tool creators and asking them to add listener
> > > hooks.
> > > >
> > > > but what about doing it the old fashioned way: putting a trigger on
> > > your DB
> > > > that looks for changes from 1 to 0 in that column and then responds
> > > > appropriately.
> > > >
> > > > Best,
> > > >
> > > > marc
> > > >
> > > > On Jan 18, 2008 6:11 AM, Clarkee21 <[EMAIL PROTECTED]<mailto:[EMAIL 
> > > > PROTECTED] >>
> > > wrote:
> > > >
> > > >
> > > >
> > > >
> > > >
> > > > > Hi guys,
> > > >
> > > > > I'm a bit of an OO newbie so I was wondering if someone on here
> > > might
> > > > > be able to help me find an approach to my problem.
> > > >
> > > > > I have two methods -
> > > > > Method #1 is a core part of a 3rd party open source application
> > > we're
> > > > > running in-house.
> > > > > Method #2 is part of a plugin I'm developing for this application.
> > >
> > > >
> > > > > Method #1 is used to simply switch a section of a page on or off.
> > > In
> > > > > other words is sets a DB field "visible" to 0 or 1 depending on
> > > the
> > > > > section's current status.
> > > >
> > > > > Method #2 is used to reset two date fields in my table.
> > > >
> > > > > What I want to do is somehow have method #2 executed the moment
> > > method
> > > > > #1 has run but, and here is the twist, I don't want to have to
> > > rewrite
> > > > > anything in method #1 or it's object. This is mainly because a)
> > > we're
> > > > > planning to release this back out into the community at a later
> > > stage
> > > > > so I'd rather have it as a single directory of stand-alone files
> > > and
> > > > > b) it would mean we'd have to insert the code into method #1 again
> > > and
> > > > > retest if we ever upgraded.
> > > >
> > > > > Is there anyway that method #2 can "listen" for method #1 being
> > > > > executed without method #1 being aware that there is anything else
> > > > > going on?
> > > >
> > > > > Cheers,
> > > > > James- Hide quoted text -
> > > >
> > > > - Show quoted text -
> > >
> > >
> > >
>
> >
>

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"CFCDev" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/cfcdev?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to