04. februar 2003 - 12:58Der er
17 kommentarer og 3 løsninger
Opdatere et felt
Hej
Jeg har et felt på et dokument, der henter data fra et view. Hvis jeg ændrer data i viewet, vil jeg gerne have opdateret det dokumentet, så det afspejler de seneste ændringer i viewet. Nu skal jeg åbne og gemme dokumentet før ændringen er tilføjet. Kan man ikke gøre det fra en knap/action - uden at brugeren kan se opdateringen???
1. Nej - jeg sletter et dokument (A) -> ændring af data i view -> skulle så gerne resultere i opdatering af et andet dokument (B) der får data via viewet. Hvis jeg bare via en action kan få slettet det aktuelle dokument (A) og så få opdateret Dok (B), evt. ved at åbne-gemme-lukke dok (B) 2. Klient
Du kan lade en agent løbe dokumenterne du vil opdatere igennem med
Set collection = db.UnprocessedDocuments
For j = 1 To collection.Count Set doc = collection.GetNthDocument(j) success = doc.ComputeWithForm( False, True ) If success Then Call doc.Save( True, True ) Else End If Next
For j = 1 To collection.Count Set doc = collection.GetNthDocument(j) success = doc.ComputeWithForm( False, True ) If success Then Call doc.Save( True, True ) Else End If Next
kan man ikke i samme omgang få fjernet dokumentet - lige nu bliver det bare markeret med en skraldespand, men jeg vil egentlig gerne have det helt væk! Har prøvet med jogii's svar, men de fjerner ikke dok.
Prøv: FIELD dummy := @DeleteDocument; Dette sletter dokumentet omgående.
Følgende udfører en doc.open og doc.save og doc.close på markerede dokumenter: @Command([ToolsRefreshSelectedDocs]);
summa summarum burde følgende virke:
FIELD dummy := @DeleteDocument; @PostedCommand([EditSelectAll]); @PostedCommand([ToolsRefreshSelectedDocs]);
(under forudsætning af at dine dokumenter der skal opdateres, findes i samme oversigt)
Men jeg må advare dig mod replikerinskonflikter, hvis du anvender nogen af de foreslåede metoder. Tænk hvis en bruger udfører operationen lokalt og senere replikerer, samtidig med at en anden bruger har gjort det samme. Så bryder helvede løs. Det er derfor @Command([ToolsRefreshSelectedDocs])og @Command([ToolsRefreshAllDocs]) blev fjernet fra Menuen ved R4.
En bedre metode er måske at kode i LS og lave en DB.Search for at finde de dokumenter, som faktisk indeholder som er blevet fjernet.
Stop stop, gør det nu ikke sværere end det er ! Feltet på dokument(B) som viser indholdet af viewet (med dblookup) skal bare være af ComputesForDisplay-typen. Så bliver det automatisk genberegnet hvergang dokumentet åbnes.
tanker>>> jo tak - det ved jeg, men som du skriver kræver det at dokumentet åbnes! Jeg er interesseret i at det er rettet når dokumentet også bare vises ;-)
sbay, jeg vil umiddelbart give tanker ret i at det her lyder lidt besværligt. Tilsyneladebde kunne dataproblematiken løses på en mere harmonisk måde. Min er faring siger hvis data er besværlige at vedligeholde så skyldes det ofte forkerte datamodeller. Måske burde du fortælle hvilken type applikation du har med at gøre og hvad formålet er at vise dokumenterne sorteret efter disse "opslagsdata". //Jörg
Grunden til at jeg synes "sletning" kræver opdatering af felter er at det kun er et subsæt af mulige hændelser du tager hånd om. Hvad med opdatering af et eksisterende dokument? oprettelse af nye (i samme kategori). Disse hændelser tager du ikke med i betragtning. Jeg har noget kode som nemt finder dokumenter frem ud fra kriterier og opdaterer alle disse dokumenter med aktuel information. Men jeg skal vide lidt mere om datamodellen først før jeg kan afgøre om det er noget for dig. //Jörg
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.