Kann mir jemand helfen, das zu verbessern? Es muss doch einen besseren Weg geben. Was ich tue, ist der Aufbau eines lokalen Webdienstes für Flex zu greifen, um ein Baummenü zu bestücken. Flex als die Anwendung, die ich den Webdienst aufrufe, ist nur einige Hintergrund aber hat nichts mit dem Problem zu tun.
Um hierarchische Daten für diesen Baum zu erstellen, habe ich folgendes programmiert.
<cffunction name="getFormsBinMenu" access="remote" returntype="string">
<cfquery name="getParents" datasource="db_intranet_data">
SELECT * FROM formsbin_categories WHERE parentid = 1 ORDER BY sortorder ASC
</cfquery>
<cfoutput>
<cfxml variable="formsBinMenu">
<?xml version='1.0' encoding='utf-8' ?>
<folder label="Forms Bin">
<cfloop query="getParents">
<folder label="#XMLFormat(getParents.catname)#">
<cfquery name="getSubParents" datasource="db_intranet_data">
SELECT * FROM formsbin_categories WHERE parentid = #catid# and testonly = 0 and visible = 1 ORDER BY sortorder ASC
</cfquery>
<cfloop query="getSubParents">
<folder label="#XMLFormat(getSubParents.catname)#">
<cfquery name="getNextSubParents" datasource="db_intranet_data">
SELECT * FROM formsbin_categories WHERE parentid = #catid# and testonly = 0 and visible = 1 ORDER BY sortorder ASC
</cfquery>
<cfloop query="getNextSubParents">
<folder label="#XMLFormat(getNextSubParents.catname)#"/>
</cfloop>
</folder>
</cfloop>
</folder>
</cfloop>
</folder>
</cfxml>
</cfoutput>
<cfset menu = #toString(formsBinMenu)#>
<cfreturn menu>
</cffunction>
Wie Sie sehen können, durchlaufe ich gerade verschiedene Abfragen. Während dies für meinen Zweck funktioniert, wie könnte ich es so codieren, dass es nicht so viele Codewiederholungen gibt?
Ich dachte an die Überprüfung, um zu sehen, wie viele Ebenen tief die Struktur wäre und dann läuft es alle in einer Index-Schleife, aber das scheint immer noch wie zu viel Overhead.
Jeder Vorschlag wäre großartig!