J'ai une classe Salesforce Apex qui améliore les fonctionnalités d'un bouton personnalisé. Je souhaite fournir des paires clé/valeur de retour avec des informations pour le frontal.Apex - Type de retour incorrect Map <String, EmbeddedClass>
Ce que je suis aux prises avec est de pouvoir obtenir cette nouvelle classe à enregistrer. L'erreur que je reçois est:
Invalid return type: Map<String,ButtonCaseHandler.ResponseWrapper> at line 37 column 51
J'ai vérifié que toutes les valeurs que je suis de passage dans la ResponseWrapper.value est une liste de chaînes. À ce stade, je ne sais pas trop où aller avec ça.
global class ButtonCaseHandler {
private static final String defaultNewCaseRecordType = 'ID1';
private static List<String> getGhsOpenCases(String memberId, String dependentId){
List<String> result = new List<String>();
try{
//1. check all GHS open cases for this member within the last 14 days
List<Case> openCases = [
SELECT Id, casenumber,super_diagnosis__c, CreatedDate
FROM Case
WHERE recordTypeId IN ('ID1','ID2')
AND createdDate >= LAST_N_DAYS:14
AND status = 'Open'
AND Account.member_id__c = :memberId
AND (Account.dependent_id__c = :dependentId OR Account.dependent_id__c = null)
ORDER BY CreatedDate ASC
];
for(Case c : openCases){
result.add('Case, '+c.casenumber+', has a super diagnosis of '+ c.super_diagnosis__c + 'and was created on '+ c.createdDate.format('dd-MMM-yyyy'));
}
}
catch(Exception e){
}
return result;
}
webService static Map<String,ResponseWrapper> AccountCreateCase(Id aId){
Map<String, ResponseWrapper> result = new Map<String,ResponseWrapper>();
try{
Account currentAccount = [
SELECT Id, Viewing_User_Profile_Name__c, member_id__c,
Policy__c, Name, dependent_id__c
FROM Account
WHERE Id = :aId
LIMIT 1
];
//create the mapping between profile names and case record types
Map<String,String> profileNameToReRecordTypeId = new Map<String,String>();
profileNameToReRecordTypeId.put('RCNAME1','ID1');
profileNameToReRecordTypeId.put('RCNAME2','ID2');
profileNameToReRecordTypeId.put('System Administrator','ID1');
String caseRecordType = profileNameToReRecordTypeId.get(currentAccount.Viewing_User_Profile_Name__c);
if(String.isBlank(caseRecordType)){
caseRecordType = defaultNewCaseRecordType;
}
///validation if it's a GHS profile
if(currentAccount.Viewing_User_Profile_Name__c == 'RCNAME1'){
List<String> ghsOpenCasesString = ButtonCaseHandler.getGhsOpenCases(currentAccount.member_id__c,currentAccount.dependent_id__c);
if(!ghsOpenCasesString.isEmpty()){
ResponseWrapper oc = new ResponseWrapper();
oc.value = ghsOpenCasesString;
result.put('openCases',oc);
ResponseWrapper ic = new ResponseWrapper();
ic.value = new List<String>{'true'};
result.put('invokeConfirm',ic);
}
}
//create the URL hack for the time being.
///we will want to update this later on to create the case and relocate to the newly created case
String relocateUrl = '/500/e?RecordType=URLTORELOCATETHEUSERTO';
ResponseWrapper ru = new ResponseWrapper();
ru.value = new List<String>{relocateUrl};
result.put('relocateUrl',ru);
}
catch(Exception e){
System.debug('Error in AccountCreateCase method: ' + e);
//instantiate the error long class
ErrorLog errorLog = new ErrorLog();
ErrorLog__c methodErr = new ErrorLog__c(
method_name__c = 'AccountCreateCase',
method_source__c = 'ButtonCaseHandler',
stack_trace__c = e.getMessage(),
application_data__c = '{"accountId": '+aId+'}'
);
errorLog.logError(methodErr, true, '');
}
return result;
}
global class ResponseWrapper {
webService List<String> value {get; set;}
}
}
Merci pour toute aide.
Pourquoi est-ce même un WebService? Vous pouvez créer un bouton personnalisé qui lance une page Visualforce exécutant votre logique à la place. –