Hi Franck!
I already changed my code to what you suggested, but the field still doesn't change. I might be doing something wrong. Here's what I did
private void SyncDifference(DataDOMEvent e)
{
IXMLDOMNode date1Node = e.Source.selectSingleNode( "my:ResourceStartDate" );
IXMLDOMNode date2Node = e.Source.selectSingleNode( "my:ResourceReleaseDate" );
IXMLDOMNode diffNode = e.Source.selectSingleNode( "my:ManDays" );
if( date1Node != null && date2Node != null && diffNode != null )
{
try
{
DateTime dt1 = Iso8601ToDate( date1Node.text );
DateTime dt2 = Iso8601ToDate( date2Node.text );
TimeSpan ts = dt2 - dt1;
diffNode.text = ts.Days.ToString();
}
catch( FormatException ) {}
}
}
private static DateTime Iso8601ToDate( string iso8601Date )
{
if( iso8601Date == null )
throw new ArgumentNullException( "iso8601Date" );
return DateTime.ParseExact( iso8601Date, "yyyy-MM-dd", null );
}
private static string DateToIso8601( DateTime dateTime )
{
return dateTime.ToString( "yyyy-MM-dd" );
}
[InfoPathEventHandler(MatchPath="/my:ServiceOrder/my:ResourceRequirementDetails/my:Items/my:ResourceStartDate", EventType=InfoPathEventType.OnAfterChange)]
public void ResourceStartDate_OnAfterChange(DataDOMEvent e)
{
if (e.IsUndoRedo)
{
return;
}
SyncDifference(e);
}
[InfoPathEventHandler(MatchPath="/my:ServiceOrder/my:ResourceRequirementDetails/my:Items/my:ResourceReleaseDate", EventType=InfoPathEventType.OnAfterChange)]
public void ResourceReleaseDate_OnAfterChange(DataDOMEvent e)
{
if (e.IsUndoRedo)
{
return;
}
SyncDifference(e);
}
quote:
Practice makes perfect, but then, nobody's perfect. So, why practice?