Barvna shema: Svetla
Trenutno dejavna stran: start » sl » Dokumentacija » Integracija podatkov in dostop do podatkov » WKL Database Gateway » Pregled aplikacije WKL Database Gateway Manager in razreda VBA » Referenčni priročnik » WklGatewayClient – razred VBA za podatkovni prehod

WklGatewayClient – razred VBA za podatkovni prehod

WklGatewayClient omogoča, da ukaze vmesnika za upravljanje podatkovnega prehoda (Wkl.Data.Gateway) kličete iz VBA: izdajo ključev, nastavitev 2FA (dvostopenjsko preverjanje identitete), preverjanje povezave in druge. Hkrati je predloga za vsako aplikacijo VBA, ki s prehodom komunicira prek HTTP.

Sezname (vire podatkov, pravila, osebe, ključe) aplikacija Access bere in ureja kot povezane tabele prek gonilnika ODBC prehoda. Kar vrne ključ ali drugo zaupno vrednost ali vpliva na več kot eno vrstico, je ukaz, in za ukaze je namenjen ta razred. Množice entitet in ukaze opisuje HTTP: skrbništvo (dokumentacija podatkovnega prehoda).

Podprto okolje

Microsoft Access iz Microsoft 365 v 32- in 64-bitni različici, v datoteki ACCDB, v datoteki ACCDE in v okolju Access Runtime. Aplikacija za upravljanje svoje ukaze kliče prek tega razreda.

Predpogoji

PredpogojZa kaj
Microsoft Access iz Microsoft 365, 32- ali 64-bitna različicaglejte Podprto okolje
sklic na WKL Office JSON 1.1 (Wkl.Office.JSON.dll, registriran v 32- ali 64-bitni različici, ki ustreza vašemu Officeu; do izdaje 1.0.3 WKL Access JSON 1.0 z Wkl.Access.JSON.dll)razčlenjevanje odgovorov v JDoc in sestavljanje zahtev
WinHTTP (WinHttp.WinHttpRequest.5.1, del sistema Windows)HTTP; uporablja se s poznim vezanjem, zato sklic ni potreben
modul razreda StringBuilder (StringBuilder.cls, v skladišču pod source/classes/)sestavljanje besedila iz več delov (glave, Base64, kodiranje URL)
prehod s skrbniško shrambo in oseba s pravico adminukazi

Vključitev v projekt

  1. V urejevalniku VBA izberite File > Import File in uvozite WklGatewayClient.cls in StringBuilder.cls (modula razreda, v skladišču pod source/classes/); če želite primere, uvozite še WklGatewayClientExamples.bas (pod client/). Če projekt modul razreda StringBuilder že ima, te datoteke ne uvozite.
  2. Izberite Tools > References in označite „WKL Office JSON 1.1“ (do izdaje 1.0.3 „WKL Access JSON 1.0“).
  3. Prevedite projekt (Debug > Compile).

Meniji so navedeni tako, kot jih prikazuje urejevalnik VBA v slovenskem Officeu, torej v angleščini; v nemškem Officeu se imenujejo Datei > Datei importieren, Extras > Verweise in Debuggen > Kompilieren.

Datoteki sta v obliki, ki jo urejevalnik VBA izvaža in uvaža. LoadFromText v Accessu za modul razreda pričakuje drugačno obliko (brez VERSION 1.0 CLASS … END in brez VB_Name); če prejme izvozno obliko, namesto modula razreda ustvari standardni modul. Kako eno obliko pretvorite v drugo, prikazuje client\tests\Run-AccessTests.ps1.

Uporaba

Za celotno sejo aplikacije uporabljajte en sam primerek razreda, ker ta hrani sejo 2FA.

Private m_Client As WklGatewayClient
 
Public Function Gateway() As WklGatewayClient
    If m_Client Is Nothing Then
        Set m_Client = New WklGatewayClient
        m_Client.BaseUrl = "https://podatki.example.com"
        m_Client.SignIn = gwPersonalKey          ' Key from Windows Credential Manager
    End If
    Set Gateway = m_Client
End Function
 
Sub Example()
    Dim answer As JDoc
    On Error GoTo ErrorHandler
 
    Set answer = Gateway().IssueKey("Ana Novak", Label:="Prenosnik", Delivery:="link")
    Debug.Print answer.GetString("$.link")
    GoTo FinalHandler
 
ErrorHandler:
    MsgBox Err.Description, vbExclamation       ' Error numbers: see section "Napake"
    Resume FinalHandler
 
FinalHandler:
    Set answer = Nothing
End Sub

Komentarji v kodi so, kot je pri kodi običajno, v angleščini: ključ se prebere iz upravitelja poverilnic Windows, številke napak pa so navedene v razdelku Napake.

WklGatewayClientExamples.bas vsebuje vsak ukaz po enkrat, z obravnavo napak po številki.

Prijava

SignInPrvi faktorVir
gwPersonalKey (privzeto)osebni ključ (wkl_…) v glavi X-Api-Keylastnost Key, sicer upravitelj poverilnic Windows (StoreKey, ForgetKey, HasStoredKey)
gwWindowsračun Windows, pod katerim teče proces (Negotiate)–
gwSqlLoginprijava SQL (HTTP Basic)UserName, Password
gwServiceKeyključ storitvespremenljivka okolja, ki jo navaja KeyVariable

Vsako prijavo (osebni ključ, ključ storitve, geslo in račun Windows) razred pošlje samo prek https ali lokalnemu računalniku; naslov http drugega računalnika zavrne z gwErrConfiguration, še preden kar koli pošlje. StoreKey ključ shrani pod istim ciljem, ki ga gonilnik ODBC uporablja za povezavo za upravljanje na isti naslov (Wkl.Data.OData.Odbc:(persönlicher Schlüssel)@<BaseUrl>/admin/v1/odata/), zato en shranjeni ključ služi tako povezanim tabelam kot razredu. V datoteki podatkovne zbirke ključ ni nikoli shranjen.

2FA

Če prehod zahteva 2FA (odgovor 401 z glavo Wkl-Totp), razred pridobi kodo, jo zamenja za sejo in zahtevo ponovi. Kodo pridobi iz teh virov, v tem vrstnem redu:

  1. iz lastnosti TotpCode (uporabi se enkrat), za kodo VBA, ki kodo za prijavo pridobi sama;
  2. iz dogodka CodeRequired(Message, Code, Cancel) primerka, deklariranega z WithEvents;
  3. iz okna InputBox (deluje tudi v okolju Access Runtime), ki ga izklopite z AskWithInputBox = False.

Če je koda napačna, razred s sporočilom prehoda vpraša znova, največ trikrat. OpenSession sejo izrecno odpre, ForgetSession jo zavrže. Gonilnik ODBC ima svojo sejo. Da ena koda zadošča za oba, aplikacija gonilniku preda SessionToken s ključno besedo SESSION= v povezavi, ki jo odpre sama (tako dela aplikacija za upravljanje). Brez te predaje gonilnik in razred kodo zahtevata vsak posebej.

Prekinjena povezava

Če se povezava prekine brez odgovora, razred zahtevo ponovi po 1 sekundi in nato še po 3 sekundah. Vsaka zahteva za pisanje nosi glavo Idempotency-Key, prehod pa na ponovitev odgovori z že pripravljenim odgovorom, namesto da bi pisal drugič. Ključ si prehod zapomni za 10 minut in samo v pomnilniku: če se med prekinitvijo in ponovitvijo znova zažene, se zahteva lahko izvede dvakrat (vedenje prehoda, kot ga opisuje HTTP: skrbništvo, razdelek „Veliko dejanj naenkrat“ (dokumentacija podatkovnega prehoda)). Zahteva, pri kateri poteče časovna omejitev (TimeoutSeconds, privzeto 60), se ne ponovi: prehod jo morda še izvede, razred pa tega ne more vedeti. V tem primeru podatke preberite znova in preverite, ali je bila sprememba uveljavljena.

Kaj razred ščiti in česa ne

  • Ključe, gesla in prijavo Windows pošilja samo prek HTTPS ali lokalnemu računalniku; sicer zahtevo zavrne z napako gwErrConfiguration. WinHTTP potrdilo strežnika preveri v shrambi potrdil Windows; pri neveljavnem potrdilu zahteva ne uspe. Razred tega preverjanja nikoli ne izklopi.
  • Key in Password hrani samo v pomnilniku svojega primerka. Ključ se shrani samo, če pokličete StoreKey, in še to samo v uporabnikovem upravitelju poverilnic Windows.
  • Ključ storitve (gwServiceKey) se nikoli ne shrani v kodo ali podatkovno zbirko. Razred ga med izvajanjem prebere iz spremenljivke okolja, ki jo navaja KeyVariable. Kdor lahko bere to spremenljivko (vsak proces, ki teče pod tem uporabnikom), ima ključ.

Člani

ČlanOpis
BaseUrlnaslov prehoda: shema, gostitelj in vrata, brez poti
SignIn, Key, KeyVariable, UserName, Passwordprijava; glejte zgoraj
TotpCode, AskWithInputBox, CodeRequired2FA
TimeoutSecondsčasovna omejitev posamezne zahteve v sekundah
LastStatus, LastMessagestanje HTTP in sporočilo zadnjega odgovora
HasSession, SessionExpiresAt, OpenSession, ForgetSessionseja 2FA
SessionTokenžeton seje za predajo gonilniku ODBC v istem procesu (SESSION=); hranite ga samo v pomnilniku
CredentialTarget, StoreKey, ForgetKey, HasStoredKeyključ v upravitelju poverilnic Windows. ForgetKey in HasStoredKey vrneta False samo, kadar ključ ni shranjen; če ne uspe sam upravitelj poverilnic, oba sprožita gwErrConfiguration
IssueKey(Person, [Label], [ExpiresAt], [ReadOnly], [Databases], [FromNetworks], [ExceptNetworks], [TotpExempt], [Delivery], [OnDemand])izda ključ; Delivery je link (privzeto) ali key; OnDemand pomeni, da ključ miruje do aktivacije. Pri key je ključ v odgovoru kot navadno besedilo in s tem v vaši kodi VBA: nikoli ga ne prikažite, ne shranite in ne zapišite v dnevnik. Aplikacija za upravljanje zato uporablja samo link
ActivateKey(KeyId, Hours) / DeactivateKey(KeyId)aktivira ključ na zahtevo za Hours ur oziroma ga takoj znova postavi v mirovanje; glejte HTTP: prijava, razdelek „Ključi na zahtevo“ (dokumentacija podatkovnega prehoda)
ExplainSignIn(Person, OriginNames, OriginAddresses, [Scope], [OriginCountries], [OriginOperators], [OriginClients], [OriginTimes])kaj pravilnik za prijavo določa za osebo po načinu prijave in izvoru, skupaj s pravili, ki to določajo (rules), pravili v preizkusu (tried) in pravili, ki jih izjema razveljavi (spared); prazen naslov pomeni neznan izvor. Polja za državo (TH), ponudnika internetnih storitev (AS3320), program in čas (UTC) za posamezni izvor omogočajo vprašanje „kaj bi veljalo, če …“; če so prazna, jih prehod ugotovi sam
SignInProfile(Person, [Days])kaj je za osebo pri prijavi običajno v zadnjih Days dneh (od 1 do 3650, privzeto 90): total, activeDays in pod dimensions vrednosti po državah, omrežjih, ponudnikih internetnih storitev, programih, načinih prijave in urah s številom ter prvim in zadnjim dnem. Upoštevane so samo uspešne prijave; zahteva pravico sign-in-events (sicer 403), neznana oseba vrne 404
SaveSignInRule(Id, Scope, Method, Effect, Label, [FromNetworks], [ExceptNetworks], [Persons], [ExceptPersons], [WindowsGroups], [ExceptWindowsGroups], [Countries], [ExceptCountries], [Operators], [ExceptOperators], [Clients], [ExceptClients], [Hours], [ExceptHours], [Exceptions], [Mode])v eni spremembi ustvari pravilo za prijavo z vsemi pogoji in izjemami (Id 0) ali ga v celoti zamenja; vsak izpuščeni seznam je zato po klicu prazen, brez Mode pa je pravilo uveljavljeno. Seznami za vključitev in izključitev: omrežja, osebe (po imenu), skupine Windows, države, ponudniki internetnih storitev, programi, časovna okna; prazen seznam oseb pomeni „vsak klicatelj“. Exceptions: polje objektov Scripting.Dictionary s seznami persons, windowsGroups, countries, from, operators, clients, hours, koncem until (Date v UTC) in label. Mode: Enforce ali Report (samo preizkus). Odgovor: id
EnrollTotp(Person, [Delivery]), ResetTotp(Person)nastavi oziroma odstrani 2FA
OwnKeys([DataSource]), IssueOwnKey([Label], [ExpiresAt], [ReadOnly], [Databases], [DataSource]), RevokeOwnKey(Id, [DataSource])navede, izda (odgovor key, prikazan enkrat) in prekliče lastne ključe; glejte HTTP: prijava, razdelek „Samopostrežba“ (dokumentacija podatkovnega prehoda). Zahteva prijavo z gwWindows ali gwSqlLogin; pri prijavi SQL DataSource navede vir podatkov, pri katerem se prijava preveri
TestConnection(DataSource), ReloadCatalog([DataSource])preveri vir podatkov (odgovor reachable, ob neuspehu še message, number in failure, vrsta napake, neodvisna od jezika strežnika); zavrže predpomnjeni katalog
ServiceAccount()račun, s katerim se prehod pri prijavi Windows prijavlja v podatkovne zbirke: account (kot ga vidi SQL Server na istem računalniku), networkAccount (na drugem računalniku), kind, domain – ime, za katero skrbnik podatkovne zbirke ustvari prijavo
SetGeoIpSource(Source, UpdateDays, [Account], [LicenseKey], [RemoveLicenseKey])izbere vir geolokacijske zbirke: none, dbip-lite ali maxmind (s številko računa in licenčnim ključem); UpdateDays od 0 do 90, 0 pomeni samo na ukaz. Brez LicenseKey ostane shranjeni ključ; prehod ga nikoli ne vrne
UpdateGeoIp()takoj prenese obe datoteki geolokacijske zbirke in ju začne uporabljati brez ponovnega zagona; odgovor files s kind, buildDate in changed za vsako datoteko
UploadGeoIp(FileName, [Source], [Force])preda prehodu datoteko geolokacijske zbirke (.mmdb, .mmdb.gz ali MaxMindov .tar.gz), za strežnik brez dostopa do interneta; Source določi navedbo vira, Force sprejme tudi starejšo datoteko
ExportLoad([Days])dnevnik obremenitve zadnjih Days dni (privzeto 30) v obliki wkl-load-export/1, brez oseb, ključev, naslovov in vrednosti; shranite ga z JDoc.Save
UpdateDatabases()podatkovne zbirke, v katere modul za posodobitve prehoda namešča pakete: folder, databases (za vsako podatkovno zbirko id, product, gatewayAlias, povezava brez gesla, mape, varnostno kopiranje, settings) in problems (izpuščene konfiguracije); glejte HTTP: skrbništvo, razdelek „Posodobitve podatkovnih zbirk“ (dokumentacija podatkovnega prehoda). Nastavitve delovanja so v množici UpdateSettings
UpdateStatus(DatabaseId), UpdateHistory(DatabaseId, [Skip], [Take])stanje podatkovne zbirke: odprti paketi s status, reason in deadlineUtc, seje (sessions), odstopanja (drift); zaključeni paketi z njihovimi koraki, najnovejši najprej (Take od 1 do 100, privzeto 20)
ConfirmUpdate(DatabaseId, Package), DismissUpdate(DatabaseId, Package), RetryUpdate(DatabaseId, Package), CancelUpdateNotice(DatabaseId, Package), MoveUpdateDeadline(DatabaseId, Package, DeadlineUtc)odločitve o paketu (Package = številka iz stanja ali zgodovine): potrditev, opustitev, ponovna namestitev, preklic napovedi, prestavitev roka (DeadlineUtc kot 2026-11-03T06:00:00Z). Odgovor: message in package (outcome done, announced, waiting ali failed). Paket v drugem stanju: gwErrConflict; modul ravno namešča paket: gwErrService
UploadUpdate(DatabaseId, FileName)postavi datoteko paketa (<izdelek>-schema-<različica>.zip, največ 64 MiB) v vhodno mapo podatkovne zbirke; prehod jo takoj sprejme. Odgovor kot pri odločitvi; isti paket že čaka: gwErrConflict
CheckStore(), BackupStore(), ResealStore()preveri shrambo, jo varnostno kopira (v mapo sicherungen poleg shrambe; odgovor file, schemaVersion, bytes) oziroma jo znova zapečati
ReadSet(SetName, [Filter], [OrderBy], [Top])prebere množico entitet; vrstice so pod $.value
CallProcedure(DataSource, Name, Name1, Value1, Name2, Value2, …)pokliče shranjeno proceduro; argumenti so v parih, imena brez @, izpuščeni argument dobi privzeto vrednost procedure. Vrednosti: besedilo, števila (Currency in Decimal natančno), Boolean, Date (poslan kot besedilo ISO 8601, ki ga SQL Server pretvori v tip parametra) in Null. Odgovor: prvi nabor rezultatov pod $.data ($.data[0].<column>) ali affectedRowCount. Če procedura sama sproži sporočilo (THROW ali RAISERROR z besedilom), razred sproži gwErrRejected s tem besedilom. Pogodba: HTTP: specifikacija vmesnika, razdelek „Klicanje procedur“ (dokumentacija podatkovnega prehoda); potrebno je pravilo s procedures in POST
Execute(Method, Path, [Body])katera koli druga zahteva; odgovor se vrne kot JDoc

Napake

Vsaka napaka se sproži s stalno številko (WklGatewayError) in opisom v nemščini, ki se konča s sporočilom prehoda, če ga ta vrne.

KonstantaŠtevilkaPomen
gwErrUnreachablevbObjectError + 2001ni povezave, tudi po ponovnih poskusih
gwErrTimeout+ 2002ni odgovora v času TimeoutSeconds
gwErrUnauthenticated+ 2003401: ključ, račun ali geslo je zavrnjen ali pa ključa ni
gwErrSecondFactor+ 2004zahteva se 2FA, koda pa ni bila podana ali je bila zavrnjena
gwErrForbidden+ 2005403
gwErrNotFound+ 2006404
gwErrBadRequest+ 2007400
gwErrConflict+ 2008409, 412: vnos je bil medtem spremenjen
gwErrRejected+ 2009422: prehod je zahtevo zavrnil; pri sporočilu, ki ga sproži sama podatkovna zbirka, se opis konča s tem sporočilom
gwErrTooMany+ 2010429
gwErrService+ 20115xx
gwErrAnswer+ 2012odgovor ni veljaven JSON
gwErrConfiguration+ 2013nastavitve razreda si nasprotujejo

Omejitve

  • Gonilnik in razred imata ločeni seji 2FA, dokler aplikacija seje ne preda s SESSION=.
  • Vsak odgovor se v okviru časovne omejitve prebere v celoti. Za velike količine podatkov uporabite povezane tabele (prek gonilnika ODBC), ne tega razreda.
sl/wiki/data-conectivity/database-gateway/admin/reference/vba-class.txt · Zadnja sprememba: uporabnika Wolfgang van der Stille