set url="http://www.intersys.com/main.csp?a=b&QUERY=abc&QUERY=xyz"
    Do ##class(%Net.URLParser).Parse(url, .aComponents)
    
    set query=$lfs($get(aComponents("query")),"&")
    for i=1:1:$ll(query) {
        set $lb(name,value)=$lfs($lg(query,i),"=")
        set index=$order(data(name,""),-1)+1
        set data(name,index)=$g(value)
        set data(name,index,"O")=i
    }
    zwrite data

 

data("QUERY",1)="abc"
data("QUERY",1,"O")=2
data("QUERY",2)="xyz"
data("QUERY",2,"O")=3
data("a",1)="b"
data("a",1,"O")=1

When you upgrade Caché from any previous version, every time you should look at Upgrade Checklist in the documentation, and this checklist while upgrade from such old version as 5

And even with just a search by documentation you may find this link, with a text

SPOOLER Heading Processing Changed
In this version, a number of changes have been made to the HEADING and FOOTING statements, and general printer/terminal output in this context. Applications that depend on the format of SPOOLed output should be carefully checked to make sure the output still conforms to expectations.

in your code,

obj - it is some object, it may have some ID or not, if it just created

name1 - it is a value for property name in that object

but I completely don't understand why is here name2 and name3, and what do you suppose should be happens after this line ?

and how it should save data in other objects which we even don't know which ?

you should know somehow which objects you want to update. If you know only some other properties, you can use SQL command UPDATE 

You should actually read this tutorial.

Every class, has some types of elements, and some of them like Property and Parameter may contains some data.

Property stores data for every objects in this class, Parameter, for class itself.

In your example, saving data to properties of object was right. But in method PrintDetails, you try to read data from Parameter, not from property. To read data from property you should open this object before, but you also need to know an ID for such object.

#; open object by known ID
set obj=##class(Sample.Employeedetails).%OpenId(1)
#; if obj is empty, so this object could't be found, and open

#; ouptut property Name for this object
​Write !,obj.Name

Please forget about old-way programming. We now have so many features out-of-the-box which helps write understandable code quite easy.

set fs=##class(%Stream.FileCharacter).%New()
set fs.Filename="c:\csvfile.csv"
while 'fs.AtEnd {
  set line=$listfromstring(fs.ReadLine(), ",")

  #; in line you will get listbuild for all columns in a row
​}

class %Stream.FileCharacter helps to read text files, which may contain text in different codepages, and line ends.

Or if you need to read some binary data, which should have some conversion on the fly, use %Stream.FileBinary.