Hi. I am using Infopath 2003 SP2, Access 2003 and prg language is VBScript. I have gone through post for iterating through repeating table.
The main data source in my form for looks like below:
myFields
dataFields
d:DealsMaster
DealsDetails
I have a master detail control on the form. The form works fine i.e. when a record from master is selected the details of the deals are retrieved, changes made are properly submitted etc.
I want to clone a deal. My code looks like follows:
Sub btnClone_OnClick(eventObj)
dim rootnode, masternode, detailnode, masterrow, detailnodelist, i, tt
set rootnode = XDocument.DOM.selectSingleNode("/dfs:myFields/dfs:dataFields")
set masternode = XDocument.DOM.selectSingleNode("/dfs:myFields/dfs:dataFields/d:DealsMaster").cloneNode(true)
'set all the fields in the masternode
masternode.selectSingleNode("@deal_id").text() = "" 'this is the primary key of DealsMaster
masternode.selectSingleNode("@deal_inflow_id").text() = eventObj.Source.selectSingleNode("@deal_inflow_id").value
masternode.selectSingleNode("@requestor").text() = eventObj.Source.selectSingleNode("@requestor").value
masternode.selectSingleNode("@deal_start_date").text() = eventObj.Source.selectSingleNode("@deal_start_date").value
masternode.selectSingleNode("@deal_comments").text() = eventObj.Source.selectSingleNode("@deal_comments").value
'append the masternode which has new values and get reference to the newly added row
set masterrow = rootnode.appendChild(masternode)
'retrieve the first detail node and clone it
set detailnode = XDocument.DOM.selectSingleNode("/dfs:myFields/dfs:dataFields/d:DealsMaster/d:DealsDetails").cloneNode(false)
'get all detail nodes
set detailnodelist = XDocument.DOM.selectNodes("/dfs:myFields/dfs:dataFields/d:DealsMaster/d:DealsDetails")
'set all the fields in detailnode in a loop
for i = 0 to detailnodelist.length-1
detailnode.selectSingleNode("@detail_id").text() = "" ''this is the primary key of DealsDetails
detailnode.selectSingleNode("@telex_category").text() = detailnodelist(i).selectSingleNode("@telex_category").value
detailnode.selectSingleNode("@telex_received_sent").text() = detailnodelist(i).selectSingleNode("@telex_received_sent").value
detailnode.selectSingleNode("@telex_from").text() = detailnodelist(i).selectSingleNode("@telex_from").value
detailnode.selectSingleNode("@telex_date").text() = detailnodelist(i).selectSingleNode("@telex_date").value
detailnode.selectSingleNode("@cloned").text() = "C"
masternode.appendChild(detailnode)
next
'submit to database
XDocument.submit
End Sub
My detailnodelist retrieves all the records from the DealsDetails table. I want detail rows only for the current master row.
Unforunately, I do not know how to loop through the rows which I can see in the detail control. The name of the control is DealsDetails_17.
I observed something else. If I submit to database after -> set masterrow = rootnode.appendChild(masternode) <-, the first detail record from
DealsDetails table is added for that masternode.
Any pointers???? Your help will be highly appreciated.