1

私はcfcを呼び出していますが、cfcには次のようなデフォルトの引数セットがあります。

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

私がやりたいのは、これらの引数が必須ではないようにすることです(required = "no"でわかるように)が、必要に応じて引数変数を再割り当てしたいと思います。

だから次のようなもの:

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

しかし、デフォルトのARGUMENTS変数をオーバーライドすることはできません。私が間違っていることに気付くことができるものはありますか?

編集:

引数がcfcに渡されない場合は、引数を作成したいので、これを行っています。引数に長さがない場合は、ローカル変数をcfsetする必要があると思いますか?

<cfif Len(ARGUMENTS.EMAIL_TEMPLATE_ADDRESS_FROM)>
    <cfset EMailTemplateAddressFrom = ARGUMENTS.EMAIL_TEMPLATE_ADDRESS_FROM>
<cfelse>
    <cfset EMailTemplateAddressFrom = getEmailTemplate.EMAIL_TEMPLATE_ADDRESS_FROM>         
</cfif> 

レジストリエントリで「機能」を無効にできるように見えるホットフィックスもあるようです。

http://support.microsoft.com/kb/911272

これがビンで機能するかどうかは完全にはわかりません。

4

2 に答える 2

5

<cfparam>変数が以前に未定義である場合にのみ機能します。関数パラメーターは未定義ではなく、たまたまデフォルト値を持っています。だからあなたはこれを行うことができます:

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

このように、「opt」を指定しない場合(または意図的に「default」に設定する場合)、ある種の動的なデフォルト値が割り当てられます。また、必要に応じて、空にすることもできます。

「デフォルト」の代わりに、「提供されていない」と「空の」を区別できる他の種類のありそうもない値を選択できます。(ColdFusionが実際のnull値をサポートすることを望む場合があります...)

于 2009-08-11T17:20:14.390 に答える
2
<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">

また....

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

参考までにrequired="no"、デフォルトでは、通常、すでに冗長な CFML には指定しません。:)

于 2009-08-11T18:43:06.813 に答える