Operation Propagation (PLMAuthoringDefaultPropagationScope)

An opening ID is an entry point used to customize business logic. Operation Propagation (PLMAuthoringDefaultPropagationScope) allows you to define if an operation can be applied on objects according to a context.

This opening ID is integrated to:

  • The Duplicate, Duplicate Advanced, New Branch, and Delete commands in native apps.
  • The Duplicate, Duplicate Advanced, and New Branch commands in dashboard apps.

You can specify whether objects are copied, reused, or deleted:

  • During a Duplicate or New Branch operation, the object is copied if the opening ID execution returns true. Otherwise, the object is reused in the resulting duplicate or branch.

    For native apps, with the default implementation of this business logic, objects that are not in the same collaborative space as their root context are excluded from the scope of the operation, and are reused.

  • During a Duplicate Advanced operation, you can automatically specify the Reuse action for the object, instead of Duplicate. Users can modify this default action afterward.

    For native apps, with the default implementation of this business logic, objects that are not in the same collaborative space as their root context are assigned the Reuse action instead of Duplicate.

  • During a Delete operation in native apps, the object is deleted if the opening ID execution returns true. Otherwise, the object is not deleted.

Note: For more information about customization by business rules, see Installation and Setup: Customize: Behavior: Data Setup: Customization by Business Rules.

This page discusses:

General Information

The table below provides you with information related to the definition of the Opening ID.

Opening ID: PLMAuthoringDefaultPropagationScope
Customization intent: Computation
Execution context:
  • On the cloud: Client
  • On premises: Client/Server

Input Objects

Input objects must be of the following types:

  • ThisObject
  • Parameters corresponds to the context object.

Context Object Parameters

Parameter Names TypesRead/WriteComments
OperationId StringRead

Parameter used to identify the context execution. Available values are:

  • "Cloning" for Duplicate, Advanced Duplicate, or New Branch operations.
  • "Delete" for Delete operation.
For more information, see the OperationDetail row below.

OperationDetail StringRead

For OperationId = "Cloning", the possible OperationDetail values are:

  • "None" for Duplicate operation.
  • "None" for Advanced Duplicate operation.
  • "NewEvolution" for New Branch operation.

For OperationId = "Delete", the possible OperationDetail value is “None”.

RootContext PLMCoreReferenceReadFor each object, the parent of the highest level among the selected objects.
PropagateBooleanWriteThe result of opening ID execution. If true, the object is copied or deleted. If false, the object is kept (reused, or not deleted).
PolicyStringReadPolicy name.

Sample

The following sample shows how to implement the copying or deletion of an object whose type is MySampleType is allowed if the content collaborative space is the same as the root context. To achieve this particular Business Logic implementation, a CATRuleExit file, known as family, declares the script to run each time the advanced duplication or delete is launched on a reference whose type is MySampleType:

<Scripts>
<Script OpeningID="PLMAuthoringDefaultPropagationScope"
Type="MySampleType"
ScriptName="MyPropagationCheckRule" />
</Scripts>

This family tells to run the script MyPropagationCheckRule whenever the Duplicate Advanced or Delete operations are launched on an object whose type is MySampleType.

Let RootContext(STRING)
Let ProjectIntent(STRING)
Let ProjectObject(STRING)
Let OperationId(STRING)
Let OperationDetail(STRING)


ProjectIntent=""
OperationId=Parameters->GetAttributeString("OperationId")
OperationDetail =Parameters->GetAttributeString("OperationDetail")
if OperationId =="Cloning" and OperationDetail =="None"
{ 
if ( Parameters->HasAttribute("RootContext") == true ) {
   set RootContext=Parameters->GetAttributeObject("RootContext") 
}
if ( RootContext<>NULL)
{
    if ( RootContext->HasAttribute("V_project") ==true ) 
      {
        ProjectIntent=RootContext->GetAttributeString("V_project")
      }
}
ProjectObject=ThisObject.V_project
if ( ProjectObject <> ProjectIntent )
{
   Parameters->SetAttributeBoolean("Propagate",false)
}
else
{
   Parameters->SetAttributeBoolean("Propagate",true)
 }else
{
  Parameters->SetAttributeBoolean("Propagate",true)
}