Welcome!

You will be redirected in 30 seconds or close now.

ColdFusion Authors: Yakov Fain, Jeremy Geelan, Maureen O'Gara, Nancy Y. Nee, Tad Anderson

Related Topics: ColdFusion

ColdFusion: Article

Handling Recursion

Handling Recursion

Recursion is a wonderfully geeky word that comes from the Latin word recursio, meaning "to run back."

A recursive procedure (or function, or subroutine) is a procedure that calls itself to do part of the work. The ancients showed the concept of recursion as a snake eating itself.

For a more modern consideration, here's what the dictionary says:

recursion (ri-'ker-zhen) : see recursion

[insert groan here] Recursion in ColdFusion is often done by means of a custom tag. The technique itself is very helpful and can provide functionality that would be difficult to achieve if we didn't have it.

A Case for Recursion
I want to take a look at this technique this month, since it's a topic that often frustrates, even frightens, developers. Let's examine an application written for the megacorporation FuseboxersRus. They've decided to create a human resources application to help the many Fuseboxers that work for the company. They want sections related to employee benefits, company information, internal job openings, and training opportunities.

After discussions and prototyping, we determine that the application will have a simple two-tier architecture. The home circuit will be HumanResources. Underneath it will be circuits for Benefits, Fuse-boxersRus, Openings, and Training (see Figure 1).

Further, while each section should have its own home page, the HR department wants an application home page to look like Figure 2. This single home page, generated by the fuseaction HumanResources.main, actually needs information from each circuit. The stock quote will come from the FuseboxersRus circuit, the job openings from Openings, the training opportunities from Training, and the benefits from Benefits.

Using Recursion to Eliminate Duplicate Code
Duplicating code in both home and individual circuits is bad technique. Instead, let's have each circuit respond to fuseactions specifically designed to return information to the home circuit. For the stock quote the Company circuit responds to the fuseaction request, Company.stock-Quote. The job openings will be handled by Jobs.random3. The fuseaction, Training.upcoming, will provide the information on training opportunities, and we'll get a list of random benefits by executing the fuseaction Benefits.random5 (see Figure 3).

With cases like this - and there are many such cases in creating real-world applications - the best method is to call the application recursively. In effect, we want to suspend processing of the current fuseaction for a moment while we ask the application to return the information we need to complete the waiting fuseaction.

We can do just that with Fusebox 3. Listing 1 is a snippet from the FBX_ Switch.cfm file in the home circuit.

Each <cfmodule> call spawns a separate process, giving us the effect of suspending the original fuseaction while we go out and get the needed information.

The code for the fuseaction is straightforward. The only thing different about it is that it returns information in the caller scope, which is needed so that custom tags can communicate with the pages that called them. If we have code that will be invoked both through a custom tag and normally, this code snippet (placed in the home circuit's FBX_Settings.cfm file) will automatically adjust the scope of the code:

<cfif Fusebox.isCustomTag>
<cfset Scope = "Caller">
<cfelse>
<cfset Scope = "Variables">
</cfif>
The variable Fusebox.isCustomTag is part of the application programming interface provided by Fusebox 3. Using this technique you can create applications that are more powerful, tidier, and require less code.

[This article is excerpted from the book Discovering Fusebox, by Hal Helms and John Quarto-vonTivadar.]

More Stories By Hal Helms

Hal Helms is a well-known speaker/writer/strategist on software development issues. He holds training sessions on Java, ColdFusion, and software development processes. He authors a popular monthly newsletter series. For more information, contact him at hal (at) halhelms.com or see his website, www.halhelms.com.

Comments (0)

Share your thoughts on this story.

Add your comment
You must be signed in to add a comment. Sign-in | Register

In accordance with our Comment Policy, we encourage comments that are on topic, relevant and to-the-point. We will remove comments that include profanity, personal attacks, racial slurs, threats of violence, or other inappropriate material that violates our Terms and Conditions, and will block users who make repeated violations. We ask all readers to expect diversity of opinion and to treat one another with dignity and respect.


IoT & Smart Cities Stories
The deluge of IoT sensor data collected from connected devices and the powerful AI required to make that data actionable are giving rise to a hybrid ecosystem in which cloud, on-prem and edge processes become interweaved. Attendees will learn how emerging composable infrastructure solutions deliver the adaptive architecture needed to manage this new data reality. Machine learning algorithms can better anticipate data storms and automate resources to support surges, including fully scalable GPU-c...
Machine learning has taken residence at our cities' cores and now we can finally have "smart cities." Cities are a collection of buildings made to provide the structure and safety necessary for people to function, create and survive. Buildings are a pool of ever-changing performance data from large automated systems such as heating and cooling to the people that live and work within them. Through machine learning, buildings can optimize performance, reduce costs, and improve occupant comfort by ...
The explosion of new web/cloud/IoT-based applications and the data they generate are transforming our world right before our eyes. In this rush to adopt these new technologies, organizations are often ignoring fundamental questions concerning who owns the data and failing to ask for permission to conduct invasive surveillance of their customers. Organizations that are not transparent about how their systems gather data telemetry without offering shared data ownership risk product rejection, regu...
René Bostic is the Technical VP of the IBM Cloud Unit in North America. Enjoying her career with IBM during the modern millennial technological era, she is an expert in cloud computing, DevOps and emerging cloud technologies such as Blockchain. Her strengths and core competencies include a proven record of accomplishments in consensus building at all levels to assess, plan, and implement enterprise and cloud computing solutions. René is a member of the Society of Women Engineers (SWE) and a m...
Poor data quality and analytics drive down business value. In fact, Gartner estimated that the average financial impact of poor data quality on organizations is $9.7 million per year. But bad data is much more than a cost center. By eroding trust in information, analytics and the business decisions based on these, it is a serious impediment to digital transformation.
Digital Transformation: Preparing Cloud & IoT Security for the Age of Artificial Intelligence. As automation and artificial intelligence (AI) power solution development and delivery, many businesses need to build backend cloud capabilities. Well-poised organizations, marketing smart devices with AI and BlockChain capabilities prepare to refine compliance and regulatory capabilities in 2018. Volumes of health, financial, technical and privacy data, along with tightening compliance requirements by...
Predicting the future has never been more challenging - not because of the lack of data but because of the flood of ungoverned and risk laden information. Microsoft states that 2.5 exabytes of data are created every day. Expectations and reliance on data are being pushed to the limits, as demands around hybrid options continue to grow.
Digital Transformation and Disruption, Amazon Style - What You Can Learn. Chris Kocher is a co-founder of Grey Heron, a management and strategic marketing consulting firm. He has 25+ years in both strategic and hands-on operating experience helping executives and investors build revenues and shareholder value. He has consulted with over 130 companies on innovating with new business models, product strategies and monetization. Chris has held management positions at HP and Symantec in addition to ...
Enterprises have taken advantage of IoT to achieve important revenue and cost advantages. What is less apparent is how incumbent enterprises operating at scale have, following success with IoT, built analytic, operations management and software development capabilities - ranging from autonomous vehicles to manageable robotics installations. They have embraced these capabilities as if they were Silicon Valley startups.
As IoT continues to increase momentum, so does the associated risk. Secure Device Lifecycle Management (DLM) is ranked as one of the most important technology areas of IoT. Driving this trend is the realization that secure support for IoT devices provides companies the ability to deliver high-quality, reliable, secure offerings faster, create new revenue streams, and reduce support costs, all while building a competitive advantage in their markets. In this session, we will use customer use cases...