콜드퓨전(Coldfusion) 메모
1. 숫자만
변수 = rereplaceNoCase(변수, "[^0-9]", "", "ALL");
2. Base64, encode/decode
strBase64Value = ToBase64( strValue ); //encode
strNewValue = ToString( ToBinary( strBase64Value ) ); //decode
3. CFHTTP 사용 시 주의
- http method를 DELETE로 보내는 경우 규격에 정해진대로 body 내용을 알아서 지워버린다. ㅡㅡ;;
- 301, 302 redirect가 있다면 이동 후의 결과를 리턴한다. POST로 전송해도 redirect가 되면 GET으로 바뀐
결과를 리턴하니 혼동이 될 수 있다. 원치 않는 경우 redirect = false 로 설정하자.
4. Adobe CFC Generator 버그
필드타입이 ntext 인 경우 타입이 정의되있지 않아 오류발생함
/Adobe CFC Generator/handlers/framework/ORMManager.cfc 562라인쯤
아래 내용으로 고침
public String function getPreferredORMType(sqlType)
{
var Types = createobject("java","java.sql.Types");
var sqlTypeVsJavaType = {};
sqlTypeVsJavaType.put(Types.TINYINT, "byte");
sqlTypeVsJavaType.put(Types.SMALLINT, "short");
sqlTypeVsJavaType.put(Types.INTEGER, "int");
sqlTypeVsJavaType.put(Types.BIGINT, "long");
sqlTypeVsJavaType.put(Types.REAL, "float");
sqlTypeVsJavaType.put(Types.FLOAT, "double");
sqlTypeVsJavaType.put(Types.DOUBLE, "double");
sqlTypeVsJavaType.put(Types.DECIMAL, "double");
sqlTypeVsJavaType.put(Types.NUMERIC, "double");
sqlTypeVsJavaType.put(Types.BIT, "boolean");
sqlTypeVsJavaType.put(Types.BOOLEAN, "boolean");
sqlTypeVsJavaType.put(Types.CHAR, "string");
sqlTypeVsJavaType.put(Types.NCHAR, "string");
sqlTypeVsJavaType.put(Types.VARCHAR, "string");
sqlTypeVsJavaType.put(Types.NVARCHAR, "string");
sqlTypeVsJavaType.put(Types.LONGNVARCHAR, "string");
sqlTypeVsJavaType.put(Types.LONGVARCHAR, "string");
sqlTypeVsJavaType.put(Types.LONGVARCHAR, "string");
sqlTypeVsJavaType.put(Types.BINARY, "byte[]");
sqlTypeVsJavaType.put(Types.VARBINARY, "byte[]");
sqlTypeVsJavaType.put(Types.LONGVARBINARY, "byte[]");
sqlTypeVsJavaType.put(Types.DATE, "date");
sqlTypeVsJavaType.put(Types.TIME, "java.sql.Time");
sqlTypeVsJavaType.put(Types.TIMESTAMP, "timestamp");
sqlTypeVsJavaType.put(Types.CLOB, "clob");
sqlTypeVsJavaType.put(Types.NCLOB, "clob");
sqlTypeVsJavaType.put(Types.BLOB, "blob");
sqlTypeVsJavaType.put(Types.ARRAY, "java.sql.Array");
sqlTypeVsJavaType.put(Types.JAVA_OBJECT, "java.lang.Object");
var result = sqlTypeVsJavaType.get(sqlType);
if (isnull(result))
{
result = "java.lang.Object";
}
return result;
}
5. Event Gateway 동작 쓰레드 갯수 확인
sendGatewayMessage() 함수를 사용하여 Event Gateway에 데이타를 보낼때 큐가 꽉차면 false 가 리턴되며 값이 전달되지 않는다.
이런 경우에는 현재 사용중인 큐의 갯수를 알아내서 조절하면서 데이타를 전송해야 한다.
gateway = createObject('java', 'coldfusion.eventgateway.GatewayServices').getGatewayServices();
writeOutput(gateway.getmaxQueueSize()); //최대 큐의 갯수
writeOutput(gateway.getQueueSize()); //현재 사용중인 큐의 갯수
6. query의 특정 컬럼 집계
리스트로 변환 : valueList(query.columnname)
합계 : arraySum(query.columnname)
7. Request 내용 가져오기
콜드퓨전은 form element의 이름을 똑같이 해서 값을 넘기는 경우 리스트 형태로 수신이 된다.
하지만 값이 없는 경우는 무시해버리니 주의해야 한다.
<input name="a" value="1">
<input name="a" value="">
<input name="a" value="3">
위와같이 전송하게되면 보통 1,,3 의 리스트로 전송되는걸 기대하지만 결과는 1,3만 온다.
콜드퓨전 레벨에서는 방법이 없고 java api 에서 지원이 되는
data = getPageContext().getRequest().getParameterMap() 를 사용하자
writeDump(data);
단!! getPageContext().getRequest().getParameterMap()로 가져온 내용은 좀 이상하다!!
struct 는 data.key 형태로 사용이 되지 않는다. 반드시 data['key']로 사용해야 하고.
각 key에 들어있는 array는 cf11용 메소드 방식이 사용되지 않는다 ㅡㅡ;
data['key'].len() -> 오류발생, arraylen(data['key']) 형태로 써야한다.