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