This is an automated email from the ASF dual-hosted git repository.
diveshdut pushed a commit to branch trunk
in repository https://gitbox.apache.org/repos/asf/ofbiz-plugins.git
The following commit(s) were added to refs/heads/trunk by this push:
new 92fde71d3 OFBIZ-13367 Added a few more instructions so coding agents
work better with OFBiz coding guidelines. (#253)
92fde71d3 is described below
commit 92fde71d3136aeeded0c878a5f1c174c1e4bc004
Author: Divesh Dutta <[email protected]>
AuthorDate: Wed May 20 10:26:10 2026 +0530
OFBIZ-13367 Added a few more instructions so coding agents work better with
OFBiz coding guidelines. (#253)
Added a few more instructions so coding agents work better with OFBiz
coding guidelines.
---
ai-agent-skills/manage-groovy/SKILL.md | 2 ++
ai-agent-skills/manage-services/SKILL.md | 2 ++
2 files changed, 4 insertions(+)
diff --git a/ai-agent-skills/manage-groovy/SKILL.md
b/ai-agent-skills/manage-groovy/SKILL.md
index 474d082fe..3d580813f 100644
--- a/ai-agent-skills/manage-groovy/SKILL.md
+++ b/ai-agent-skills/manage-groovy/SKILL.md
@@ -74,6 +74,7 @@ Implement business logic, complex data transformations, and
data preparation scr
// Fetch one
GenericValue product = from("Product").where("productId",
productId).queryOne()
```
+- **Domain Helpers First**: Before writing direct entity queries, look for
existing OFBiz or component helper methods that encode business semantics.
Direct or batched entity queries are still appropriate for enrichment,
projections, or avoiding N+1 lookups once the helper behavior is understood.
- **Advanced Querying**: Use `EntityCondition` for complex filters:
```groovy
import org.apache.ofbiz.entity.condition.EntityCondition
@@ -114,6 +115,7 @@ String newId = result.newProductId
- **Direct SQL**: **NEVER** write raw JDBC/SQL in Groovy. Always use the
Entity Engine (DSL or Delegator).
- **Hardcoding Strings**: Hardcoding error messages instead of UI Labels, or
hardcoding IDs (like `partyId`).
- **Legacy Entity APIs**: **DO NOT** use legacy Delegator APIs like
`delegator.findList(...)`. Always use the modern Entity DSL
`from("Entity").where(...).queryList()`.
+- **Custom Conversion Helpers**: Avoid local helper methods for conversions
that OFBiz already provides. Prefer existing utilities such as
`ObjectType.simpleTypeOrObjectConvert(...)` at service/input boundaries and
`UtilMisc.toIntegerObject(...)` for integer conversion.
### Database Querying:
- **Unconstrained Queries**: **NEVER** query a table without a `.where(...)`
condition unless explicitly fetching a tiny bounded list (like enumerated
`StatusItem`).
diff --git a/ai-agent-skills/manage-services/SKILL.md
b/ai-agent-skills/manage-services/SKILL.md
index b34236bea..baaf97037 100644
--- a/ai-agent-skills/manage-services/SKILL.md
+++ b/ai-agent-skills/manage-services/SKILL.md
@@ -49,6 +49,7 @@ Define and implement business logic as reusable,
transactional, and securely enf
### 2. Service Definition & Registration
- **Naming**: Use `verbNoun` format for all service names (e.g.,
`updateExample`, `createOrder`).
- **In/Out Parameters**: Use `<attribute name="..." mode="IN|OUT|INOUT"
type="..." optional="true|false"/>`. NEVER bypass attribute validation by
casually omitting them or making them wrongly optional.
+- **Native Contract Types**: Backend/data services should keep OFBiz-native
service types such as `Timestamp` and `BigDecimal` in IN/OUT attributes and
returned maps.
- **Auth & Security**: Set `auth="true"` for protected services. ALWAYS
implement permission checks (e.g., `<permission-service>`).
- **Export & REST**: Set `export="true"` to expose the service to external
callers. Set `action="GET|POST|PUT|DELETE"` to automatically export the service
as a REST API endpoint.
- **Service Overrides**: Use `<implements service="..." />` to inherit
attributes from an existing service.
@@ -76,6 +77,7 @@ Define and implement business logic as reusable,
transactional, and securely enf
### 1. View vs. Business Logic Separation
- Services must remain completely agnostic of the View layer. NEVER put HTML
encoding, FreeMarker syntax, or UI formatting into a core backend service.
+- Do not stringify dates, timestamps, quantities, or money in backend data
services unless the service is explicitly a presentation/export formatting
service.
- Error Messages: Use properties from `uiLabelMap` for user-facing error
messages to support internationalization.
### 2. Error Handling Integrity