Um dos recursos mais recentes do .Net Core 10 com C# 14 são os aplicativos baseados em arquivo. Este recurso permite que você execute código C# em um arquivo .cs simples, sem a necessidade de criar uma solution, um projeto ou qualquer uma das estruturas relacionadas.
Por exemplo, você pode criar um arquivo script.cs usando o bloco de notas com o seguinte conteúdo:
Console.WriteLine(“This is a script in c#.”);
Então, na linha de comando ou no terminal, você executa o comando:
dotnet run script.cs
Há muitas informações sobre este novo recurso do .Net 10. Para trabalhar com o IRIS, podemos usar a opção de adicionar referências de pacotes NuGet diretamente dentro do arquivo. Por exemplo, para adicionar o nuget para InterSystems IRIS, você inclui as seguintes linhas no topo:
#:package InterSystems.Data.IRISClient@2.5.0
using InterSystems.Data.IRISClient;
using InterSystems.Data.IRISClient.ADO;
Isso permite que o arquivo inclua o pacote NuGet do IRIS e use o IRIS SDK. Por exemplo, abaixo está um arquivo .cs com um script para verificar o status de uma produção de Interoperabilidade do InterSystems:
#:package InterSystems.Data.IRISClient@2.5.0
using InterSystems.Data.IRISClient;
using InterSystems.Data.IRISClient.ADO;
// Este script espera o namespace para conectar
string irisNamespace = string.Empty;
if (args.Length > 0)
{
irisNamespace = args[0];
}
if (string.IsNullOrEmpty(irisNamespace))
{
Console.WriteLine("Please indicate the namespace to connect");
return;
}
// Abre uma conexão com o InterSystems IRIS
IRISConnection conn;
IRIS iris;
try
{
conn = new IRISConnection();
conn.ConnectionString = $"Server = 127.0.0.1;Port = 1972; Namespace = {irisNamespace.ToUpper()}; Password = SYS; User ID = _system;";
conn.Open();
iris = IRIS.CreateIRIS(conn);
}
catch (Exception ex)
{
Console.WriteLine($"Cannot connect to the interoperability server. Error message: {ex.Message} ");
return;
}
try
{
bool? isInteroperabilityEnabledNamespace = iris.ClassMethodBool("%Library.EnsembleMgr", "IsEnsembleNamespace");
if (isInteroperabilityEnabledNamespace ?? false)
{
// Os valores válidos são especificados na documentação
//https://docs.intersystems.com/irislatest/csp/documatic/%25CSP.Documatic.cls?LIBRARY=ENSLIB&CLASSNAME=Ens.Director#METHOD_GetProductionStatus
// E os valores numéricos podem ser encontrados no arquivo de inclusão EnsConstants.inc
Func<decimal, string> GetStateDescription = state => state switch
{
0 => "Unknown",
1 => "Running",
2 => "Stopped",
3 => "Suspended",
4 => "Troubled",
5 => "Network stopped",
_ => "Unknown state"
};
string currentInteroperabilityProduction = string.Empty;
decimal currentInteroperabilityProductionState = 0;
IRISReference currentProductionName = new IRISReference("");
IRISReference currentProductionState = new IRISReference("");
var status = iris.ClassMethodObject("Ens.Director", "GetProductionStatus", currentProductionName, currentProductionState, 2, 1);
if (status.ToString() == "1")
{
currentInteroperabilityProduction = currentProductionName.GetValue()?.ToString() ?? "";
currentInteroperabilityProductionState = currentProductionState.GetDecimal() ?? 0;
}
if (string.IsNullOrEmpty(currentInteroperabilityProduction))
{
// Caso a produção esteja parada, a chamada a GetProductionStatus não retorna o nome da produção
// neste caso tentamos obter o nome da produção ativa
currentInteroperabilityProduction = iris.ClassMethodString("Ens.Director", "GetActiveProductionName");
}
Console.WriteLine($"Produção ativa neste namespace: {currentInteroperabilityProduction}");
Console.WriteLine($"Estado da Produção: {GetStateDescription(currentInteroperabilityProductionState)}");
}
else
{
Console.WriteLine("O namespace não está habilitado para interoperabilidade");
}
}
catch (Exception ex)
{
Console.WriteLine($"Erro ao verificar o estado da produção no namespace{irisNamespace}:{ex.Message}");
}
finally
{
iris.Dispose();
conn.Close();
conn.Dispose();
}
A execução deste arquivo com o parâmetro indicando o namespace no qual você deseja verificar o status da produção irá verificar se há alguma produção no namespace e seu status atual:
PS C:\IrisScripting> dotnet run ScriptTest.cs INTBUS
Produção ativa neste namespace: Integrations BUS
Estado da produção: Running
PS C:\IrisScripting>
Este novo recurso abre uma maneira nova e interessante de executar scripts ou pequenos programas para automatizar tarefas a partir da linha de comando.
.jpg)
.png)
.png)
.png)
.png)
.png)
.png)
.png)
.png)
.png)