Question

J'invoque un cfc, le cfc dispose d'un ensemble par défaut d'arguments comme ceci:

<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.">

Ce que je voudrais faire est de ces arguments ne requred (comme vous pouvez le voir required = « non ») mais je voudrais réattribuer les arguments variable si nécessaire.

Alors quelque chose comme:

<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>

Mais je ne suis pas en mesure de remplacer la variable par défaut ARGUMENTS. Est-ce que vous pouvez repérer que je fais mal?

EDIT:

Je fais cela parce que si aucun argument est passé au cfc, je veux créer un. Je suppose que je devrais cfset une variable locale si l'argument n'a pas la longueur?

<cfif Len(ARGUMENTS.EMAIL_TEMPLATE_ADDRESS_FROM)>
    <cfset EMailTemplateAddressFrom = ARGUMENTS.EMAIL_TEMPLATE_ADDRESS_FROM>
<cfelse>
    <cfset EMailTemplateAddressFrom = getEmailTemplate.EMAIL_TEMPLATE_ADDRESS_FROM>         
</cfif> 
Était-ce utile?

La solution

<cfparam> ne fonctionne que si la variable a été non défini avant. Vos paramètres de la fonction ne sont pas indéfinies, ils ont juste arriver à leurs valeurs par défaut. Ainsi, vous pouvez faire ceci:

<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>

De cette façon, si vous ne fournissez pas « opt » (ou délibérément à « défaut »), il se voir assigner une sorte de valeur par défaut dynamique. Et vous pouvez toujours faire vide, si vous avez besoin.

Au lieu de « défaut », vous pouvez choisir un autre type de valeur improbable que vous permet de faire une distinction entre « non fourni » et « vide ». (Parfois, je souhaite ColdFusion soutiendrait les valeurs NULL réelles ...)

Autres conseils

<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">

ou ....

<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>

Pour votre information, required="no" par défaut, donc je ne précise pas habituellement au CFML déjà bavard. :)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top