New post

Find

Question
· Dec 31, 2025

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.

6 Comments
Discussion (6)2
Log in or sign up to continue
Article
· Dec 31, 2025 1m read

#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.

Discussion (0)1
Log in or sign up to continue
Article
· Dec 31, 2025 2m read

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
}
Discussion (0)1
Log in or sign up to continue
Article
· Dec 31, 2025 1m read

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.

Discussion (0)1
Log in or sign up to continue
InterSystems Official
· Dec 30, 2025

InterSystems 云服务 - 版本 25.24.1发布说明(2025 年 11 月)

概述

25.24.1 版对 DNS 功能、平台可靠性、升级工作流和开发人员体验进行了重大增强。该版本还包括关键修复和平台限制的增加,以更好地支持现代工作负载。


新功能和增强功能

类别

功能/改进

详细信息

网络 - DNS DNS 映射(静态 DNS 支持) DNS 支持从仅转发扩展到完整的 DNS 映射,允许创建和管理静态 DNS 条目,以提高服务发现和配置的灵活性。
可靠性和恢复能力 增强的自愈检查 改进了内部自愈验证例程,能够更快地恢复和更精确地检测运行异常。
高级安全性 改进的子网计算 增强了子网验证和计算逻辑,减少了配置错误,确保在不同部署中实现一致的网络分段。
升级和更新流程 改进 HCC 和 IRIS 托管服务 简化和强化了 Health Connect Cloud 和 IRIS 托管服务的升级/更新工作流,提高了可靠性和自动化准确性。
DNS 修复 DNS 别名错误修复 修复了 DNS 别名在特定配置中无法正确应用或传播的问题。
网络服务器 最大有效负载增至 200 MB 允许的最大有效载荷大小从 10 MB 增加到 200 MB,支持更大的上传和更复杂的 API 交互。
开发人员工具 InterSystems Data Studio 默认版本 1.1.1 新部署现在默认使用带有供应链模块 1.1.1 的 InterSystems Data Studio。
应用程序接口文档 度量 API 的 Swagger 文档 现在可为 Metrics API 提供完整的 Swagger/OpenAPI 文档,提高了集成监控数据的清晰度和开发人员体验。

建议采取的行动

  • 审查并根据需要采用 DNS 映射,以简化特定环境的主机名管理。
  • 更新自动化脚本或客户端,以考虑到增加的 Web 服务器有效载荷大小。
  • 查阅 Metrics API Swagger 文档,以增强您的监控集成。

支持

有关此版本的更多信息或帮助,请通过 iService 或云服务门户联系 InterSystems 云服务支持。

Discussion (0)1
Log in or sign up to continue