Report Equipment List
If you want to extract information only from Logical Equipment Reference into the Report then you can define your report from "Equipment" Type like bellow
But if you want to extract information that covers multiple object types, then you have to go through EKL Expressions. in most cases for piping report we will go that way. In this case the selected Object type will be "Logical Occurence"
Retrieve Equipment instance name
let InstName (String)
let EQTInst(RFLVPMLogicalInstance)
let EQTRef(RFLVPMLogicalReference)
set EQTInst=ThisObject.Instance
set EQTRef=ThisObject.Reference
if(EQTRef ->IsASortOf("EnsLogicalEquipment"))
{
set InstName=EQTInst.Name
}
Attribute=InstNamenote : the "if" condition is useless if you have defined the following filter in the report
ReturnBool = ThisObject.Reference ->IsASortOf("EnsLogicalEquipment")
Retreive Subtype attribute
let RefSubType (String)
let EQTLogical(EnsLogicalEquipment)
set EQTLogical=ThisObject.Reference
set RefSubType=EQTLogical.V_Ens_SubType
Attribute=RefSubType
Report Piping Part List
If you want to extract information only from Logical Piping Part into the Report then you can define your report from "Logical Piping PArt Occurence" Type like bellow.
And get the attribute
Or create expressions
But if you want to extract information that covers multiple object types, or tha tare more generic then you have to go through EKL Expressions.
Retreive Instance name
let Inst (Piping_Logical_Part_Inst)
set Inst= ThisObject.Instance
Attribute=Inst.Name
Retreive NominalSize
let Inst (Piping_Logical_Part_Inst)
set Inst= ThisObject.Instance
Attribute=Inst.V_NominalSize
Retreive Subtype
let RefSubType (String)
let Ref(Piping_Logical_Part)
set Ref=ThisObject.Reference
set RefSubType=Ref.V_LogicalSubPartType
Attribute=RefSubType
Retreive LineID
let Inst(Piping_Logical_Part_Inst)
let Occ(PipLogicalPartOcc)
let Ref(Piping_Logical_Part)
let LineList(List)
let Line1Name(string)
let Line2Name(string)
let Line1Occ(LogicalOccurrence)
let Line1Ref(RFLVPMLogicalReference)
let Line2Occ(LogicalOccurrence)
let Line2Ref(RFLVPMLogicalReference)
set Inst=ThisObject.Instance
set Ref=ThisObject.Reference
set Occ=ThisObject
ListLogicalLineFromMember (Occ,LineList)
if(LineList.Size() > 0)
{
Line1Occ = LineList.GetItem(1)
set Line1Ref = Line1Occ.Reference
Line1Name = Line1Ref.Name
if (Line1Ref->IsASortOf("Piping_Line"))
{
Attribute=Line1Name
}
}
if(LineList.Size() > 1)
{
Line2Occ = LineList.GetItem(2)
set Line2Ref = Line2Occ.Reference
Line2Name = Line2Ref.Name
if (Line2Ref->IsASortOf("Piping_Line"))
{
Attribute=Line2Name
}
}
else Attribute = ""
Report LineID List
Retreive Name Reference
let Ref(RFLVPMLogicalReference)
set Ref=ThisObject.Reference
Attribute=Ref.V_NameRetreive LineID type (Piping or ICloop)
let Ref(RFLVPMLogicalReference)
set Ref=ThisObject.Reference
If(Ref->IsASortOf("Piping_Line"))
{
Attribute="Piping Line"
}
If(Ref->IsASortOf("ICLoop_Line"))
{
Attribute="I&C Line"
}
Retreive Fluid (same for other Reference attribute like Specification, Pressure, Temperature ...)
Let PipinLine(Piping_Line)
set PipinLine=ThisObject.Reference
Attribute = PipinLine.V_Fluid
Report Instrument List
Retreive Name instance
let Inst(RFLVPMLogicalInstance)
set Inst=ThisObject.Instance
Attribute=Inst.NameRetreive subtype
let Ref(Piping_Logical_Part)
set Ref=ThisObject.Reference
Attribute=Ref.V_LogicalSubPartTypeRetreive Process LineID
let Inst(Piping_Logical_Part_Inst)
let Occ(PipLogicalPartOcc)
let Ref(Piping_Logical_Part)
let LineList(List)
let Line1Name(string)
let Line2Name(string)
let Line1Occ(LogicalOccurrence)
let Line1Ref(RFLVPMLogicalReference)
let Line2Occ(LogicalOccurrence)
let Line2Ref(RFLVPMLogicalReference)
set Inst=ThisObject.Instance
set Ref=ThisObject.Reference
set Occ=ThisObject
ListLogicalLineFromMember (Occ,LineList)
if(LineList.Size() > 0)
{
Line1Occ = LineList.GetItem(1)
set Line1Ref = Line1Occ.Reference
Line1Name = Line1Ref.Name
if (Line1Ref->IsASortOf("Piping_Line"))
{
Attribute=Line1Name
}
}
if(LineList.Size() > 1)
{
Line2Occ = LineList.GetItem(2)
set Line2Ref = Line2Occ.Reference
Line2Name = Line2Ref.Name
if (Line2Ref->IsASortOf("Piping_Line"))
{
Attribute=Line2Name
}
}
else Attribute = ""
//Notify("LineList=", LineList)Retreive ICLoop LineID
let Inst(Piping_Logical_Part_Inst)
let Occ(PipLogicalPartOcc)
let Ref(Piping_Logical_Part)
let LineList(List)
let Line1Name(string)
let Line2Name(string)
let Line1Occ(LogicalOccurrence)
let Line1Ref(RFLVPMLogicalReference)
let Line2Occ(LogicalOccurrence)
let Line2Ref(RFLVPMLogicalReference)
set Inst=ThisObject.Instance
set Ref=ThisObject.Reference
set Occ=ThisObject
ListLogicalLineFromMember (Occ,LineList)
if(LineList.Size() > 0)
{
Line1Occ = LineList.GetItem(1)
set Line1Ref = Line1Occ.Reference
Line1Name = Line1Ref.Name
if (Line1Ref->IsASortOf("ICLoop_Line"))
{
Attribute=Line1Name
}
}
if(LineList.Size() > 1)
{
Line2Occ = LineList.GetItem(2)
set Line2Ref = Line2Occ.Reference
Line2Name = Line2Ref.Name
if (Line2Ref->IsASortOf("ICLoop_Line"))
{
Attribute=Line2Name
}
}
else Attribute = ""
Apply Filter exemples
Get only Equipment:
ReturnBool = ThisObject.Reference ->IsASortOf("EnsLogicalEquipment") Get only Logical Valves
ReturnBool = ThisObject.Reference ->IsASortOf("Piping_Logical_Valve")Get only LineID (Piping & ICloop)
ReturnBool = ThisObject.Reference ->IsASortOf("Piping_Line") or ThisObject.Reference ->IsASortOf("ICLoop_Line")Get only instruments
filter all "logical instrument" type AND "Piping Valve" with subtype = "Control Valve"
let LValve(Piping_Logical_Valve)
set LValve=ThisObject.Reference
ReturnBool = LValve.V_LogicalSubPartType=="Control Valve" or ThisObject.Reference ->IsASortOf("Piping_Logical_Instrument") Get only Nozzles
if nozzle created before 2026x (old data model)
let LNozzle(Piping_Logical_Miscellaneous)
set LNozzle=ThisObject.Reference
ReturnBool = LNozzle.V_LogicalSubPartType=="Nozzle"if nozzle created since 2026x (new data model)
ReturnBool = ThisObject.Reference ->IsASortOf("Piping_Logical_Nozzle")
