Question Mikhail (VetsEZ) Akselrod · 57 min ago

Failure to use multi-line code in *inc file macro definition

What is wrong with the *inc file code below:

#define ArrayToString(%array,%out,%del)      set %out="" for { ##continue
                                                                                   set key=$order(%array("")) quit:key="" ##continue
                                                                                   set %out=%out_%del_key ##continue
                                                                               } quit

Compilation at calling classmethod as : Set tQStr = $$$ArrayToString(pQArray,tQStr,"##") brings error as:

Product version: IRIS 2022.1
$ZV: 2022.1.2 Build 574 Server IRIS for Windows (x86-64) 2022.1.2

Comments

Julius Kavay · 25 min ago

I would say, a little bit to much "set" command.

Instead   of: Set tQStr = $$$ArrayToString(pQArray,tQStr,"##") 

try this  one: $$$ArrayToString(pQArray,tQStr,"##") 

Your version gives something like: Set tQStr = set %out="" for { ...

as you see, %out isn't a command (and set would be undefined, but that isn't the problem)

By the way, the second line of your macro should be:

set key=$order(%array(key)) quit:key="" ##continue

else you have the perfect endless loop

0
Julius Kavay · 11 min ago

One more comment, I'm not sure about the "quit" command after the closing curly brace,  I think you don't need it (because it's outside of the FOR loop, hence it will stop the flow of your application)!

0