Avatar billede bamzen Nybegynder
01. juli 2004 - 09:10 Der er 6 kommentarer og
1 løsning

Sætte værdier på andre dokumenter, fundet udfra felter

Hej,

Jeg er ny ud i LS forunderlige verden....

jeg har et dokument, hvor jeg har 50 felter*2 ProductID_1 - ProductID_50 og amount_1 - amount 50

Nu vil jeg så lave en agent trigget af en knap, der løber productid_ felterne igennem, Når den finder en værdi, skal den slå op i et view vPRODUCTSKEY efter værdien fra feltet. Her skal den så opdaterer et felt CurrentAmount med værdien fra Amount_ felterne....

Nu griner i sikket af min kode, men PLEASE hjælp...

Jeg er gået i stå ved at jeg ikke kan få fat i en værdi på det document jeg henter med getdocumentbykey

Sub Initialize
    Dim session As New notessession
    Dim workspace As New NotesUIWorkspace
    Dim uidoc As NotesUIDocument
    Dim doc As NotesDocument
    Dim products() As String
    Dim db1 As notesdatabase
    Dim view As notesview
    Dim counter As Integer
   
    Set db1=  session.currentdatabase
    Set view = db1.getview("vPRODUCTSKEY")
    Set uidoc = workspace.currentDocument
   
    For counter%=1 To 50
        tmp = "productid_"+Cstr(counter%)
        tmp2 = uidoc.Fieldgettext(tmp)
        If tmp2 <> "0" & tmp2 <> "" Then
            Set doc = view.GetDocumentBykey(tmp2)
            Print tmp2
            tmp3 = doc.GetItemValue( "ProductName" )
            Print tmp3
           
        End If
    Next
End Sub
Avatar billede jogii Nybegynder
01. juli 2004 - 10:42 #1
du kan passende lægge check ind om du har fat i et dokument eller ej.

if not doc is nothing then
    tmp3 = doc.GetItemValue( "ProductName" )
    Print tmp3
else
    print "dokument med nøgle " & tmp2 & fandtes ikke
end if


vær også opmærksom på at den oversigt som du søger i skal være sorteret på den kolonne der indeholder nøglen.
Avatar billede bamzen Nybegynder
01. juli 2004 - 11:58 #2
Nu er jeg kommet et skridt videre og min kode ser nu således ud, og så får jeg en type mismatch...

Sub Initialize
    Dim session As New notessession
    Dim workspace As New NotesUIWorkspace
    Dim uidoc As NotesUIDocument
    Dim doc As NotesDocument
    Dim products() As String
    Dim db1 As notesdatabase
    Dim view As notesview
    Dim counter As Integer
    Dim tmp As String,tmp2 As String,tmp3 As Double
    Set db1=  session.currentdatabase
    Set view = db1.getview("vPRODUCTSKEY")
    Set uidoc = workspace.currentDocument
   
    For counter%=1 To 50
        tmp = "productid_"+Cstr(counter%)
        tmp2 = uidoc.Fieldgettext(tmp)
        If tmp2 <> "0" And tmp2 <> "" Then
            Set doc = view.GetDocumentBykey(tmp2)
            If Not doc Is Nothing Then
                tmp3 = doc.GetItemValue( "MinimumAmount" )
                Call uidoc.FieldSetText("ActualAmount",tmp3)
            End If
        End If
    Next
End Sub

Både minimumamount og actualamount er nummerfelter
Avatar billede bamzen Nybegynder
01. juli 2004 - 11:59 #3
har prøvet at definere tmp3 som string, og som integer, men feltets type er i følge debuggeren "double"

det er i linien tmp3 = doc.getItemValue...... at jeg får min type mismatch
Avatar billede jogii Nybegynder
01. juli 2004 - 12:55 #4
så bør det være iorden at anvende cstr som nedenunder
tmp3 = cstr(doc.GetItemValue( "MinimumAmount" ))
Avatar billede bamzen Nybegynder
01. juli 2004 - 13:30 #5
Cool har fået det til at virke, dog på en lidt anden måde, nemlig :

Sub Initialize
    Dim session As New notessession
    Dim workspace As New NotesUIWorkspace
    Dim uidoc As NotesUIDocument
    Dim doc As NotesDocument
    Dim products() As String
    Dim db1 As notesdatabase
    Dim view As notesview
    Dim counter As Integer
    Dim tmp As String,tmp2 As String,orgval As Double, tmp4 As String,amount As Double,newval As Double
    Set db1=  session.currentdatabase
    Set view = db1.getview("vPRODUCTSKEY")
    Set uidoc = workspace.currentDocument
    Dim item As NotesItem
   
    For counter%=1 To 50
        tmp = "productid_"+Cstr(counter%)
        tmp4 = "amount_"+Cstr(counter%)
        tmp2 = uidoc.Fieldgettext(tmp)
        If tmp2 <> "0" And tmp2 <> "" Then
            Set doc = view.GetDocumentBykey(tmp2)
            If Not doc Is Nothing Then
                orgval = Cint(doc.actualAmount(0))
                amount = uidoc.fieldgettext(tmp4)
               
                newval= orgval - amount
                Print uidoc.Fieldgettext("product_"+Cstr(counter%) ) & " antal : " & amount &" original : " & doc.ActualAmount(0) &" ny :" newval
                doc.editmode = True
                Call doc.ReplaceItemValue("ActualAmount", Cstr(newval))
                Print doc.ActualAmount(0)
                Call doc.save(False,False)
            End If
        End If
    Next
End Sub
Avatar billede bamzen Nybegynder
01. juli 2004 - 13:31 #6
læg et svar, så får du point får at have hjulpet mig videre...
Avatar billede jogii Nybegynder
01. juli 2004 - 13:35 #7
så svarer jeg da gerne :-)
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