Hello Kirk,

Your pseudo-recursive-recursive code is totally like I teach in my sessions, 
and like I like! In fact, I have described this idea in a post in my blog in 
2010 (sorry it’s in french) :  http://www.4d.com/fr/blog/au-suivant.html

After years of use, I never found some real issue with this schema.

Regards,

Olivier

> Le 10 janv. 2017 à 22:49, Kirk Brooks <[email protected]> a écrit :
>
> This is sort of retro post but it came up for me today. I was studying a
> component written by someone else and tracing through the good parts to see
> how the magic happens. In this case the cool magic happens in a separate
> process but the c-obj parameter was loaded up in the method that called it.
> No problem, I'll just click over to the Explorer and do Search Callers on
> the method name - and find there are no callers. The reason, of course, is
> because the method is invoked by New process which takes the name of the
> method, not the method itself.
>
> I can do a Find in design to locate the literal instance of the method. I
> know that. But it's a little clunky to have to switch search methods plus
> such methods appear on the list of 'unused' methods (if you look at such
> things).
>
> I handle initiating methods in separate processes within the method itself.
> There are two primary forms this takes:
>
> "fire and forget" to simply launch a method in a new process
> "persistent" if it's something more controlled
>
>
> The basic form for a fire & forget method (can be local or process):
>
> case of
> :(count parameters=0) // launch method
>   // could do some error checking here too
>  $id:=New process(Current method name;Util_get_stackSize;current method
> name; Current process)
> :(count parameters=1)  // actually run the code
>   // do whatever
> end case
>
> ​And this could have more parameters if needed. ​
>
>
> ​I frequently let users open records into their own process for editing or
> viewing. So in this case the I need to be more specific about naming the
> new process. Here's a 'persistent' method where $1 is a record id.
>
> ​case of
> :(count parameters=0) // that's an error
>
> :(count parameters=1)  // launch method
>
>  $procName:=Current method name+"_"+string($1)  ` name the process with
> the record number
>
>  $id:=Process number($procName)
>
>    // could do some error checking here or gather other data
>
>  if($id=0)  // launch it
>
>    $id:=New process(Current method name;Util_get_stackSize;$procName $1;
> Current process)
>
>  else
>
>    Bring to front($id)
>
>  end if
>
> :(count parameters=2)  // actually run the code
>
>  $recordID:=$1
>
>  // do whatever
> end case
>
>
> ​I pass the record id in $1. If the user already has it open on his machine
> I just bring it to the front. If not I open it. This is also good for
> things like "Message viewer" where you only want a single instance running
> for the user.
>
> ​Using a c-obj for $1 opens up greater possibilities. And there's no reason
> to use only 2 params. The key is simply using the number of params to
> determine how to run the method.
>
> ​OK, this isn't like a cure for cancer or anything but it sort of follows
> the other discussions about setting up code in 4D. The things I like about
> it:
>
>   - the method's use is 'recognized' and shows up using Search references
>   - initiation of the method is self contained
>   - it's easy to do error checking within the initiating process before
>   starting the new process. Keeps errors closer to their origin​
>   - very easy to identify existing instances and bring to front
>   - using Current method name is an easy way to avoid issues of language
>   localization
>
> ​Performance wise I think it's a wash - not better or worse. The benefits
> are simply in the code management. ​
>
> --
> Kirk Brooks
> San Francisco, CA
> =======================
> **********************************************************************
> 4D Internet Users Group (4D iNUG)
> FAQ:  http://lists.4d.com/faqnug.html
> Archive:  http://lists.4d.com/archives.html
> Options: http://lists.4d.com/mailman/options/4d_tech
> Unsub:  mailto:[email protected]
> **********************************************************************




Olivier Deschanels
Consultant Expert

4D SAS
66 route de Sartrouville
Parc Les Erables - Batiment 4
78230 Le Pecq
France

Standard :  +33 1 30 53 92 00
Fax :       +33 1 30 53 92 01
Email :     [email protected]
Web :       www.4D.com
AIM :       olivierd4d
iChat       olivierd4d
Skype       olivierd4d


**********************************************************************
4D Internet Users Group (4D iNUG)
FAQ:  http://lists.4d.com/faqnug.html
Archive:  http://lists.4d.com/archives.html
Options: http://lists.4d.com/mailman/options/4d_tech
Unsub:  mailto:[email protected]
**********************************************************************

Reply via email to