[RESOLU] Créer une action pour archiver un tiers automatiquement

Bonjour,

Je cherche à créer une action qui me permettrait d’archiver automatiquement un tiers - sans passer par le bouton Menu > Archiver, mais dans le cadre d’une suite d’actions.

J’ai testé l’exemple suivant mais sans succès :sweat_smile:

            <action-record name="action-partner-set-archived" model="com.axelor.apps.base.db.Partner">
            <field name="archived" expr="eval: true"/>
            </action-record>

Peut-être ne manque-t-il pas grand chose?

Je suis d’ailleurs curieux de comprendre comment fonctionne l’archivage d’un objet dans Axelor

Bonjour,

Résolu avec une méthode java, si ça intéresse quelqu’un n’hésitez pas :slight_smile:

Bonjour,

On peut chainer les actions, par exemple dans le onclick d’un boutton.
De plus on peut utiliser des ActionGroup dans les vues. Il faut peut être voir de ce côté là…

Bonsoir,

Oui ! J’ai essayé du coté XML mais j’ai eu l’impression en fin de compte après plusieurs tests que ce champ booléen “archived” n’était pas dans le modèle partner tels que les autres.

Du coup je suis passé par le OpportunityController.java en essayant de reprendre le fonctionnement standard.

@Singleton
public class OpportunityController {

  private static final Logger LOG = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());

  protected AppBaseService appBaseService;

  @Inject private OpportunityRepository opportunityRepo;

  @Inject private OpportunityService opportunityService;

  @Inject private PartnerRepository partnerRepo;

  @Transactional
  public void archivePartner(ActionRequest request, ActionResponse response) throws AxelorException {

    Opportunity opportunity = request.getContext().asType(Opportunity.class);
    opportunity = opportunityRepo.find(opportunity.getId());


    Partner partner = opportunity.getPartner();
    partner = partnerRepo.find(partner.getId());

    LOG.debug("partner : {}", opportunity);

    partner.setArchived(true);
    partner.setIsProspect(false);

    partner.setDateArchivage(Beans.get(AppBaseService.class).getTodayDate());

    partnerRepo.save(partner);

  }

}

le flag “archived” fait partie de la super class Model. Tous les objects héritent donc de ce flag au même titre que d’autres (cf Model.java)

D’accord, c’est plus clair effectivement pour la partie Java, je vois qu’on y retrouve également “ID” et “Version”

image

Merci