EKL - Report2D - Basic extraction

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=InstName

note : 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_Name

Retreive 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.Name

Retreive subtype

let Ref(Piping_Logical_Part)
set Ref=ThisObject.Reference
Attribute=Ref.V_LogicalSubPartType

Retreive 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")