Looks like you want to get more than just hide CSPCHD. It is still possible. You can achieve with URL rewrite in IIS or Apache.

Let's say if you configure your DNS for lcda.omnidata.com.au or any other as you want, or just *.omnidata.com.au for all subdomains, to the same server. You can configure URL Rewrite's for the particular domain to another path.

Rewrite is different from Redirect, when Redirect will show new URL, when Rewrite works hidden and even can redirect to some internal server not available from outside.

I think it is possible to do, with little coding.

  • Set Inactive limit in system security settings.
  • While Inactive limit is a system-wide setting, you have to check  Account Never Expires  for those users who should not be expired.
  • InterSystems Cache has special task SecurityScan which executes every day, and disable expired users.
  • Create new system task, and schedule it to start after SecurityScan. This task should find disabled users in table Security.Users, and enable them and set flag ChangePassword, which will say to change a password on next login.

You can just pass any value to the called by #server(..myMethod(arg1,arg2))# or #call(..myMethod(arg1,arg2))# method.

Look at my simple example.

Class User.Page Extends %CSP.Page
{

ClassMethod OnPage() As %Status
{
  &html<<html>
<head>>
  write ..HyperEventHead()
  &html<
</head>
<body>
<label><input id="chbox" type="checkbox" onchange="checkboxChanged(this);">
Choose me
</label><br>
<select id="combo">>
  write ..comboboxOptions()
  &html<</select>>

  &html<
<script language="javascript">

function checkboxChanged(chbox) {
  var options #server(..comboboxOptions(chbox.checked))#;
  document.getElementById("combo").innerHTML options;
}

</script> 
</body>
</html>>
  Quit $$$OK
}

ClassMethod comboboxOptions(chbox = 0)
{
  set options = ""
  if chbox {
    set options = options _ "<option value=""11"">test1</option>"
    set options = options _ "<option value=""12"">test2</option>"
    set options = options _ "<option value=""13"">test3</option>"
    set options = options _ "<option value=""14"">test4</option>"
else {
    set options = options _ "<option value=""11"">value1</option>"
    set options = options _ "<option value=""12"">value2</option>"
    set options = options _ "<option value=""13"">value3</option>"
    set options = options _ "<option value=""14"">value4</option>"
  }
  return options
}

}

you can use cterm.exe for this task, so, you can run some script, or routine in Cache

or just run cache.exe directly. 

Microsoft Windows [Version 10.0.16299.248]
(c) 2017 Microsoft Corporation. All rights reserved.

C:\Users\Admin>c:\intersystems\ensemble\bin\cache.exe -sc:\intersystems\ensemble\mgr\

Node: DESKTOP-4IDCEJ0, Instance: ENSEMBLE

USER>

you can generate script right before call csession, but you don't need to save it to file.

echo -e "Write \"CurrentPath = ${PWD}\"\n" \
        "Write \"CurrentShell = ${SHELL}\"\n" \
        "halt\n" \
| csession cache -U%SYS

Or if you already have some script file as a template, you can use command envsubst (maybe you have to install it), which will replace these variables with real values.

envsubst text.txt | csession cache -U%SYS

With Base64 possible to encode everything, text or binary data, such as PNG. To store it you should first decode it. But, if your image in DataURI format, first, you have to get only base64.

set png="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO9TXL0Y4OHwAAAABJRU5ErkJggg=="
set b64=$piece(png,"base64,", 2)

To encode Base64 in Caché you can use $system.Encryption.Base64Encode(), and $system.Encryption.Base64Decode()  to decode.

set binary=$system.Encryption.Base64Decode(b64)

But these methods support only string and does not support streams. So, you have to write this encoded data, to your file content. Do not forget to use Binary stream classes (%Stream.FileBinary, %Stream.GLobalBinary) to store binary information.

set file=##class(%Stream.GlobalBinary).%New()
do file.Write(binary)

But if your Base64 too long, you can decode by parts with length divisible by 3.

Sorry Nicole, it is planned for version 1.5. While we waited for current version 1.1 since 1.0 one year. So, it will be solved in 4 years. Please correct me if I'm wrong.

And about issues on WRC. I really don't like an idea to fill issues with Atelier with WRC. This issues should be publicly available, where users of this IDE can even vote for some issues.  It would be much better if InterSystems will open special repository on GitHub for issues in Atelier. 

USER>write $zcvt("mY sImPlE eXaMpLe", "W")
My Simple Example

$ZCONVERT

W or wWord translation: Convert the first character of each word in string to uppercase. Any character preceded by a blank space, a quotation mark ("), an apostrophe ('), or an open parenthesis (() is considered the first character of a word. Word translation converts all other characters to lowercase. Word translation is locale specific ; the above syntax rules for English may differ for other language locales.
S or sSentence translation: Convert the first character of each sentence in string to uppercase. The first non-blank character of string, and any character preceded by a period (.), question mark (?), or exclamation mark (!) is considered the first character of a sentence. (Blank spaces between the preceding punctuation character and the letter are ignored.) If this character is a letter, it is converted to uppercase. Sentence translation converts all other letter characters to lowercase. Sentence translation is locale specific ; the above syntax rules for English may differ for other language locales.

Unfortunately, it is not so easy to implement it without a good parser. InterSystems still don't want to publish any sort of parsers. And not sure they have plans to implement it in Atelier, yet. While we still have so many troubles in Atelier, it would be better if they will fix it first. And then it would be possible to ask, hope it will not take so long.

In your case, it is not only beautifier it is also static syntax check. Which can recommend changing some bad practices/old school/possible error code. And it is done by project CacheQuality

This error happens because you got another error in the request, do not forget to check status.

But anyway. As you need to call https, you should first configure SSL Configuration manually through management portal. You have to fill only Name field, any name on your choice.

Or the same but programmatically.

 ClassMethod GetSSLConfiguration(Server As %String) As %String
{
  new $namespace
  znspace "%SYS"
  do {
    quit:##class(Security.SSLConfigs).Exists(Server)

    set tSC=##class(Security.SSLConfigs).Create(Server)
    $$$ThrowOnError(tSC)
  while 0
  
  quit Server
}

And full working example 

 Class User.Google Extends %RegisteredObject
{

/// Google API key
Parameter KEY = "Put Your Google Maps API Key here";

ClassMethod GetDistanceMatrix(Origins As %String, Destinations As %String, Output Status As %Status) As %DynamicObject
{
  set params("origins")=Origins
  set params("destinations")=Destinations
  set Status=..CallGoogleMapsAPI("/maps/api/distancematrix/json", .params, .data) 
  quit data
}

ClassMethod CallGoogleMapsAPI(Url As %String, ByRef Params, Output Data) As %Status
{
  set Data={}
  set ht=##class(%Net.HttpRequest).%New()
  set ht.Server="maps.googleapis.com"
  set ht.Https=1
  set ht.SSLConfiguration=..GetSSLConfiguration(ht.Server)
  
  set param=""
  for {
    set param=$order(Params(param),1,value)
    quit:param=""
    do ht.SetParam(param, value)
  }
  do ht.SetParam("key", ..#KEY)
  
  set sc=ht.Get(Url)
  if $$$ISERR(sc) quit sc
  
  set Data={}.%FromJSON(ht.HttpResponse.Data)

  quit $$$OK
}

ClassMethod GetSSLConfiguration(Server As %String) As %String
{
  new $namespace
  znspace "%SYS"
  do {
    quit:##class(Security.SSLConfigs).Exists(Server)

    set tSC=##class(Security.SSLConfigs).Create(Server)
    $$$ThrowOnError(tSC)
  while 0
  
  quit Server
}

}

And call in terminal

USER>set data=##class(Google).GetDistanceMatrix("BRISTOL", "LONDON", .sc)

USER>w data.%ToJSON()
{"destination_addresses":["London, UK"],"origin_addresses":["Bristol, UK"],"rows":[{"elements":[{"distance":{"text":"190 km","value":189925},"duration":{"text":"2 hours 23 mins","value":8582},"status":"OK"}]}],"status":"OK"}

My example should work on versions 2016.2 and later, tested on 2017.2

Could you repeat my commands?

USER>do $system.OBJ.Compile("Test.*","cdk-u")

Compilation started on 01/29/2018 08:42:30 with qualifiers 'cdk-u'
Compiling 2 classes, using 2 worker jobs
Compiling class Test.Book
Compiling class Test.Chapter
Compiling table Test.Book
Compiling table Test.Chapter
Compiling routine Test.Book.1
Compiling routine Test.Chapter.1
Compilation finished successfully in 0.691s.

USER>set b = ##class(Test.Book).%New()

USER>w b.Chapters
7@%Library.RelationshipObject

If you got almost the same, your Insert should work