Avatar billede _petrucci Nybegynder
01. juli 2002 - 12:56 Der er 16 kommentarer og
1 løsning

Lotusscript

Hejsa,

jeg har en formular der skal udskrives på printeren, men med et specielt udseende. Derfor sætter jeg en click-funktion på udskriv-knappen der starter en agent.

Denne agent skal så gemme dokumentet, gå ud af dokumentet, derefter skifte til en 2. formular (næsten ens), gemme den og derefter udskrive og skifte tilbage til formular 1.

Agenten ser indtil videre således ud:

Sub Udskriv(Source As Field)
    Dim session As New notessession
    Dim ws As New notesuiworkspace
    Dim uidoc As notesuidocument
    Set uidoc = ws.currentdocument
    Dim doc As notesdocument
    Set doc = uidoc.document
    Set db = session.currentdatabase
    Call uidoc.save
    id = doc.noteID
    Call uidoc.save
    Call uidoc.close
    Set doc = db.GetDocumentByID(id)
   
End Sub

Hvodden får jeg den til at skifte til form "udskrivfirma", gemme den samt udskrive og vende tilbage?
Avatar billede cdelicht Nybegynder
01. juli 2002 - 13:11 #1
Øh, vil du gemme dokumentet 2 gange med forskellige forms som grundlag?
Nå, men print fra et view via lotusScript ser sådan ud:
Syntax
Call notesUIView.Print([ numCopies%] [, fromPage%] [, toPage%] [, draft] [, pageSeparator%] [, formOverride$] [, printview] [, dateRangeBegin] [, dateRangeEnd])
Parameters
numCopies%
Integer. Optional. The number of copies you want to print. If you omit this parameter, the method displays the File Print dialog box.
fromPage%
Integer. Optional. The page of a document where you want to start printing. "0" means all.
toPage%
Integer. Optional. The page of a document where you want to stop printing. "0" means all.
draft
Boolean. Optional. Specify True if you want to print the document in draft mode.
pageSeparator%
Integer. Optional. Determines the page separator.
formOverride$
Text. Optional. The name of the form you want to use to print the document.
printView
Boolean. Optional. Specify True to indicate that you want to print the current view.
dateRangeBegin
Variant. Optional. Prints the beginning date if printing from a calendar view.
dateRangeEnd
Variant. Optional. Prints the end date if printing from a calendar view.
Avatar billede _petrucci Nybegynder
01. juli 2002 - 13:19 #2
Nej jeg vil egentlig ikke printe fra et view. Jeg vil åbne et dokument fra et view, som man i edit-mode kan redigere og gemme/udskrive. Den anden "form" er bare en form for viewtemplate der inheriter de values man har indtastet (altså felter der er beregnet).

Så agenten skal "bare":

1. gemme/lukke dokumentet efter indtastning
2. åbne form2 og overføre værdierne til form2
3. udskrive siden
4. lukke form2 og skifte tilbage til form1

min kollega som ikke er tilstede idag skrev denne "checkliste" op for mig og tilføjede at den skulle gemme de ekstra par gange. hvorfor, ved jeg faktisk ikke :-)
Avatar billede cdelicht Nybegynder
01. juli 2002 - 13:43 #3
Du kan ikke printe et dokument med en ande form hvis det er åbent. Derfor må du gemme dokumentet, lukke det, åbne dokumentet igen med den ønskede form, lukke dokumentet og endelig åbne det igen med den oprindelige form.
Du skal ikke "oiverføre data" til nr2 form, men den skal eksistere i basen.
Fortsæt din kode med noget i denne stil:
Doc.Form=DinFormNr2
Doc.Save
Call ws.EditDocument( False, Doc, True )
Set uidoc = workspace.CurrentDocument
Call uidoc.Print( 1 )
Call uidoc.close
Doc.Form=DinFormNr1
Doc.Save
Call ws.EditDocument( False, Doc, True )
Avatar billede cdelicht Nybegynder
01. juli 2002 - 13:43 #4
...ikke testet.... ;-)
Avatar billede _petrucci Nybegynder
01. juli 2002 - 14:24 #5
Ok nu har jeg så følgende kode:

Sub Udskriv(Source As Field)
    Dim session As New notessession
    Dim ws As New notesuiworkspace
    Dim uidoc As notesuidocument
    Set uidoc = ws.currentdocument
    Dim doc As notesdocument
    Set doc = uidoc.document
    Set db = session.currentdatabase
    Call uidoc.save
    id = doc.noteID
    Call uidoc.save
    Call uidoc.close
    Set doc = db.GetDocumentByID(id)
   
    Doc.Form=udskrivfirma
    Doc.Save
    Call ws.EditDocument( False, Doc, True )
    Set uidoc = workspace.CurrentDocument
    Call uidoc.Print( 1 )
    Call uidoc.close
    Doc.Form=Firmaoplysninger
    Doc.Save
    Call ws.EditDocument( False, Doc, True )
   
End Sub

Men får følgendene scriptfejl:

udskrivfirma: Udskriv: 22: Missing argument for: SAVE


?
Avatar billede cdelicht Nybegynder
01. juli 2002 - 14:27 #6
Mangler Call
Call Doc.Save
Avatar billede _petrucci Nybegynder
01. juli 2002 - 14:28 #7
ok tror nok jeg fiksede den - skulle erstatte Doc.Save med Firmaoplysninger.Save  osv.  ikke?
Avatar billede cdelicht Nybegynder
01. juli 2002 - 14:30 #8
Næ, men form navnet skal i " " - alle steder
Avatar billede _petrucci Nybegynder
01. juli 2002 - 14:35 #9
Doc.Form="udskrivfirma"
    Call Doc.Save
    Call ws.EditDocument( False, Doc, True )
    Set uidoc = workspace.CurrentDocument
    Call uidoc.Print( 1 )
    Call uidoc.close
    Doc.Form="Firmaoplysninger"
    Call Doc.Save
    Call ws.EditDocument( False, Doc, True )

får desværre samme scriptfejl :-(
Avatar billede cdelicht Nybegynder
01. juli 2002 - 14:38 #10
husk at rette denne:    Doc.Form="udskrivfirma"
Avatar billede _petrucci Nybegynder
01. juli 2002 - 14:40 #11
den havde jeg rettet?

anyway ændrede disse linjer:

Doc.Form="udskrivfirma"
Call Doc.Save(True, True)

så er der ingen scriptfejl nu - til gengæld lader den ikke til at gøre noget som helst når jeg klikker på udskriv-knappen. Mystisk.
Avatar billede cdelicht Nybegynder
01. juli 2002 - 14:43 #12
Slå debuggeren til og følg hvad der sker...
Avatar billede _petrucci Nybegynder
01. juli 2002 - 14:58 #13
debuggeren vil slet ikke startes når jeg klikker på "udskriv" knappen - som om at agenten aldrig bliver sat igang. hmm...
Avatar billede cdelicht Nybegynder
01. juli 2002 - 15:01 #14
Indsæt en linie med ordet
Stop
i scriptet
Evt. restart Notes - just in case...
Avatar billede _petrucci Nybegynder
01. juli 2002 - 15:05 #15
Under agenten hvor der bliver spurgt: Hvornår skal denne agent køres?

Skal man da vælge "Når dokumenter er oprettet eller redigeret" ikke?

Før stod den på Manuelt via agentlisten - men nu hvor jeg valgte ovenstående kommer den og siger at den ikke kan finde agentet ved klik på udskriv.
Avatar billede cdelicht Nybegynder
02. juli 2002 - 08:25 #16
Når en agent ændres som du skriver sættes der automatisk ( ) om navnet. Derfor skal du rette dit kald til agenten i din knap ved at sætte ( ) om agentens navn sådan:
@Command([ToolsRunMacro]; "(NavnPåDinAgent)")

Hvis debuggeren ikke kører skal du vist blot lukke basen og åbne den igen - det skulle være nok
Avatar billede _petrucci Nybegynder
02. juli 2002 - 10:58 #17
jeg havde () rundt om navnet på agenten i ovenstående linje og den vil stadig ikke finde agenten når jeg klikker på knappen. Debuggeren går igang når jeg begynder at udfylde felterne i formularen. Jeg trykker på fortsæt et par gange og derefter klikker jeg på udskriv knappen. Der kommer den med "agenten ikke fundet" fejlen og debuggeren kommer aldrig i aktion - også selv jeg har lukket/åbnet basen igen.

Tror jeg skal have en snak med kollegaen når han kommer tilbage fra ferie for der er da vist noget helt galt. Men det er nok galt med vores database. Du får i hvert fald points for de sidste linjer af scriptet som ser meget rigtige ud :)
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester