When Application Services are registered via ConventionalControllers.Create(),
their types are added to DynamicProxyIgnoreTypes, which disables the
ValidationInterceptor. The AbpValidationActionFilter only checked ModelState
(DataAnnotations), so FluentValidation rules were never executed.
Add IValidationEnabled check in AbpValidationActionFilter to call
IMethodInvocationValidator for conventional controllers, enabling
FluentValidation support without duplicating validation for regular controllers.
Resolve#23457
Add IMPORTANT notes explaining that the Ollama server must be installed and running and that models referenced by a workspace must be pulled locally before configuring. Include example commands (e.g. ollama pull llama3.2 and ollama pull nomic-embed-text) and note that nomic-embed-text is embedding-only. Also add a similar reminder in the RAG section to pull both chat and embedding models when using Ollama.
Refactor scripting examples to consistently await db.query(...) into named table variables (e.g. productTable, customerTable, orderTable, entityTable, orderLineTable) and use those variables for subsequent operations. Adjusted examples to await where() when needed and updated aggregation/collection examples accordingly. Also clarified semantics for first/last/single variants in the API table. Changes applied to docs/en/low-code/scripting-api.md and docs/en/low-code/custom-endpoints.md to keep example patterns consistent and clearer for consumers.
Replace setting CommandName property with the CommandInterceptorDescriptor(string) constructor in examples. Updated docs/en/low-code/fluent-api.md and docs/en/low-code/interceptors.md to pass "Create" and "Delete" as constructor arguments to simplify and clarify interceptor declarations; no functional change to behavior.
Rename documentation headings and links from "Fluent API & Attributes" to "Attributes & Fluent API" across the low-code docs and navigation for consistency. Add a Fluent API example for registering interceptors (with sample C#) and a reference link in interceptors.md. Fix a typo changing "DefaultsLayer" to "DefaultLayer" and add a license notice and minor formatting fixes in the low-code index.
Update low-code scripting API docs to clarify and expose configurable limits. Adds a new Configuration section with an example Configure<AbpLowCodeScriptingOptions> showing script and query limits (null = no limit). Changes many default values in Sandbox Constraints and Query Security Limits from concrete numbers to "No limit", removes per-group/item rows (MaxItemsPerGroup, MaxTotalGroupedItems) and consolidates group limits to MaxGroupCount. Notes that all limits default to null and should be set according to security requirements and expected workload.
Move base.OnModelCreating(builder) to after builder.ConfigureDynamicEntities() in the docs example. This ensures dynamic entities are configured before the base model creation, reflecting the correct order to register dynamic entities in DbContext.OnModelCreating.
Remove docs/en/images/quick-look.png and replace/update the image at docs/en/low-code/images/quick-look.png. Consolidates the quick-look asset into the low-code subdirectory and updates the binary image file.
Update low-code Fluent API docs: add docs/en/images/quick-look.png and refactor examples to use DynamicEntityBase for entities. Remove the separate assembly registration step and replace the ConfigureServices sample with a Low-Code initializer (MyAppLowCodeInitializer) that uses AsyncOneTimeRunner and an async InitializeAsync which calls DynamicModelManager.Instance.InitializeAsync(). Also adjust step numbering and small samples to reflect these API changes (add server-only/internal property, set UI descriptors, etc.).
Add seven illustrative screenshots to docs/en/low-code/images (actions-menu.png, create-modal.png, data-grid.png, foreign-access-modal.png, interceptor-error.png, menu-items.png, quick-look.png) and update docs/en/low-code/index.md to include references to the menu, data grid, and create/edit modal images to better demonstrate the Low-Code UI features.
Improve Low-Code docs to clarify the distinction between dynamic entities and reference entities and to tighten foreign-access semantics. Updates across fluent-api, foreign-access, index, model-json, reference-entities, and scripting-api: explain that foreign access applies only between dynamic entities and that action menus appear on the target entity's UI; adjust wording for source/target terminology and permission behavior; add a comparison table for dynamic vs reference entities; update the reference-entity registration example to an async initializer pattern and show DynamicModelManager initialization; and note in the scripting API that insert/update/delete only apply to dynamic entities. These changes are editorial to reduce confusion around read-only reference entities and foreign key behavior.
Update low-code documentation examples to reflect API changes: make entity classes inherit DynamicEntityBase across examples, remove the separate "Register the Assembly" step and renumber steps, and introduce an async low-code initializer (MyAppLowCodeInitializer) using AsyncOneTimeRunner and DynamicModelManager.Instance.InitializeAsync. Also adjust command/query examples: CustomProductCreateCommand now derives from CreateCommand<Product> and returns Guid, and a CustomQuery (Single) example was added. These edits align docs with the new initialization flow and base entity type.
Update Low-Code docs to introduce a Low-Code Initializer pattern and model.json hot-reload support. Shows using DynamicEntityAssemblyInfo with rootNamespace and projectRootPath, adds a parameter table, and replaces simple assembly registration with an AsyncOneTimeRunner-based InitializeAsync that registers reference entities, assemblies, optional fluent API configs, and calls DynamicModelManager.Instance.InitializeAsync(). Adds a ResolveDomainSourcePath helper, guidance to call the initializer from Program.cs (and DbMigrator/other entry points) before building the app, and notes fallback to embedded resources when projectRootPath is empty.
Reflect API and copy updates in low-code docs. foreign-access.md: replace ConfigureProperty/SetForeignKey example with entity.AddOrGetProperty and assignment of a ForeignKeyDescriptor (EntityName, DisplayPropertyName, Access). index.md: minor wording tweaks for clarity and a corrected link anchor to the three-layer configuration system. model-json.md: remove the empty "foreignKeys" array from the entity JSON example to avoid implying it's required.
Clarify interceptor behavior in low-code docs: update fluent-api.md and interceptors.md to state that Replace Create interceptors must return the new entity's Id (Guid) so the system can fetch and return the created entity. Added an example showing `return result.Id;` after `db.insert(...)`, and noted that Replace-Update and Replace-Delete do not need to return a value.
Replace "ABP Low-Code Module" with "ABP Low-Code System" across low-code documentation to reflect the naming change. Updated the doc-seo JSON descriptions and a couple of in-page references. Affected files: docs/en/low-code/custom-endpoints.md, docs/en/low-code/foreign-access.md, docs/en/low-code/interceptors.md, docs/en/low-code/model-json.md, docs/en/low-code/reference-entities.md, docs/en/low-code/scripting-api.md.
Add support and documentation for a new interceptor type, Replace, which runs JavaScript instead of the default DB operation. Updates made across low-code docs:
- docs/en/low-code/interceptors.md: Document Replace semantics for Create/Update/Delete, add examples and model.json/type notes.
- docs/en/low-code/fluent-api.md: Expand AddInterceptor docs to list allowed name/type values and note Replace behavior; small attribute call-site change (DynamicPropertySetByClients(false)).
- docs/en/low-code/index.md: Simplify Getting Started by removing the package table and renumbering steps (register assembly, configure DbContext, define entity, add migration).
- docs/en/low-code/scripting-api.md: Remove db.getList entry from the scripting API table.
These changes clarify interceptor capabilities (Pre/Post/Replace) and streamline the quickstart instructions.
Add comprehensive Low-Code System documentation and navigation. Introduces new docs under docs/en/low-code (index.md, fluent-api.md, model-json.md, scripting-api.md, interceptors.md, custom-endpoints.md, reference-entities.md, foreign-access.md) and updates docs/en/docs-nav.json to include a "Low-Code System" section linking these pages.
Update AI Management docs to describe configurable workspace data source upload options. Adds notes that allowed file extensions and max file size are configurable (default 10 MB), and that deleting a data source removes its embeddings, chunks, and blob. Introduces a new "Configuring Data Source Upload Options" section with a WorkspaceDataSourceOptions example (AllowedFileExtensions, MaxFileSize, ContentTypeMap), lists available properties and helper methods (GetMaxFileSizeDisplay, GetAllowedExtensionsDisplay, GetAcceptAttribute), and a note about registering content extractors for new file types. Also documents the WorkspaceDataSourceManager repository responsibility for full cleanup.
Add a tip to the "Adding RAG Dependencies" section clarifying that RAG is entirely optional and that other AI Management features work without installing RAG-related dependencies. This clarifies expectations for users about required packages.