Branje in klicanje
V tem uvodu odjemalec vključite v aplikacijo .NET, preberete vrstice pogleda in pokličete proceduro.
Predpogoji
- konzolna aplikacija s ciljnim ogrodjem
net10.0in paketomaWkl.Data.Gateway.ClientinMicrosoft.Extensions.Hosting - delujoči podatkovni prehod in njegov naslov
- vir podatkov v prehodu (v primeru
fachdaten) s pogledomcontainer_typ(stolpcaidinbezeichnung) in procedurostamm.farbe_speichern; imena zamenjajte s svojimi - ključ s pravilom, ki sme brati pogled in izvajati proceduro
Koraki
Pripravite ključ. Ključ je v spremenljivki okolja procesa, nikoli v datoteki aplikacije:
$env:WKL_GATEWAY_API_KEY = '<ključ>'
Vnesite naslov. V
appsettings.jsonaplikacije:{ "GatewayClient": { "BaseAddress": "https://daten.example.com/" } }Vse nastavitve so v Konfiguraciji.
Registrirajte, berite, kličite.
Program.cs:using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; using Wkl.Data.Gateway.Client; using Wkl.Data.Gateway.Contracts; var builder = Host.CreateApplicationBuilder(args); builder.Services.AddGatewayClient(builder.Configuration.GetSection(GatewayClientOptions.SectionName)); using var host = builder.Build(); // Starting the host validates the settings; a missing BaseAddress stops the application here await host.StartAsync(); var client = host.Services.GetRequiredService<IGatewayClient>(); // Read at most 100 rows whose description contains "DV", sorted by id, with the total count var page = await client.ReadAsync<ContainerTyp>(new GatewayQuery( new GatewayResource("fachdaten", GatewayResourceKind.View, "container_typ"), select: ["id", "bezeichnung"], filter: new GatewayFilter.Comparison("bezeichnung", GatewayComparisonOperator.Contains, "DV"), orderBy: [new GatewaySortField("id", GatewaySortDirection.Ascending)], top: 100, includeTotalCount: true)); foreach (var row in page.Rows) { Console.WriteLine($"{row.Id}: {row.Bezeichnung}"); } Console.WriteLine($"{page.Rows.Count} of {page.TotalCount} rows"); // Call the procedure with two arguments; null is sent as SQL NULL var result = await client.InvokeAsync<SpeicherErgebnis>(new GatewayRoutineRequest( new GatewayResource("fachdaten", GatewayResourceKind.Procedure, "stamm.farbe_speichern"), new Dictionary<string, object?> { ["ral_nummer"] = "RAL 5010", ["name_en"] = null })); Console.WriteLine(result.ReturnedRows && result.Rows.Count > 0 ? $"Saved as {result.Rows[0].Id}" : $"{result.AffectedRowCount} rows changed"); public sealed class ContainerTyp { public int Id { get; init; } public string Bezeichnung { get; init; } = string.Empty; } public sealed class SpeicherErgebnis { public int Id { get; init; } }
Imena stolpcev v obliki
snake_casese preslikajo na običajna imena lastnosti:ZadnjaSpremembaberezadnja_sprememba(primerjava ne loči velikih in malih črk). Atribut za vsako lastnost za to ni potreben – pri nekaj sto stolpcih bi bil predvsem vir tipkarskih napak. Preslikava pa zajame samo stolpce, ki so sami poimenovani v oblikisnake_case. Stolpec, kot jeSpremenjenoDnealiA&B, potrebuje lastnost z[JsonPropertyName("…")]in natanko tem imenom; brez nje lastnost tiho ostane na privzeti vrednosti, brez napake. Vselect,filterinorderBystolpec z znaki zunaj črk, števk in_navedite v kodirani obliki prehoda, na primerA_x0026_BzaA&B(glejte Programski vmesnik). Če potrebujete vrstice nespremenjene, berite vJsonElement.
Rezultat
Aplikacija izpiše prebrane vrstice in nato, koliko vrstic filter zadene skupaj (page.TotalCount je
nastavljen samo zato, ker je nastavljen includeTotalCount). Če procedura vrne vrstico, zadnja vrstica
izpisa pokaže njen id, sicer število spremenjenih vrstic.
Naslednji koraki
- Omejitve in lastnosti – predvsem:
TotalCountlahko manjka