---
title: "Features of BaseDocument and Document"
space: "Wiki"
url: "https://support.aakvatech.com/wiki/features-of-basedocument-and-document"
updated: "2026-07-22"
---


### **Features Offered by BaseDocument**
This code provides the base functionality for working with **Frappe Framework documents**. It implements various utility methods and validations that are essential for managing Frappe's database-backed documents. Key features include:

#### 1. **Base Document Functionality**
   - Implements the **BaseDocument** class, which is the foundation for all Frappe documents. This class provides:
     - `update`: Update multiple fields in a document using a dictionary.
     - `append`: Add a row to a child table.
     - `extend`: Extend a child table with multiple rows.
     - `get`: Retrieve values for fields or child table rows based on filters.
     - `set`: Set values for document fields.

#### 2. **Validation Utilities**
   - **Field Validation**:
     - Ensures mandatory fields are filled.
     - Checks for field type consistency (e.g., `Int`, `Float`).
     - Validates unique fields.
   - **Link Validation**:
     - Ensures linked documents exist.
     - Prevents linking to canceled documents.
   - **Field Length Validation**:
     - Ensures field values do not exceed the database's column length.
   - **Data Integrity**:
     - Validates consistency of child tables with parent documents.
     - Validates constants (`set_only_once`) to ensure they remain unchanged after submission.

#### 3. **Database Operations**
   - **Insert and Update**:
     - `db_insert`: Insert a new record into the database.
     - `db_update`: Update an existing record in the database.
     - `db_update_all`: Update both parent and child documents in one go.
   - **Conflict Handling**:
     - Handles conflicts (e.g., duplicate names) during database operations.

#### 4. **Document Serialization and Deserialization**
   - Converts documents into dictionaries (`as_dict`) or JSON (`as_json`) for easy storage, transfer, or API consumption.

#### 5. **Lifecycle Events**
   - Support for document lifecycle hooks:
     - `validate`, `on_submit`, `on_cancel`, and `on_trash`.

#### 6. **Data Formatting and Sanitization**
   - Format values based on field types (e.g., currency, percentage).
   - Sanitize HTML to prevent XSS attacks.

#### 7. **Dynamic Fields and Fetching**
   - Supports dynamic linking and fetching values from related documents.

---

### **Features Offered by Document**
This code is a list of hooks in the **Frappe Framework**. These hooks define entry points where custom behaviors or integrations can be added.

#### 1. **Document Hooks**
   - Define functions to be executed during various document lifecycle events:
     - `before_save`, `on_update`, `before_submit`, `on_submit`, `before_cancel`, `on_cancel`, etc.
   - Enable custom validations, data processing, or integrations during the lifecycle of a document.

#### 2. **Server Script Hooks**
   - Specify actions to be triggered by **server scripts** for events like:
     - `before_save`, `before_submit`, `after_insert`, etc.
   - Server-side logic can be applied to manipulate data or perform calculations.

#### 3. **Workflow Hooks**
   - Integrate custom functions during transitions in a document’s workflow.

#### 4. **Task Scheduling and Background Jobs**
   - Define periodic tasks (e.g., cron jobs) or long-running background jobs.

#### 5. **Authentication and Authorization**
   - Customize login, logout, and session handling behaviors.
   - Modify permission rules dynamically.

#### 6. **API and Web Integration**
   - Customize API endpoints and response handling.
   - Extend web functionality via custom routes and handlers.

---

### **Comparison of Features**
- **BaseDocument** focuses on providing a comprehensive set of methods for managing Frappe documents, including validation, CRUD operations, and lifecycle management.
- **Document** outlines the entry points (hooks) where custom logic can be introduced, offering flexibility to developers to extend Frappe’s core functionality.

Both codes are critical for building and customizing ERPNext/Frappe-based applications, with the first providing the foundation and the second enabling extensibility through event-driven programming.