EKL - BL Schematic Callback Route Extremity Modified

Introduction

Usage : 

  • provides the opening through Business Rule to the user whenever a route extremity is changed (connected/disconnected) in schematics
  •  allow user to keep routable extremities information through a Business Rule. User may copy the information on some custom attributes.

Datasetup Resource Set : 

  • Diagram Resource

Datasetup Resource : Schematic Callback Route Extremity Modified  / Rule to keep route extremities informations

 

Rule Example 1 

Description

In the sample rule below, the instance name of extremities (connected components) is copied on V_description attribute of routable instance like Extremity1Name , Extremity2Name

NULL is copied in case extremity is NULL

 

Rule

/* Rule created by h66 9/8/2021 */ 
let RoutableOcc(LogicalOccurrence)
let ListExtrmitiesOcc(LIST)
set RoutableOcc = ThisObject
set ListExtrmitiesOcc = Parameters.GetAttributeObject("List_Extremities_Components")

let RoutableIns(RFLVPMLogicalInstance)
set RoutableIns = RoutableOcc.Instance

Let String_Description(String)
Set String_Description = ""

Let i = 1
Let isize = 0
set isize = ListExtrmitiesOcc->Size()

​​​​​​​let ExtremityOcc(LogicalOccurrence)

if(NULL <> RoutableIns)
{
  for i while i<=isize
  {  
    set ExtremityOcc = ListExtrmitiesOcc->GetItem(i)
    if(NULL <> ExtremityOcc)
    {
      Let InstanceObject(RFLVPMLogicalInstance)
      set InstanceObject = ExtremityOcc.Instance
      
                Let InstanceName(String)
      set InstanceName = InstanceObject.PLM_ExternalID
      
      if (i == isize)
                  set String_Description = String_Description + InstanceName
      else
                  set String_Description = String_Description + InstanceName + ", "
    }
    else
    {
      if (i == isize)
                   set String_Description = String_Description + "NULL"
      else
                  set String_Description = String_Description + "NULL, "
    }
  }
  
  RoutableIns.SetAttributeString("V_description",String_Description)

3DXML

 

Rule Example 2 

Description

In the sample rule below, the Operating pressure of the Route PArent LineID  is copied on V_description attribute of the connected Equipment

limitation, when disconnecting route the value on Equipment is not reset

 

Rule

//Operating pressure of the route parent line ID is copy on conencted component instance description only for "Tank"
//Retreive info from Pipe parent lineID
let ParentLineID(Piping_Line_Inst)
let ParentLineIDRef(Piping_Line)
let LineIDList(List)
ListLogicalLineFromMember(ThisObject,LineIDList)
ParentLineID=LineIDList->GetItem(1)
set ParentLineIDRef=ParentLineID.Reference
let OpPressureReal(Real)
let OpPressure(String)
set OpPressureReal=ParentLineIDRef.GetAttributeReal("V_OperatingPressure")
set OpPressure=ToString(OpPressureReal)
// pipe Extremities
let RoutableOcc(LogicalOccurrence)
let RoutableIns(RFLVPMLogicalInstance)
Let String_Description(String) // pipe instance description
let ListExtrmitiesOcc(LIST)
let ExtremityOcc(LogicalOccurrence)
Let ExtremityInst(RFLVPMLogicalInstance)
let ExtremityRef(RFLVPMLogicalReference)
let ExtremityInstDesc(String)
let ExtremityInstDescNew(String)
Let InstanceName(String) //connected object Extremity instanceName
let EQTSubtype (string)
Set String_Description = ""
Set ExtremityInstDescNew=""
set RoutableOcc = ThisObject
set RoutableIns = RoutableOcc.Instance
set ListExtrmitiesOcc = Parameters.GetAttributeObject("List_Extremities_Components")
Let i = 1
Let isize = 0
set isize = ListExtrmitiesOcc->Size()
if(NULL <> RoutableIns)
{
 Notify ("BR_Propagate Att Pipe<->Component")
 for i while i<=isize
 {
   set ExtremityOcc = ListExtrmitiesOcc->GetItem(i)
   if(NULL <> ExtremityOcc)
   {
   set ExtremityInst = ExtremityOcc.Instance
   set ExtremityRef=ExtremityInst.Reference
   set ExtremityInstDesc=ExtremityInst.GetAttributeString("V_description")
   set EQTSubtype=ExtremityRef.GetAttributeString("V_Ens_SubType")
   //Notify("ConnectedCompSubtype: ",EQTSubtype)
   set InstanceName = ExtremityInst.PLM_ExternalID
   
       if (i == isize)
       {
             set String_Description = String_Description + InstanceName
           If((ExtremityRef->IsASortOf("EnsLogicalEquipment")) and (EQTSubtype=="Tank"))
           {  
                  set ExtremityInstDescNew = ExtremityInstDesc + OpPressure
           }
       }
       else
         {  
         set String_Description = String_Description + InstanceName + ", "
       If((ExtremityRef->IsASortOf("EnsLogicalEquipment")) and (EQTSubtype=="Tank"))
           {  
                  set ExtremityInstDescNew = ExtremityInstDesc + OpPressure + ", "
           }
         }
   }
   else
   {
     if (i == isize)
     {
       set String_Description = String_Description + "NULL"
       //If((ExtremityRef->IsASortOf("EnsLogicalEquipment")) and (EQTSubtype=="Tank"))
       //{  
              set ExtremityInstDescNew = ExtremityInstDesc + "NULL"
       //}
     }
     else
     {
         set String_Description = String_Description + "NULL, "
         //If((ExtremityRef->IsASortOf("EnsLogicalEquipment")) and (EQTSubtype=="Tank"))
           //{  
              set ExtremityInstDescNew = ExtremityInstDesc + "NULL, "
           //}
     } 
   }
   ExtremityInst.SetAttributeString("V_description",ExtremityInstDescNew)
 }
 RoutableIns.SetAttributeString("V_description",String_Description)
}