2011-12-28 10 views
1

CFScriptに次の関数を記述しています。要求されたReturnFormatを特定し、適切な形式でデータを返す必要があります。関数内でReturnFormatを定義していないことに注意してください。私は呼び出し時にそれを設定することに頼っています。CFC関数内のReturnFormatを特定し、選択した形式でデータを返すにはどうすればよいですか?

たとえば、この関数を呼び出すためのURLは次のようになります。

:今 http://localhost/com/Calendar.cfc?method=getCalendars&UserName=demo&returnFormat=json

/** 
* 
* @hint Returns All Calendar records for one user. 
* @output false 
*/ 
remote any function GetCalendars(required string Username) { 
    var data = []; 
    var success = false; 
    var message = ""; 

    try { 
     query = new Query(); 
     query.setDataSource(APPLICATION.DSN); 
     query.addParam(name = "username", value = Username, cfsqltype = "varchar"); 
     query.setSQL(" 
      SELECT idn, CalendarName, CalendarURL, CalendarColor 
      FROM Calendars 
      WHERE Username = :username 
      ORDER BY CalendarName, idn 
     "); 
     result = query.Execute(); 
     rs = result.getResult(); 
     success = true; 
     message = "Success"; 
     records = rs.RecordCount; 
    } 
    catch (any excpt) { 
     success = false; 
     message = "An error occurred while getting calendars for user: " & Username; 
    } 
    finally { 
     //TODO: If ReturnFormat = json, return a JSON string 
     //TODO: If ReturnFormat = wddx, returna WDDX object 
     //TODO: If ReturnFormat = plain, return an XML string 
     return rs; 
    } 
} //end GetCalendars 



、この方法では、このようなColdFusionの自動的にフォーマットされたJSON文字列のいずれかを返します。

{"COLUMNS":["IDN","CALENDARNAME","CALENDARURL","CALENDARCOLOR"],"DATA":[[1,"Demo Calendar 1","http:\/\/localhost\/calendar\/feeds\/demo1\/basic","#43cd80"],[2,"Demo Calendar 2","http:\/\/localhost\/calendar\/feeds\/demo2\/basic","#9a9cff"]]}

ORこのようなWDDXオブジェクト:

<wddxPacket version='1.0'><header/><data><recordset rowCount='2' fieldNames='IDN,CALENDARNAME,CALENDARURL,CALENDARCOLOR' type='coldfusion.sql.QueryTable'><field name='IDN'><number>1.0</number><number>2.0</number></field><field name='CALENDARNAME'><string>Demo Calendar 1</string><string>Demo Calendar 2</string></field><field name='CALENDARURL'><string>http:\/\/localhost\/calendar\/feeds\/demo1\/basic</string><string>http:\/\/localhost\/calendar\/feeds\/demo2\/basic</string></field><field name='CALENDARCOLOR'><string>#43cd80</string><string>#9a9cff</string></field></recordset></data></wddxPacket>

しかし、私はreturnFormat=plainを設定するときには、 "無効な戻り値の型" エラーで失敗します。

基本的に私はReturnFormatをテストする方法が必要です。それから、JSONデータを返すサブルーチンを自分自身で書くことができます(私はBTWを行う方法を知っている小文字の名前の誰でも!この質問の一部ではありません)とXML形式です。

答えて

2

returnFormatは検出されません。それはポイントではありません。 returnFormatはCFに結果をラップする方法を指示します。繰り返し:あなたはこれについて心配しないでください。期間。

配列を作成するCFCメソッドを与えると、配列を返すだけです。 CFは、returnformat = jsonが見える場合、JSONに変換する処理を行います。

returnformat = plainと表示された場合、配列はプレーンな文字列ではないため、エラーがスローされます。

これは意味がありますか?

ああ - 私はあなたの最後の段落を参照してください。あなた自身のリターンをしようとするなら、あなたはreturnformatに頼るべきではありません。それがCFに焼き付けられました。私は、いつもJSON、期間を返すだけであなた自身の書式設定をするために私のAPIを構築したいと思います。メソッドでreturnFOrmat = plainを設定すると、CFは何もしないように指示します。あなたが文字列を返す限り、あなたは大丈夫でしょう。

関連する問題