I fear this will be my “Carthago delenda est“: Furthermore, I believe the Lansa documentation is severely lacking.
Case in point, today, using Visual Lansa 14.1 and the online and up-to-date documentation, I wanted to use a keyed collection. I wanted to use this in a way where I can later loop through the collection getting keys and values.
Now, had I started on 7.60.1 FOR Parameters I might have guessed this earlier, but I didn’t. I started on Keyed Collection (PRIM_KCOL). Silly me.
It does tell me how to define a keys collection but in a roundabout way. So the definition goes like this
Define_Com Class(#PRIM_KCOL<#PRIM_VAR #CHAR512>) Name(#COL1)
which defines a collection #COL1 with keys of type #CHAR512 and values of the variant type, #PRIM_VAR. You have to use repository fields as the key type for some reason, but there is no such requirement for the key value.
Now, #COL1.ItemCount can tell me how many pairs of keys and values are in the collection but there is no way to use this to iterate through the collection.
Since I had not started on the FOR page I tried this:
For Each(#COL1_VAL) In(#COL1)
#COL1_KEY := #COL1.KeyOf<#COL1_VAL>
which actually works. I did however suspect that it could have some form of performance issues and also would only work consistently if all values were unique.
But wild and semi-random searching of the documentation lead me to the poorly demonstrated Key parameter for the For loop:
For Each(#COL1_VAL) in(#COL1) Key(#COL1_KEY)
I have also tried to find the documentation on the different assignment operators. I know what +=, -=, *= and /= does, but apparently I don’t know what := does since sometimes I need to use <=:
#VAR_OBJ <= #COL1<#COL1_KEY>
#COL1_VAL := #COL1<#COL1_KEY>.String
#COL1_VAL := #VAR_OBJ.String
I am guessing <= passes a reference while := assigns a value.
Furthermore, I believe the Lansa documentation is severely lacking.