Подводные камни remote-методов

Организовать удаленный доступ к данным в Coldfusion - дело достаточно простое. Любой метод Coldfusion-компонента может вызываться удаленно, достаточно лишь поставить модификатор доступа access="remote", вот простой пример:

  <cfcomponent displayname="myservice" hint="Service" output="false">
    
    <cffunction name="getStructure" access="remote" output="false" returntype="Struct">
        <cfset struct = StructNew() />
        <cfset struct["id"] = 213 />
        <cfset struct.refID = 321231 />
        <cfset struct["someName"] = "Foo Bar" />
        <cfreturn struct />
    </cffunction>

    <cffunction name="getQueryObject" access="remote" output="false" returntype="Query">
        <cfquery datasource="test" name="qry">
            SELECT id, someName, refID FROM test
        </cfquery>       
        <cfreturn qry />
    </cffunction>

</cfcomponent>

Однако на практике могут выскочить известные грабли.

- имена полей в объектах query возвращаются в UPPERCASE при вызове метода через SOAP;

Test case for query exposed with webservice


- имена полей в объектах query возвращаются точно так как написано в коде, если метод вызывается через Flash Remoting (осторожно, флешеры!). При этом название поля в БД не имеет значения. Если поле в БД называется id, а программист в коде SQL запроса выбрал его как Id, во Flash Remoting отразится именно так. Как известно, ActionScript различает case символов, а значит могут быть проблемы.

Test case for query exposed with flash remoting

- имена ключей в структурах возвращаются в UPPERCASE, если поле задано как struct.fieldName. При этом, case сохраняется в точности как задан, если поле задано как struct["fieldName"]. Сказанное справедливо для структур, возвращенных и через Web Service и через Flash Remoting.

Test case for structure

Автор: Родион Быков | Опубліковано: 30.05.2009 о 00:58 | Категорії: Gotchas -

Відгуки