Hacktoberfest 2026:メンテナが10月に向けて印を付けた、オープンで初心者向けの issue。 Hacktoberfest の issue を見る

intent: a process status setter overwrites a roll-up-owned status - a PAID invoice goes back to SENT when its Send task completes after the payment

オープン
#7,869 コメント 2 件 リアクション 0 件 担当者 0 名 GitHub で見る

メンテナーはふだん 1 日以内に返信

まだ誰も着手していません。

評価

難易度
4/5
見積もり時間
3〜5日
初心者へのやさしさ
42/100
issue の種類
バグ
明瞭さ
明確に書かれている
活発さ
活発
技術スタック
java
領域
backend, databases

調査の方向性

Start with the generated setter template at components/template/template-application-events-java/.../events/SetField.java.template and the roll-up ownership logic in components/ide/ide-template/.../model/RollupAggregates.java. Trace how DisplacedStatus and owned statuses are handled, then inspect the declarative transitions: runner and updateProperty transition actions mentioned in the issue. Done means setters preserve roll-up-owned Status while recording the intended lifecycle status, which is restored when the roll-up relinquishes ownership.

索引モデルが issue の本文から書いたものです。

説明

What happens

A process status setter generated from SetField.java.template (<Process>MarkSent, MarkIssued, MailSent, Confirmed, ... - every ${JavaTask} that sets the lifecycle Status) writes its target status with a targeted single-column updateProperty(id, "Status", n), unconditionally. When the entity's status is at that moment owned by a roll-up (statusWhenFull / statusWhenPartial, the PARTIAL/PAID of a settled document), the setter overwrites it, and nothing ever restores it: the roll-up listener (RollupAggregates) re-asserts PARTIAL/PAID only when the summed amount changes.

Reproduced on a production tenant (BusinessIntents Suite, platform 14.76.0, base-sales-invoices):

2026-09-11 11:49Z  CustomerPayment 3 (4 800.00) allocated to SalesInvoice 16 (Payable 4 800.00)
                   -> roll-up invoicePaid: Paid 4800, Balance 0, Status 7 (PAID)
2026-10-05 12:34:36Z  the "Send" user task of SalesInvoiceApproval instance 2501 is completed (action markAsSent)
                   process variables snapshotted at that moment: Status=PAID, Paid=4800, Balance=0
2026-10-05 12:34Z  SalesInvoiceApprovalMailSent (SetField): updateProperty(16, "Status", 4)   -> SENT
2026-10-05 12:35Z  the async mailInvoice job fails (SMTP) and dead-letters; the process is stuck before Confirm
2026-10-16           the invoice still reads Status SENT, Paid 4 800.00, Balance 0.00, DisplacedStatus null

The generated listener's own relinquish logic (#7022) would have done the right thing had the roles been reversed: when the sum goes back to zero it restores DisplacedStatus. The process side has no such awareness.

What should happen

A lifecycle setter must not take a status the roll-up holds. When the current Status is one of the entity's roll-up-owned statuses (statusWhenFull / statusWhenPartial of any roll-up on it):

  • write the setter's value into DisplacedStatus instead of Status (the status the document would hold if it were not settled), publish the transition as today;
  • leave Status to the roll-up, which restores DisplacedStatus when the sum returns to zero (#7022) - so "payment deleted" then yields SENT/CONFIRMED, not ISSUED.

The same guard belongs in the declarative transitions: runner and in updateProperty-based transition actions, since any of them can run after the money arrived. For bank-transfer customers "Send/Confirm completed after the payment is in" is the normal order, not an edge case.

Where

  • components/template/template-application-events-java/.../events/SetField.java.template (the generated <Process><Step> setters)
  • components/ide/ide-template/.../model/RollupAggregates.java (the roll-up side: owns DisplacedStatus, knows the owned statuses)

Found while investigating BusinessIntents/base-sales-invoices (prod invoice 16); the AP twin is BusinessIntents/base-purchase-invoices.

主要言語
Java
スター
278
フォーク
97
平均マージ
18時間 57分
マージ済み PR(30日)
249

環境構築

はじめの一歩

  1. issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
  2. 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
  3. リポジトリをフォークし、ブランチを切って変更します。
  4. issue 番号を参照したプルリクエストを送ります。

eclipse-dirigible/dirigible のほかの issue

eclipse-dirigible/dirigible の issue をすべて見る

似ている issue

Java の issue をもっと見る

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。