Hay diversas clases ayudantes disponibles por lo que el usuario podrá utilizar fácilmente estas acciones personalizadas:
La forma más simple de obtener valores para un parámetro personalizado es utilizar uno de los métodos de CustomActionUtil; por ejemplo,getCustomParameters:
CustomActionUtil.getCustomParameters(resource, "101");
De esta forma se recuperan los parámetros personalizados para la acción con un ID de acción de 101 para el recurso determinado. Si tiene pensado utilizar la misma tarea en repetidas ocasiones para recursos diferentes, pero similares, puede utilizar getCustomParametersForTask como se indica a continuación:
CARMAContent[] resources = getResources();
CarmaTaskMemento taskMemento = new CarmaTaskMemento();
for (int i = 0; i < resources.length; i++) {
CustomActionUtil.getCustomParametersForTask(taskMemento, resources[i], "101");
}
En el ejemplo anterior, taskMemento se utiliza para almacenar información que el usuario ha especificado que se utilice entre las invocaciones de las acciones. Si taskMemento no se tuviera que utilizar aquí, se emitiría al usuario las mismas solicitudes para cada recurso.
Si, en cambio, desea utilizar un mecanismo distinto para captar valores de parámetro (como por ejemplo una interfaz de usuario diferente), puede interaccionar directamente con la clase CustomActionParameterManager, tal como se ilustra en el ejemplo siguiente:
CustomActionParameterManager manager = CustomActionParameterManager.getManager();
Object[] paramsToPass = manager.getCustomParameters(resource, actionId); // parámetros para pasar al mandato
//este método nos indicará si el gestor tiene o no toda la información necesaria
if (manager.isPromptNeeded(resource, actionId)) {
final Action action = resource.findActionFor(actionId);
Iterator parameters = action.getParameters().iterator();
//busque el parámetro que desee cambiar de esta forma o búsquelo como un valor no válido en paramsToPass
int index = 0;
while (it.hasNext()) {
Parameter param = (Parameter) it.next();
if (param.getName().equals(targetName))
break;
index++;
}
paramsToPass[index] = new Boolean(false);
//opcionalmente, almacene el parámetro para más adelante
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);
}
En el ejemplo anterior, targetName es el nombre del parámetro según ha definido el desarrollador de RAM.