2012-06-14 1 views
2

다른 개체를 참조하는 개체로 전달 된 문자열에서 메서드 호출을 작성하려고합니다. 객체를 호출 할 때coldfusion 9 동적 메서드 호출

는 일반적으로 우리는 다음과 같이 코드를 작성 :

application.stObj.oNewsBusiness.getNews(argumentCollection=local.stArgs); 

그러나 내가이 개체 이름, 메소드 이름과 인수 컬렉션을 포함하는 배열을 작성 했어요.

<cfscript> 
local.stArgs = {}; 
local.stArgs.nNewsID = 19; 
local.stArgs.sAuthor = "John"; 

local.aData = []; 
local.aData[1] = local.stArgs; 
local.aData[2] = "stObj.oNewsBusiness"; 
local.aData[3] = "getNews"; 
</cfscript> 

그러나이 모든 것을 메서드 호출로 재결합하려고 애 쓰고 있습니다. 제안하지만를 사용

UPDATE 여전히 문제에

된 cfinvoke가 작동하는 것 같다 동안 :

<cfscript> 
local.stArgs = local.aData[1]; 
local.sObject = local.aData[2]; 
local.sMethod = local.aData[3]; 
</cfscript> 
<cfinvoke component="application.#local.sObject#" method="#local.sMethod#" argumentCollection="#local.stArgs#" returnvariable="local.qData"></cfinvoke> 

그것이 생성 뭔가를 할 때

<cfinvoke component="#application.stObj.oNewsBusiness#" method="#local.sMethod#" argumentcollection="#local.stArgs#" returnvariable="local.qData"></cfinvoke> 

가 작동하지 않습니다 오류 :

Could not find the ColdFusion component or interface application.stObj.oNewsBusiness

+0

올바른 방법으로 구성 요소를 호출해야합니다. 아래의 Dan의 설명을 확인하십시오. – nykash

+0

'응용 프로그램'제거 :

답변

7

CFInvoke는 일반적으로 동적 메서드 호출을 처리하는 데 사용됩니다. 당신은 당신이 사용되는 방법으로 인수를 전달할 수 있도록

http://help.adobe.com/en_US/ColdFusion/9.0/CFMLRef/WSc3ff6d0ea77859461172e0811cbec22c24-7e0a.html

된 cfinvoke는 argumentcollection의 속성이 있습니다.

+0

나는 cfinvoke에 문제가 있음 – Jarede

+2

경로에서 인스턴스화해야하는 구성 요소가 아니라 이미 인스턴스화 된 참조를 찾고 있기 때문에 그럴 것 같습니다. 시도해보십시오.

+1

알립니다. 그것은 정말로 원하는 객체가 응용 프로그램 범위에있는 struct (stObj) 안에 위치하는 것처럼 보입니다. 이 작업을 수행하려면 다음을 사용할 수 있습니다. 이것은 이름을 기반으로 중첩 된 구조체 경로에서 객체를 가져옵니다 (점으로 구분됨). 그러나이 경우 이름이 항상 인 - 인스턴스 경로에 대해 2 개의 도트로 분리 된 문자열로 가정합니다. 더 많은 경로가있을 수 있습니다 ... –

2

댄 정확한 된 cfinvoke 구성 요소 변수 주위에 # 기호가 없기 때문에 작동하지 않습니다 당신의 갱신에서

<cfinvoke component="#mycomponentname#" method="get" arg1="#arg1#" arg2="#arg2#" arg3=..> 
0
<cfinvoke component="application.#local.sObject#" method="#local.sMethod#"argumentCollection="#local.stArgs#" returnvariable="local.qData"></cfinvoke> 

을 길을 가야하는 것입니다.

당신은 응용 프로그램을 결합 인라인 방법은 아마도있다

<cfset local.componentName = "application." & local.sObject> 
<cfinvoke component="#local.componentName#" method="#local.sMethod#"argumentCollection="#local.stArgs#" returnvariable="local.qData"></cfinvoke> 

을 할 수 있습니다. cfinvoke 호출에 변수가 있지만 내 머리 꼭대기에서 알 수 없습니다.

편집 : Dan Wilson의 의견은 인라인 방식으로 더 잘 설명합니다.