Efficient data management is a cornerstone of successful ERP systems, and iDempiere stands out for its flexibility in addressing specific business needs. In this blog post, we’ll explore four distinct methods for automatically deleting detail lines when deleting document headers in iDempiere ERP. From the simplest to more advanced techniques, these approaches provide developers and administrators with options to tailor the system to their specific requirements.

Discover seamless data management in iDempiere ERP with automatic order line deletion. Dive into four powerful methods, from the user-friendly Model Cascade in Table Column Management to the database-centric DB Triggers and programmatic solutions leveraging POs. Uncover the simplicity and efficiency of these approaches as they relate to tables with foreign keys. Streamline your ERP operations and enhance data consistency effortlessly.

1. Model Cascade in Table Column Management:

The most straightforward method involves utilizing the Model Cascade option in the Table Column Management interface. By specifying the Constraint Type as Model Cascade in the foreign key relationship, iDempiere will automatically handle the deletion of associated records. This user-friendly option minimizes manual configurations, making it an efficient choice for quick implementation.

2. DB Trigger:

For those who prefer a more database-centric approach, iDempiere allows the creation of Database (DB) Triggers. By implementing a trigger, you can automate the deletion of related order lines when an order header is deleted. This method provides a direct and efficient means of ensuring data consistency at the database level.

CREATE OR REPLACE FUNCTION delete_order_lines()
    DELETE FROM C_OrderLine WHERE C_Order_ID = OLD.c_order_id;
$$ LANGUAGE plpgsql;

CREATE TRIGGER order_header_delete_trigger
AFTER DELETE ON order_header_table
FOR EACH ROW EXECUTE FUNCTION delete_order_lines();

3. Before Delete Method Override in PO:

Leveraging the Before Delete method in Persistence Objects (PO) offers a programmatic solution within the iDempiere framework. By overriding the Before Delete method in the Order PO, custom logic can be implemented to delete associated order lines just before the order header is deleted.

    protected boolean beforeDelete() {
        // Custom logic to delete associated order lines
        String orderId = get_Value("C_Order_ID").toString();
        String deleteLinesSQL = "DELETE FROM C_OrderLine WHERE C_Order_ID = " + orderId;
        DB.executeUpdate(deleteLinesSQL, get_TrxName());
        return true;

4. Table Script Validator with Rule Script:

For a more user-friendly and configurable solution, iDempiere offers the Table Script Validator along with Rule Scripts. By defining a script in the validator, you can automatically delete order lines using the Rule Script when a corresponding order header is deleted.
Absolutely, beyond basic data deletion, iDempiere empowers users to perform additional automated tasks through scripts.


iDempiere ERP empowers users with multiple options to automate the deletion of detail lines associated with document headers. Whether opting for the simplicity of Model Cascade, the database-level control of DB Triggers, programmatic flexibility with POs, or the user-friendly Table Script Validator, iDempiere provides a robust framework for tailoring data management to meet the unique needs of businesses. Choose the method that best aligns with your preferences and business requirements to enhance the efficiency of your ERP operations.

By Ray Lee (System Analyst)

iDempeire ERP Contributor, 經濟部中小企業處財務管理顧問 李寶瑞

Leave a Reply

Your email address will not be published. Required fields are marked *