Avatar billede hyber Nybegynder
18. november 2004 - 00:37 Der er 7 kommentarer og
1 løsning

Forward err.raise

Jeg har laven en Class, som når brugeren vil hente en "Item" fra serveren, kalder han en method (eGWCalControl.GetAllFromeGW) hvilket så sætter nogle parameter som så igen kalder en intern function i klassen (Exec) som så kommunikere med serveren. Hvis der sker en fejl laver jeg denne:

Exec_Err:
    'If we cant connect to host.
    If Err.Number = -2147098037 Then
        Err.Raise 7, Me.Name & " Ver. " & Me.Version & " Method: Exec", _
            "No route to host, is it online?"
    End If

den ryger så tilbage til min GetAllFromeGW function som jeg så gerne vil have til at enten lave en ny err.raise eller "forwarde" den videre til brugeren som bruger min klasse. Så han kan debugge på den. Hvis jeg bare laver en msgbox med fejlen i GetAllFromeGW, så løber brugeren programkode jo bare videre og laver en anden runtime error..

Håber det er beskrevet godt nok. Ellers sig til og jeg smider noget mere kode ind og prøver at beskrive det bedre.

hygge

Esben
Avatar billede venne Nybegynder
18. november 2004 - 09:13 #1
Kan du ikke bare raise igen?
Jeg har før sendt en fejl videre med:

  Err.Raise Err.Number, Err.Source, Err.Description
Avatar billede hyber Nybegynder
18. november 2004 - 09:39 #2
Det kan jeg ikke få til at virke. Selvom jeg raiser den igen som du har gjort, halter koden i min klasse i stedet for i brugerens kode..

--
Esben
Avatar billede venne Nybegynder
18. november 2004 - 13:23 #3
Hm.
Så skal jeg nok se noget mere kode for at forstå problemt.
Avatar billede hyber Nybegynder
18. november 2004 - 15:11 #4
Okay, har jeg en knap (normalt bruger kode) i min frmMain som henter alle mine Aftaler ud af min kalender i eGW.

Private Sub cmdNewGetCal_Click()

    On Error GoTo cmdNewGetCal_Err:

    Dim eGWItem As eGWCalItem
    Dim eGWRequest As New eGWCalControl
    Dim eGWCol As eGWCollection
    Dim strMsg As String
    Dim intCount As Integer
   
    'henter data fra min eGWCalControl klasse
    Set eGWCol = eGWRequest.GetAllFromeGW
   
    For Each eGWItem In eGWCol
        With eGWItem
            strMsg = "Title: " & .Title & vbCrLf & _
                    "ID: " & .ID & vbCrLf & _
                    "UID: " & .UID & vbCrLf & _
                    "Start Date: " & .StartTime & vbCrLf & _
                    "End Data: " & .EndTime
                   
            MsgBox strMsg
        End With
    Next eGWItem
 
cmdNewGetCal_Err:

    MsgBox Err.Number & Err.Description & Err.Source

  Set eGWRequest = Nothing
  Set eGWCol = Nothing
  Set eGWItem = Nothing
End Sub

Som du jo kan se bruger jeg min klasse eGWCalControl. Der i kalder jeg GetAllromeGW metoden. Som er her:


Public Function GetAllFromeGW(Optional pStartDate As Date, Optional pEndDate As Date) As eGWCollection
    On Error GoTo GetAllFromeGW_Err
    Dim xmlParms As New XMLRPCStruct
    Dim xmlResponse As XMLRPCResponse
    Dim xmlArray As XMLRPCArray
 
    If pStartDate = "00:00:00" Then
        pStartDate = #1/1/1990#
    End If
   
    If pEndDate = "00:00:00" Then
        pEndDate = #12/31/2100#
    End If
   
    'is enddate before startdate?
   
    If pEndDate < pStartDate Then
        Err.Raise 6, Me.Name & " Ver. " & Me.Version & "Method: GetAllFromeGW", _
            "Enddate can't be after startdate!"
    End If
   
    'we need to format VB time into something that eGW understands. Therefore the format() function
    xmlParms.AddString "start", Format(pStartDate, "yyyy-mm-ddThh:mm:ss")
    xmlParms.AddString "end", Format(pEndDate, "yyyy-mm-ddThh:mm:ss")
   
    'Getting the response from eGW server.
    Set xmlResponse = Exec("calendar.bocalendar.search", xmlParms)
   
    'Creating the eGWCollection that we return to the user
    Set GetAllFromeGW = AssembleCollection(xmlResponse)

    'We need to clean up after us.
    Set xmlParms = Nothing
    Set xmlResponse = Nothing
    Set xmlArray = Nothing

    Exit Function
   
GetAllFromeGW_Err:

        Err.Raise Err.Number, Err.Source, Err.Description
   
End Function

Den kalder så Exec("calendar.bocalendar.search", xmlParms) som er den private function der henter data fra serveren med:

Private Function Exec(pstrMethod As String, Optional ByVal pxmlParms As XMLRPCStruct, _
                        Optional ByVal plngParm As Long) As XMLRPCResponse
    On Error GoTo Exec_Err

    Dim xmlRequest As New XMLRPCRequest
    Dim xmlTempResponse As XMLRPCResponse
   
    xmlRequest.HostName = gstrHostname
    xmlRequest.HostPort = gintPort
    xmlRequest.HostURI = gstrURI
   
    xmlRequest.MethodName = pstrMethod

    If plngParm <> 0 Then
        xmlRequest.Params.AddInteger plngParm
    End If
   
    If plngParm = 0 Then
        xmlRequest.Params.AddStruct pxmlParms
    End If
   
   
    Set xmlTempResponse = xmlRequest.Submit
   
    If Not xmlrpcError(xmlTempResponse) Then
        Set Exec = xmlTempResponse
    End If
   
    GoTo ShutDown
Exec_Err:
    'If we cant connect to host.
    If Err.Number = -2147098037 Then
        Err.Raise 1, Me.Name & Me.Version, "No route to host, is it online?"
    End If
   
ShutDown:
    Set xmlRequest = Nothing
    Set xmlTempResponse = Nothing

End Function

Nu er det så bare at når jeg raiser en err i Exec() så bliver den til en runtime error i GetAllFromeGW() jeg vil hellere have den til at blive en runtime err i min cmdNewGetCal_Click() function...

Jeg har overvejet at lade være med at raise min err i exec, og sætte en modul variable som jeg så detector på i min GetAllFromeGW function, og derved raiser den for første gang der.. Jeg syntes bare det burde kunne laves smartere..

--
Esben
Avatar billede venne Nybegynder
19. november 2004 - 13:57 #5
Jeg har prøvet en stripped-down version af din kode og det virker fint, synes jeg.

Jeg lurer lidt på om det er fordi du kører med "Break in Class Module". Prøv at højreklikke i et kodevindue, vælg Toggle, vælg "Break on Unhandled Errors". Og kør så igen. Gør det en forskel?
Avatar billede hyber Nybegynder
19. november 2004 - 18:12 #6
Nemlig ja, det var lige det.... 100 points meget vel fortjent...
Avatar billede hyber Nybegynder
19. november 2004 - 18:13 #7
øhh, når der lige kommer et svar =)
Avatar billede venne Nybegynder
22. november 2004 - 08:44 #8
Kommer her...
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
Kurser inden for grundlæggende programmering

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