2017. 10. 27. 10:12

콜드퓨전(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']) 형태로 써야한다.