Files
ua-userscripts/scripts/bipp-budgetcode/README.md
T
Glenn GoossensandClaude Opus 5 5ea7e78c9b bipp-budgetcode: haal de optielijst via de postback als de GET faalt
AnalyticalFieldSelector.aspx gooit een NullReferenceException in Page_Load
zolang de sessie nog geen huidige regel heeft, dus de kale GET van
loadOptions gaf HTTP 500 en alle dropdowns stonden disabled. Dat viel pas op
toen de cache van zeven dagen verliep.

loadOptions probeert nog steeds eerst die GET en valt bij een fout terug op
de keten van saveCode zonder het opslaan: de SpecifyAF-postback, de lijst uit
het antwoord, en Terug zodat de server weer op het winkelmandje staat en
syncHidden de verse viewstate kan overzetten. Loopt door enqueue, want er mag
er maar een tegelijk aan de huidige regel van de sessie zitten.

Daarbij de foutmeldingen concreter: ze noemen nu de link bij naam en zeggen
wat je moet doen, in plaats van "gebruik de link ernaast". De rijen staan
tijdens het laden op bezig, en setState zet het grijs voortaan op zowel de
select als de select-search-wrapper.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-14 09:04:30 +00:00

97 lines
5.3 KiB
Markdown

# bipp-budgetcode
Zet de budgetcode als dropdown in de rij van het winkelmandje zelf, net onder de
grootboekrekening. Geen omweg meer langs *Selectie analytische velden*, en je ziet ook gewoon
staan welke code een artikel heeft.
BIPP verbergt die code vandaag volledig: na *Creëer*, kiezen, *Opslaan* en *Terug* zegt de rij
alleen nog `Bekijk`, in het groen, en die kleur blijft ook staan als de code weer leeg is. De
gekozen waarde zit wel al in de pagina, maar alleen als tooltip op die link.
[**Installeren**](https://raw.githubusercontent.com/glgoose/ua-userscripts/main/scripts/bipp-budgetcode/bipp-budgetcode.user.js)
· gebeurt er niets, zie de [installatie-uitleg](../../README.md).
## Gebruik
- Kies de budgetcode in de dropdown onder de grootboekrekening. De pagina blijft staan waar ze
staat.
- Zoeken in die lijst van ruim vijfduizend codes gaat via
[select-search](../select-search/README.md), dat op dezelfde pagina meeloopt.
- Bovenaan de lijst staan onder *recent* de vijf codes die je het laatst gebruikt hebt. Dat blok
komt van [select-search](../select-search/README.md#recent) en werkt intussen op elke grote
dropdown op BIPP, niet enkel op de budgetcode. Hier telt een code pas als de server ze
aanvaard heeft: mislukt het opslaan, dan blijft recent ongemoeid.
- De gekozen code komt ook in **Interne commentaar** te staan, wat er verder in de rij al dan
niet ingevuld is. Enkel de code zelf, dus `8947-2025` en niet de omschrijving die in de
dropdown achter het streepje staat. Stond er al tekst in het veld, dan komt ze op een nieuwe
regel eronder. Kies je daarna een andere code, dan wordt die regel vervangen in plaats van dat
er een bijkomt.
- Is er nog niets gekozen, dan staat er grijs `budgetcode` in het veld. Dat is een
placeholder, geen waarde, en hij staat niet als regel in de lijst.
- Wissen doe je met het kruisje rechts in het veld. Zodra er een code staat en je met de muis
over het veld gaat of erin staat, neemt dat kruisje de plek van het pijltje in. Backspace in
een leeg veld doet hetzelfde. Dat haalt ook de regel uit Interne commentaar weg.
- Een code uit *recent* halen: open de lijst, ga met de pijltjes of de muis op die regel staan
en druk `Delete`, zolang je nog niets getypt hebt. De code staat daarna weer gewoon onder *alle
budgetcodes*. Kies je hem later opnieuw, dan komt hij vanzelf terug bovenaan.
- De link *Creëer* / *Bekijk* blijft staan als uitweg.
De status staat als klein icoontje rechts op de regel van die link, zodat er nooit iets
verschuift:
- **Zandloper, tekst grijs**: bezig met opslaan. Een nieuwe keuze wordt zolang genegeerd.
- **Geen icoontje, tekst weer zwart**: opgeslagen. Er komt geen vinkje bij, de zandloper gaat
gewoon weg. Dat de tekst weer zwart is, is de bevestiging.
- **Uitroepteken, rode rand**: niet opgeslagen, de waarde is teruggedraaid.
De volledige melding staat in de tooltip van het icoontje en van de dropdown.
## Hoe het opslaat
Kiezen in de dropdown doet in de achtergrond precies wat je anders met de hand doet: de postback
naar de selectorpagina, *Opslaan*, en *Terug*. Het script controleert in het antwoord of de
server de waarde echt geselecteerd heeft en verwisselt daarna `__VIEWSTATE`, `__EVENTVALIDATION`
en `__VIEWSTATEGENERATOR` in de live pagina, zodat een gewone postback erna blijft werken.
Dezelfde keten haalt ook de optielijst op als de selectorpagina niet rechtstreeks opvraagbaar
is, dan zonder *Opslaan*: de postback, meteen de lijst uit het antwoord, en *Terug*.
Omdat het live formulier meegestuurd wordt, gaat niet-opgeslagen typwerk (aantal, commentaar)
niet verloren: dat wordt door de eerste stap zelfs meteen mee gecommit. Het verkeer per keuze is
hetzelfde als dat van de drie handmatige stappen.
## Beperkingen
- **De groene link blijft groen.** Dat komt van BIPP zelf en is niet betrouwbaar. De dropdown is
de bron van waarheid.
- **De optielijst wordt gecached** in `localStorage`, per participant, zeven dagen. De eerste
keer duurt het kiezen een moment langer omdat de lijst dan opgehaald wordt.
- **Na een mislukte poging** klopt de dropdown weer, maar de server kan de tussenliggende
commentaarregel nog vasthouden: de eerste stap van de keten commit het formulier, de latere
stap is degene die faalde. De eerstvolgende geslaagde keuze zet dat recht, want die stuurt het
formulier opnieuw mee.
- **In een verse sessie kost het eerste laden drie verzoeken.** `AnalyticalFieldSelector.aspx`
geeft HTTP 500 (`NullReferenceException` in `Page_Load`) zolang de sessie nog geen huidige
regel heeft. Het script vangt dat zelf op met de keten hieronder, dus je merkt er enkel een
moment grijze dropdowns van. Lukt ook dat niet, dan zegt de melding wat je met de hand moet
doen: één keer op *Creëer* klikken en daarna op *Terug*.
- **Meer dan één analytisch veld** wordt niet inline aangeboden. De selectorpagina is een
repeater; verschijnt er ooit een tweede veld, dan valt het script voor die rij terug op de
link.
## Ontwikkelen
Eén bestand, geen build, geen dependencies. Hoog `@version` op bij elke wijziging, anders krijgt
niemand de update binnen.
Tijdens het ontwikkelen laad je het script via een dev-stub in plaats van een geplakte kopie,
zie [Ontwikkelen](../../AGENTS.md#dev-stub-vs-gebruik).
```sh
node --check bipp-budgetcode.user.js
```
## Licentie
[GPL-3.0-or-later](../../LICENSE).