0

唯一の引数として日付を取り、注文に関する情報を返すSybaseSPがあります。CFページのJQuery日付ピッカーから日付を取得します。これはyy-mm-ddにフォーマットされています。何も入力されていない場合、SPはデフォルトでgetDate()になります。フォームに日付を入力すると、すべて正常に機能します。日付を送信しない場合(日付フィールドは空白のまま)、引数が日付型ではないことを示すCFエラーが発生します。SPが日時値を送信していることは知っていますが、CF関数にそれを認識させるにはどうすればよいですか?

SPでは...

declare @order_dt datetime 

If @order_dt IS NULL
BEGIN
SELECT @order_dt = getDate()
END

cfcでは...

<cfargument name="order_dt" type="date" required="true" hint="order date to search for" >

 <cfprocparam type="In" cfsqltype="CF_SQL_DATE" dbvarname="@order_dt" value="#order_dt#" null="No">

.cfmページで...

<!--JQuery datepicker  -->
<script type="text/javascript">
   $(function() {
           $("#datepicker").datepicker({ dateFormat: "yy-mm-dd" }).val()
   });

そして、フォームは次のようになります。

<form id="xxxxForm">
<label for="date1">Pick a Date... </label>
<br>
<p><input type="text" id="datepicker" value="" name="date1"></p>
Then choose 'Search'...<br>
<input type="submit" name="submit" value="Search">
<br>
<br>

</form>

CFにこれを適切な値として認識させるにはどうすればよいですか?@order_dtを単なる日付として宣言するのではないかと思っていましたか?

4

1 に答える 1

2
> <cfargument name="order_dt" type="date" required="true" 

日付フィールドを空白のままにすると、送信される値は空の文字列 "" になります。空の文字列は有効ではありませんdate。これが、関数を呼び出そうとすると CF が文句を言う理由です。

コメントで述べたように、required="false"またはを使用できますdefault="#now()#"。ただし、期待どおりに機能させるには、日付を空白のままにするときに引数省略する必要があります。関数に何かを渡すと、空の文字列であっても、default有効になりません。ただし、検証は行われます。したがって、引き続き同じエラーが発生します。

もう 1 つのオプションは、引数の型を に変更することstringです。次に、関数内で検証します。指定された値が有効な日付でない場合は、now()

   <cfargument name="order_dt" type="string" default="">

   <!--- simplistic date validation for illustration --->
   <cfif NOT isDate(arguments.order_dt)>
       <cfset arguments.order_dt = now()>
   </cfif>

NULLまたはストアドプロシージャに渡すだけ

   <cfargument name="order_dt" type="string" default="">
   ...

   <cfprocparam type="In" value="#arguments.order_dt#" 
         null="#not isDate(arguments.order_dt)#" ....>

ちなみに、dbvarnameしばらく前に廃止されました。最近のバージョンでは何もしません。定位置パラメーターのみがサポートされています。

于 2012-09-12T19:17:57.590 に答える