2015-04-13 2 views
1

Je souhaite exécuter une requête sur chaque page demandée par un utilisateur. Cette requête est nécessaire pour récupérer les préférences définies par l'organisation de l'utilisateur pour l'application. Voilà ce que j'ai essayé:Comment faire pour exécuter une requête cfquery dans la fonction onRequestStart()?

<cffunction name="onRequestStart" access="public" returntype="boolean"> 
    <cfargument type="String" name="TargetPage" required="true"/> 
<cfquery name="rsSettings"> 
SELECT * 
FROM 
dbo.Settings 
</cfquery> 
<cfreturn true> 
</cffunction> 
</component> 

Cependant toutes les pages qui recherche le rsSettings dit que son recordset pas défini. Si je mets la même requête dans chaque page qui en a besoin alors cela fonctionne bien.

Est-ce que onRequestStart() ne gère pas cfquery?

+0

Oui, bien sûr, il le fait. Si ce n'était pas le cas, vous auriez une erreur. Cependant, 'onRequestStart()' ne dicte pas la portée de vos variables: c'est à vous de traiter. Si vous souhaitez que les données soient disponibles à l'échelle de la demande, vous devez placer les données dans une étendue disponible à l'échelle de la demande. Comme @OagerMouzer le signale: dites la portée de la requête. Cela dit, le type de données que vous présentez semble spécifique à l'application, pas spécifique à la demande? –

+2

Les paramètres sont susceptibles de changer d'une demande à l'autre? Peut-être une meilleure idée de mettre les résultats dans la portée de la session ou de l'application s'ils ne changeront pas beaucoup. –

+0

@AdamCameron Il s'agit d'une application-portée pour chaque entreprise unique qui utilise l'application. Je ne sais pas comment définir la portée de l'application uniquement pour chaque client qui utilise l'application. Vous avez mentionné la désignation de l'application pour chaque entreprise, mais je ne comprends pas comment procéder. –

Répondre

3
<cfquery name="request.rsSettings"> 
    SELECT * 
    FROM 
    dbo.Settings 
</cfquery> 

Puis, dans l'utilisation de la page:

request.rsSettings.columName 
+0

Oh je vois. Je pensais qu'il était stocké dans la portée VARIABLES comme une requête normale. –

+3

Exécution de cette requête sur chaque demande de page pour éviter le potentiel de problèmes de mémoire n'est pas quelque chose que je suggérerais. J'ai travaillé sur des applications avec des exigences similaires et le stockage des informations dans la portée de l'application était plus que suffisant. –

+2

@volumeone sans spécifier la portée, la requête a été stockée dans la portée des variables, de l'application.cfc. Cette portée privée de l'objet d'application n'est pas visible pour les autres parties de la demande – Twillen