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] **********************************************************************

