Há várias classes auxiliares para que você possa utilizar facilmente essas ações customizadas:
A forma mais simples de obter valores para um parâmetro customizado é utilizar um dos métodos no CustomActionUtil; por exemplo, getCustomParameters:
CustomActionUtil.getCustomParameters(resource, "101");
Isso recupera os parâmetros customizados para a ação com um ID de ação de 101 para o recurso determinado. Se planejar utilizar a mesma tarefa repetidamente para recursos diferentes, mas semelhantes, você pode utilizar getCustomParametersForTask da seguinte forma:
CARMAContent[] resources = getResources();
CarmaTaskMemento taskMemento = new CarmaTaskMemento();
for (int i = 0; i < resources.length; i++) {
CustomActionUtil.getCustomParametersForTask(taskMemento, resources[i], "101");
}
No exemplo acima, taskMemento é utilizado para armazenar informações digitadas pelo usuário para uso entre as chamadas de ações. Se taskMemento não foi utilizado aqui, o usuário deve ser consultado com os mesmos prompts para todos os recursos.
Se você preferir utilizar um mecanismo diferente para procurar valores de parâmetro (como uma interface com o usuário diferente), poderá interagir diretamente com a classe CustomActionParameterManager, conforme ilustrado no seguinte exemplo:
CustomActionParameterManager manager = CustomActionParameterManager.getManager();
Object[] paramsToPass = manager.getCustomParameters(resource, actionId); // parâmetros a serem transmitidos ao comando
//este método dirá se o gerenciador possui ou não todas as informações necessárias
if (manager.isPromptNeeded(resource, actionId)) {
final Action action = resource.findActionFor(actionId);
Iterator parameters = action.getParameters().iterator();
//localize o parâmetro que deseja alterar desta forma ou procure por ele como nulo em paramsToPass
int index = 0;
while (it.hasNext()) {
Parameter param = (Parameter) it.next();
if (param.getName().equals(targetName))
break;
index++;
}
paramsToPass[index] = new Boolean(false);
//armazene opcionalmente o parâmetro para posteriormente
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);
}
No exemplo acima, targetName é o nome do parâmetro, como definido pelo desenvolvedor RAM.