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)
}
