IFS Business Logic in Practice: A Worked Example Across Apps 10 and IFS Cloud
A fictional but realistic walkthrough of implementing a purchase order approval threshold rule in IFS Apps 10 and IFS Cloud — step by step, side by side.
IFS Business Logic in Practice: A Worked Example Across Apps 10 and IFS Cloud
In the companion article we covered the conceptual differences between adding business logic in IFS Applications 10 and IFS Cloud. Here, we'll walk through a realistic, end-to-end example to make those differences concrete.
The Scenario: Purchase Order Approval Thresholds by Supplier Category
Acme Manufacturing uses IFS to manage purchasing. Their finance team has a new rule:
When a Purchase Order is released, if the total order value exceeds £10,000 and the supplier is categorised as "New Supplier", the release must be blocked and a manager notified to review the order before it can proceed.
This is a common pattern in ERP implementations — a conditional validation that enforces a business policy at the point of a key workflow transition. Let's implement it in both Apps 10 and IFS Cloud.
Implementation in IFS Apps 10
In Apps 10, there are two natural approaches depending on the complexity of the rule and the tools available. We'll use the Configuration approach (custom fields + custom events with PL/SQL), since this is what most Apps 10 implementations relied on.
Step 1: Add a Custom Field to the Supplier
First, we need to capture the supplier category. If IFS's standard supplier data doesn't already have a suitable field, we'll add one.
In IFS Enterprise Explorer → Solution Manager → Custom Fields:
- Search for the Logical Unit
SupplierInfoGeneral - Add a new attribute using the custom attribute wizard:
- Attribute Name:
SUPPLIER_CATEGORY - Type: Persistent (we want it stored in the database)
- Data Type: Enumeration (we'll create a custom enumeration)
- Attribute Name:
- Create a Custom Enumeration called
SupplierCategorywith values:ESTABLISHED→ "Established Supplier"NEW→ "New Supplier"PREFERRED→ "Preferred Supplier"
- Bind the enumeration to the
SUPPLIER_CATEGORYattribute - Approve the attribute and the logical unit
- Publish the logical unit — this adds the column to
SUPPLIER_INFO_GEN_TABin the Oracle database - Navigate to the Supplier Information page in Enterprise Explorer
- Use Custom Objects → Reload Configuration, then the Column Chooser to add the "Supplier Category" field to the page
- Distribute the layout via Base Profiles so all users see the field
At this point, users can open any supplier record and set the Supplier Category. The data is stored and queryable.
Step 2: Write the Custom PL/SQL Package
The validation logic needs to live somewhere. In Apps 10, the common pattern is a Custom Utility Package — a PL/SQL package written outside of the IFS component model and deployed directly to the Oracle database.
Connect to the Oracle database using a tool like SQL Developer or Toad:
Note the use of IFS's Application_SYS.Set_Completion_Text and Application_SYS.Stop_Transaction — these are IFS framework procedures that surface a user-friendly error message and roll back the transaction cleanly.
Also note the cf1 column reference. In Apps 10, custom persistent attributes were stored in extension columns named CF1, CF2, etc. on the underlying table. This is a fragile detail that meant custom PL/SQL had to be aware of column ordering if multiple custom attributes existed on the same LU.
Step 3: Create the Custom Event and Action
Now we wire the validation into the IFS purchase order release workflow using Custom Events.
In IFS Enterprise Explorer → Solution Manager → Events → Create Event Action:
- Navigate to List Events and search for
PURCHASE_ORDER_RELEASED— this is an Application Defined Event fired by IFS when a purchase order is released - Right-click on the event and select Create New Action for Event
- Configure the event action:
- Action Description:
Acme - Validate New Supplier Threshold - Action Type:
Execute Online SQL - Perform upon Event:
PURCHASE_ORDER_RELEASED - Enabled: Yes
- Action Description:
- In the SQL Command field, enter:
The :ORDER_NO syntax passes the event attribute (the order number from the triggering transaction) into our custom package.
- Save the event action
Step 4: Add to an Application Configuration Package
To transport these changes between environments (e.g., from test to production):
- Navigate to Custom Objects Overview
- Select the
SUPPLIER_CATEGORYcustom attribute, the custom enumeration, and theAcme - Validate New Supplier Thresholdevent action - Right-click → Add to Application Configuration Package
- Create a new ACP named
ACME_PO_APPROVAL_VALIDATIONwith version1.0 - Export the ACP as XML
- Store the XML in your version control system (Git, SVN, etc.)
- On the target environment, Import the ACP
⚠️ Note: The custom PL/SQL package (
AcmePurchaseOrderValidation) is not included in the ACP. It must be deployed to each Oracle database separately — through a SQL script, a deployment tool, or manually. This is a significant gap in Apps 10's lifecycle management.
Step 5: Test
- Open a Purchase Order where the supplier is set to "New Supplier" and the total exceeds £10,000
- Attempt to release the order
- IFS fires the
PURCHASE_ORDER_RELEASEDevent, which executes the Online SQL action, which calls the custom package - The package detects the threshold breach, raises
Stop_Transaction - The user sees the error message and the order remains unreleased
Implementation in IFS Cloud
In IFS Cloud, the recommended approach for this kind of business logic is a Customisation — editing IFS source code using Developer Studio. This is more involved to set up initially, but results in properly managed, upgrade-safe code.
Step 1: Add the Supplier Category Attribute
The supplier category field can still be added via Configuration (the IFS Cloud equivalent of Apps 10's custom objects approach). For a persistent field that will also be used in business logic, IFS recommends adding the attribute as part of the Customisation rather than as a Configuration, to avoid cross-layer dependencies.
We'll add it via Customisation in Developer Studio.
In IFS Developer Studio, with a Customisation Project open:
- In the Build Home, navigate to the
SUPPcomponent and locateSupplierInfoGeneral.entityin the model - Right-click → Customize This — Developer Studio creates
SupplierInfoGeneral-Cust.entity - Add the new attribute to the entity:
-
Run Generate to produce the PL/SQL for the entity change. Developer Studio creates the necessary column on the underlying table and updates the relevant views and API packages.
-
Deploy to the development database.
Step 2: Add the Field to the Aurena Client
To surface the field in the Aurena UI:
- In the Build Home, locate
SupplierInfo.clientin theSUPPcomponent - Right-click → Customize This → creates
SupplierInfo-Cust.client - Find the relevant group in the client and add the field:
- Generate and deploy. The field now appears in the supplier record in Aurena.
Step 3: Write the Validation Logic
The business logic lives in the Purchase Order component's projection service (.plsvc) file — the PL/SQL layer that backs the Aurena projection.
- In the Build Home, locate the purchase order release action in the
PURCHcomponent. FindPurchaseOrder.plsvc(or the relevant projection service file) - Right-click → Customize This → creates
PurchaseOrder-Cust.plsvc - Override the release action with the validation:
Key differences from the Apps 10 approach:
- We use
Error_SYS.Record_General— the IFS Cloud standard for raising user-facing errors with proper message management (internationalisation, message codes) - We access
supplier_categoryas a proper named column — not asCF1— because the attribute was added through the Customisation layer and the code generator created a real named column super(key_)delegates to the original IFS release implementation. The validation runs before the standard logic; if it passes, the original flow continues cleanly- The code is in a version-controlled source file, not embedded as text in a database record
Step 4: Generate and Build the Customisation
-
Generate the project in Developer Studio — this compiles the Marble models and PL/SQL, creating the actual database objects in the development environment
-
Test in the Aurena client connected to the development database:
- Set a supplier's category to "New Supplier"
- Create a Purchase Order with that supplier totalling over £10,000
- Attempt to release — confirm the error appears
- Confirm orders under £10,000 or with established suppliers release normally
-
When satisfied, build the Customisation deliverable using the Build Home's build tools — this produces the package that will be deployed to test and production environments
Step 5: Deploy and Manage Updates
Deploy the Customisation package to the test Use Place, conduct UAT, then deploy to production.
When IFS releases an update (typically every six months in the evergreen model):
- Apply the IFS update to your Build Home
- Open Developer Studio and run the Update Analyzer on your Customisation Project
- The Update Analyzer will flag if IFS has changed the
Release___procedure in the Core layer — meaning your@Overridemay need to be revisited - Review any flagged items, reconcile your customisation with the new Core version, rebuild, and deploy
This maintenance step is the trade-off for having properly managed, testable business logic.
Side-by-Side Step Comparison
| Step | IFS Apps 10 | IFS Cloud |
|---|---|---|
| Add supplier field | Custom Attribute via Enterprise Explorer → Solution Manager | Entity attribute in -Cust.entity file via Developer Studio |
| Surface field in UI | Column Chooser + Base Profile | Override group in -Cust.client Marble file |
| Write business logic | PL/SQL package deployed directly to Oracle DB | PL/SQL override in -Cust.plsvc via Developer Studio |
| Wire logic to workflow | Event Action (Execute Online SQL) attached to PURCHASE_ORDER_RELEASED | @Override of the release procedure — logic runs directly in the call chain |
| Error handling | Application_SYS.Stop_Transaction | Error_SYS.Record_General with message code |
| Column reference for custom field | CF1, CF2 (positional, fragile) | Named column from entity definition |
| Packaging for deployment | ACP (for config objects) + manual SQL script (for PL/SQL package) | Single Customisation deliverable package from build |
| Version control | Manual — export ACP XML; PL/SQL script maintained separately | Developer Studio project in source control |
| Upgrade management | Manual review; custom PL/SQL packages in DB may drift from IFS APIs | Update Analyzer flags conflicts in override files |
| Tooling access required | Enterprise Explorer + Oracle DB access | IFS Developer Studio + Build Home |
| Suitable for functional consultants? | Yes (for the config parts) | No — requires a developer |
Summary of Key Differences
1. Where Business Logic Lives
In Apps 10, validation logic sat in custom PL/SQL packages deployed directly to Oracle, with event actions as the bridge between IFS workflow events and your code. The business logic was outside the IFS component model.
In IFS Cloud, business logic sits inside the IFS source layer — in override files that are part of a formal build project. The logic is injected directly into the workflow call chain via @Override, not triggered through a separate event subscription.
2. Fragility of Custom Field References
Apps 10's custom fields were stored in generic positional columns (CF1, CF2, ...). Any custom PL/SQL referencing these columns was inherently fragile — reorder your custom attributes and your code breaks.
IFS Cloud Customisations use named columns generated from the entity model. The reference is stable and semantically meaningful.
3. Deployment Complexity
The Apps 10 approach required two separate deployment steps: ACPs for configuration objects and manual SQL scripts for PL/SQL packages. These could get out of sync.
The IFS Cloud Customisation approach produces a single deliverable package containing everything — entity changes, PL/SQL, client modifications. One package, one deployment.
4. Upgrade Safety
Apps 10 customisations in custom events were relatively upgrade-safe (they were data in tables, not source files), but the custom PL/SQL packages calling IFS APIs could break silently if IFS changed an API signature.
IFS Cloud Customisations use Update Analyzer to surface conflicts explicitly. It's more work upfront, but there's no silent breakage — the build process fails visibly when something needs reconciliation.
5. The Accessibility Trade-Off
The Apps 10 approach was more accessible to functional consultants. Someone with good IFS knowledge and SQL skills could implement the entire example above without a development environment. In IFS Cloud, the Customisation approach requires IFS Developer Studio, a Build Home, and a developer familiar with the Marble modeling language.
This is a genuine trade-off. IFS Cloud's Configuration path (custom events with embedded PL/SQL) can still be used for simpler logic, but for anything that needs to be maintained reliably through the evergreen update cycle, the Customisation path is the right choice — and that path requires a proper developer.
Conclusion
The same business requirement — blocking a purchase order release based on supplier category and value — can be implemented in both IFS Apps 10 and IFS Cloud, but the journey looks very different.
Apps 10 gets you there faster with lower technical overhead. IFS Cloud takes longer to set up but produces more maintainable, testable, and upgrade-resilient code. The trade-off mirrors the broader shift from a monolithic on-premises ERP to a cloud-native, evergreen platform.
If your organisation is evaluating the move from Apps 10 to IFS Cloud, take a close look at your existing customisations. The simpler ones (custom fields, event notifications) will translate relatively cleanly to the Configuration path. The complex ones (business logic in custom PL/SQL packages) are worth rebuilding properly as IFS Cloud Customisations — rather than porting the Apps 10 event-action pattern directly. The initial investment in the proper approach pays dividends every time an IFS update arrives.
Need a practical migration approach for a specific IFS custom rule?
Syrett Consultancy can work through your Apps 10 logic and redesign it for IFS Cloud with minimal guesswork.