08. maj 2002 - 16:29Der er
6 kommentarer og 2 løsninger
Refreshe felterne på et dokument back-end
Hvordan refresher man felterne på et dokument backend?
Jeg har nogle dokumenter med computede felter, som afhænger af andre felter i dokumentet. Disse andre felter ændres backend og dokumentet saves - men de computede felter opdateres ikke inden der gemmes.
Hvordan gør jeg det, uden at kode de computede felters betingelser direkte ind i save-funktionen?
Denne side indeholder artikler med forskellige perspektiver på Identity & Access Management i private og offentlige organisationer. Artiklerne behandler aktuelle IAM-emner og leveres af producenter, rådgivere og implementeringspartnere.
Man kan kun lave en Refresh (recalc) frontend, dvs. dit dokument skal være åbent. Kun derved kan Notes "se" de øvrige felter på formen, og dermed hvordan de skal beregnes. Script: Call uidoc.Refresh
Kunne de computede felter ikke være af ComputeForDisplay typen, så har du de nyeste parametre med når dokumentet åbnes i UI.
Er formen sat til automatically refresh fields? Du siger at værdierne ændres back-end og saves, så må dokumentet jo være aktivt (godt nok ikke i UI)og en recalculation mulig.... eller not...
Endelig kunne jeg tænke mig at en agent (scheduled) ville kunne gøre jobbet med at opdatere.
1)Løsningen med at bruge Computed For Display ville sikre at dokumentet opdateres når en bruger åbner dokumentet, men så vidt jeg ved er der et andet problem med den løsning: Feltet der beregnes er et Authors-felt, og det skal gemmes med dokumentet aht. sikkerheden - og det sker vist ikke med CompForDisplay (Kan nogen be- eller afkræfte dette?)
2) Automatically refresh fields er slået til, men den kræver tilsyneladende også front-end access for at virke.
3) Løsningen med en scheduled agent har jeg også overvejet, men jeg kan ikke huske om en serverside agent kan accesse dokumenter front-end (det tror jeg ikke). Og ingen front-end access, ingen refresh.
1) Du kan jo godt have et computedForDisplay felt hvis værdi så gemmes i et andet felt, hvis de to felter ikke er ens. 2)ok 3) Du kan godt sætte en agent til at blive kørt fra serveren. Se dette: (fra Notes help)
An agent is a user procedure that you can trigger through a number of mechanisms. An agent runs on: The user's workstation if the agent's trigger is: Manually or If Documents Have Been Pasted. The server or workstation containing the agent if the agent's trigger is: Before New Mail Arrives, After New Mail Arrives, If Documents Have Been Created or Modified, or On Schedule. You can code agents in the formula language, LotusScript, and Java, and you can use Domino-supplied agents. Before writing your own agent, see if a Domino-supplied agent will do the job. Formula-based agents run iteratively on the documents in the database. You can apply search criteria through the agent interface to specify which documents in the database are to be processed. A SELECT statement in the formula further limits the search. If you do not include a SELECT statement in the formula, Domino Designer appends a "SELECT @All" statement. Except for "SELECT @All," a SELECT statement must be the first statement in the formula to be effective. LotusScript and Java agents run once. You supply the search criteria and the iteration through the language constructs. Search criteria applied through the agent interface are effective only through UnprocessedDocuments in NotesDatabase (LotusScript) or getUnprocessedDocuments in AgentContext (Java).
Jeg må tilstå at jeg har lidt svært ved at relatere til problematikken 8-( Er det til access control eller historisk hvem-var-her-hvornår etc.
mht pkt. 3) så fik jeg vist udtrykt mig lidt uklart: Spørgsmålet var ikke om agenten kan køre serverside, spørgsmålet er om den kan accesse dokumenter via *front-end* (UI-klasserne i LotusScript) NÅR den kører serverside.
Ideen i 1) med et CompForDisplay til at udføre refreshen, og et andet felt til at gemme værdien er god. Den eneste begrænsning i den er, at man skal leve med en "forkert" værdi i det beregnede felt indtil en bruger åbner dokumentet (og i den mellemliggende tid ville det f.eks. være muligt for en bruger der ikke burde have skriverettigheder til dokumentet at slette det fra et view - det er problematikken i en nøddeskal.)
Svar til pkt 3: nej. RunOnServer er ren back-end! Ad 1) Du kan da bare fjerne slette muligheden fra viewet. Du skriver bare Continue=False i Querydocumentdelete under database scriptet.
Har en bedre ide: Flyt alle dine beregninge af felter ud i et seperat script. det kalder du fra QueryClose når dokumentet lukker og fra din funktion der opdaterer back end. Du skal godt nok kode beregningerne en gang men til gengæld kan du kalde beregningerne alle steder fra.
Ja, jeg tror jeg vil krybe til korset og kode beregningerne i et script. Det virkede bare som overkill, når nu det beregnede felt er opfundet ;-(
Tak for frugtbar diskussion!
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.