Nuestro team especializado pasados varios días de investigación y de recopilar de datos, hemos dado con la respuesta, nuestro deseo es que te sea de gran utilidad para tu plan.
Solución:
Traté de encontrar una solución para su problema, pero creo que la mejor es la suya: deje que el cliente implemente un captador con el nombre de su clase y páselo a su método como lo hizo la primera vez. Porque al final del día, no importa lo que quieras, JSON necesita absolutamente el nombre de la clase para deserializar un String en esa clase.
Si realmente quiere hacerlo más simple, cree una clase abstracta con el método listo para usar
public String Name()
return String.valueOf(this).split(':')[0];
y dejar que el cliente amplíe la clase, centrándose en el método del mango…
EDITAR
Si realmente desea eliminar el parámetro de nombre, puede crear un getter real en lugar del método Name() que escribí:
public abstract class AbstractFutureHandler
public String className get
return String.valueOf(this).split(':')[0];
y en la clase FutureManager:
@future
private static void Execute(String jsonHandle)
String typeName = (String) ( (Map
Y finalmente
public class UpdateSomeRecords_future extends AbstractFutureHandler implements FutureHandler
/* ... */
Un poco pesado, hace que JSON se deserialice dos veces, pero bueno, Salesforce tiene servidores, hagamos que funcionen;)
Si desea deserializar en una interfaz, aún debe pasar un tipo concreto (la implementación real). En este caso, lo siguiente debería funcionar bien:
FutureManager.execute('...', UpdateSomeRecords_future.class);
// ^ Concrete implementation type
Recuerda que tienes la opción de agregar una reseña si diste con el resultado.