03. februar 2006 - 14:54Der er
22 kommentarer og 1 løsning
Lille script til felt
Hejsa
Jeg har to felter, hvor felt A indeholder et tal. Felt B indeholder en typeangivelse (om det er timer eller kroner).
Begge felter kan indeholde flere linier.
Nu vil jeg gerne lave et lille script der, når jeg gemmer formen, udfylder felt C med de entry's fra felt A, der er af typen Timer. Hvordan gør man det?
Her en stump af det jeg eksperimenterer med:
For k=Lbound(Source.BBudget) To Ubound(Source.BBudget) If (Source.BTypeShort(k) = "Kr") Then Source.BBudgetNoHours(0) = Source.BBudget(k) End If Next
Jeg går ud fra at det er timerne du vil filtrere ud, ikke sandt? Men din eksperimentalkode prøver at filtrere kroner ud, ikke? Lad os se om vi kan lave begge ting samtidig. Jeg har ikke testet koden, skiver blot frit fra fingrene
'Midlertidigt array til hver type data Redim hours(0) as Long Redim nohours(0) as Long 'Tællere til hvert array hcount=0 nhcount=0
For k=Lbound(Source.BBudget) To Ubound(Source.BBudget) If (Source.BTypeShort(k) = "Kr") Then Redim nohours(nhcount) nohours(nhcount) = Source.BBudget(k) 'Opdater tælleren , så næste redim skaber plads til det nhcounte element nhcount=nhcount+1 elseif (Source.BTypeShort(k) = "Timer") Then Redim hours(hcount) hours(hcount) = Source.BBudget(k) 'Opdater tælleren , så næste redim skaber plads til det hcounte element hcount=hcount+1 else nothing End If Next 'Tildel array-data til de pågældende felter Source.BBudgetNoHours = nohours Source.BBudgetHours = hours
Grunden til at du skal oprette REDIM-arrays er at du ikke på forhånd ved hvor mange elementer der skal være.
Det kan være at det faktisk er nemmere at lave dette her i @Formula. Hvilken version af Notes anvender du? @For kom med N6.
Jeg vil anbefale dig, at lægge din kode i QueryClose på formen, ellers bliver den beregenet hver gang du gemmer SELV om querySave måske ikke fuldføres. Din kode indikerer iøvrigt at BBudget er et mulivalue felt, men du får ikke summeret værdierne i BBudgetNoHours - kun tildelt sidste værdi der opfylder betingelsen i IF særtningen. Med summering så blive det noget i stil med dette:
dim dos as notesdocumet set doc = source.document dim CounterSum as integer CounterSum=0 with doc ´så slipper du for at skrive "doc" hele tiden ! for k=0 to Ubound( .BBudget(0)) if .BtypeShort(k)="Kr" then CounterSum=CounterSum + .BBudget(k) ' her summeres BBudget værdierne end if next .BBudgetNoHours=CounterSum 'tildeling af sum til feltet call .save(true,false) ´husk at gemme! end with
Sub Queryclose(Source As Notesuidocument, Continue As Variant) Dim k As Variant Dim dos As notesdocumet Set doc = source.document Dim CounterSum As Integer CounterSum=0 With doc 'så slipper du for at skrive "doc" hele tiden ! For k=0 To Ubound(.BBudget(0)) If .BtypeShort(k)="Kr" Then CounterSum=CounterSum + .BBudget(k) ' her summeres BBudget værdierne End If Next .BBudgetNoHours=CounterSum 'tildeling af sum til feltet Call .save(True,False) 'husk at gemme! End With End Sub
Men får en fejl: Variable DOC not declared og disse to linier er røde: Dim dos As notesdocumet Set doc = source.document
Den går kløjs i det efter Print "33333". BBudget er text og BBudgetNoHours er number!
Sub Queryclose(Source As Notesuidocument, Continue As Variant) Dim k As Variant Dim doc As notesdocument Set doc = source.document Dim CounterSum As Integer Print "xxxx1" CounterSum=0 With doc 'så slipper du for at skrive "doc" hele tiden ! Print "333333333" For k=0 To Ubound(.BBudget(0)) Print "xxxx2" If .BtypeShort(k)="Kr" Then Print "xxx3" CounterSum=CounterSum + Cint(.BBudget(k)) ' her summeres BBudget værdierne End If Next Print "xxx3" .BBudgetNoHours=CounterSum'tildeling af sum til feltet Call .save(True,False) 'husk at gemme! End With End Sub
Hvis dokumentet er nyt, så kan det være at "Source.Budget" ikke er særlig veldefineret ... jeg tænker bare højt ... har du prøvet at arbejde på et "gemt" dokument?
Kender du LotusScript debugger? File -> Tools -> Debug LotusScript Herefter vil du kunne følge kodens afvikling ved at trykke <F8>. På de tilhørende faneblade kan du enten se dine print-sætningers udskrift eller se alle variable... Tilføj evt. en print k linie, så du kan følge k's værdier.
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.