You can do it in three ways:

1 -

set ^mtemperro($ZNSPACE,..%PackageName()_"."_..%ClassName(),$horologmensagem_" Erro CACHE: "_$zerror_" - "_$SYSTEM.OBJ.DisplayError()

2 -
Throw ##class(%Exception.General).%New("Falha ao sinalizar o lançamento do PDA como rastreado.",1,..%ClassName()_".upByRastreado","Informe ao suporte sobre o problema.").Log()

3 - Declare in your class an exception variable

#dim exception As% Exception.AbstractException

catch exception {
     do exception.Log()
}

Then just check the cache administration portal:

System Operation-> System Logs-> Application Error Log

If it's not in a shortcut of keys, as it was in Studio, it's very likely that the intersystems developer team will be working on that, so we can have all the studio features in a better way in Atelier.

But from what I noticed.

At the end of the class, there is a Storage Default where you can see the same data.

I have not seen any specific screen like in Studio.

But I think that will help you.

I was able to solve the problem as follows: 

if ((ordenaProduto 0|| (ordenaProduto 1)) {
        set ordemProd query.Get("fatiqtde")
elseif ((ordenaProduto 2|| (ordenaProduto 3)) {
        set ordemProd query.Get("valortotliq")
}

set ^mtempJOB(controladorjob,K1,K2,ordemProd,K3$listbuild(   codProduto
                                                                    ,descrProd
                                                                    ,(qtdOld+$select(BP2:query.Get("fatiqtde"),1:0))
                                                                    ,(pesoOld+$select(BP2:query.Get("peso"),1:0))
                                                                    ,(vlrOld+query.Get("valortotliq"))
                                                                    ,(brutoOld+query.Get("bruto")))

I (agrup=1) {

            S COD = query.Get("pscodigo")

           

            I (COD="") S COD = "000" DESC = query.Get("psnome")

            I (DESC="") S DESC = "NAO DEFINIDO" (ordenacao=1)

           

            S K2=DESC_"^"_COD S K2=expert.completaString(COD,0,6)_"^"_DESC

}

S K3 = descrProd_"^"_codProduto_"^"_idProduto S ^mtempJOB(controladorjob,K1,K2,K3)=$LB(...)

Yes, we create a component in javaScript, it sends a CACHE function to the text file, the internal function created in CACHE, this text is converted to base 64, and then we save the text (url of the file) .

 

ClassMethod enviarAnexo(idEncriptado As %String, nomeArquivo As %String, streamArquivo As %CSP.CharacterStream) As %String
{
    #dim id AS %String
    #dim resposta AS %String ""
    #dim exception AS %Exception.AbstractException
    #dim estimativa AS EstimativaPrecoVenda    

    try {
        set id ##class(%CSP.Page).DecryptidEncriptado )        
        if (..%ExistsId(id)){
            set estimativa =  ..%OpenId(id)            
             do estimativa.anexo.send(nomeArquivostreamArquivo)            
             do estimativa.%Save()
            set resposta $$$OK
        }
    catch exception {
        set resposta $$$FormatText("%1 - %2",exception.Nameexception.Data)
    }
    
    quit resposta
}

 

Method send(nameFile As %String, streamFile As %CSP.CharacterStream) As %Status
{
    #dim stream As %FileBinaryStream    
    set stream ##class(GlobalBinaryStreamUtil).convertDataStreamstreamFile )
    
    do ##class(GlobalBinaryStreamSpec).validateNameFilenameFile )
    do ##class(GlobalBinaryStreamSpec).validateExtensionFilenameFile )
    do ##class(GlobalBinaryStreamSpec).validateSizeFilestream.Size )
    
    do ..strnameSet##class(GlobalBinaryStreamUtil).sanitizeName(nameFile)
    do ..objfile.CopyFromAndSavestream )
    
    quit $$$OK
}

ClassMethod convertDataStream(streamFile As %CSP.CharacterStream) As %FileBinaryStream
{
    #dim stream As %FileBinaryStream
    #dim text As %String
    
    set stream  ##class(%FileBinaryStream).%New()
    if ($isObject(streamFile)){        
        set text streamFile.ReadstreamFile.Size )
        do stream.Write..convertTextPlaintext )
    else {
        do stream.Write..convertTextPlainstreamFile )
    }
    quit stream
}

ClassMethod convertTextPlain(streamFile As %String) As %String [ Private ]
{
    #dim textPlain As %String
    #dim exception AS %Exception.AbstractException
    
    try {
        set textPlain $SYSTEM.Encryption.Base64Decode(streamFile)
    catch exception {
        if exception.Name "<ILLEGAL VALUE>"){
            set textPlain streamFile
        else {
            throw exception
        }
    }
    quit textPlain
}

ClassMethod sanitizeName(nameFile As %String) As %String
{
    quit $translate(nameFile," ","_")
}

We managed to find a stopgap solution that proved interesting:

in component

<Select>
     <Option value = "COMMERCIAL ANALYSIS"> </ option>
</ Select>

We added the value of the displayList that is in the Property.

In this way we managed to do the system to display and save the information without any problems.

Do you think it can cause some other problem?

If you find any other way to be better, I'll be waiting.