lumnik. / scénarios Tous les scénarios · English

Lotus Notes: les réclamations qualité lues par le Domino Data Service

Objectif Lire une vue Notes sans toucher à la base, vérifier le compte de la vue, et être prévenu d'une réclamation critique laissée sans responsable.

Le service qualité d'un fabricant de vannes suit ses réclamations clients dans une base Lotus Notes depuis vingt ans. Le Domino Data Service l'expose en JSON.

complaints-20261105.json
[
 {
  "@unid": "ADF73C1ECCB7805890D15213E40BE291",
  "@noteid": "8F6",
  "@position": "1",
  "@form": "Complaint",
  "@modified": "2026-09-04T17:00:00Z",
  "ComplaintNo": "RQ-26-0001",
  "Customer": "Fromagerie Vercors",
  "Product": "Vanne papillon DN80",
  "Severity": "3 - Mineure",
  "Status": "En analyse",
  "Received": "2026-09-02T17:00:00Z",
  "$7": "Attribuée",
  "Owner": "Marc Roche/QUALITE/Acme"
 },
 {
  "@unid": "FE1B06C01F04F16A7158FAC2298E43B0",
  "@noteid": "8FA",
  "@position": "2",

… 870 lignes de plus

manifests/10-complaints.yaml
apiVersion: connectors.lumnik.io/v1kind: Connectormetadata:  name: scenario-domino-a  connector_type: rest-generic  scopes: [quality-a]spec:  base_url: http://notes-quality  auth: { kind: basic, username: lumnik reader, password_env: SCENARIO_DOMINO_PASSWORD_A }   # a Notes user with Reader access  endpoints:    - id: open-complaints      path: /quality/complaints.nsf/api/data/collections/name/OpenComplaints      method: GET      pagination:        kind: offset        offset_param: start        limit_param: count        limit: 20        response_path: $        total_header: Content-Range          # items 0-19/57: the view's count after the slash      target:        kind: hybrid        table: ext.scenario_domino_a        unique_key: $['@unid']        promote:          - { name: complaint_no, path: $.ComplaintNo, type: text }          - { name: customer, path: $.Customer, type: text }          - { name: product, path: $.Product, type: text }          - { name: severity, path: $.Severity, type: text }          - { name: status, path: $.Status, type: text }          - { name: received, path: $.Received, type: timestamptz }          - { name: owner, path: $.Owner, type: text }          - { name: assignment, path: "$['$7']", type: text }   # the view's computed column, named by its position
manifests/20-critical-unassigned.yaml
apiVersion: apps.lumnik.io/v1kind: Processmetadata:  name: scenario-domino-critical-aspec:  scope: quality-a  on: { event: data.row.changed, table: ext.scenario_domino_a }  when:    - severity=1 - Critique    - assignment=Non attribuée  emit:    type: decision.critical-unassigned-a    message: "{complaint_no}: critical complaint from {customer} on {product}, received {received}, nobody assigned"    key: complaint_no
complaints-20261106.json
[
 {
  "@unid": "ADF73C1ECCB7805890D15213E40BE291",
  "@noteid": "8F6",
  "@position": "1",
  "@form": "Complaint",
  "@modified": "2026-09-04T17:00:00Z",
  "ComplaintNo": "RQ-26-0001",
  "Customer": "Fromagerie Vercors",
  "Product": "Vanne papillon DN80",
  "Severity": "3 - Mineure",
  "Status": "En analyse",
  "Received": "2026-09-02T17:00:00Z",
  "$7": "Attribuée",
  "Owner": "Marc Roche/QUALITE/Acme"
 },
 {
  "@unid": "FE1B06C01F04F16A7158FAC2298E43B0",
  "@noteid": "8FA",
  "@position": "2",

… 928 lignes de plus

Limites

  • Joué contre une doublure du Domino Data Service écrite pour ce scénario, pas contre un serveur Domino: ses en-têtes, sa page au-delà de la fin et son plafond de count ne sont pas vérifiés ici.
  • La vue est relue entière à chaque run: rien de Domino ne dit ici ce qui a changé depuis la dernière lecture.
  • Une vue catégorisée (lignes de catégorie, documents réponses en @position 1.2) n'a pas été jouée.
  • L'authentification par session (formulaire de login Domino, cookie LtpaToken) n'a pas été jouée: seul HTTP Basic.
  • Réclamations, clients et noms synthétiques.

Qualité · Notes

Les réclamations vivent dans une base Notes.

Vingt ans de formulaires, de vues et de formules @.

complaints.nsf

Le problème

Une réclamation critique arrive le soir. Elle attend le matin.

  • Le champ Responsable est vide.
  • La vue le montre à qui l'ouvre.

Ce qui n'est pas modifié

La base Notes reste telle quelle.

  • Ses formulaires, ses vues, ses ACL.
  • Un utilisateur Notes en Lecteur.

Ce qu'il a fallu écrire

offset_param: start
limit_param: count
total_header: Content-Range

La pagination de Domino, déclarée.

  • Le compte de la vue vérifie la lecture.
  • La colonne calculée $7 dit l'attribution.

Ce qui a été corrigé

Content-Range se lit comme un compte (#1866).

  • items 0-19/57: 57.
  • Une liste promue en texte n'échappe plus ses / (#1867).

Essayer

Le scénario se rejoue en local.

Chaque étape est publiée avec sa sortie.

Ce scénario tourne sur lumnik Open, gratuit et open source.

Essayer lumnik Open →