hello!
after changing the code i get two errors:
'totalTimeNodeName' is not defined
object expected
do i have to change something on 'update the grand total node'?
please have a look on the code!
thanks
//<namespacesDefinition>
XDocument.DOM.setProperty("SelectionNamespaces",
'xmlns:my="
http://schemas.microsoft.com/office/infopath/2003/myXSD/2006-11-19T09:19:25"');
//</namespacesDefinition>
//=======
// Die folgende Handlerfunktion wurde von Microsoft Office InfoPath
erstellt.
// Der Funktionsname und die Anzahl und Namen der Argumente d|rfen
nicht gedndert werden.
// Diese Funktion ist dem folgenden Feld bzw. der folgenden Gruppe
zugeordnet (XPath): /my:meineFelder/my:gruppe1/my:gruppe2/my:startTime1
// Achtung: Die Informationen in diesem Kommentar werden nach dem
Erstellen des Funktionshandlers nicht aktualisiert.
//=======
function msoxd_my_startTime1::OnAfterChange(eventObj)
{
// F|gen Sie hier den Code zum Wiederherstellen des globalen Zustandes
ein.
if (eventObj.IsUndoRedo)
{
// Ein R|ckgdngig- oder Wiederholen-Vorgang wurde durchgef|hrt
und das DOM ist schreibgesch|tzt.
return;
}
// Eine Dnderung am Feld wurde vorgenommen und das DOM ist
beschreibbar. F|gen Sie hier den Code f|r die Reaktion auf die
Dnderung ein.
updateFields(eventObj.Source);
}
function msoxd_my_endTime1::OnAfterChange(eventObj)
{
// F|gen Sie hier den Code zum Wiederherstellen des globalen Zustandes
ein.
if (eventObj.IsUndoRedo)
{
// Ein R|ckgdngig- oder Wiederholen-Vorgang wurde durchgef|hrt
und das DOM ist schreibgesch|tzt.
return;
}
// Eine Dnderung am Feld wurde vorgenommen und das DOM ist
beschreibbar. F|gen Sie hier den Code f|r die Reaktion auf die
Dnderung ein.
updateFields(eventObj.Source);
}
function msoxd_my_startTime2::OnAfterChange(eventObj)
{
// F|gen Sie hier den Code zum Wiederherstellen des globalen Zustandes
ein.
if (eventObj.IsUndoRedo)
{
// Ein R|ckgdngig- oder Wiederholen-Vorgang wurde durchgef|hrt
und das DOM ist schreibgesch|tzt.
return;
}
// Eine Dnderung am Feld wurde vorgenommen und das DOM ist
beschreibbar. F|gen Sie hier den Code f|r die Reaktion auf die
Dnderung ein.
updateFields(eventObj.Source);
}
function msoxd_my_endTime2::OnAfterChange(eventObj)
{
// F|gen Sie hier den Code zum Wiederherstellen des globalen Zustandes
ein.
if (eventObj.IsUndoRedo)
{
// Ein R|ckgdngig- oder Wiederholen-Vorgang wurde durchgef|hrt
und das DOM ist schreibgesch|tzt.
return;
}
// Eine Dnderung am Feld wurde vorgenommen und das DOM ist
beschreibbar. F|gen Sie hier den Code f|r die Reaktion auf die
Dnderung ein.
updateFields(eventObj.Source);
}
/***************************************************************************
http://enterprise-solutions.swits.net/infopath/
Copyright ) 2006 S.Y.M. Wong-A-Ton, All rights reserved.
This code sample is provided "AS IS" without warranty or support of
any kind.
***************************************************************************/
/*------------------------------------------------------------------------------
This code assumes the following DOM structure:
/my:myFields/my:timeEntries/my:timeEntry/my:startTime
/my:myFields/my:timeEntries/my:timeEntry/my:endTime
/my:myFields/my:timeEntries/my:timeEntry/my:totalHours
/my:myFields/my:timeEntries/my:grandTotal
where my:timeEntry is a repeating group.
Declare the names of the nodes used in time calculations.
The names of the nodes MUST concord with the names of the
corresponding nodes in the DOM.
If a grand total field is not present, set enableGrandTotal to
false (var enableGrandTotal = false).
------------------------------------------------------------------------------*/
var startTimeNodeName1 = "my:startTime1";
var endTimeNodeName1 = "my:endTime1";
var totalTimeNodeName1 = "my:totalTime1";
var startTimeNodeName2 = "my:startTime2";
var endTimeNodeName2 = "my:endTime2";
var totalTimeNodeName2 = "my:totalTime2";
var grandTotalNodeName = "my:grandTotal";
var enableGrandTotal = true;
/*------------------------------------------------------------------------------
Calls all functions to do the time calculations and
update the total hours and grand total fields.
------------------------------------------------------------------------------*/
function updateFields(xmlNode)
{
try {
if (!isNull(xmlNode))
{
if (xmlNode.nodeType == 3)
{
if (!isNull(xmlNode.parentNode))
{
retrieveNodesAndUpdate(xmlNode.parentNode);
}
}
}
// Update the grand total
if (enableGrandTotal)
{
updateGrandTotalNode();
}
}
catch (e)
{
XDocument.UI.Alert("The following error occurred: " + e.message);
}
}
/*------------------------------------------------------------------------------
Retrieves the start time, end time, and total hours nodes
given the current context node.
------------------------------------------------------------------------------*/
function retrieveNodesAndUpdate(contextNode)
{
var startTimeNode1 = null;
var endTimeNode1 = null;
var totalTimeNode1 = null;
var startTimeNode2 = null;
var endTimeNode2 = null;
var totalTimeNode2= null;
var timeEntryNode = null;
// Retrieve parent node of context node (= time entry node)
if (!isNull(contextNode.parentNode))
{
timeEntryNode = contextNode.parentNode;
// Retrieve start time node, end time node and total hours node
startTimeNode1 = timeEntryNode.selectSingleNode(startTimeNodeName1);
endTimeNode1 = timeEntryNode.selectSingleNode(endTimeNodeName1);
totalTimeNode1 = timeEntryNode.selectSingleNode(totalTimeNodeName1);
startTimeNode2 = timeEntryNode.selectSingleNode(startTimeNodeName2);
endTimeNode2 = timeEntryNode.selectSingleNode(endTimeNodeName2);
totalTimeNode2 = timeEntryNode.selectSingleNode(totalTimeNodeName2);
// Calculate the time difference and update the total hours node
calcAndUpdateTotalTimeNode1(startTimeNode1, endTimeNode1,
totalTimeNode1);
calcAndUpdateTotalTimeNode2(startTimeNode2, endTimeNode2,
totalTimeNode2);
}
}
/*------------------------------------------------------------------------------
Calculates the elapsed time given a start time node and end time node
and writes the results to the total hours node.
------------------------------------------------------------------------------*/
function calcAndUpdateTotalTimeNode(xmlStartTimeNode, xmlEndTimeNode,
xmlTotalTimeNode)
{
if (!isNull(xmlStartTimeNode) && !isNull(xmlEndTimeNode) &&
!isNull(xmlTotalTimeNode))
{
var startTimeValue = xmlStartTimeNode.text;
var endTimeValue = xmlEndTimeNode.text;
var calcTime = "";
// Try emptying the node; if error occurs, continue
try {setNil(xmlTotalTimeNode);}
catch (e) {}
if (startTimeValue != "" && endTimeValue != "")
{
calcTime = calcTimeInMinutes(startTimeValue, endTimeValue);
}
if (calcTime != "" && xmlTotalTimeNode.getAttribute("xsi:nil"))
{
xmlTotalTimeNode.removeAttribute("xsi:nil");
}
setNodeTypedValue(xmlTotalTimeNode, calcTime / 3600);
}
}
/*------------------------------------------------------------------------------
Calculates the elapsed time given a start time and end time
in the "hh:mm" time format. Since date calculations are not
being done, the date has been set to January 1, 1970.
------------------------------------------------------------------------------*/
function calcTimeInMinutes(startTimeValue, endTimeValue)
{
var elapsed = 0;
if (startTimeValue != "" && endTimeValue != "")
{
var arrStart = startTimeValue.split(":");
var arrEnd = endTimeValue.split(":");
if (arrStart.length >= 2 && arrEnd.length >= 2)
{
var dtStart = new Date(1970, 1, 1, parseFloat(arrStart[0]),
parseFloat(arrStart[1]), 0);
var dtEnd = new Date(1970, 1, 1, parseFloat(arrEnd[0]),
parseFloat(arrEnd[1]), 0);
elapsed = (dtEnd.getTime() - dtStart.getTime()) / 1000;
}
}
return elapsed;
}
/*------------------------------------------------------------------------------
Updates the grand total node.
------------------------------------------------------------------------------*/
function updateGrandTotalNode()
{
var xmlTotalTimeNodes = XDocument.DOM.selectNodes("//" +
totalTimeNodeName);
var grandTotal = 0;
for (var i = 0; i < xmlTotalTimeNodes.length; i++)
{
if (xmlTotalTimeNodes
.text != "")
{
grandTotal += parseFloat(xmlTotalTimeNodes.text);
}
}
var xmlGrandTotalNode = XDocument.DOM.selectSingleNode("//" +
grandTotalNodeName);
// Try emptying the node; if error occurs, continue
try {setNil(xmlGrandTotalNode);}
catch (e) {}
if (grandTotal != 0 && xmlGrandTotalNode.getAttribute("xsi:nil"))
{
xmlGrandTotalNode.removeAttribute("xsi:nil");
}
setNodeTypedValue(xmlGrandTotalNode, grandTotal);
}
/*------------------------------------------------------------------------------