Dupliquer en masse

Bonjour,

J’ai un script sur initCopy pour :

  • Copier des valeurs de l’enregistrement original dans d’autres champs et les mettre en lecture seule
  • Copier normalement des champs
  • Vider des champs
    et tous les champs de l’enregistrement original sont verrouillés.

Le métier désire pouvoir faire ce traitement en masse (sélectionner x enregistrements et lancer leur duplication).

Est-ce que vous avez une suggestion sur la meilleure manière de faire?

Merci d’avance

Fabrice

Il faut configurer une action de liste itérant sur les selected IDs en appelant le getTool().getForCopy(id, true) de l’objet puis le getTool().validateAndCreate()

Voici ce que je fais :

L’action appelle :

	public Object dupliquerEnMasse()  {
		AppLog.info(getClass(), " La duplication est appelée ", null, null);
		//récupère une sélection utilisateur s'il y en a une, sinon toute la table
	    List<String> ids = getSelectedIds();
		ObjectDB test = filtrerProjetParIds("ParticipationTitre");


	    for (int i = 0; i < ids.size(); i++) {
	    	String vv = ids.get(i);
			AppLog.info(getClass(), " String list " + vv, null, null);
			try {
				test.getTool().getForCopy(vv);
				initCopy();
				
				try{
					test.getTool().validateAndCreate();
				} catch(Exception e){
					AppLog.error(getClass(), "dupliquerEnMasse", "L'objet n'a pas pu être créé", e, getGrant());
				}
				
		       } catch (Exception e) {
				return "Dupliquer en masse est en erreur"+e;
			}
	    }

initCopy :

	@Override
	public void initCopy(){
		AppLog.info(getClass(), " le initCopy a été appelé :::::  ", getFieldValue("ParticipationTitreAnnee") ,  getGrant());
        calculTitreId(); // insére l'id du titre (clé fonctionnelle)
        setToken(); // insère le token pour le lien avec la GED
		setGedID(); //insère l'ID du titre pour la GED
	    valeurParDefautCopie(); // calcul les champs selon les règles métier
	}

Valeurs calculées sur la copie :

	public void valeurParDefautCopie(){
		AppLog.info(getClass(), " la définition des valeurs par défaut à la copie a été appelée", null ,  getGrant());
		
		//défini l'année suivant celle du titre copié
 	    String annee = getFieldValue("ParticipationTitreAnnee");
 	    int newyear = Tools.nouvelleAnnee(1,annee);
        setFieldValue("ParticipationTitreAnnee",newyear);
        setFieldValue("ParticipationTitreType",getFieldValue("ParticipationTitreType"));
        
    	setFieldValue("ParticipationTitreNbTitreVille",getFieldValue("ParticipationTitreNbTitreVilleTotal"));
        setFieldValue("ParticipationTitreSoldeAu1",getFieldValue("ParticipationTitreSoldeActuel"));
        setFieldValue("ParticipationTitreEtatFinFondsPropresN1",0);
        setFieldValue("ParticipationTitreReevDep",0);
        setFieldValue("ParticipationTitreCours",0);
        setFieldValue("ParticipationTitreMontantDivAnneePrec",getFieldValue("ParticipationTitreMontantDiv"));
        setFieldValue("ParticipationTitreMontantDiv",0);
        setFieldValue("ParticipationTitreTauxRendementAnneePrec",getFieldValue("ParticipationTitreTauxRendement"));
        setFieldValue("ParticipationTitreValeurVenaleSubstAnneePrec",getFieldValue("ParticipationTitreValeurVenaleSubst"));
        setFieldValue("ParticipationTitreValeurVenaleBoursiereAnneePrec",getFieldValue("ParticipationTitreValeurVenaleBoursiere"));
        setFieldValue("ParticipationTitreEcartVvVc0101",getFieldValue("ParticipationTitreEcartVvVc3112"));
        setFieldValue("ParticipationTitreEcartVnVc0101",getFieldValue("ParticipationTitreEcartVnVc3112"));
	}

Mon action fini en erreur en me disant que le titre ID n’est pas rempli, malgré le fait que la méthode qui le remplit est appelée par le initCopy

2024-10-22 17:43:19,462 ERROR [com.simplicite.objects.Participation.ParticipationTitre] SIMPLICITE|http://lsllcot01.lausanne.ch:20188||ERROR|Fabrice_PARTICIPATION|com.simplicite.objects.Participation.ParticipationTitre|dupliquerEnMasse||Evénement: L'objet n'a pas pu être créé
    com.simplicite.util.exceptions.ValidateException: ERR_REQUIRED: Titre ID
     at com.simplicite.util.tools.BusinessObjectTool.validate(BusinessObjectTool.java:493)
     at com.simplicite.util.tools.BusinessObjectTool.validateAndCreate(BusinessObjectTool.java:575)
     at com.simplicite.objects.Participation.ParticipationTitre.dupliquerEnMasse(ParticipationTitre.java:365)
     at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
     at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
     at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
     at java.base/java.lang.reflect.Method.invoke(Method.java:566)
     at com.simplicite.util.engine.ObjectManager.invokeActionSync(ObjectManager.java:3767)
     at com.simplicite.util.ObjectDirect.invokeAction(ObjectDirect.java:669)
     at com.simplicite.util.ObjectDB.invokeAction(ObjectDB.java:1989)
     at com.simplicite.webapp.tools.JSONServletTool.action(JSONServletTool.java:1678)
     at com.simplicite.webapp.ObjectJson.action(ObjectJson.java:660)
     at com.simplicite.webapp.tools.JSONServletTool.businessObjectService(JSONServletTool.java:616)
     at com.simplicite.webapp.servlets.AbstractJSONServlet.service(AbstractJSONServlet.java:67)
     at javax.servlet.http.HttpServlet.service(HttpServlet.java:623)
     at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:209)
     at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153)
     at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51)
     at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178)
     at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153)
     at com.simplicite.webapp.filters.RewriteFilter.doFilter(RewriteFilter.java:77)
     at com.simplicite.webapp.filters.AbstractFilter.doFilter(AbstractFilter.java:37)
     at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178)
     at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153)
     at com.simplicite.webapp.filters.AuthMethodFilter.doFilter(AuthMethodFilter.java:139)
     at com.simplicite.webapp.filters.AbstractFilter.doFilter(AbstractFilter.java:37)
     at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178)
     at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153)
     at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:156)
     at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90)
     at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:481)
     at com.simplicite.tomcat.valves.APISessionValve.invoke(APISessionValve.java:242)
     at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:130)
     at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93)
     at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:670)
     at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74)
     at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:342)
     at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:390)
     at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63)
     at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:928)
     at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1794)
     at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52)
     at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191)
     at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659)
     at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
     at java.base/java.lang.Thread.run(Thread.java:829)

Déjà ça, ça ne va pas:

J’ai indiqué d’utiliser getForCopy(id, **true**) => le true fait que ça appelle le initCopy donc pas besoin de l’appeler explicitement.

Mais de toute façon il aurait fallu écrire **test**.initCopy() pour travailler sur le bon objet

This topic was automatically closed 60 minutes after the last reply. New replies are no longer allowed.