Я пишу следующую функцию на CFScript и хочу определить запрошенный ReturnFormat и вернуть данные в соответствующем формате.Обратите внимание, что я не определил 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
В настоящее время этот метод возвращает либо автоматически форматированную строку JSON ColdFusion, например:
{"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"]]}
ИЛИ объект 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.Затем я могу написать собственные подпрограммы return для возврата данных JSON, отформатированных так, как я хочу (любые имена в нижнем регистре! - я знаю, как это сделать, кстати, это не является частью этого вопроса) и в формате XML.