RAM 개발자는 기존의 CARMA 조치를 사용자 정의하거나 완전히 새로운 조치를 작성할 수 있습니다. 이 조치에는 CARMA 호스트 구성에 정의된 리턴값 또는 사용자 정의 매개변수가 있을 수 있습니다.
여기에는 사용 가능한 여러 헬퍼 클래스가 있으므로 쉽게 사용자 정의 조치를 사용할 수 있습니다.
사용자 정의 매개변수 값을 확보할 수 있는 가장 간단한 방법은 CustomActionUtil에 있는 방법 중 하나(예: getCustomParameters)를 사용하는 것입니다.
CustomActionUtil.getCustomParameters(resource, "101");
이 방법에서는 제공된 자원에서 조치 ID가 101인 조치의 사용자 정의 매개변수를 검색합니다. 다르지만 비슷한 자원에 대해서도 반복적으로 동일한 타스크를 사용하려면 다음과 같이 getCustomParametersForTask를 사용할 수 있습니다.
CARMAContent[] resources = getResources();
CarmaTaskMemento taskMemento = new CarmaTaskMemento();
for (int i = 0; i < resources.length; i++) {
CustomActionUtil.getCustomParametersForTask(taskMemento, resources[i], "101");
}
위의 예에서 taskMemento는 사용자가 조치 호출 시 사용하기 위해 입력한 정보를 저장하는 데 사용됩니다. taskMemento를 사용하지 않았다면 모든 자원을 동일한 프롬프트를 사용하여 조회한 것입니다.
다른 메커니즘을 사용하여 매개변수값(예: 다른 사용자 인터페이스)을 페치하려는 경우 다음 예제와 같이 CustomActionParameterManager 클래스와 직접 상호 작용할 수 있습니다.
CustomActionParameterManager manager = CustomActionParameterManager.getManager();
Object[] paramsToPass = manager.getCustomParameters(resource, actionId); // parameters to pass to the command
//this method will tell us whether or not the manager has all the information it needs
if (manager.isPromptNeeded(resource, actionId)) {
final Action action = resource.findActionFor(actionId);
Iterator parameters = action.getParameters().iterator();
//find the parameter you want to change this way, or look for it to be null in paramsToPass
int index = 0;
while (it.hasNext()) {
Parameter param = (Parameter) it.next();
if (param.getName().equals(targetName))
break;
index++;
}
paramsToPass[index] = new Boolean(false);
//optionally store the parameter for later
Object[] paramsToStore = new Object[paramsToPass.length];
for (int i = 0; i < paramsToStore.length; i++) {
paramsToStore[i] = null;
if (i == index)
paramsToStore[i] = new Boolean(false);
}
manager.setUserStoredParamValues(resource.getRepository(), paramsToStore);
}
위의 예제에서 targetName은 RAM 개발자가 정의한 매개변수의 이름입니다.