Rapport vanuit Access form naar zaaksysteem versturen

Status
Niet open voor verdere reacties.

Bajram01

Gebruiker
Lid geworden
11 jun 2016
Berichten
11
Via een access form worden de rapporten gezet in het zaaksysteem.
Met de knop “zet in zaaksysteem” wordt het rapport gestuurd naar ZaaksysteemUrl . Als alles goed loopt krijg je een melding "Zaak aangemaakt in het zaaksysteem onder nummer " + ZaakId + ". Als er geen verbinding met de server is of er een fout in de DB ontstaat, dan verschijnt deze melding “Kon de zaak niet aanmaken. Controleer of er een verbinding met internet is, anders neem contact op met de beheerder." We krijgen vaak melding dat de zaak niet kon aangemaakt worden.
Bij controle in het zaaksysteem blijkt toch dat een zaak is aangemaakt, ondanks een melding dat het niet aangemaakt is. Er wordt door gebruikers herhaaldelijk op de knop “zet in zaaksysteem” gedrukt, waardoor veel dubbelingen in het zaaksysteem ontstaat.
Enig idee hoe dit ontstaat en wat er aan te doen is?

Code:
Private Sub ZetInZaaksysteem_Click()

    ZetInZaaksysteem.Enabled = False 'zet knopje tijdelijk uit (voorkom dubbelklik)
    
    Dim FileName As String
    Dim FilePath As String
    
    FileName = Me.Projectnummer + " " + Me.Projectnaam + " " + Me.Woonplaats
    FilePath = "output.pdf"
    
    Dim Buitengebied As Boolean
    If Trim(Woonplaats.Value) = "Amsterdam" Then
        Buitengebied = False
    ElseIf Trim(Woonplaats.Value) = "AMSTERDAM" Then
        Buitengebied = False
    Else
        Buitengebied = True
    End If
    
    If Buitengebied = True Then
        DoCmd.OutputTo acOutputReport, "Hoofdrapport buitengebieden", acFormatPDF, FilePath
    Else
        DoCmd.OutputTo acOutputReport, "Hoofdrapport", acFormatPDF, FilePath
    End If
    
    Dim ZaakClient As New WebClient
    ZaakClient.BaseUrl = "http://bvawaternet.nl/api/v1/"

    Const STR_BOUNDARY As String = "3fbd04f5-b1ed-4060-99b9-fca7ff59c113"
    
    Dim ZaakAuth As New HttpBasicAuthenticator
    ZaakAuth.Setup "beheerder", "jL8mHUucxN4XN"
    Set ZaakClient.Authenticator = ZaakAuth
    
    Dim Request As New WebRequest
    Request.Resource = "case/prepare_file"
    Request.Method = WebMethod.HttpPost
    Request.ResponseFormat = Json
    Request.ContentType = "multipart/form-data; boundary=" & STR_BOUNDARY
        
    Dim nFile As Integer
    Dim baBuffer() As Byte
    Dim sPostData As String
    
    ' --- read file
    nFile = FreeFile
    sFileName = "Bodem-en-veiligheidadvies.pdf"
    
    Open "output.pdf" For Binary Access Read As nFile
    If LOF(nFile) > 0 Then
        ReDim baBuffer(0 To LOF(nFile) - 1) As Byte
        Get nFile, , baBuffer
        sPostData = StrConv(baBuffer, vbUnicode)
    End If
    Close nFile
        
    ' --- prepare body
    sPostData = "--" & STR_BOUNDARY & vbCrLf & _
        "Content-Disposition: form-data; name=""file""; filename=""" & Mid$(sFileName, InStrRev(sFileName, "\") + 1) & """" & vbCrLf & _
        "Content-Type: application/octet-stream" & vbCrLf & vbCrLf & _
        sPostData & vbCrLf & _
        "--" & STR_BOUNDARY & "--"
        
    Request.Body = sPostData
    
    Dim response As New WebResponse
    Set response = ZaakClient.Execute(Request, True)

    If response.StatusCode = Ok Then
        Dim FileId As String
        FileId = response.Data("result")("instance")("references").Keys()(0)

    Else
        MsgBox ("Kon de zaak niet aanmaken. Controleer of er een verbinding met internet is, anders neem contact op met de beheerder.")
        Exit Sub
    End If
    
    Dim SecondRequest As New WebRequest
    SecondRequest.Resource = "case/create"
    SecondRequest.Format = WebFormat.Json
    SecondRequest.ResponseFormat = Json
    SecondRequest.Method = WebMethod.HttpPost
    
    SecondRequest.AddBodyParameter "casetype_id", "527262d4-b06d-4720-9ccb-de4744dde290"
    SecondRequest.AddBodyParameter "source", "webformulier"
    
    Dim Values As New Dictionary
    
    ' Naam in het zaaksysteem (magic string), naam in VBA
    Values.Add "opdrachtgever", Array([Form_accessdata BOB].Opdrachtgever.Value)
    Values.Add "aanvrager", Array([Form_accessdata BOB].Aanvrager.Value)
    Values.Add "werkorder", Array([Form_accessdata BOB].Projectnummer.Value)
    Values.Add "adres", Array([Form_accessdata BOB].Projectnaam.Value)
    Values.Add "plaats", Array([Form_accessdata BOB].Woonplaats.Value)
    Values.Add "x", Array([Form_accessdata BOB].Xcoördinaat.Value)
    Values.Add "y", Array([Form_accessdata BOB].Ycoördinaat.Value)
    Values.Add "werkomschrijving", Array([Form_accessdata BOB].Werkomschrijving.Value)
    Values.Add "startdatum", Array(Format([Form_accessdata BOB].VoorlopigeStartdatum.Value, "d-m-yyyy"))
    Values.Add "diepte_werkzaamheden_in_m", Array([Form_accessdata BOB].Dieptewerkzaamheden.Value)
    Values.Add "omvang_grondwerk_lxbxd_in_m3", Array([Form_accessdata BOB].Omvanggrondwerk.Value)
    Values.Add "duur_van_de_werkzaamheden_in_dagen", Array([Form_accessdata BOB].Duurwerkzaamheden.Value)
    Values.Add "werkzaamheden ondergrondwaterspiegel", Array([Form_accessdata BOB].Grondwaterspiegel.Value)
    Values.Add "klasse_toxiciteit_en_flammable", Array([Form_accessdata BOB].Veiligheidsklasse.Value)
    Values.Add "bijzonderheden", Array([Form_accessdata BOB].Bijzonderheden.Value)
    Values.Add "opmerking", Array([Form_accessdata BOB].Bodemonderzoek.Value)
    Values.Add "veiligheidsadvies", Array(FileId) ' Zet het bestand in de zaak
    
    If Buitengebied = True Then
        Values.Add "buitengebied", Array("Ja")
    Else
        Values.Add "buitengebied", Array("Nee")
    End If
       
    SecondRequest.AddBodyParameter "values", Values
    
    Dim SecondResponse As New WebResponse
    Set SecondResponse = ZaakClient.Execute(SecondRequest)
    
    If SecondResponse.StatusCode = Ok Then
        Dim ZaakId As String
        ZaakId = SecondResponse.Data("result")("instance")("number")
        [Form_accessdata BOB].Zaaknummer.Value = ZaakId
        MsgBox ("Groeten van Tatjana Simic: kijk in mijn checkbox hiernast " + ZaakId + ".")
    Else
        MsgBox ("Kon de zaak niet aanmaken. Controleer of er een verbinding met internet is, anders neem contact op met de beheerder.")
    End If

    ZetInZaaksysteem.Enabled = True
    
End Sub
 
Ik weet niet welke bibliotheken je gebruikt dus ook niet hoe je dit kan tackelen, maar ik vermoed dat je timeout problemen hebt zodat de code doorloopt terwijl je al wel voorbij de foutafvanging bent. Misschien heb je hier wat aan ter inspiratie?
 
Met timeout kon ik zelf niets vinden.... waar moet ik dat invoegen.... heeft iemand een voorbeeld?
Met deze code
..................
If SecondResponse.StatusCode = Ok Then
Dim ZaakId As String
ZaakId = SecondResponse.Data("result")("instance")("number")
[Form_accessdata BOB].Zaaknummer.Value = ZaakId
MsgBox ("Groeten van Tatjana Simic: kijk in mijn checkbox hiernast " + ZaakId + ".")
Else
MsgBox ("Kon de zaak niet aanmaken. Controleer of er een verbinding met internet is, anders neem contact op met de beheerder.")
End If

ZetInZaaksysteem.Enabled = True
.............................................................
probeer ik het zaaknummer van het zaaksysteem op te slaan in de access form waardoor je lokaal kan bijhouden of de zaak al is aangemaakt in het zaaksysteem. Bij de melding “Kon de zaak niet aanmaken...." wordt het zaaknummer niet opgeslagen in de access formulier maar in het zaaksysteem wel.
 
Dit probleem is veel te specifiek vermoed ik om hier op te lossen; dat lukt alleen als je de bedrijfsomstandigheden kent. Mijn kennis schiet hier in ieder geval te kort. Dat StatusCode = OK het probleem is lijkt mij evident; je krijgt die code terug terwijl de procedure nog loopt vermoed ik.
Hier heb je echt een professional voor nodig.
 
Timeout problemen, zoals OctaFish al heeft aangegeven.
De oplossing:
ZaakClient.TimeoutMs = 60000
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan