Thread n8n.io for Axelor. All we can do

Hello

I will share here some good stuff with my n8n apps connected to my differents Axelor instance (production, testing …)

But what are you talking about?
n8n.io is « The workflow automation platform that doesn’t box you in, that you never outgrow ».
I talked about API connection, the best way to take information, update data, …
If you now about Zapier, n8n is very similar.

But why are you telling us about this?
For me, it’s THE apps for connect everything. My way to send the order from Magento2, a solution for connect my Qonto bank, an automatic connection from Akeneo (Product information Management) and everything else to Axelor (or other apps).

ok but another apps…why?
Open-source is awesome, but we need to manage data between apps, and each application has its own way of using the data. API is the best way to communication between app. n8n can help you a lot.
We can write data to csv file and read it on a other workflow! you want it on a database like mysql ? No problem ! send data to hubspot, take data from MailChimp, Stripe, Paypal …

n8n and Axelor


This is a workflow with 4 node
The first one is a « Start » node simple. But you can take a « cron start » for starting this worklow every day at 4am.
The Second and the third node are a generic node « HTTP Request ». I use it here for make request to my dev instance Axelor. « Cookies » ask token to my axelor instance for the rest of the workflow. « Liste models » GET model of my axelor instance.
The fourth node split the data received. I export 575 domain models from my dev instance Axelor

You can build a lot of possibilities.

Workflow : Organization of Axelor

Between version, you have different structure of Axelor.
This workflow can give you all domain model and all column of each domain model in a folder on your computer (csv file)

Results :

image

How to do it ?

Install n8n by yourself, I can’t explain here how to do this part (n8n have this own forum for this).
I use docker.

How to connect to Axelor ?

You need a HTTP Request node just for cookie.
You have to specify « Full response » for having the token in the header.
Complete URL for my instance :
http ://IP/axelor-erp-v6.1.8/login.jsp
In body parameters :
{ « username »: « admin », « password »: « admin » }

The next node HTTP Requet

Here a simple GET resquest for ask domain model as you can find here the API doc
URL :
http ://IP/axelor-erp-v6.1.8/ws/meta/models
Headers :
{ « Content-Type »: « application/json », « Cookie »: "[{{$node["Cookies "].json[« headers »][« set-cookie »][2]}}; {{$node["Cookies « ].json[« headers »][« set-cookie »][0]}}] » }

Give us some workflow you did

I ask to Axelor all invoice per customer (list of 5 big customer) for the month past.
1 CSV file is create per customer - resume : date, order number, invoice number, total exclude tax, include tax.
1 folder ZIP with all invoice per customer.

This workflow below gives me the unpaid invoices to date, write them on a CSV file, and notify me on RocketChat

So much to do…

2 « J'aime »

#FRENCH POST

J’écris en français pour celui là car c’est lié aux données de l’INSEE et aux SIRET/SIREN d’entreprises.

Que fait ce workflow ?

Mise à jour du nom de l’entreprise selon son numéro SIRET.

Node 1 : Start - démarrage du workflow
Node 2 : Set - définition de varaible d’environnement (URL d’axelor, domaine modele)
Node 3 : HTTP Request - récupération des cookies de connection de l’instance d’Axelor
Node 4 : HTTP Request - Récupération des tiers ayants des SIRET
Node 5 : items list - mise en liste de la réponse du node précédent
Node 6 : SplitInBatch - donner un a un la liste du node précédent
Node 7 : HTTP Request - demande du token à l’API de l’INSEE
Node 8 : HTTP Request - demande des rensignements à l’API de l’INSEE selon le numéro SIRET obtenue d’Axelor
Node 9 : HTTP Request - Mise à jour du tier selon les informations obtenue de l’INSEE
Node 10 : IF - Réaliser autant de fois que necessaire la boucle de mise à jour du tiers selon la liste obtenue précédement.
Node 11 : Rocketchat - envoyer une message listant toute les modifications réalisée.

Les possibilités de l’API SIRENE

Je n’ai fait que la mise à jour du nom du tiers, mais vous pouvez mettre à jour :

  • Les grands groupes est tous leurs établissements secondaires (SIREN vs SIRET)
  • Les adresses des différents établissements
  • Les code APE, type d’activités, date de créations, categorie d’entreprise …

Les possibilités sur le workflow

Vous pouvez en plus de ce que j’ai fait

  • Comparer les données avant de mettre à jour
  • Créer des tiers selon leur code APE (démarchage d’une cible business)

Parametre du workflow

Node 9 : HTTP Request - Mise à jour du tier selon les informations obtenues de l’INSEE

Method : POST
URL : (url + /ws/rest/ + domaine modèle + /:id ) obtenue grace aux précédents nodes

{{$node[« ENV »].json[« DEV »]}}/ws/rest/{{$node[« ENV »].json[« URL »]}}/{{$node[« SplitInBatches »].json[« data »][« id »]}}

Body Parameters :

{
« data »: {
« id »: {{$node[« SplitInBatches »].json[« data »][« id »]}},
« version »: {{$node[« SplitInBatches »].json[« data »][« version »]}},
« name »: « {{$json[« etablissements »][0][« uniteLegale »][« denominationUniteLegale »]}} »
}
}

Si vous avez des questions, n’hesitez pas.

1 « J'aime »

Thanks seems very good , you use it on then cloud or on a self-hosted ?

1 « J'aime »

n8n can be :

  • on cloud of n8n company (pay per used)
  • own cloud (docker, ubuntu, debian …)
  • on self-hosted (work on Windows, OSX, Linux)

I use it on self-hosted on docker
I will soonest use it on k8s for production, access to my bank with API (can’t use it with localhost), access to my gmail/google drive… (can’t use it with localhost), have this instance secure, redundancy and backup.

Some difficulties on self-hosted :

  • If your computer is shutdown, workflow can’t be started of course
  • if you need credential with « localhost » return, it will be not secure or inaccessible …

Good stuff on self-hosted :

  • simple docker-compose and the n8n start in 2 minutes
  • you can share a volume for exhanges files
  • communication with every other docker you want (nextcloud, rocketchat, SQL …) - like I do for making test.

Interesting and recent post on their forum about
Making n8n sustainable: paid advanced features

1 « J'aime »

Objectif : récupérer les pdf générés par Axelor (ERP), pour chaque facture, sur une période définie.

[1ère ligne]
Node Set « ENV » : inscription de la date de début, de fin, et le nom du dossier dans lequel seront les pdf.
Node Exceute command : je fais un commande mkdir pour créer un dossier en local, le nom du dossier est défini dans le node précédent.
Node HTTP « cookie » : récupération des cookies axelor pour les commandes HTTP suivantes
Node HTTP « invoiceSearch » : POST Body Parametres : champs + critères
Node Item Lists : les DATA reçues doivent être listé pour la suite

2 voies en même temps

  • Création du fichier récap
  • Boucle sur toutes les factures (et avoirs) pour récupérer le PDF

[2ème ligne - voie 1]
Node Set : je choisi les champs pour consituter le tableau récap. Date de la facture, numéru de facture, montant HT, TVA, TTC …
Node Spreadsheet File : consittution du tableau en .xlsx
Node Write Binary FIle : écriture en local de ce tableau excel

[3ème ligne - voie 2]
Node SplitInBatches1 : node de boucle pour passer sur toutes les factures 1 à 1
Node HTTP « invoiceID » : GET récupération de l’ID de la pièce jointe depuis l’ID de la facture
Node HTTP « attachment » : GET récupération de la pièce jointe
Node Write Binary File1 : écriture de la pièce jointe en local
Node If : boucler jusqu’à qu’il n’y ai plus rien à traiter.
Node Rocket Chat : me féliciter du success de ce magnifique Workflow sur mon mon RocketChat privé.

Un nouveau workflow opérationnel de mon côté.

Description

Un workflow actif pour lire les transactions bancaires sur Qonto et en faire des écritures comptables.

Activité

Toutes les 6h à la 5ème minutes, sur la plage des 6 dernières heures.
(00h00:00-5h59:59 à 6h05:00 | 6h00:00-11h59:59 à 12h05 | 12h00:00-17h59:59 à 6h05 | 18h00:00-23h59:59 à 00h00:05)
Pour s’assurer que toutes les transactions validées sur Qonto soient récupérées.

Déroulement

Obtenir les informations de la transaction bancaire (émetteur, transaction validée, date de la validation, montant, débit-OU-crédit, description, id)

Vérification des données, mapping depuis un un tableur googleSheet (ajout si nouveau emmetteur, récupération des id de comptes comptables rempli manuellement), …

Constitution de l’écriture comptable attendu par Axelor. Création de l’écriture pour ensuite insérer les lignes comptables (dans l’écriture).
Si l’emmeteur n’est pas connu, l’écriture se fait avec des comptes comptables génériques.

Résultats

  • je n’ai plus à créer les écritures et les lignes comptables.
  • Je n’ai pas à retrouver à qui associer les comptes comptables de virement déjà identifié en tant que tier et compte comptable (CC).
  • Je n’ai plus qu’à confirmer ou modifier chaque écriture comptable sur Axelor

Petit focus sur la partie « data » de l’API Axelor pour chaque PUT

  • création de l’écriture PUT /ws/rest/com.axelor.apps.account.db.Move
  • création de la première ligne PUT /ws/rest/com.axelor.apps.account.db.MoveLine
  • création de la ligne de la banque PUT /ws/rest/com.axelor.apps.account.db.MoveLine

Pour la création de l’écriture

{
  "data": {
    "date": "{{ $node["Allvalues"].json["date"] }}",
    "journal": {
      "id": 4
    },
    "companyCurrency": {
      "id": 46
    },
    "company": {
      "id": 1
    },
    "currency": {
      "id": 46
    },
    "period": {
      "id": 7
    },
    "getInfoFromFirstMoveLineOk": false,
    "partner": {
      "id": {{ $node["Allvalues"].json["TIER"] }}
    },
    "technicalOriginSelect": 1,
    "currencyCode": "EUR"
  }
}

Pour la première ligne d’écriture comptable

{
  "data": {
    "date": "{{ $node["Allvalues"].json["date"] }}",
    "{{ $node["TransactionDetails"].json["transaction"]["side"] }}": {{ $node["TransactionDetails"].json["transaction"]["amount"] }},
    "description": "{{ $node["Allvalues"].json["reference"] }}",
    "move": {
      "id": {{ $node["MovePROD"].json["data"][0]["id"] }}
    },
    "partner": {
      "id": {{ $node["Allvalues"].json["TIER"] }}
    },
    "account": {
      "id": {{ $node["Allvalues"].json["CC"] }}
    }
  }
}

Pour la seconde ligne d’écriture comptable

  • position (crédit/débit) opposée

  • du même montant

  • compte comptable de la banque

    {
    « data »: {
    « date »: « {{ $node[« Allvalues »].json[« date »] }} »,
    « {{ $node[« TransactionDetails »].json[« transaction »][« side »] }} »: {{ $node[« TransactionDetails »].json[« transaction »][« amount »] }},
    « description »: « {{ $node[« Allvalues »].json[« reference »] }} »,
    « move »: {
    « id »: {{ $node[« MovePROD »].json[« data »][0][« id »] }}
    },
    « partner »: {
    « id »: {{ $node[« Allvalues »].json[« TIER »] }}
    },
    « account »: {
    « id »: {{ $node[« Allvalues »].json[« CC »] }}
    }
    }
    }

Défauts connus :

  • À chaque exercice comptable, il faudra modifier la valeur « period » de la création de la ligne d’écriture
  • Les références aux comptes comptables se font par ID, et par par le compte (attention aux confusions)

If you want to change the state of a document the variable to use is « statusSelect »
Depend of module:
1 can be « draft »
2 can be « validate »
3 can be « confirm »

with API, you have to give the last number version for update (POST) your news information.

In n8n, simple like this :
(of course […]/9693 is the ID of my move account entrie)

Have fun

Hello,

Good news !
The axelor node is published !

Poke @jkzick @PHPierre

You can find my code here :

You can find the node npm here :

install " n8n-nodes-axelor " in the community node in your n8n app, and enjoy the node !

Some pictures :wink:




4 « J'aime »

Merci beaucoup c est très intéressant , suivant les cas utilisation du BPMN Axelor , ou d un automate n8n

1 « J'aime »

Hello !

I just update the Axelor node : version 1.1

New option :
The list is automatically update from your instance.

1 « J'aime »

Bonjour , vous avez fait ce que Axelor a mis dans la version commerciale maintenant ( Axelor connect fait avec Make).

Merci pour l’info. je connais Make que de nom. je ne crois pas qu’il y ait le code en acces libre pour les modules make.

Je n’ai eu qu’une seule personne à ma connaissance qui a utilisé mon node Axelor sur n8n.

J’ai quelques automatisation qui tournent mais sans plus, j’aimerai davatange, mais la base de données Axelor me semble toujours plus contraignante chaque jour.

L’obstacle ces derniers temps : les adresses postales (chercher, créer, récupérer …)

Et je n’ai plus le temps de passer des heures à faire ça :confused:

Make est un concurrent de Zappier ou N8n . Je suis un peu perplexe pour les derniers tarifs d’ axelor, pas vraiment adapté a une petite structure comme ou je travaille . J adore Axelor , j attend avec impatience la version React.
J’attend une décision de ma direction pour savoir comment on va faire évolué notre SI . Si axelor est dans les solution à tester , je ferai surement appel a votre node axelor sur n8n pour automatiser certaines choses , rien n’est encore décidé ( peut etre des appel de WS grace au BPM …) . Si j ai du temps a tester Axelor , je vais vraiment rentré dans son modele de données et je pourrais vous aider a ce moment la .

2 « J'aime »