Barvna shema: Temna
Trenutno dejavna stran: start » sl » Dokumentacija » Orodja za Microsoft Access » WKL Forms Object Library » Aplikacija in povezave » WklTimerList

WklTimerList

WklTimerList izvaja časovno načrtovane naloge za Accessov obrazec: iskanje, ki se začne 400 ms po zadnjem pritisku tipke, števec, ki se osveži vsakih 30 sekund, čakalno vrsto spletnih zahtev, ki upošteva omejitev podatkovne storitve. En kontrolnik vsebuje poljubno število nalog, vsaka s svojim ključem, zakasnitvijo, intervalom in pravili za prekrivanja, ponovne poskuse in časovne omejitve. V pogledu načrta je viden, v pogledu obrazca pa neviden.

Od izdaje 1.60.0. Na voljo sta vrsti wttEvent in wttHttp; wttSteps, wttFile, wttChecksum, wttZip in wttProgram so del pogodbe, vendar jih ta različica zavrne z wkeNotAvailable.

Prvi koraki

Pogosta opravila

  • Začetek iskanja 400 ms po zadnjem pritisku tipke: ena naloga z Delay = 400, Restart v dogodku Change polja z besedilom.
  • Osveževanje števca vsakih 30 sekund: ena naloga z Interval = 30000, AutoStart = True.
  • Pošiljanje 1.700 zahtev storitvi, ki jih dovoli 300 na minuto: ena naloga vrste wttHttp z RateLimit = 300, RateWindow = 60000, en Requests.Add na vrstico s ključem vrstice kot Tag (Pošiljanje velikega števila zahtev spletni storitvi v njenem tempu).

Grafični prikaz

graph TD
    A[Obrazec se odpre] --> B{AutoStart}
    B -->|True| C[Naloge čakajo]
    B -->|False| D[Naloge ustavljene do Start]
    D --> C
    C -->|na vrsti, wttEvent| E[TaskDue poslan obrazcu]
    E -->|procedura se je končala| C
    C -->|na vrsti, wttHttp| F[Čakalna vrsta pošlje svoje zahteve]
    F -->|vsak odgovor| R[RequestCompleted ali RequestFailed]
    R --> F
    F -->|čakalna vrsta prazna| G[TaskCompleted]
    G -->|Interval večji od 0| C
    X[Obrazec se zapre] --> J[Vse naloge se končajo, nobenega dogodka več]

Ključne zmožnosti

  • Več nalog na obrazec, vsaka določena s ključem; zaganjate, ustavljate, začasno ustavljate in nadaljujete jih lahko posamično ali vse skupaj.
  • Prvi čas izvedbe po zakasnitvi od zagona ali ob določeni uri.
  • Ponavljanje v stalnem intervalu, ki se šteje od časa izvedbe, ne od konca izvajanja: 2-sekundno izvajanje ne zamakne 30-sekundnega niza.
  • Pravilo prekrivanja za čase izvedbe, ki minejo, medtem ko izvajanje še poteka: zavrže jih (wtoSkip) ali ohrani natanko enega (wtoOnce). Čakalna vrsta nikoli ne raste.
  • Ponovni poskusi in časovne omejitve za vsako nalogo.
  • Vrste dela: dogodek VBA (wttEvent), VBA v korakih (wttSteps) in opravila, ki jih kontrolnik sam izvaja v ozadju: spletna zahteva (wttHttp), kopiranje ali premikanje datotek (wttFile), kontrolna vsota (wttChecksum), ZIP (wttZip), zunanji program (wttProgram).
  • Spletne zahteve v nadzorovanem tempu: najmanjši razmik, omejitev na časovno okno, premor, ko storitev odgovori s 429, in zaustavitev celotne čakalne vrste ob 401, dokler se aplikacija znova ne prijavi.

Osnovni pojmi

Časovnik ne omogoči vzporednega izvajanja VBA. VBA, obrazci, DAO in objektni model programa Access tečejo v glavni niti programa Access. Naloga wttEvent ali wttSteps se izvede v tej niti, ko je na vrsti; drugje tečejo samo vrste v ozadju, njihovi rezultati pa se vrnejo v glavno nit kot dogodki.

Dogodki se pošljejo, nikoli se ne sprožijo iz drugega dogodka. VBA ne posreduje dogodka objekta, medtem ko se izvaja dogodkovna procedura istega objekta. Kontrolnik zato vsak dogodek, ki je na vrsti, pošlje v lastno okno za sporočila in ga posreduje, ko se trenutna procedura konča. MsgBox v dogodkovni proceduri naslednji dogodek zakasni, ne izgubi pa ga.

Lastno okno za sporočila. Kontrolnik ActiveX, ki je v programu Access neviden ali onemogočen, nima okna in ne prejema sporočil. Seznam časovnikov zato uporablja skrito okno samo za sporočila, ki živi od odprtja do zaprtja obrazca, ne glede na vrednosti Visible in Enabled.

Življenje naloge se konča z obrazcem. Ko se obrazec zapre, se vse naloge ustavijo, opravila v ozadju, ki tečejo, se prekličejo, in noben dogodek ne pride več.

Ura. Zakasnitve in intervali se štejejo na monotonem števcu, zato uporabnik, ki uro sistema Windows premakne naprej ali nazaj, ne povzroči, da bi se naloga sprožila prezgodaj ali prepozno. StartAt je lokalni čas.

Pravila

Ta pravila določajo, kdaj je naloga na vrsti. Za vse vrste nalog so enaka.

PoložajVedenje
Start z Delay = 0 in brez StartAtTakoj na vrsti.
StartAt v prihodnostiNa vrsti ob tem času.
StartAt v preteklosti, Interval = 0Takoj na vrsti.
StartAt v preteklosti, Interval > 0Na vrsti ob naslednjem času niza StartAt + n × Interval po trenutnem času.
Izvajanje končano, Interval > 0Naslednji čas izvedbe = prejšnji čas izvedbe + Interval.
Izvajanje končano, Interval = 0Stanje wtsDone.
Med izvajanjem so minili časi izvedbe, wtoSkipZavržejo se; naslednji čas izvedbe je naslednji čas niza po trenutnem času.
Med izvajanjem so minili časi izvedbe, wtoOnceTakoj sledi ena izvedba; drugi se zavržejo.
Trigger med izvajanjem, wtoOnceZabeleži se ena dodatna izvedba; nadaljnji sprožilci ne dodajo novih.
Trigger med izvajanjem, wtoSkipPrezre se.
Izvajanje ni uspelo, ponovni poskusi (Retries) so še na voljoIsta izvedba (isti RunId) se ponovi po RetryDelay; TaskFailed z WillRetry = True.
Izvajanje ni uspelo, ponovnih poskusov ni večTaskFailed z WillRetry = False; LastError ohrani besedilo; niz se nadaljuje, če je Interval > 0.
Izvajanje preklicanoNikoli se ne ponovi.
Izvajanje traja dlje od TimeoutOpravila v ozadju: poskus se prekliče (pri čakalni vrsti spletnih zahtev: za vsako zahtevo posebej, glejte spodaj). Izvedba wttEvent je dogodkovna procedura VBA in je ni mogoče prekiniti; Timeout nanjo ne vpliva.
PausePreostali čas se ohrani; Resume nadaljuje z njim.
Stop med izvajanjemIzvajanje se konča običajno; nič več se ne načrtuje, zabeležena izvedba ne sledi.
RestartZakasnitev se začne znova od zdaj: zakasnjeno iskanje po vsakem pritisku tipke.
Enabled = FalseNikoli na vrsti, tudi ne ob Trigger.

Pravila za spletne zahteve (wttHttp). Naloga te vrste je čakalna vrsta: vsebuje poljubno število zahtev, pošilja jih eno za drugo in za vse skupaj upošteva spodnji tempo.

PoložajVedenje
MinGapNajkrajši čas med začetkoma dveh zahtev čakalne vrste.
RateLimit, RateWindowNajveč RateLimit začetkov v katerem koli obdobju RateWindow milisekund. Obe lastnosti je mogoče nastaviti v poljubnem vrstnem redu; Start čakalne vrste z RateLimit, a brez RateWindow, se zavrne z wkeInvalidValue.
Odgovor 429 z Retry-AfterCelotna čakalna vrsta se za ta čas ustavi (sekunde ali datum HTTP, RFC 9110, razdelek 10.2.3); daljši premor, ki je že nastavljen, ostane. QueuePaused sporoči razlog in konec. Zahteva se pošlje znova.
Odgovor 429 brez Retry-AfterKot zgoraj, za RateWindow milisekund; brez RateWindow za 60 sekund.
Odgovor 401Celotna čakalna vrsta se zaustavi; sporoči to samo QueueHalted, s stanjem in glavami odgovora. Aplikacija se v glavni niti znova prijavi, nastavi skupne glave in pokliče Resume; zaustavljena zahteva se pošlje znova prva.
Drugi zaporedni odgovor 401 za isto zahtevoRequestFailed zanjo (da neuspela prijava ne teče v zanki), čakalna vrsta pa se z QueueHalted znova zaustavi.
Brez odgovora (prekinjena povezava, časovna omejitev)Dokler so ponovni poskusi (Retries) na voljo, se zahteva po RetryDelay pošlje znova, pred vsemi drugimi čakajočimi zahtevami.
Timeout, Retries, RetryDelayVeljajo za vsako zahtevo in vsak poskus, ne za celotno čakalno vrsto.
Kateri koli drug odgovor, tudi 5xxSporoči se z RequestFailed, nikoli se ne pošlje znova: ponovitev bi lahko delo opravila dvakrat.
PonovitevPošlje iste lastne glave, isto telo in isti Idempotency-Key. Skupne glave se preberejo ob vsakem pošiljanju, zato nova glava seje po odgovoru 401 velja zanjo in za vse zahteve, ki še čakajo.
StopNič več se ne pošlje. Zahteva, ki je na poti, se ne prekliče: njen odgovor pride in se sporoči, ker lahko zaprta povezava v storitvi pusti spremembo, katere izida nihče ne pozna. Zahteve, ki še niso poslane, ostanejo v stanju wrsWaiting, brez dogodka. Start jih pošlje.
Requests.Clear ali Request.CancelVsaka zahteva, ki še ni končana, se konča z RequestCancelled in stanjem wrsCancelled; zahtevi na poti se povezava zapre in se nikoli ne pošlje znova. Njen izid v storitvi ni znan: če storitev to podpira, jo sami znova pošljite z istim IdempotencyKey.
Več čakalnih vrst za isto storitevTempa si ne delijo: vsaka upošteva svoj MinGap in RateLimit. Vse zahteve za eno storitev postavite v eno čakalno vrsto, na primer na obrazcu lupine.
Čakalna vrsta je praznaTaskCompleted z Result = Array(completed, failed), številom zahtev, ki so se v tem izvajanju dokončno končale uspešno oziroma neuspešno. Nove zahteve, dodane pozneje, čakalno vrsto znova zaženejo, dokler je naloga zagnana.

Kodiranje, prijava in skrivnosti:

TemaPravilo
Telo zahtevePošlje se kot UTF-8 s ContentType zahteve (privzeto application/json; charset=utf-8).
Besedilo odgovoraResult.Text se dekodira po charset odgovora; če ga ni, kot UTF-8.
Prijava WindowsUseWindowsLogin = True se prijavi z računom Windows procesa Access (Negotiate, NTLM), ko storitev to zahteva. Privzeto False.
SkrivnostiSkupne glave, lastne glave ter telesa zahtev in odgovorov ostanejo samo v pomnilniku. Sled in besedila napak navajajo metodo, naslov brez poizvedbenega dela in stanje; nikoli vrednosti glave ali telesa.

Pogodba

WklTimerList (kontrolnik) z zbirko Tasks objektov WklTimerTask.

Član WklTimerTaskPomen
KeyEnolično besedilo, pri primerjavi se velike in male črke ne razlikujejo.
EnabledNaloga sodeluje.
KindwttEvent, wttSteps, wttHttp, wttFile, wttChecksum, wttZip, wttProgram.
Delay, StartAtPrvi čas izvedbe: milisekunde po Start ali ura.
IntervalPonavljanje v milisekundah; 0 = enkrat.
OverlapwtoSkip ali wtoOnce.
Timeout, Retries, RetryDelayČasovna omejitev izvajanja (0 = brez), ponovni poskusi po napaki, čakanje pred ponovnim poskusom.
TagPoljubna vrednost; nespremenjena se posreduje vsakemu dogodku.
StatewtsStopped, wtsWaiting, wtsRunning, wtsPaused, wtsDone (samo za branje).
RunCount, LastRun, NextRun, LastErrorSamo za branje.
Start, Stop, Pause, Resume, Trigger, RestartGlejte Pravila.
Član WklTimerListPomen
TasksNaloge; Add(Key), Remove(Key), Item(Key), Count.
Start, Stop, Pause, ResumeZa vse naloge.
AutoStartZažene vse naloge, ko se obrazec odpre.
RunningŠtevilo izvajanj, ki potekajo.
MaxParallelHkratna opravila v ozadju; privzeto 1. Rezervirano za vrste za datoteke, kontrolne vsote, ZIP in programe; vsaka čakalna vrsta spletnih zahtev vedno pošilja po eno zahtevo naenkrat, več čakalnih vrst pa teče vzporedno.
DogodekKdaj
TaskDue(Key, RunId, Tag, Cancel)Izvedba wttEvent je na vrsti; dogodkovna procedura je izvedba. Cancel = True jo preskoči; niz se nadaljuje. Čakalna vrsta spletnih zahtev namesto tega sproži TaskStarted, s svojo prvo zahtevo.
TaskStep(Key, RunId, Step, Done, Progress)Samo wttSteps: enkrat na korak; Access med koraki dobi nadzor nazaj.
TaskStarted(Key, RunId)Opravilo v ozadju se je začelo.
TaskProgress(Key, RunId, Percent, Text)Opravilo v ozadju sporoča napredek.
TaskCompleted(Key, RunId, Result)Izvajanje v ozadju se je uspešno končalo; pri čakalni vrsti spletnih zahtev je čakalna vrsta postala prazna. Izvedba wttEvent ga ne sproži: njena izvedba je TaskDue.
TaskFailed(Key, RunId, Number, Description, WillRetry)Izvajanje ni uspelo.
TaskCancelled(Key, RunId, Reason)Izvajanje je bilo preklicano (s Stop opravila v ozadju, s časovno omejitvijo, z zaprtjem obrazca).

Result po vrstah: datoteke in ZIP Files, Bytes; kontrolna vsota Hash; program ExitCode, Output, ErrorOutput.

Čakalna vrsta spletnih zahtev

Člani WklTimerTask vrste wttHttp:

ČlanPomen
RequestsZahteve čakalne vrste; Add(Method, Url, [Body], [Tag], [ContentType]) As WklHttpRequest, Item(Id), Count (tudi končane), Waiting (še ne poslane), Clear, Forget (odstrani končane zahteve in vrne njihovo število).
SharedHeader(Name)Branje in pisanje glave, ki se pošlje z vsako zahtevo čakalne vrste, na primer X-Api-Key, Authorization ali glava seje drugega faktorja. Prazna vrednost glavo odstrani.
MinGap, RateLimit, RateWindowTempo, glejte Pravila.
UseWindowsLoginPrijava z računom Windows, glejte zgoraj.
Halted, PausedUntilSamo za branje: čakalna vrsta po odgovoru 401 čaka na Resume; konec premora po odgovoru 429 ali Null.

Člani WklHttpRequest:

ČlanPomen
IdŠtevilka zahteve, enolična v nalogi; posreduje se vsakemu dogodku zahteve.
Method, Url, Body, ContentTypeKot so bili podani metodi Add; spremenljivi, dokler zahteva ni poslana.
Header(Name)Lastna glava te zahteve.
IdempotencyKeyPošlje se kot Idempotency-Key; privzeto nov GUID, enak za vsako ponovitev. Pri prazni vrednosti se ne pošlje.
TagPoljubna vrednost; nespremenjena se posreduje vsakemu dogodku zahteve, na primer ključ vrstice.
StatewrsWaiting, wrsSending, wrsCompleted, wrsFailed, wrsCancelled.
CancelKonča zahtevo: če še ni poslana, se odstrani iz čakalne vrste; če je na poti, se povezava zapre.

Dogodki čakalne vrste (poleg zgornjih dogodkov naloge):

DogodekKdaj
RequestCompleted(Key, Id, Tag, Status, Result)Prispel je odgovor 2xx ali 3xx. Result: Status, Text, Header(Name), Headers. Tu je mogoče dodati še več zahtev.
RequestFailed(Key, Id, Tag, Status, Description, WillRetry, Result)Drug odgovor ali brez odgovora; Status je 0, če odgovora ni bilo. Result vsebuje odgovor (Text, Header(Name)), če je prišel, na primer sporočilo problem+json; sicer Nothing.
RequestCancelled(Key, Id, Tag, Reason)Zaradi Cancel, Requests.Clear, časovne omejitve ali zaprtja obrazca.
QueuePaused(Key, Reason, ResumeAt)Odgovor 429 je čakalno vrsto ustavil do ResumeAt (lokalni čas).
QueueHalted(Key, Id, Status, Headers)Odgovor 401 je čakalno vrsto zaustavil; Headers vsebuje glave odgovora kot besedilo.
QueueResumed(Key)Premor se je končal ali pa je bil poklican Resume.

Skrbništvo

Odpravljanje težav

Zaenkrat ni strani.

Za razvijalce

Sorodne teme

  • WklApplication: aplikacija kot celota, v kateri živi obrazec lupine s svojimi časovniki.
sl/wiki/msaccess/comctl/application-and-connections/timer-list/start.txt · Zadnja sprememba: uporabnika Wolfgang van der Stille