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:
ausgegeben.
Mein (kompletter) FormularCode:
Vielleicht findet ja jemand den Fehler...ich leider nicht.
Gruss Jens
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
aussteigt.
Nur warum?
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:
Richtig:
bei mir ging er durch das leerzeichen nicht in die IF-Abfrage und dadurch funktionierte das
nicht mehr.
Auf sowas muss man auch erstmal kommen
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)
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)
Auf sowas muss man auch erstmal kommen