VisualBasic datumsberechnung in infopath

noyse

Newbie
Registriert
Feb. 2009
Beiträge
6
Hallo

Ich hab mir mal den hier https://www.computerbase.de/forum/threads/feiertage-in-infopath.794396/ beschriebenen Code geschnappt und versucht bei mir einzubauen, da in meiner Berechnung bisher das herausrechnen von Wochenenden nicht implementiert war.

mein Problem nun ist dass die berechnung scheinbar gar nicht mehr funktioniert.
nach Klicken auf den Button "berechnen" wird m.M.n. gleich in den Catch Zweig gegangen.

Ausserdem wird mir bei Aufruf im Debugger gleich:
Eine Ausnahme (erste Chance) des Typs "System.InvalidOperationException" ist in Microsoft.Office.InfoPath.Client.Internal.Host.Interop.dll aufgetreten.

ausgegeben.

Mein (kompletter) FormularCode:
Code:
Imports Microsoft.Office.InfoPath
Imports System
Imports System.Windows.Forms
Imports System.Xml
Imports System.Xml.XPath
Imports mshtml
Imports Microsoft.VisualBasic


Namespace Urlaubsantrag_tw
    Public Class FormCode
        ' Membervariablen werden in browserfähigen Formularen nicht unterstützt.
        ' Schreiben und lesen Sie diese Werte stattdessen aus dem FormState-
        ' Wörterbuch, indem Sie Code wie folgt verwenden:
        '
        ' Private Property _memberVariable() As Object
        '     Get
        '         _memberVariable = FormState("_memberVariable")
        '     End Get
        '     Set
        '         FormState("_memberVariable") = value
        '     End Set
        ' End Property

        ' HINWEIS: Das folgende Verfahren ist für Microsoft InfoPath erforderlich.
        ' Es kann mithilfe von Microsoft InfoPath geändert werden.
        Private Sub InternalStartup(ByVal sender As Object, ByVal e As EventArgs) Handles Me.Startup
            AddHandler DirectCast(EventManager.ControlEvents("CTRL24_6"), ButtonEvent).Clicked, AddressOf CTRL24_6_Clicked
        End Sub

        Public Sub CTRL24_6_Clicked(ByVal sender As Object, ByVal e As ClickedEventArgs)
            Dim node_von As XPathNavigator = MainDataSource.CreateNavigator().SelectSingleNode("/my:meineFelder/my:ErsterAbwesenheitstag", NamespaceManager)
            Dim node_bis As XPathNavigator = MainDataSource.CreateNavigator().SelectSingleNode("/my:meineFelder/my:LetzterAbwesenheitstag", NamespaceManager)
            Dim node_diff As XPathNavigator = MainDataSource.CreateNavigator().SelectSingleNode("/my:meineFelder/my:AnzahlAbwesenheitstage", NamespaceManager)

            If node_von.Value.length > 0 And node_bis.Value.length > 0 Then
                Try
                    Dim d_von, d_bis As Date
                    d_von = Convert.ToDateTime(node_von.Value)
                    d_bis = Convert.ToDateTime(node_bis.Value)
                    Dim nDays As Long
                    nDays = d_bis.Subtract(d_von).Days + 1

                    Dim differenz_tage As String
                    differenz_tage = IIf(nDays \ 7 > 0, _
                    nDays - (nDays \ 7) * 2, nDays) - _
                    IIf(Weekday(d_von, vbMonday) - 1 + nDays Mod 7 < 6, 0, _
                    IIf(Weekday(d_von, vbMonday) - 1 + nDays Mod 7 = 6, 1, 2))
                    node_diff.SetValue(differenz_tage)

                    If node_diff.MoveToAttribute("nil", " http://www.w3.org/2001/XMLSchema-instance") Then
                        node_diff.DeleteSelf()
                    End If


                Catch ex As Exception
                    'keine Aktion, Berechnung abbrechen
                End Try
            End If
        End Sub

    End Class
End Namespace

Vielleicht findet ja jemand den Fehler...ich leider nicht.

Gruss Jens
Ergänzung ()

hmm ich hab den Übeltäter gefunden.
nachdem ich alles im Einzelschritt debuggt habe, konnte ich feststellen dass der code alles richtig berechnet dann aber bei

Code:
node_diff.SetValue(differenz_tage)
aussteigt.
Nur warum?
Ergänzung ()

Hab den endgültigen Fehler gefunden:

Code bei https://www.computerbase.de/forum/threads/feiertage-in-infopath.794396/ hat sich nämlich ein Leerzeichen an einer Stelle eingeschlichen der dort scheinbar nicht sein darf:

Falsch:
Code:
If node_diff.MoveToAttribute("nil", " http://www.w3.org/2001/XMLSchema-instance") Then

Richtig:
Code:
If node_diff.MoveToAttribute("nil", "http://www.w3.org/2001/XMLSchema-instance") Then

bei mir ging er durch das leerzeichen nicht in die IF-Abfrage und dadurch funktionierte das
Code:
node_diff.SetValue(differenz_tage)
nicht mehr.

Auf sowas muss man auch erstmal kommen ;)
 
Zurück
Oben