So you want to know the name of a current host from inside of it?

Business host has a %ConfigName property which you can access.

For example in BPL process you can trace the HostName like this:

 <trace value="process.%ConfigName"/>

And here's  the result:

In simple BP, BS and BO you can access current HostName with:

write ..%CinfigName

That said, why do you need to get the name of a current host from inside of it?

You need to use

set tSC=##class(EnsPortal.Utils).ItemSettings("Production.Name||Item.Name",.settings,.colNames)

Where ProductionName  is Production class. If ProductionName is not given, then the currently running or last run Production will be used. Item.Name is config name, not class. In your case you can call:

set tSC=##class(EnsPortal.Utils).ItemSettings("My.BP.AA",.settings,.colNames)

To get the settings of My.BP.AA host.

I have not found the function (NameExists) in the documentation

Note, that the index "Name" is defined in this class. <Index>Exists is just an automatically generated method that returns a boolean  (Passed index value exists). You can read more about autogenerated methods here.

Everything seems fine.

I'd recommend checking with HTTP Debugging proxy what request actually gets sent. Article on that.

tl;dr plan:

  1. Install Charles proxy (or Fiddler).
  2. Start it.
  3. Redirect your BO traffic to the proxy port.
  4. Check what is actually sent.

Alternatively if you can run the BO locally you can modify the outbound adapter to send the request with Test=1 value and check what's sent.

Unrelated but it's better to return a status from a generator method:

ClassMethod GenerateMethods() As %Status [ CodeMode = objectgenerator ]
{
    For i=1:1:%class.Methods.Count() {
        #dim method As %Dictionary.MethodDefinition = %class.Methods.GetAt(i)
        Continue:((method.Description["@AutoGenerated") || (method.CodeMode="objectgenerator"))
        Do %class.Methods.Insert(##class(util.TestGenerator).Generate(method.Name_"DoSomethingElse",%class.Name))
    }
    Quit %class.%Save()
}

What flags are you compiling with? For me it works on a first compilation:

USER>do $system.OBJ.UnCompile("util.*")
 
Uncompiling class util.Test
Uncompiling class util.TestGenerator
USER>do ##class(util.Test).TestOneDoSomethingElse()
 
DO ##CLASS(util.Test).TestOneDoSomethingElse()
^
<CLASS DOES NOT EXIST> *util.Test
USER>do ##class(util.TestGenerator).Generate()
 
DO ##CLASS(util.TestGenerator).Generate()
^
<CLASS DOES NOT EXIST> *util.TestGenerator
USER>do $system.OBJ.Compile("util.*")
 
Compilation started on 06/12/2018 20:13:00 with qualifiers ''
Compiling 2 classes, using 2 worker jobs
Compiling class util.TestGenerator
Compiling routine util.TestGenerator.1
Compiling class util.Test
Compiling routine util.Test.1
Compilation finished successfully in 0.012s.
 
USER>do ##class(util.Test).TestOneDoSomethingElse()
util.Test||TestOneDoSomethingElse

As you see from the log both classes don't exist, but after one compilation I can call TestOneDoSomethingElse method and it works. What's your output for:

do $system.OBJ.UnCompile("util.*")
do ##class(util.Test).TestOneDoSomethingElse()
do ##class(util.TestGenerator).Generate()
do $system.OBJ.Compile("util.*")
do ##class(util.Test).TestOneDoSomethingElse()