Domanda

Sto invocando un cfc, il cfc ha un set predefinito di argomenti come:

<cfargument name="EMAIL_TEMPLATE_CODE" type="string" required="yes" hint="EMAIL_TEMPLATE_CODE is required.">
<cfargument name="EMAIL_TEMPLATE_SUBJECT" default="" type="string" required="no" hint="EMAIL_TEMPLATE_SUBJECT is NOT required.">
<cfargument name="EMAIL_TEMPLATE_BODY" default="" type="string" required="no" hint="EMAIL_TEMPLATE_BODY is NOT required.">

Quello che vorrei fare è rendere questi argomenti non desiderata (come si può vedere da required="no"), ma mi piacerebbe riassegnare gli argomenti variabile, se necessario.

Quindi qualcosa di simile:

<cfargument name="EMAIL_TEMPLATE_CODE" type="string" required="yes" hint="EMAIL_TEMPLATE_CODE is required.">
<cfargument name="EMAIL_TEMPLATE_SUBJECT" default="" type="string" required="no" hint="EMAIL_TEMPLATE_SUBJECT is NOT required.">
<cfargument name="EMAIL_TEMPLATE_BODY" default="" type="string" required="no" hint="EMAIL_TEMPLATE_BODY is NOT required.">

<cfinvoke component="#Request.CFCPath#.email_template" method="getEmailTemplate" returnvariable="getEmailTemplate">
    <cfinvokeargument name="EMAIL_TEMPLATE_CODE" value="#ARGUMENTS.EMAIL_TEMPLATE_CODE#">
</cfinvoke>

<cfif getEmailTemplate.RecordCount>
    <cfparam name="ARGUMENTS.EMAIL_TEMPLATE_SUBJECT" default="#getEmailTemplate.EMAIL_TEMPLATE_SUBJECT#" type="string">
    <cfparam name="ARGUMENTS.EMAIL_TEMPLATE_BODY" default="#getEmailTemplate.EMAIL_TEMPLATE_BODY#" type="string">
</cfif>

Ma io non sono in grado di ignorare l'impostazione predefinita di ARGOMENTI variabile.C'è qualcosa che si può spot che sto facendo di sbagliato?

EDIT:

Sto facendo questo perché se non viene passato alcun argomento per il cfc, voglio creare uno.Credo che dovrebbe cfset una variabile locale se l'argomento non avere lunghezza?

<cfif Len(ARGUMENTS.EMAIL_TEMPLATE_ADDRESS_FROM)>
    <cfset EMailTemplateAddressFrom = ARGUMENTS.EMAIL_TEMPLATE_ADDRESS_FROM>
<cfelse>
    <cfset EMailTemplateAddressFrom = getEmailTemplate.EMAIL_TEMPLATE_ADDRESS_FROM>         
</cfif> 
È stato utile?

Soluzione

<cfparam> funziona solo se la variabile è stata undefined prima.I tuoi parametri di funzione non è definita, hanno appena capita di avere i loro valori di default.Così si potrebbe fare così:

<cffunction name="foo">
  <cfargument name="arg" type="string" required="yes">
  <cfargument name="opt" default="default" type="string" required="no">

  <cfif arguments.opt eq "default">
    <cfset arguments.opt = "whatever dynamic value">
  </cfif>
</cffunction>

In questo modo, se non di fornitura "opt" (o volutamente impostato a "default"), verrà assegnato un qualche tipo di dinamica valore di default.E si può ancora fare vuoto, se avete bisogno di.

Invece di "default", si potrebbe scegliere qualche altro tipo di improbabili valore che permette di fare una distinzione tra "non in dotazione" e "vuoto".(A volte vorrei ColdFusion a sostegno di effettivi valori null...)

Altri suggerimenti

<cfargument name="EMAIL_TEMPLATE_CODE" type="string" 
    default="#getEmailTemplate.EMAIL_TEMPLATE_ADDRESS_FROM#">
<cfargument name="EMAIL_TEMPLATE_SUBJECT" default="" type="string">
<cfargument name="EMAIL_TEMPLATE_BODY" default="" type="string">

o ....

<cfargument name="EMAIL_TEMPLATE_CODE" type="string">
<cfargument name="EMAIL_TEMPLATE_SUBJECT" default="" type="string">
<cfargument name="EMAIL_TEMPLATE_BODY" default="" type="string">
<cfif NOT isDefined("arguments.EMAIL_TEMPLATE_CODE")>
    <cfset arguments.EMAIL_TEMPLATE_CODE = getEmailTemplate.EMAIL_TEMPLATE_ADDRESS_FROM>
</cfif>

FYI, required="no" di default, così io di solito non si specifica al CFML già verbose. :)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top