Am i supposed to invoke application.cfc?
My website is always on the index.cfm page, do I just throw a <cfinvoke> tag in there to call the application.cfc? Am I supposed to name it with an uppercase A (Application.cfc)?
Am I supposed to name it with an uppercase A (Application.cfc)?
Yes.
My website is always on the index.cfm page, do I just throw a <cfinvoke> tag in there to call the application.cfc?
No. Coldfusion instantiates Application.cfc automatically.
Similar Messages
-
Application.cfc and invoking by url a cfc
hi all!
i have to invoke by url a cfc. like this...
http://domain/cfcByUrl.cfc?method=get
now, if i add application.cfc to root of my application, my
cfc invoked by url not works! it return only a white page!
what happen? where do i wrong?
cfmx7.0.2 on linux
thanks
Robvkr, thanks for your reply
quote:
You have to call the CFC's through the URL by passing the
function and its arguments
yes, it is.
quote:
You have to set your function access type to remote
yes, it is.
i make some testing.
if i remove onRequest method in my application.cfc my cfc
called by url works perfectly. but, i think, is not a good choice
remove onRequest... :o) this is mine...
<cffunction name="onRequest" output="Yes">
<cfargument name="targetPage" type="string"
required="yes" />
<cfinclude template="#arguments.targetPage#" />
</cffunction>
i test this situation on linux and windows. i've the same
problem.
thank
Rob -
How application.cfc is supposed to work (AJAX & onRequest)
I'm an intermediate CF developer using CF8 on a Windows 2k3 box. We are using AJAX, and as such are using the following chunk o' code in the onRequestStart to ensure AJAX calls don't have issue:
<cfif listLast( cgi.cf_template_path, '.' ) is 'cfc'>
<cfset structDelete( this, 'onRequest' ) />
</cfif>
Everything is working fine, however, when I perform an AJAX call to a file that resides at: /framework/com/page.cfc I get an error message that seems to be the application.cfc firing off from the com folder (located at /framework/com) It states it cannot find the config.ini file in that folder, but the config.ini file is in the root, where the application.cfc is. To load the config.ini, I am using:
<!--- Get config file keys for application settings. --->
<cfset lstKeys = evaluate( 'getProfileSections( getDirectoryFromPath( getBaseTemplatePath() ) & "\config.ini" ).#application.vars.environment#' ) />
(The above code is where the error message references) I'm told the app.cfc transcends down the folder path until another application.cfc is found (I'm not using others), so is the app.cfc running from the /framework/com folder? is that why it's trying to find a config file at /framework/com/config.ini?I'm sorry if I mislead in my original message, but I am loading the config.ini in the onApplicationStart (this is why I'm confused as to why this code is executing again when I make my AJAX request - not only is it running onApplicationStart, but it's doing so assuming the now current location of /framework/com is the "root" (and it's not).
Basically, every key in my config file becomes a variable and value in a structure called application.vars. So if the config.ini has an entry of:
absoluteRootURL=http://www.domain.com/folder
Then I'll have:
application.vars.absoluteRootURL (and it'll be set to 'http://www.domain.com/folder')
I tested this by dumping in onApplicationStart, and the structure is created as expected. I just can't figure out why onApplicationStart is being recalled during this AJAX. -
Cfobject / cfinvoke problem in my application.cfc
Hello;
I am trying to use cfobject in my onsessionstart function in my application.cfc file. The cfobject is another application.cfc file I have in a sub directory in the web site, it runs the shopping cart. I am not firing this off properly and I was hoping someone could help me fix my code so it will operate properly.This is my invoke statement:
<cfobject name="SESSION.myShoppingCart" component="ShoppingCart">
<cfinvoke component="#SESSION.myShoppingCart#" method="getShoppingCart">
This is my whole argument statement for on session start:
<cffunction name="onSessionStart" returntype="any" output="true">
<cfset SESSION.created = now()> <!--- This sets off another session in the site --->
<cfobject name="SESSION.myShoppingCart" component="ShoppingCart">
<cfinvoke component="#SESSION.myShoppingCart#" method="getShoppingCart">
</cffunction>
this is my error:
Context validation error for tag cffunction.
The end tag </cffunction> encountered on line 80 at column 11 requires a matching start tag.
The error occurred in C:\website\Application.cfc: line 28
26 : <cffunction name="onSessionStart" returntype="any" output="true">
27 : <cfset SESSION.created = now()>
28 : <cfobject name="SESSION.myShoppingCart" component="ShoppingCart">
29 : <cfinvoke component="#SESSION.myShoppingCart#" method="getShoppingCart">
Can anyone help me? What do I need to do to set off my shopping cart functions on the cfc I am trying to invoke?
Thank You
CFmongerthis is what I am supposed to put in the on sessionstart function:
<cfobject name="SESSION.myShoppingCart" component="ShoppingCart">
But this throws the same error. I am reading this off of instructions from a book. Obviously the book is wrong. Is there a way to make that cfobject statement work? I don't want a return variable. I want the ShoppingCart.cfc that resides in the sub directory /donation/ShoppingCart.cfc to go into client memory, I don't need a return value, I need the shoppong cart application portion fired when they hit the web site, creating a "shopping cart" in session / client variables.
How would I do that using this tag? Thanks.
CFmonger -
CFGrid and Application.cfc - bug??
I don't understand what is happening here.
If I open the cfgrid.cfm page without the Application.cfc
file it works fine.
With the application.cfc file the grid does not populate.
If I comment out the cfajaximport, onrequeststart, onrequest
and onrequestend it works fine.the best i could find was comment #8 by Scott Jibben here:
http://www.forta.com/blog/index.cfm/2007/6/4/ColdFusion-Ajax-Tutorial-4-Partial-Page-Updat es
i was apparently remembering things wrong and it is
onRequestEnd method
that seems to be the culprit... though i suppose depending on
what you
have in onRequest method may make it a collaborator too... i
know for
sure onRequest interferes with flash remoting and invoking
cfc's as
webservice...
but why do you have <cfajaximport ...> tag in your
Application.cfc???
iirc, that is not a good practice - you should use it on your
.cfm page
in general, and in your particular case i don't think you
need it at all.
Azadi Saryev
Sabai-dee.com
http://www.sabai-dee.com -
SetEncoding() and application.cfc
Is this a bug, or I just didn't understand the way it is
supposed to work?
I just finished determining that if one puts a <cfset
setEncoding("form","encodingType")> in the
psudo-consructor (after the
<cfcomponent...> but before any <cffunction...)
tags) of Application.cfc
one will always receive empty form structures on an action
page.
When I tried moving said setEncoding() line to the
onRequestStart()
function. All was well? Is there a reason for this I do not
understand
with my very limited knowledge of page encoding?Application.cfc is event-driven, all its methods being
events. I think
you should expect to be in uncharted territory if you use any
method
different from the given list
First, you can augment the functions of Applicaiton.cfc if
you so
desire, it is just that these functions will never be called
by any
event. But there is nothing wrong with them being called by
functions
called as a result of one of the defined events.
Secondly, I was not doing this.
Relevant parts of my Application.cfc file:
<cfcomponent output="no">
<cfprocessingdirective pageencoding="windows-1252" />
<cfset variables.coding = "windows-1252">
<!--- placing these setEncoding() functions here, in the
psudo
constructor, failed. This cause the form structure to always
be empty. --->
<cfset setEncoding("form",variables.coding)>
<cfset setEncoding("url",variables.coding)>
<cffunction name="onRequestStart" output="false">
<cfargument name="requestname" required="yes">
<!--- placing these setEncoding() functions here, in the
onRequestStart, works fine. --->
<cfset setEncoding("form",variables.coding)>
<cfset setEncoding("url",variables.coding)>
</cffunction>
</cfcomponent> -
Work around for Application.cfc
I have an Application.cfc file that outputs a header and footer page for every request. That works wonderful but if I try to open a page that is doing a <cfgrid> using a CFC file than I get an error of "Error invoking CFC /GATS/CFC/purchaseOrder.cfc : Internal Server Error [Enable debugging by adding 'cfdebug' to your URL parameters to see more information]" when opening the page.
Commenting out the header/footer include in the Application.cfc file lets the <cfgrid> populate with the CFC file. Is there a fix or work around for this?
Application.cfc file
<cfcomponent output="false">
<cffunction name="onRequestStart" returnType="boolean" output="true">
<cfargument name="thePage" type="string" required="yes">
<cfset PageName = GetFileFromPath(thePage)>
<cfif not IsDefined("session.user.isAuthenticated") or
session.user.isAuthenticated equal session.no>
<cfif FindNoCase('index.cfm', PageName) is not 0>
<cfelse>
<cfset session.messages[1] = "Authentication required.">
<cflocation url="#application.WebAddress#" addtoken="no">
</cfif>
</cfif>
<cfif FindNoCase('index.cfm', PageName) is not 0>
<cfset request.PageNavigation = "">
<cfset request.Screen = "Login">
</cfif>
<cfif FindNoCase('mainMenu.cfm', PageName) is not 0>
<cfset request.PageNavigation = "Home">
<cfset request.Screen = "">
</cfif>
<cfif FindNoCase('purchaseOrder.cfm', PageName) is not 0>
<cfset request.PageNavigation = '<a href="mainMenu.cfm">Home</a> &##8226; New Purchase Order'>
<cfset request.Screen = "">
</cfif>
<cfif FindNoCase('logout.cfm', PageName) is not 0>
<cfelse>
<cfinclude template="includes/header.cfm">
</cfif>
<cfreturn true>
</cffunction>
<cffunction name="onRequestEnd" returnType="void" output="true">
<cfargument name="thePage" type="string" required="yes">
<cfset PageName = GetFileFromPath(thePage)>
<cfif FindNoCase('logout.cfm', PageName) is not 0>
<cfelse>
<cfinclude template="includes/footer.cfm">
</cfif>
</cffunction>
</cfcomponent>
purchaseOrder.cfm
<cfgrid name="AccountGrid" format="html" bind="cfc:GATS.CFC.purchaseOrder.GetQuantities({cfgridpage},{cfgridpagesize}, {cfgridsortcolumn}, {cfgridsortdirection})">
<cfgridcolumn name="ID" header="ID" display="yes">
<cfgridcolumn name="vendor_name" header="Name" display="yes">
</cfgrid>
I found this on the web:
That error is due to our application.cfm having a single HTML comment at the
start of the file. Apparently if your Application.cfm or Application.cfc file
outputs ANYTHING, binds to CFCs with AJAX (via HTML CFGRID or CFAJAXPROXY, for
example) do not work. The CFC will be called, but the data from it will never
"flow" into the CFGRID. Removing the comment from the Application.cfm file took
care of our CFGRID issue.
This there a way to have an Application.cfc file that displays a header and footer for every page and have and
have a page have a <cfgrid> in it?BKBK,
I created the examples you posted and commenting out the header/footer lines in my Application.cfc displayed the cfgrid results (updating the query to a table I had). Running the same example code with the header/footer included in the Application.cfc would not show the cfgrid results.
I attached the Application.cfc file for review.
Couldn't attach the file.
Application.cfc
<cfcomponent output="yes">
<cfset this.name = "GATS">
<cfset this.clientmanagement = "true">
<cfset this.applicationtimeout = CreateTimeSpan("0","0","20","0")>
<cfset this.sessionmanagement = "true">
<cfset this.sessiontimeout = CreateTimeSpan("0","0","20","0")>
<cfset this.scriptProtect = "true">
<cfparam name="session.yes" default="Yes">
<cfparam name="session.no" default="No">
<cffunction name="onApplicationStart" returnType="boolean" output="no">
<cfset application.Directory = "/GATS/">
<cfset application.Datasource = "IA-webapplications">
<cfset application.DatasourceGATS = "SBS-GATS">
<cfreturn true>
</cffunction>
<cffunction name="onApplicationEnd" returntype="void" output="no">
<cfargument name="ApplicationScope" required="yes" />
</cffunction>
<cffunction name="onSessionStart" returntype="void" output="no">
<cflock scope="session" timeout="5" type="exclusive">
<cfset session.no = "No">
<cfset session.yes = "Yes">
<cfset session.new = "New">
<cfset session.user = StructNew()>
<cfset session.user.isAuthenticated = session.no>
<cfset session.user.emplid = "">
<cfset session.user.userSSOId = "">
<cfset session.user.firstName = "">
<cfset session.user.lastName = "">
<cfset session.user.name = "">
<cfset session.messages = ArrayNew(1)>
<cfset session.savedInputValues = ArrayNew(1)>
<cfset session.filesTransferred = "">
</cflock>
</cffunction>
<cffunction name="onSessionEnd" returntype="void" output="no">
<cfargument name="SessionScope" required="yes">
<cflock scope="session" timeout="5" type="exclusive">
<cfset Arguments.SessionScope.user.isAuthenticated = session.no>
<cfset Arguments.SessionScope.users.emplid = "">
<cfset Arguments.SessionScope.user.userSSOId = "">
<cfset Arguments.SessionScope.user.firstName = "">
<cfset Arguments.SessionScope.user.lastName = "">
<cfset Arguments.SessionScope.user.name = "">
</cflock>
</cffunction>
<cffunction name="onRequestStart" returntype="void" output="yes">
<cfargument type="String" name="TargetPage" required="yes">
<cfset PageName = GetFileFromPath(TargetPage)>
<cfif not IsDefined("session.user.isAuthenticated") or
session.user.isAuthenticated equal session.no>
<cfif FindNoCase('index.cfm', PageName) is not 0>
<cfelse>
<cfset session.messages[1] = "Authentication required.">
<cflocation url="#application.WebAddress#" addtoken="no">
</cfif>
</cfif>
<cfif FindNoCase('index.cfm', PageName) is not 0>
<cfset request.PageNavigation = "">
<cfset request.Screen = "Login">
</cfif>
<cfif FindNoCase('mainMenu.cfm', PageName) is not 0>
<cfset request.PageNavigation = "Home">
<cfset request.Screen = "">
</cfif>
<cfif FindNoCase('purchaseOrder.cfm', PageName) is not 0>
<cfset request.PageNavigation = '<a href="mainMenu.cfm">Home</a> &##8226; New Purchase Order'>
<cfset request.Screen = "">
</cfif>
<cfif FindNoCase('logout.cfm', PageName) is not 0>
<cfelse>
<cfinclude template="includes/header.cfm">
</cfif>
</cffunction>
<cffunction name="onRequestEnd" returntype="void" output="yes">
<cfargument type="String" name="TargetPage" required="yes">
<cfset PageName = GetFileFromPath(TargetPage)>
<cfif FindNoCase('logout.cfm', PageName) is not 0>
<cfelse>
<cfinclude template="includes/footer.cfm">
</cfif>
<cfif FindNoCase('sessionTerminated.cfm', PageName) is not 0>
<cfinvoke method="onSessionEnd">
<cfinvokeargument name="SessionScope" value="#session#">
</cfinvoke>
</cfif>
</cffunction>
<cffunction name="onError" returnType="void" output="no">
<cfargument name="exception" required="true">
<cfargument name="eventName" type="string" required="true">
<cfthrow object="#arguments.exception#">
</cffunction>
</cfcomponent> -
Below is a section of my application.cfc.
The page loads ok but when I make changes to
the applcication variables (e.g Application.var1="var1Name";
) no changes take place when the page reloads on the browser.
I have to restart the ColdFusion service for this changes to
be implementated. For example if I cahnge the value of
Application.var1 to "three". I will need to restart the service for
this to be implemented.
Any ides ?
<cfcomponent>
<cfset This.applicationimeout =
createTimeSpan(0,0,20,0)>
<cfset This.clientmanagement= "yes">
<cfset This.loginstorage = "session">
<cfset This.Sessionmanagement = "yes">
<cfset This.Sessiontimeout = createTimeSpan(0,0,20,0)>
<cfset This.SetClientCookies = "yes">
<cfset This.SetDomainCookies = "no">
<cfset This.ScriptProtect = "all">
<cfset This.SiteMaintenance="false">
<cfset This.thePath = "
http://localhost/resume/">
<cffunction name="onApplicationStart">
<cfscript>
//set your app vars for the application
Application.var1="var1Name";
Application.var2 = "var2Name";
Application.var3="var3Name";
</cfscript>
<cftry>
</cffunction>
</cfcomponent>Any ideas?
Yup. It is working exactly like it is supposed to. Reloading
the page
in the browser is not a new application start. An application
start, by
definition, only happens once after any previous application
has timed
out or been stopped, such as stopping the ColdFusion service.
Two ideas to consider. If you are resetting variables, should
they be
application variables. Maybe you are really dealing with data
that
should be session variables.
Second, most of us write some kind of refresh trigger into
our apps.
What I usually do is in onRequestStart of code something like
this.
<cfif structKeyExists(ur,"refresh")>
<cfscript>
onApplicationStart();
</cfscript>
</cfif>
This will call the onApplicationStart function if the request
contains a
refesh variable. -
Application.cfc importing variables
Hi all
In my application.cfc I have:
<cffunction name="onApplicationStart" returnType="boolean" output="false">
<cfscript>
Application.DNS = "BS";
Application.SitePath = "D:\Sites\FF";
Application.IPP = "10";
Application.SiteName = "meta site name";
Application.SiteKeywords = "equipmnet";
Application.SiteDescription = "Meta Description";
Application.SiteLogo = "logo.gif";
Application.Key = "myzlvEmrSbUcyDFdwdfsdfsdfE";
</cfscript>
<cfreturn true>
</cffunction>
I would like to move these variables into file outside the site folder. How can I import this file into application.cfc again and set application variables?Yes - true enough from a CF standpoint, though I would imagine that
is would be possible to read an application.cfc via php or somehting
else that's not cf... maybe he's got other people in there with ftp
access as well ...
who knows...
I was thinking particularly about importing files, reading them and setting application variables. In any case, I would gladly turn the subject on its head.
Suppose your Aplication.cfc is composed in the usual, recommended way. It is under the web root and you publish its content. What are the possibilities for someone to use it to compromise your site?
Minimal, absolutely minimal. The security of the Coldfusion platform is mature enough -- in fact, more mature than most! -- to cope with this situation. In my experience, developer colleagues should be more worried about exposing code like this in their components:
<cfif noOfComplaints GT 0>
<cfset isAShitCustomer = TRUE>
<cfif> -
Tracking users in the Application.cfc, please help
Hello;
I wrote a small tracking system for my web site. I am trying
to upfrade it to work in CF 8. Here is what I am doing.
I had this code on the index.cfm page of my site. I am
attempting to move it to the Application.cfc file. When I do, it
registers in the DB every time the user hits a page or clicks a
link. I don't want it to do that. I do want it to tell me when they
hit the site, and if I can what page they came in on.
Here is my code:
<cfquery name="tracking" datasource="my-DB"
dbtype="ODBC">
INSERT INTO tracking (REMOTE_ADDR, HTTP_USER_AGENT,
TRACK_DATE, PageID)
VALUES('#REMOTE_ADDR#', '#HTTP_USER_AGENT#',
#CreateOdbcDateTime(now())#)
</cfquery>
My pageID is where I want the information on what page the
user came in on to go.
I placed teh query inside a session function code, but it
doesn't work at all right now, I need to limit the hits counted by
the Application.cfm, if I place it inside the area of the app that
is for global variables, it adds info to the DB everytime they
click a link and I don't want that. As for the entry page of the
user, I am trying to make it so if someone enters the site lets say
on the about.cfm page, that is added to the db and so on. Is this
possible? If so how would I do that?
Here is my application.cfc code so far:
<cfcomponent output="false">
<cfset THIS.name = "my-web">
<cfset this.sessionManagement="yes">
<cfset this.clientManagement=true>
<cffunction name="onApplicationStart" returntype="boolean"
output="false">
<cfset APPLICATION.appStarted = now()>
<cfreturn true>
</cffunction>
<cffunction name="onApplicationEnd" returntype="void"
output="false">
<cfargument name="appScope" required="True">
<cflog file="#THIS.name#" text="App ended after
#dateDiff('n' , ARGUMENTS.appscope.appStarted,now())# minutes.">
</cffunction>
<cffunction name="onSessionStart" returntype="query"
output="true">
<cfquery name="tracking" datasource="creative"
dbtype="ODBC">
INSERT INTO tracking (REMOTE_ADDR, HTTP_USER_AGENT,
TRACK_DATE)
VALUES('#REMOTE_ADDR#', '#HTTP_USER_AGENT#',
#CreateOdbcDateTime(now())#)
</cfquery>
</cffunction>
<cffunction name="onRequestStart" returntype="boolean"
output="true">
<cfset request.datasource = "my-db">
<cfset sitePath = "
http://www.myweb">
<!--- this is where I was putting the tracking code and it
added to the DB everytime someone clicked a link. not what I want
--->
<!--- Start True Url Variables --->
<cfloop
list="#removeChars(cgi.path_info,1,len(cgi.script_name))#"
delimiters="/" index="variableSet">
<cfscript>
variableName = "url." & listGetAt(variableSet,1,'.');
expression = listGetAt(variableSet,2,'.');
</cfscript>
<cfparam name="#variableName#" default="#expression#">
</cfloop>
<!--- Finish True Url Variables --->
<cfreturn true>
</cffunction>
</cfcomponent>
Thank you.
PhoenixI did a dump and got it to error out, so it is recognizing
the session, but it doesn't add any info to the DB. I also had to
change it, I had it like this:
<cffunction name="onSessionStart" returntype="query"
output="true">
<cfquery name="tracking" datasource="my-db"
dbtype="ODBC">
INSERT INTO tracking (REMOTE_ADDR, HTTP_USER_AGENT,
TRACK_DATE)
VALUES('#REMOTE_ADDR#', '#HTTP_USER_AGENT#',
#CreateOdbcDateTime(now())#)
</cfquery>
</cffunction>
Changed it to this:
<cffunction name="onSessionStart" returntype="any"
output="true">
<cfquery name="tracking" datasource="creative"
dbtype="ODBC">
INSERT INTO tracking (REMOTE_ADDR, HTTP_USER_AGENT,
TRACK_DATE)
VALUES('#REMOTE_ADDR#', '#HTTP_USER_AGENT#',
#CreateOdbcDateTime(now())#)
</cfquery>
</cffunction>
it was erroring on the query attribute before in the session
function. Even that change didn't get it to work properly. -
Moving to CF10, Need help with Application.cfc
I've been googling about how to work with Application.cfc since last week but I still have some questions and I can't find the answers.
My application is under the root (in unix) and there are many subfolders underneath it. Each sub-folder is hosting a different web application.
From what I read, I can create 1 root Application.cfc and then on subsequent sub-folder, when I need to have another Application.cfc on that level, I can create ProxyApplication (see below) and then create a sub-folder level Applicatin.cfc
So, when I set an application.DSN on my root Application.cfc, using proxyApplication I don't have to reset this dsn again in my sub folder level Application.cfc
Since my loginform.cfm and loginaction.cfm is right under root directory too, I also set OnsessionStart in the root Application.cfc to handle user login. Then this means, I don't have to reset session variable again anywhere because session.username, etc has been set on the highest level.
Is this correct?
In addition, Am I correct when I do the following:
1. Since I have root level and sub-folder level Application.cfc, I should set this.name with a different name, am I right?
On the root Application.cfc I set this.name = "StudentServices" because this represent the global application
On the sub-folder level's Application.cfc, I set this.name to "StudentServices_stdLoad" becaus this sub-folder only handle student load application.
2. On the root Application.cfc, I set the DSN to the application scope. So on the sub-folder level Application.cfc I can check if a particular db is working or not
because as awhole, in the global sense, this web application uses more than one Databases. Each sub-folder may use a database that is dfferent than the other sub folder.
Am I doing the right thing? Please advice
Below is example of what I have, Thank you!
I created a root Application.cfc under the root directory:
<CFCOMPONENT displayname="Application" output="true" hint="My Root Application component">
<!--- Set up the application ---> <cfset THIS.Name = "StudentServices" /> <cfset THIS.ApplicationTimeout = CreateTimeSpan(0,0,30,0) /> <cfset THIS.SessionManagement = true /> <cfset THIS.SetClientCookies = false />
<cffunction name="OnApplicationStart" access="public" returntype="boolean" output="false">
<cfset application.MainDSN = "DSN1">
<cfset application.ReportDSN = "DSN2">
<cfreturn true/>
</cffunction>
<cffunction name="onApplicationEnd" output="false">
<cfargument name="applicationScope" required="true"> </cffunction>
<cffunction name="onSessionEnd">
</CFCOMPONENT>
Then, in this root directory I also created a ProxyApplication:
<!--- it's empty and it Serves merely to create an alias for your root /Application.cfc --->
<cfcomponent name="ApplicationProxy" extends="AdvancementServices.Application">
</cfcomponent>
Then in the Sub-Directory, I can create a sub-folder level Application.cfc extending the root Application.cfc:
<CFCOMPONENT displayname="Application" extends="ApplicationProxy">
<!--- Set up the sub-folder application --->
<cfset THIS.Name = "StudentServices_stdLoad"/>
<cfset THIS.ApplicationTimeout = CreateTimeSpan(0,0,30,0) />
<cfset THIS.SessionManagement = true/>
<cfset THIS.SetClientCookies = false/>
<cffunction name="OnApplicationStart" access="public" returntype="boolean" output="false">
<!--- ****** Testing whether the ADVUPGRD is accessible by selecting some data.****** --->
<cftry>
<cfquery name="TestMain_DSN" datasource="#application.MainDSN#" maxrows="2">
SELECT Count(*) FROM MyTable
</cfquery>
<!--- If we get a database error, report an error to the user, log the error information, and do not start the application. --->
<cfcatch type="database">
<cflog file="#this.name#" type="error" text="Main DSN is not available. message: #cfcatch.message# Detail: #cfcatch.detail# Native Error: #cfcatch.NativeErrorCode#" >
<cfthrow message="This application encountered an error when connecting to the Main Database. Please contact support." />
<cfreturn false>
</cfcatch>
</cftry>
<cflog file="#this.name#" type="Information" text="Application #this.name# Started">
<cfreturn true/>
</cffunction>
</CFCOMPONENT>
<cfargument name = "SessionScope" required=true/> <cfargument name = "AppScope" required=true/>
</cffunction>
<cffunction name="OnSessionStart" access="public" returntype="void" output="false">
<CFSET session.UserGroup = ""/>
<CFSET session.UserName = ""/>
<CFSET session.currentPage = ""/>
<CFSET session.loggedin = "No"/>
<CFSET session.userrights = ""/>
<cfreturn/>
</cffunction>OK. It sounds to me like you really shouldn't be using a single root Application.cfc at all, if all you want to do is share some settings between your "sub-applications". I would look at storing the common settings in an external file that all of the applications can read in. The simplest way is to put the settings in a .CFM file somwhere outside of the web root (so it is not directly web accessible) and load it with <cfinclude> tag into the OnApplicationStart() method of each sub-application's App.cfc. That .CFM file can be as simple as:
<cfset application.myCustomSetting = "blahblah">
<cfset application.myOtherSetting = "foo">
Alternatively, you can look at using a config file like this Ray Camden blog post suggests, and use the GetProfileSection(), GetProfileString(), and SetProfileString() functions as needed within OnApplicationStart(). You could even put ALL of your settings in
A third option is to store your settings in an XML file or in JSON format in a text file. You could then write code to read in the XML file, and use something like xml2struct.cfc to convert the XML into a struct, then append the struct to your application scope. If you go the JSON route, then just read in the JSON file and use DeserializeJSON() to convert it into a struct, and append it to the application scope.
What I think is probably the best approach is to use a community-supported MVC framework like FW/1 or ColdBox (maybe you already are, I don't think you've said so though). One of the many advantages to doing so is that they have built-in "environment" support that can be used to configure common settings, depending on your environment (dev/qa/production). You would handle reading in your external settings through the "environment" mechanism.
One other thing to think about: your login mechanism. I think you want to use one set of login tools that is shared by all of the "sub-applications". You can do this also by putting the login/authentication-related code somewhere outside the webroot of your applications, and then either set up a mapping to that location in CF Admin, or set an application-specific mapping in your various App.cfc files. That way all the "sub-applications" share a common set of code for the login process. I don't know how your login process works (do all users go to the same login page then get redirected into their relevant "sub-application", or does each "sub-application" have a discrete login page that utilizes common back-end processes to authenticate and redirect), so you'll have to judge how that is best accomplished.
Hopefully this gives you some useful ideas.
-Carl V. -
Which to use application.cfm or application.cfc?
Hi,
Just a general question, i have been using application.cfm
for my applications so far. I came across a tag that would be used
under application.cfc, but i tried putting both templates together
in one application and boom, an error showed up.
So, which is better to use with most of the applications
application.cfm or .cfc?
Thanks for any help!
SyedIt's actually a bit easier to use session and application
scope variables with Application.cfc, I think.
Application.cfc has methods for specific "events" or states:
onApplicationStart() -- where to load application variables,
security logic, etc.
onSessionStart() -- initialize session varialbes, etc.
onRequestStart() -- runs at the start of each page request
onRequestEnd()
onSessionEnd()
onApplicationEnd()
onError() -- very nice place to get some good
Application-wide error handling code in place
onRequest() -- be sure to read the notes on this
method...it's a bit different.
Check out the MX7 reference page for Application.cfc:
http://livedocs.adobe.com/coldfusion/7/htmldocs/wwhelp/wwhimpl/common/html/wwhelp.htm?cont ext=ColdFusion_Documentation&file=00000692.htm
CF* (if you're using that yet)
http://livedocs.adobe.com/coldfusion/8/htmldocs/help.html?content=Part_3_CFML_Ref_1.html -
Where is the best place to set the path with Application.cfc?
Hi!
When I used Application.cfm, I set many path variables here so I don't have to keep writing a full path on many of the templates repeatedly.
So I did:
<CFSET FileArchives = "/space/users/www/FileArchives/#session.Groups#/">
<CFSET GoodFiles = "/space/users/www/GoodFiles/#session.usergroup#/">
etc...
Later on I only need to refer it as: #FileArchives# in the codes instead of a full path name.
Now that I'm using Application.cfc can I also do the same thing???? should I do it within OnApplicationStart function? am I doing it correctly? (see below)
<cffunction name="onApplicationStart" returnType="boolean" output="false">
<cfset application.dsn = "EMBB">
<CFSET application.FileArchives = "/space/users/www/FileArchives/#session.Groups#/">
<CFSET application.GoodFiles = "/space/users/www/GoodFiles/#session.usergroup#/">
<cfreturn true />
</cffunction>Dan Bracuk wrote:
Setting application variables in OnApplicationStart is a good idea. However, referring to session variables in the OnApplicationStart function is not.
Indeed. Wading through this lot - http://adamcameroncoldfusion.blogspot.co.uk/2012/08/more-on-applicationcfc-when-things-run .html - might be helpful for the OP to get a handle on when things run, and when things become available.
But the session scope is not available in onApplicationStart().
Adam -
Lost on application.cfc
Hi all,
I've used application.cfm for ages on our site (now in sustainment) and we have been moved to a new server using CF9. Our server dudes have "per application" settings in place where I can map my custom tag directory (works fine) but when I use application.cfc, I begin crashing on all my pages that use relative pathing.
For example, the first thing the application does is query an Oracle table to get security settings. This is located off the root in a folder (oddly enough) called Security. That folder has a subdirectory called queries. I bomb with an error saying that "<cfinclude template="queries/user_role_select.cfm">" is invalid and it cannot find the noted cfm file and that I have to set up mappings in my application.cfc file.
Does this mean that I have to provide mappings for every directory and subdirectory under my root folder? Surely not! If so, how can this be done and how would I use that mapping in my cfincludes? I'm really getting started with the cfc files late in the game so any guidance and direction is GREATLY appreciated.
Thanks in advance!For example, the first thing the application does is query an Oracle table to get security settings. This is located off the root in a folder (oddly enough) called Security. That folder has a subdirectory called queries. I bomb with an error saying that "<cfinclude template="queries/user_role_select.cfm">" is invalid and it cannot find the noted cfm file and that I have to set up mappings in my application.cfc file.
What is the EXACT error message? Don't paraphrase it, copy and paste it from the screen.
Also: what is the full file system path to the file with the <cfinclude> in it, and the file system path to queries/user_role_select.cfm?
What mappings have you set in CFAdmin and in your Application.cfc pseudo constructor? Ditto custom tag paths (although the latter ought not be relevant here)?
Adam -
Application.cfc and UDFs
I have some UDFs that i want to make available to every page
in my site woudl i just drop the code for those UDFs inside the
onRequestStart method of application.cfc?In article <f8vi12$9q8$[email protected]>
"bdee2"<[email protected]> wrote:
> I have some UDFs that i want to make available to every
page in my
> site woudl i just drop the code for those UDFs inside
the
> onRequestStart method of application.cfc?
Probably the simplest approach for you is to put those UDFs
in some
cfm file and then include that into onRequest():
<cffunction name="onRequest">
<cfargument name="targetPage"/>
<cfinclude template="myudfs.cfm" />
<cfinclude template="#arguments.targetPage#" />
</cffunction>
Note: you must include the target page - onRequest() assumes
you are
taking full responsibility for the request.
Only when you use onRequest() will the VARIABLES scope of
Application.cfc be accessible inside your top-level page
(arguments.targetPage).
Note: if you use Flash Remoting, Web Services or direct AJAX
CFC
calls, you cannot use onRequest() directly (because it
intercepts the
result). Read the chapter on Application.cfc in the
ColdFusion
Developer's Guide (it's really very good reading!). You might
also
want to read this blog entry:
http://corfield.org/entry/Applicationcfc__onRequest_and_CFCs
And this LiveDocs page:
http://livedocs.adobe.com/coldfusion/7/htmldocs/00000698.htm
(which includes the workaround for and onRequest() and CFC
access)
Sean Corfield
An Architect's View --
http://corfield.org/
I'm using an evaluation license of nemo since 59 days.
You should really try it!
http://www.malcom-mac.com/nemo
Maybe you are looking for
-
Ipod froze and restored itself now pc wont recognize it
I have a 30GB Ipod Video and a Windows XP operating system-equipped with Itunes 7.1 My Ipod was working fine while I uploaded songs to it, but then i ejected it from itunes and it was frozen so I consulted the Apple site and reset it to their instruc
-
PS Elements 6 & 8 Slow Down Computer When Not In Use
I currently use PS Elements 8 on a MacBook Pro using 10.6.2 version of the operating system. When I haven't been using Elements for perhaps 24 hours, I suddenly will notice that Elements is using an amazing amount of CPU cycles - say from 60% to 80%.
-
How to determine which Windows application has focus
I'm new to JAVA and new to programming. I hope someone will help me out. I'm trying to write a simple JLink program (JLink is a JAVA API for Pro|Engineer, a CAD design program). In part of this program I need to determine if Pro|E has focus. Is there
-
ATV2 will not load photo libraries/folders
Just connected ATV2 all appears to be working fine however when I try to access photos on my iMac it appears to be loading them stops and reverts to main menu. Should I be able to access slideshows in Aperture?
-
Dear Experts, We are in the process of preparing procedure for US Pharma templet, we wuold like to know standard tax structure used in SD pricing procedure. we would like to know std conditions to be used with jurisdiction in SD pricing procedure.and