Understanding the "Replace by Alternate Validation" Opening ID
In real-world manufacturing and product development, you often need backup parts or substitutes. These are called alternates or substitutes, and they ensure production doesn’t stop if the main part is unavailable.
Now imagine you're in the 3DEXPERIENCE platform, and someone tries to replace a part with one of its alternates from the "Manage Alternates/Substitutes" panel.
But not all substitutes are good to use right away. Some might be "proposed" but not yet validated. Others might be obsolete.
That’s where this Opening ID steps in and it checks: "Is the replacement allowed or not?"
Environment Details:
- Version: 2025x FD03 (FP.CFA.2523)
Required Licenses
| License Name | Purpose |
|---|---|
| CSV (Collaborative Industry Innovator) | |
| XEN (Product Release Engineer) | To create EBOM and add alternates |
| PPL (Process Engineer) | Create MBOM |
Note: Licenses listed are per 2025x documentation.
Execution Context
| Aspect | Details |
|---|---|
| Type of Customization | Execution |
| Where it Runs | on Client side |
| Purpose | To determine whether the replacement of a manufactured item with an alternate is allowed Triggered when a user runs the Replace by Alternate command from the Manage Alternates/Substitutes panel |
Input & Output Details
Input Objects:
- ThisObject: The current Manufactured Item you’re trying to replace
- Parameters: Holds all the context details needed to make a decision
Key Input Parameters:
| Parameter | Type | Purpose |
|---|---|---|
iChosenReplaceItemReference | Object | The alternate item being selected as replacement |
iPartofChosenReplaceItemReference | Object | The part associated with the alternate |
iAlternateQualificationState | String | Tells whether the alternate is Proposed, Qualified, or Obsolete |
iEBOMAlternateRelationType | String | Tells the type of replacement (Alternate, Reference Substitute, Instance Substitute) |
iRelationType | String | How the replacer item and part are related (e.g., Scope, Resulting Product) |
iInstanceSubstituteContext | Object | Only used if it's an Instance Substitute |
iReferenceSubstituteContext | Object | Only used if it's a Reference Substitute |
Output Parameter:
| Parameter | Type | Purpose |
|---|---|---|
oReplaceValidationStatus | String | Final answer - "Yes" or "No" to the replacement |
Use Case Overview
Imagine you're working with a car manufacturer that has multiple production sites, like:
- Austin site
- Houston site
Each site has its own localized MBOM (Manufacturing Bill of Materials), even though the EBOM (Engineering Bill of Materials) might be global. You start by:
- Using the Engineering Release app to create an EBOM for a vehicle part.
Defining alternates/substitutes (e.g., alternate battery or radiator) on EBOM.
Logging in to the Austin site.
Creating MBOM for Austin site using Create/update item structure command as shown and MBOM is created
Launch Manage Alternate Substitute command from Authoring Tab
This will show the alternate engineering part in the command whose part is not yet created
- Click on Add button and select the required OOTB or custom type
The item for alternate part is created as seen in (Item) Title icon
7. Now select the item and use Replace by Alternate command to replace one part with its alternate.
Item is replaced by alternate part and item is created in Austin Site
Later, at the Houston site, you:
- Create the MBOM for Houston [step no 4]
Launch Manage Alternate/Substitute to replace a part [step 5]. Even though item for alternate is not created at Houston, dialog shows alternates from another sites
User needs to follow same steps as step 6 to 8
BUT here's the problem:
You accidentally pick an alternate part that was provided by Austin, not Houston.
This would break plant-level traceability and introduce a site mismatch.
What Does This BL Do?
This Business Logic (BL), linked to the Opening ID DELMA_ReplaceByAlternate_Validation_ID, blocks replacement if the chosen alternate part was provided by a different plant/site.
In simple terms:
You can only replace a part with an alternate from the same site/project - no cross-site replacements allowed.
Without BL:
The system might allow this - even though Houston has no authority over Austin’s part.
With BL:
The system checks:
CurrentItemReference.project = HoustonReplacerItemReference.project = AustinBlocked with message:
"Replace By Alternate failed as chosen item to replace belongs to different plant"
How It Works – Behind the Scenes
Triggered When:
- User clicks Replace by Alternate from the Manage Alternates/Substitutes panel.
⚙️ The BL Checks:
- The site/project of the current part (e.g., Houston).
- The site/project of the selected alternate (e.g., Austin).
- If they match, the replacement is allowed.
- If they don’t match, it’s blocked, and the user is notified.
EKL Flow and Sample
/*
* Rule: ERI_RestrictReplaceByalternates
* Created by: ABE26 on 8/1/2025
* Purpose:
* Validates that the selected alternate item for replacement
* belongs to the same project/site as the current item.
* Output:
* oReplaceValidationStatus (yes / no)
*/
Trace(1 , "### ERI_RestrictReplaceByalternates")
/*----- local variables ----*/
Let CurrentManufacturedItem(MfgProcessOccurrence)
Let CurrentItemReference(DELFmiFunctionReference)
Let ReplacerItemReference(DELFmiFunctionReference)
Let oValidationStatus(String)
Let CurrentItemProject(String)
Let ReplacerItemProject(String)
oValidationStatus = "No"
set CurrentManufacturedItem = ThisObject
/* ----- Get Reference of the Current Mfg Item (Item on which panel is launched) ----- */
if (NULL <> CurrentManufacturedItem)
{
set CurrentItemReference = CurrentManufacturedItem.Reference
if(NULL <> CurrentItemReference)
{
set CurrentItemProject = CurrentItemReference.project
Trace(1, " CurrentItemProject : ",CurrentItemProject)
}
}
/* ---- Reference of the Replacer Mfg Item [Choosen from listview] ---- */
if (true == Parameters.HasAttribute("iChosenReplaceItemReference") )
{
set ReplacerItemReference = Parameters->GetAttributeObject("iChosenReplaceItemReference")
if(NULL <> ReplacerItemReference)
{
set ReplacerItemProject = ReplacerItemReference.project
Trace(1, " ReplacerItemProject : ",ReplacerItemProject)
}
}
/* ----- Validation: Project/Site of both items must match ----- */
if (ReplacerItemProject == CurrentItemProject)
{
set oValidationStatus = "yes"
}
else{
Notify("Replace By Alternate failed as chosen item to replace belongs to site # Expected Item Site should be # ", ReplacerItemProject,CurrentItemProject)
}
/* ---- FILL OUTPUT PARAMETERS ---- */
Parameters.SetAttributeString("oReplaceValidationStatus" ,oValidationStatus)
Benefits of This BL
- Prevents cross-site mistakes
- Ensures plant-level data integrity
- Enforces site-specific MBOM control
Business Rule Deployment
You may refer the below page for Business Rule deployment.
How to Deploy Business Rule
For deployment using Data Setup app following Resource set ID and opening needs to be used:
Resource Set ID:
Opening ID:
Fact Type:
Deploy the BL using Data Setup for "Fact type" = "FProcessOccurrence"
