Thanks for the suggestions Lahav and Kirk. I went ahead and wrote a method that attempts to do what I want. Here’s what it looks like:
// Method: Parse_ORDA_path C_OBJECT($1;$vjes_EntitySelection) C_TEXT($2;$vt_ORDAPath) C_POINTER($3;$pt_FinalAttribute) C_OBJECT($0;$vjes_ResolvedEntities) C_OBJECT($vj_DataClass) C_OBJECT($vj_DataClassAttrib) C_COLLECTION($vc_Tokens) C_TEXT($vt_Token) $vjes_EntitySelection:=$1 $vt_ORDAPath:=$2 $pt_FinalAttribute:=$3 $vj_DataClass:=$vjes_EntitySelection.getDataClass() // Make a copy of the entity selection $vjes_ResolvedEntities:=$vjes_EntitySelection.or($vj_DataClass.newSelection()) $vc_Tokens:=Split string($vt_ORDAPath;".") For each ($vt_Token;$vc_Tokens) $vj_DataClassAttrib:=$vj_DataClass[$vt_Token] Case of : ($vj_DataClassAttrib=Null) // Error : ($vj_DataClassAttrib.kind="storage") $pt_FinalAttribute->:=$vt_Token : ($vj_DataClassAttrib.kind="relatedEntity") $vjes_ResolvedEntities:=$vjes_ResolvedEntities[$vt_Token] : ($vj_DataClassAttrib.kind="relatedEntities") $vjes_ResolvedEntities:=$vjes_ResolvedEntities[$vt_Token] End case $vj_DataClass:=$vjes_ResolvedEntities.getDataClass() End for each $0:=$vjes_ResolvedEntities And here is how I use it: $vjes_ResolvedEntitySelection:= Parse_ORDA_path($vjes_EntitySelection;$vt_ORDAPath;->$vt_FinalAttribute) $vc_Attributes:=$vjes_ResolvedEntitySelection[$vt_FinalAttribute] I think it works, and I guess it wasn’t that painful to write. Anyway, thanks for the suggestions! - Steve > On May 11, 2020, at 9:49 PM, Kirk Brooks via 4D_Tech <4d_tech@lists.4d.com> > wrote: > > Hi Steve, > A couple of things to consider. You mention working with an 'entity > selection' but then get into talking about collections. To create a > collection from an entity selection, or only some properties of it, take a > look at .toCollection(). > https://doc.4d.com/4Dv18R3/4D/18-R3/entitySelectiontoCollection.305-4900500.en.html > > This might give you want you want right there as you pass a comma delimited > string to the method. > > The other approach is to simply do a query for what you need. These are > really fast in ORDA thanks to a lot of optimization built in and it's very > flexible. > https://doc.4d.com/4Dv18R3/4D/18-R3/dataClassquery.305-4900853.en.html > > The old way of approaching these sorts of situations where you paid a big > performance hit for multiple searches isn't nearly so true now. But it > depends on your data. Try it and see. > > On Mon, May 11, 2020 at 9:04 PM Steve Slanec via 4D_Tech < > 4d_tech@lists.4d.com> wrote: > >> I'm trying come up with generic code that produces a projection from an >> entity selection, and I think must be missing something obvious. I’d like >> to perform the following statement: >> >> $collection:=$employees.company.country >> >> But as generic code. I want to be able to pass the ORDA path >> “company.country” as a text variable so that I can change it at runtime. >> >> Obviously, using square bracket notation doesn’t work because square >> brackets for entity selections are used for indexes: >> >> $collection:=$employees[“company.country”] // Syntax error >> >> So how can I do this? >> >> I guess I could write a method that splits the ORDA path into tokens, >> examines each token individually, and traverses through relations if the >> token kind is a “relation" until we get to the last token, whose kind must >> be “storage". But I’m hoping I’m just being ignorant - it seems like a lot >> of work for doing what object notation does so simply and elegantly. >> >> Using 4D v18, macOS 10.14 >> >> Thanks for any advice! >> >> - Steve >> >> >> >> Steve Slanec >> Slanecon Digital >> >> ********************************************************************** >> 4D Internet Users Group (4D iNUG) >> New Forum: https://discuss.4D.com >> Archive: http://lists.4d.com/archives.html >> Options: https://lists.4d.com/mailman/options/4d_tech >> Unsub: mailto:4d_tech-unsubscr...@lists.4d.com >> ********************************************************************** > > > > -- > Kirk Brooks > San Francisco, CA > ====================== > ********************************************************************** > 4D Internet Users Group (4D iNUG) > New Forum: https://discuss.4D.com > Archive: http://lists.4d.com/archives.html > Options: https://lists.4d.com/mailman/options/4d_tech > Unsub: mailto:4d_tech-unsubscr...@lists.4d.com > ********************************************************************** ********************************************************************** 4D Internet Users Group (4D iNUG) New Forum: https://discuss.4D.com Archive: http://lists.4d.com/archives.html Options: https://lists.4d.com/mailman/options/4d_tech Unsub: mailto:4d_tech-unsubscr...@lists.4d.com **********************************************************************