查找

Pergunta
· 3 hr atrás

Examples of using External Language Server for Dotnet

Hey everyone.

I have been taking a look at the External Language Server functionality to hook into some Dotnet functions, and I am hitting a bit of a wall.

Based on the example in the documentation here I can get the same result doing:

ENV>Set netGate = $System.external.getDotNetGateway()
ENV>Set netProxy=netGate.new("System.DateTime",0)
ENV>Write netProxy.Now,!
2025-12-31 14:37:58.6022705

However, if I then try another system class, I get an error:

ENV>Set netGate = $System.external.getDotNetGateway()
ENV>Set netProxy=netGate.new("System.Convert",0)
ENV>Write netProxy.ToBoolean(123)
<THROW>%Constructor+33^%Net.Remote.Object.1 *%Net.Remote.Exception <GATEWAY> InterSystems.Data.IRISClient.Gateway.GatewayException InterSystems.Data.IRISClient.Gateway.Gateway.dynamicFindConstructor(String className, Int32 parameterCount, Boolean isRecast) Constructor not found: System.Convert(1)

(don't judge the method choice, I know it's not supposed to do anything except return what's being passed in. Just seemed like a safe choice)

It feels like I'm missing an obvious step here.

Discussão (0)1
Entre ou crie uma conta para continuar
Artigo
· 3 hr atrás 1min de leitura

#DIM vs SET – ObjectScript

SET atribui um valor à variável em tempo de execução.

#DIM declara a variável e o seu tipo de dado em tempo de compilação.


SET #DIM
Torna a variável dinâmica. Melhora a legibilidade.
Sem tipagem. Habilita IDE auto-completion.
Tempo de execução Util para referência a objetos.

#DIM name As %String
Set name = "Micheal Scott"
#DIM age As %Numeric
Set age = 36
#DIM employer As App.Employer               ; compile time
Set employer = ##class(App.Employer).%New() ; runtime 

 

SET ou #DIM? Seu design, suas regras.

Discussão (0)1
Entre ou crie uma conta para continuar
Artigo
· 4 hr atrás 2min de leitura

Arquivos temporários e singletons: limpem o que vocês gerarem.

Há um padrão com o qual já me deparei várias vezes em que preciso usar um arquivo ou pasta temporária e que ela seja limpa em algum momento mais tarde.

O natural aqui é seguir os padrões de "Robust Error Handling and Cleanup in ObjectScript" , usando um try/catch/pseudo-finally ou um objeto registrado para gerenciar a limpeza no destrutor. %Stream.File* também tem a propriedade RemoveOnClose, que vocês podem ativar… mas usem com cuidado, pois podem acabar excluindo acidentalmente um arquivo importante. Além disso, esse indicador é redefinido ao chamar %Save(), então será necessário configurá-lo novamente como 1 depois disso.

Mas existe um caso complicado: imaginem que vocês precisam que o arquivo temporário sobreviva em um nível superior da pilha. Por exemplo:

ClassMethod MethodA()
{
    Do ..MethodB(.filename)
    // Do something else with the filename
}

ClassMethod MethodB(Output filename)
{
    // Create a temp file and set filename to the file's name
    Set filename = ##class(%Library.File).TempFilename()
    
    //... and probably do some other stuff
}

Vocês sempre poderiam passar objetos %Stream.File* com RemoveOnClose definido como 1, mas aqui estamos falando, na verdade, apenas de arquivos temporários.

É aí que entra o conceito de “Singleton”. No IPM , temos uma implementação base em %IPM.General.Singleton que vocês podem estender para cobrir diferentes casos de uso. O comportamento geral e o padrão de uso são:

  • Em um nível superior da pilha, vocês chamam %Get() nessa classe e obtêm a instância única, que também ficará acessível por meio de chamadas a %Get() em níveis inferiores.
  • Quando o objeto sai de escopo no nível mais alto da pilha que o utiliza, o código de limpeza é executado.
  • Isso é um pouco melhor do que usar uma variável %, porque vocês não precisam verificar se ela está definida e, além disso, ela sobrevive a NEW sem argumentos nos níveis inferiores da pilha, graças a uma certa “magia” profunda do sistema de objetos.

Passando para os arquivos temporários, o IPM também possui um singleton gerenciador de arquivos temporários . Aplicando isso a este problema, a solução é:

ClassMethod MethodA()
{
    Set tempFileManager = ##class(%IPM.Utils.TempFileManager).%Get()
    Do ..MethodB(.filename)
    // Do something else with the filename
    // The temp file is cleaned up automatically when tempFileManager goes out of scope
}

ClassMethod MethodB(Output filename)
{
    Set tempFileManager = ##class(%IPM.Utils.TempFileManager).%Get()
    // Create a temp file and set filename to the file's name
    Set filename = tempFileManager.GetTempFileName(".md")
    
    //... and probably do some other stuff
}
Discussão (0)1
Entre ou crie uma conta para continuar
Artigo
· 4 hr atrás 1min de leitura

Aproveitando o Server Manager ao criar extensões do VS Code que se conectam a servidores InterSystems

Foi encorajador ver mais pessoas criando extensões do VS Code para o concurso recente. No entanto, notei que, das três extensões que exigem credenciais para realizar suas conexões, apenas a de @John Murray, gj :: dataLoader, aproveita a extensão InterSystems Server Manager
, amplamente estabelecida e oficialmente suportada, para obter as definições de conexão e gerenciar as credenciais de forma segura.

Vocês podem encontrar mais detalhes sobre como fazer isso no README da extensão.

Se tiverem problemas ao usar essa funcionalidade, ou uma opinião sobre por que as extensões deveriam criar sua própria solução nessa área, vamos discutir isso aqui.

Discussão (0)1
Entre ou crie uma conta para continuar
Pergunta
· 7 hr atrás

Odoo Companies

Odoocompanies.com is a global directory designed to help businesses find your company among trusted and verified Odoo companies, offering a centralized place to find your companie that specializes in Odoo development companie services. The platform enables you to search, compare and filter by country and partner type (Gold, Silver, Ready or Learning), connecting you with certified Odoo implementation and software partners worldwide — making it easier to identify the right Odoo development company for your ERP needs, and ensuring you can choose a vendor that fits your business scale, budget, and location.

Discussão (0)1
Entre ou crie uma conta para continuar