BL to Authorize Copy of Configuration Model from Parent to Child

Overview

A Configuration Context consists of a set of dictionaries defining the criteria that can be used to configure the structure. Configuration Model, used for Configuration Context, is defined by Engineering. Manufacturing usually uses the same Configuration Model for configuring Manufacturing Structure (for example with different criteria). Manufacturing Engineer may create different BOM structure, valid for manufacturing which is not fully following assembly structure of Engineering BOM. In such case Configuration Models can be copied across the MBOM structure typically from a parent (like a Manufacturing Assembly) to a child (such as a sub-assembly). However, this copy operation must adhere to specific business rules to ensure data integrity.

This is where the Opening ID DELMA_CopyModelFromParentToChildValidation_ID comes into play.

Environment Details:

  • Version: 2025x FD03 (FP.CFA.2523)

Required Licenses

License Name Purpose
CSVCollaborative Innovator
PPLCreate MBOM

Refer to official 2025x documentation for license specifics.

Execution Context

AspectDetails
Type of CustomizationValidation
Where it Runson Client side 
Purpose

This logic is triggered only when a configuration model is about to be copied from a parent manufacturing object to a child. Its role is to:

  • Evaluate whether the copy operation is allowed

  • Enforce custom business rules via EKL logic

This Opening ID works in conjunction with the user preference: "Copy model from parent to child Item or Process or Operation"

How the Logic Works

Input Parameters

ParameterTypeDescription
ThisObjectDELFmiFunctionReference

Item, system, or operation reference on which the configuration model may be copied

ihParentReferenceDELFmiFunctionReference

Father from which the configuration model may be copied.

Output Parameters

ParameterTypeDescription
ValidationBoolean

TRUE if the copy of configuration model from the parent to the child is authorized.

FALSE if the copy of configuration model from the parent to the child is not authorized.

MessageStringExplanation of the result (optional)

Preference-Driven Behavior

This Opening ID’s execution is controlled by a preference (switch).

PreferenceOpening ID ResultCopy Model?
✅ Checkedtrue or undefined✅ Yes
✅ Checkedfalse❌ No
❌ Uncheckedtrue or false❌ No

If the preference is not enabled, the system blocks copying entirely, even if your custom logic returns true.

Step1: Click on Preferences
Step 2: Enable the App preference in Manufactured Item Definition
Step 3: User can also enable this app preference to allow copy of model to child process or operations

 

Use Case 1: Allow Copy for All Except Certain Child Types

Scenario:

Goal: Block configuration model copy when the child object types are Operation (e.g., "GeneralOperation", "LoadingOperation", etc.). Allow configuration model copy on System or workplan types and Header operation 

Business Need:

  • Useful when specific child types are not meant to inherit configuration logic

Use Case 2: Allow Copy Only for Custom MBOM Types

Scenario:

Goal: Restrict configuration model copying to only when both parent and child are of type Cust_ManufacturingAssembly.

Business Need:

Some companies define a custom MBOM type for complex assemblies that use configuration models. To avoid confusion, such models should not be used across generic types.

EKL Flowchart and Logic:

FlowChart:

EKL Logic:

Note: Below BL can be written seperately for MBOM and Operation use-case as well. Use "DELFmiFunctionReference" for MBOM and use "DELLmiOperationReference" for operation use-case.

/* ============================================================================
   Authorize Copy of Configuration Model from Parent to Child
   Logic implemented in Opening ID: DELMA_CopyModelFromParentToChildValidation_ID
   Purpose: Validate whether a configuration model can be copied from a parent 
            object (e.g., Assembly) to a child object (e.g., sub-assembly, operation)
============================================================================ */

/* ----------------------------
   Declare the necessary variables 
---------------------------- */
Let ihParentReference(PLMCoreReference)           // Reference to the parent object (source of the model)
Let ChildReference(PLMCoreReference)              // Reference to the child object (target of the model copy)
Let ChildType(Type)                               // Type object of the child
Let ChildTypeName(String)                         // Name of the primary type of the child
Let ReturnMessage(String)                         // Message to communicate result of validation

/* ----------------------------
   Set the current object (ThisObject) as the child reference
---------------------------- */
set ChildReference = ThisObject

/* ----------------------------
   Default the validation to false  assume copy is blocked unless logic permits
---------------------------- */
Validation = false

/* ----------------------------
   Initialize return message (empty)
---------------------------- */
ReturnMessage = ""

/* ----------------------------
   Retrieve the parent object from parameters
---------------------------- */
set ihParentReference = Parameters->GetAttributeObject("ihParentReference")

/* ----------------------------
   Proceed only if parent is not null
---------------------------- */
if (ihParentReference <> NULL) {

    /* ----------------------------
       Get the type and name of the child object
    ---------------------------- */
    ChildType = ThisObject.PrimaryType
    ChildTypeName = ChildType.Name

    /* ============================================================
       Use Case 1: Allow copy ONLY if both parent and child are 
       of custom type "Cust_Manufacturing_Assembly"
    ============================================================ */
    if ((ChildReference.IsSupporting("Cust_Manufacturing_Assembly") == true) AND 
        (ihParentReference.IsSupporting("Cust_Manufacturing_Assembly") == true)) {

        Validation = true    // Allow model copy

    }

    /* ============================================================
       Use Case 2: Allow copy if:
       - Child is of type "DELLmiHeaderOperationReference"
       OR
       - Child type name contains "System" AND parent supports "PLMSystem"
       This allows structured assignment (e.g., system-level copy)
    ============================================================ */
    else if ((ChildTypeName == "DELLmiHeaderOperationReference") OR 
            (ChildTypeName.Search("System") > 0 AND ihParentReference.IsSupporting("PLMSystem") == true)) {

        Validation = true    // Allow model copy in system-structured contexts

    }

    /* ----------------------------
       In all other cases, block the copy and log message
    ---------------------------- */
    else {
        Validation = false
        ReturnMessage = "Model not copied on child #" + ThisObject.Name + " of type # " + ChildTypeName
    }
}

/* ----------------------------
   If parent is null, block copy and log message
---------------------------- */
else {
    ReturnMessage = "Model not copied on child. Parent is null"
}

/* ----------------------------
   Set the return message so it is visible in UI or log
---------------------------- */
Parameters.SetAttributeString("Message", ReturnMessage)


Example UseCase1:
User attaches the configuration model to the Root System, then creates the child structure as shown below.

Model is automatically attached to:

  • All General System nodes

  • All Header Operation nodes

Model is not attached to:

  • Other Operation nodes. Nodes that fail business rule conditions

If the type is not authorized (e.g., "Loading Operation"), the copy is blocked, and User receives a message:
 

Example UseCase2:
User attaches the configuration model to the Root System, then creates the child structure as shown below.

Model is automatically attached to:

  • All Custom Assembly nodes [Cust_Manufacturing_Assembly]

Model is not attached to:

  • Other nodes like ManufacturedPart. 

If the type is not authorized (e.g., "ManufacturedPart"), the model copy is blocked, and User receives a message:

 

 Alternate Applications

This logic can be enhanced for:

  • Lifecycle state checks (e.g., only copy if child is In Work)

  • Attribute-based validation (e.g., only if Discipline = Manufacturing)

  • Role-based control (allow only if the current user has a certain role)

Deployment Instructions

To deploy this Opening ID logic:

  1. Use the Data Setup app. You may refer the below page for Business Rule deployment.

    How to Deploy Business Rule

  2. Set the following parameters:

    • Resource Set ID:(as defined by your business deployment strategy)

    • Opening ID:DELMA_CopyModelFromParentToChildValidation_ID

    • Fact Type:PLMCoreReference

  3. Add the EKL logic corresponding to your use case.

  4. Ensure the corresponding preference is enabled for the logic to activate.

Summary

AspectDescription
Opening ID DELMA_CopyModelFromParentToChildValidation_ID
Purpose Validates model copy from parent to child objects
Logic Type Validation only (does not modify data)
Where It Runs Client side (user interaction layer)
Controlled By App preferences
Examples Restrict copy to custom MBOMs, block based on type, etc.
Deployment Tool Data Setup app

References

 

Person Of Contact

@Akansha BHASAKHETRE