{hidden}
DO NOT EDIT THE CONTENT OF THIS PAGE DIRECTLY, UNLESS YOU KNOW WHAT YOU'RE DOING.
		THE STRUCTURE OF THE CONTENT IS VITAL IN BEING ABLE TO EXTRACT CHANGES FROM THE PAGE AND MERGE THEM BACK INTO SERVOY SOURCE{hidden}
{sub-section:description|text=}{sub-section}\\ 

{table:id=|class=servoy sReturnTypes}{tr:style=height: 30px;}{th}Return Types{th}{tr}{tr}{td}{span:class=sWordList}[JSFoundSet]{span}{span:class=sWordList}[JSRecord]{span}{td}{tr}{table}\\ 

{table:id=|class=servoy sSummary}{colgroup}{column:width=80px|padding=0px}{column}{column}{column}{colgroup}{tr:style=height: 30px;}{th:colspan=2}Property Summary{th}{tr}{table}\\ 

{table:id=|class=servoy sSummary}{colgroup}{column:width=80px|padding=0px}{column}{column}{column}{colgroup}{tr:style=height: 30px;}{th:colspan=2}Method Summary{th}{tr}{tbody}{tr}{td}[String]{td}{td}[#getDataSource]\(serverName, tableName)
Returns the datasource corresponding to the given server/table.{td}{tr}{tbody}{tbody}{tr}{td}[String]{td}{td}[#getDataSourceServerName]\(dataSource)
Returns the server name from the datasource, or null if not a database datasource.{td}{tr}{tbody}{tbody}{tr}{td}[String]{td}{td}[#getDataSourceTableName]\(dataSource)
Returns the table name from the datasource, or null if the specified argument is not a database datasource.{td}{tr}{tbody}{tbody}{tr}{td}[JSFoundSet]{td}{td}[#getFoundSet]\(dataSource)
Returns a foundset object for a specified datasource or server and tablename.{td}{tr}{tbody}{tbody}{tr}{td}[Boolean]{td}{td}[#hasRecords]\(foundset)
Returns true if the (related)foundset exists and has records.{td}{tr}{tbody}{tbody}{tr}{td}[Boolean]{td}{td}[#hasRecords]\(record, relationString)
Returns true if the (related)foundset exists and has records.{td}{tr}{tbody}{tbody}{tr}{td}[Boolean]{td}{td}[#saveData]\()
Saves all outstanding (unsaved) data and exits the current record.{td}{tr}{tbody}{table}\\ 

{table:id=property|class=servoy sDetail}{colgroup}{column:width=100%|padding=0px}{column}{colgroup}{tr:style=height: 30px;}{th:colspan=1}Property Details{th}{tr}{table}\\ 

{table:id=function|class=servoy sDetail}{colgroup}{column:width=100%|padding=0px}{column}{colgroup}{tr:style=height: 30px;}{th:colspan=1}Method Details{th}{tr}{tbody:id=getDataSource|class=node}{tr:id=name}{td}h6.getDataSource{td}{tr}{tr:id=sig}{td}{span:style=float: left; margin-right: 5px;}[String]{span}{span:id=iets|style=float: left; font-weight: bold;}getDataSource{span}{span:id=iets|style=float: left;}\(serverName, tableName){span}{td}{tr}{builder-show:permission=edit}{tr:id=des}{td}{sub-section:getDataSource_des|trigger=button|text=}{sub-section}{sub-section:getDataSource_des|trigger=none|class=sIndent}Replace with description{sub-section}{td}{tr}{builder-show}{builder-show:permission=edit}{tr:id=snc}{td}*Since*\\{sub-section:getDataSource_snc|trigger=button|text=}{sub-section}{sub-section:getDataSource_snc|trigger=none|class=sIndent} Replace with version info{sub-section}{td}{tr}{builder-show}{tr:id=prs}{td}*Parameters*\\{sub-section:getDataSource_prs|trigger=button|text=}{sub-section}{sub-section:getDataSource_prs|trigger=none|class=sIndent}\{[String]} serverName -- The name of the table's server.
\{[String]} tableName -- The table's name.
{sub-section}{td}{tr}{tr:id=ret}{td}*Returns*\\{sub-section:getDataSource_ret|trigger=button|text=}{sub-section}{sub-section:getDataSource_ret|trigger=none|class=sIndent}[String] -- The datasource of the given table/server.{sub-section}{td}{tr}{builder-show:permission=edit}{tr:id=see}{td}*Also see*\\{sub-section:getDataSource_see|trigger=button|text=}{sub-section}{div:class=sIndent}{sub-section:getDataSource_see|trigger=none}{sub-section}{div}{td}{tr}{builder-show}{builder-show:permission=edit}{tr:id=link}{td}*External links*\\{sub-section:getDataSource_link|trigger=button|text=}{sub-section}{div:class=sIndent}{sub-section:getDataSource_link|trigger=none}{sub-section}{div}{td}{tr}{builder-show}{tr:id=sam}{td}*Sample*\\{sub-section:getDataSource_sam|trigger=button|text=}{sub-section}{div:class=sIndent}{sub-section:getDataSource_sam|trigger=none}{code:language=javascript}
var datasource = databaseManager.getDataSource('example_data', 'categories');
{code}{sub-section}{div}{td}{tr}{tr:class=lastDetailRow}{td}{td}{tr}{tbody}{tbody:id=getDataSourceServerName|class=node}{tr:id=name}{td}h6.getDataSourceServerName{td}{tr}{tr:id=sig}{td}{span:style=float: left; margin-right: 5px;}[String]{span}{span:id=iets|style=float: left; font-weight: bold;}getDataSourceServerName{span}{span:id=iets|style=float: left;}\(dataSource){span}{td}{tr}{builder-show:permission=edit}{tr:id=des}{td}{sub-section:getDataSourceServerName_des|trigger=button|text=}{sub-section}{sub-section:getDataSourceServerName_des|trigger=none|class=sIndent}Replace with description{sub-section}{td}{tr}{builder-show}{builder-show:permission=edit}{tr:id=snc}{td}*Since*\\{sub-section:getDataSourceServerName_snc|trigger=button|text=}{sub-section}{sub-section:getDataSourceServerName_snc|trigger=none|class=sIndent} Replace with version info{sub-section}{td}{tr}{builder-show}{tr:id=prs}{td}*Parameters*\\{sub-section:getDataSourceServerName_prs|trigger=button|text=}{sub-section}{sub-section:getDataSourceServerName_prs|trigger=none|class=sIndent}\{[String]} dataSource -- The datasource string to get the server name from.
{sub-section}{td}{tr}{tr:id=ret}{td}*Returns*\\{sub-section:getDataSourceServerName_ret|trigger=button|text=}{sub-section}{sub-section:getDataSourceServerName_ret|trigger=none|class=sIndent}[String] -- The servername of the datasource.{sub-section}{td}{tr}{builder-show:permission=edit}{tr:id=see}{td}*Also see*\\{sub-section:getDataSourceServerName_see|trigger=button|text=}{sub-section}{div:class=sIndent}{sub-section:getDataSourceServerName_see|trigger=none}{sub-section}{div}{td}{tr}{builder-show}{builder-show:permission=edit}{tr:id=link}{td}*External links*\\{sub-section:getDataSourceServerName_link|trigger=button|text=}{sub-section}{div:class=sIndent}{sub-section:getDataSourceServerName_link|trigger=none}{sub-section}{div}{td}{tr}{builder-show}{tr:id=sam}{td}*Sample*\\{sub-section:getDataSourceServerName_sam|trigger=button|text=}{sub-section}{div:class=sIndent}{sub-section:getDataSourceServerName_sam|trigger=none}{code:language=javascript}
var servername = databaseManager.getDataSourceServerName(datasource);
{code}{sub-section}{div}{td}{tr}{tr:class=lastDetailRow}{td}{td}{tr}{tbody}{tbody:id=getDataSourceTableName|class=node}{tr:id=name}{td}h6.getDataSourceTableName{td}{tr}{tr:id=sig}{td}{span:style=float: left; margin-right: 5px;}[String]{span}{span:id=iets|style=float: left; font-weight: bold;}getDataSourceTableName{span}{span:id=iets|style=float: left;}\(dataSource){span}{td}{tr}{builder-show:permission=edit}{tr:id=des}{td}{sub-section:getDataSourceTableName_des|trigger=button|text=}{sub-section}{sub-section:getDataSourceTableName_des|trigger=none|class=sIndent}Replace with description{sub-section}{td}{tr}{builder-show}{builder-show:permission=edit}{tr:id=snc}{td}*Since*\\{sub-section:getDataSourceTableName_snc|trigger=button|text=}{sub-section}{sub-section:getDataSourceTableName_snc|trigger=none|class=sIndent} Replace with version info{sub-section}{td}{tr}{builder-show}{tr:id=prs}{td}*Parameters*\\{sub-section:getDataSourceTableName_prs|trigger=button|text=}{sub-section}{sub-section:getDataSourceTableName_prs|trigger=none|class=sIndent}\{[String]} dataSource -- The datasource string to get the tablename from.
{sub-section}{td}{tr}{tr:id=ret}{td}*Returns*\\{sub-section:getDataSourceTableName_ret|trigger=button|text=}{sub-section}{sub-section:getDataSourceTableName_ret|trigger=none|class=sIndent}[String] -- The tablename of the datasource.{sub-section}{td}{tr}{builder-show:permission=edit}{tr:id=see}{td}*Also see*\\{sub-section:getDataSourceTableName_see|trigger=button|text=}{sub-section}{div:class=sIndent}{sub-section:getDataSourceTableName_see|trigger=none}{sub-section}{div}{td}{tr}{builder-show}{builder-show:permission=edit}{tr:id=link}{td}*External links*\\{sub-section:getDataSourceTableName_link|trigger=button|text=}{sub-section}{div:class=sIndent}{sub-section:getDataSourceTableName_link|trigger=none}{sub-section}{div}{td}{tr}{builder-show}{tr:id=sam}{td}*Sample*\\{sub-section:getDataSourceTableName_sam|trigger=button|text=}{sub-section}{div:class=sIndent}{sub-section:getDataSourceTableName_sam|trigger=none}{code:language=javascript}
var theTableName = databaseManager.getDataSourceTableName(datasource);
{code}{sub-section}{div}{td}{tr}{tr:class=lastDetailRow}{td}{td}{tr}{tbody}{tbody:id=getFoundSet|class=node}{tr:id=name}{td}h6.getFoundSet{td}{tr}{tr:id=sig}{td}{span:style=float: left; margin-right: 5px;}[JSFoundSet]{span}{span:id=iets|style=float: left; font-weight: bold;}getFoundSet{span}{span:id=iets|style=float: left;}\(dataSource){span}{td}{tr}{builder-show:permission=edit}{tr:id=des}{td}{sub-section:getFoundSet_des|trigger=button|text=}{sub-section}{sub-section:getFoundSet_des|trigger=none|class=sIndent}Replace with description{sub-section}{td}{tr}{builder-show}{builder-show:permission=edit}{tr:id=snc}{td}*Since*\\{sub-section:getFoundSet_snc|trigger=button|text=}{sub-section}{sub-section:getFoundSet_snc|trigger=none|class=sIndent} Replace with version info{sub-section}{td}{tr}{builder-show}{tr:id=prs}{td}*Parameters*\\{sub-section:getFoundSet_prs|trigger=button|text=}{sub-section}{sub-section:getFoundSet_prs|trigger=none|class=sIndent}\{[String]} dataSource -- The datasource to get a JSFoundset for.
{sub-section}{td}{tr}{tr:id=ret}{td}*Returns*\\{sub-section:getFoundSet_ret|trigger=button|text=}{sub-section}{sub-section:getFoundSet_ret|trigger=none|class=sIndent}[JSFoundSet] -- A new JSFoundset for that datasource.{sub-section}{td}{tr}{builder-show:permission=edit}{tr:id=see}{td}*Also see*\\{sub-section:getFoundSet_see|trigger=button|text=}{sub-section}{div:class=sIndent}{sub-section:getFoundSet_see|trigger=none}{sub-section}{div}{td}{tr}{builder-show}{builder-show:permission=edit}{tr:id=link}{td}*External links*\\{sub-section:getFoundSet_link|trigger=button|text=}{sub-section}{div:class=sIndent}{sub-section:getFoundSet_link|trigger=none}{sub-section}{div}{td}{tr}{builder-show}{tr:id=sam}{td}*Sample*\\{sub-section:getFoundSet_sam|trigger=button|text=}{sub-section}{div:class=sIndent}{sub-section:getFoundSet_sam|trigger=none}{code:language=javascript}
// type the foundset returned from the call with JSDoc, fill in the right server/tablename
/** @type {JSFoundset<db:/servername/tablename>} */
var fs = databaseManager.getFoundSet(controller.getDataSource())
var ridx = fs.newRecord()
var record = fs.getRecord(ridx)
record.emp_name = 'John'
databaseManager.saveData()
{code}{sub-section}{div}{td}{tr}{tr:class=lastDetailRow}{td}{td}{tr}{tbody}{tbody:id=hasRecords-JSFoundSet|class=node}{tr:id=name}{td}h6.hasRecords{td}{tr}{tr:id=sig}{td}{span:style=float: left; margin-right: 5px;}[Boolean]{span}{span:id=iets|style=float: left; font-weight: bold;}hasRecords{span}{span:id=iets|style=float: left;}\(foundset){span}{td}{tr}{builder-show:permission=edit}{tr:id=des}{td}{sub-section:hasRecords-JSFoundSet_des|trigger=button|text=}{sub-section}{sub-section:hasRecords-JSFoundSet_des|trigger=none|class=sIndent}Replace with description{sub-section}{td}{tr}{builder-show}{builder-show:permission=edit}{tr:id=snc}{td}*Since*\\{sub-section:hasRecords-JSFoundSet_snc|trigger=button|text=}{sub-section}{sub-section:hasRecords-JSFoundSet_snc|trigger=none|class=sIndent} Replace with version info{sub-section}{td}{tr}{builder-show}{tr:id=prs}{td}*Parameters*\\{sub-section:hasRecords-JSFoundSet_prs|trigger=button|text=}{sub-section}{sub-section:hasRecords-JSFoundSet_prs|trigger=none|class=sIndent}\{[JSFoundSet]} foundset -- A JSFoundset to test.
{sub-section}{td}{tr}{tr:id=ret}{td}*Returns*\\{sub-section:hasRecords-JSFoundSet_ret|trigger=button|text=}{sub-section}{sub-section:hasRecords-JSFoundSet_ret|trigger=none|class=sIndent}[Boolean] -- true if the foundset/relation has records.{sub-section}{td}{tr}{builder-show:permission=edit}{tr:id=see}{td}*Also see*\\{sub-section:hasRecords-JSFoundSet_see|trigger=button|text=}{sub-section}{div:class=sIndent}{sub-section:hasRecords-JSFoundSet_see|trigger=none}{sub-section}{div}{td}{tr}{builder-show}{builder-show:permission=edit}{tr:id=link}{td}*External links*\\{sub-section:hasRecords-JSFoundSet_link|trigger=button|text=}{sub-section}{div:class=sIndent}{sub-section:hasRecords-JSFoundSet_link|trigger=none}{sub-section}{div}{td}{tr}{builder-show}{tr:id=sam}{td}*Sample*\\{sub-section:hasRecords-JSFoundSet_sam|trigger=button|text=}{sub-section}{div:class=sIndent}{sub-section:hasRecords-JSFoundSet_sam|trigger=none}{code:language=javascript}
if (elements.customer_id.hasRecords(orders_to_orderitems))
{
	//do work on relatedFoundSet
}
//if (elements.customer_id.hasRecords(foundset.getSelectedRecord(),'orders_to_orderitems.orderitems_to_products'))
//{
//	//do work on deeper relatedFoundSet
//}
{code}{sub-section}{div}{td}{tr}{tr:class=lastDetailRow}{td}{td}{tr}{tbody}{tbody:id=hasRecords-JSRecord_String|class=node}{tr:id=name}{td}h6.hasRecords{td}{tr}{tr:id=sig}{td}{span:style=float: left; margin-right: 5px;}[Boolean]{span}{span:id=iets|style=float: left; font-weight: bold;}hasRecords{span}{span:id=iets|style=float: left;}\(record, relationString){span}{td}{tr}{builder-show:permission=edit}{tr:id=des}{td}{sub-section:hasRecords-JSRecord_String_des|trigger=button|text=}{sub-section}{sub-section:hasRecords-JSRecord_String_des|trigger=none|class=sIndent}Replace with description{sub-section}{td}{tr}{builder-show}{builder-show:permission=edit}{tr:id=snc}{td}*Since*\\{sub-section:hasRecords-JSRecord_String_snc|trigger=button|text=}{sub-section}{sub-section:hasRecords-JSRecord_String_snc|trigger=none|class=sIndent} Replace with version info{sub-section}{td}{tr}{builder-show}{tr:id=prs}{td}*Parameters*\\{sub-section:hasRecords-JSRecord_String_prs|trigger=button|text=}{sub-section}{sub-section:hasRecords-JSRecord_String_prs|trigger=none|class=sIndent}\{[JSRecord]} record -- A JSRecord to test.
\{[String]} relationString -- The relation name.
{sub-section}{td}{tr}{tr:id=ret}{td}*Returns*\\{sub-section:hasRecords-JSRecord_String_ret|trigger=button|text=}{sub-section}{sub-section:hasRecords-JSRecord_String_ret|trigger=none|class=sIndent}[Boolean] -- true if the foundset/relation has records.{sub-section}{td}{tr}{builder-show:permission=edit}{tr:id=see}{td}*Also see*\\{sub-section:hasRecords-JSRecord_String_see|trigger=button|text=}{sub-section}{div:class=sIndent}{sub-section:hasRecords-JSRecord_String_see|trigger=none}{sub-section}{div}{td}{tr}{builder-show}{builder-show:permission=edit}{tr:id=link}{td}*External links*\\{sub-section:hasRecords-JSRecord_String_link|trigger=button|text=}{sub-section}{div:class=sIndent}{sub-section:hasRecords-JSRecord_String_link|trigger=none}{sub-section}{div}{td}{tr}{builder-show}{tr:id=sam}{td}*Sample*\\{sub-section:hasRecords-JSRecord_String_sam|trigger=button|text=}{sub-section}{div:class=sIndent}{sub-section:hasRecords-JSRecord_String_sam|trigger=none}{code:language=javascript}
if (elements.customer_id.hasRecords(orders_to_orderitems))
{
	//do work on relatedFoundSet
}
//if (elements.customer_id.hasRecords(foundset.getSelectedRecord(),'orders_to_orderitems.orderitems_to_products'))
//{
//	//do work on deeper relatedFoundSet
//}
{code}{sub-section}{div}{td}{tr}{tr:class=lastDetailRow}{td}{td}{tr}{tbody}{tbody:id=saveData|class=node}{tr:id=name}{td}h6.saveData{td}{tr}{tr:id=sig}{td}{span:style=float: left; margin-right: 5px;}[Boolean]{span}{span:id=iets|style=float: left; font-weight: bold;}saveData{span}{span:id=iets|style=float: left;}\(){span}{td}{tr}{builder-show:permission=edit}{tr:id=des}{td}{sub-section:saveData_des|trigger=button|text=}{sub-section}{sub-section:saveData_des|trigger=none|class=sIndent}Replace with description{sub-section}{td}{tr}{builder-show}{builder-show:permission=edit}{tr:id=snc}{td}*Since*\\{sub-section:saveData_snc|trigger=button|text=}{sub-section}{sub-section:saveData_snc|trigger=none|class=sIndent} Replace with version info{sub-section}{td}{tr}{builder-show}{builder-show:permission=edit}{tr:id=prs}{td}*Parameters*\\{sub-section:saveData_prs|trigger=button|text=}{sub-section}{sub-section:saveData_prs|trigger=none|class=sIndent}{sub-section}{td}{tr}{builder-show}{tr:id=ret}{td}*Returns*\\{sub-section:saveData_ret|trigger=button|text=}{sub-section}{sub-section:saveData_ret|trigger=none|class=sIndent}[Boolean] -- true if the save was done without an error.{sub-section}{td}{tr}{builder-show:permission=edit}{tr:id=see}{td}*Also see*\\{sub-section:saveData_see|trigger=button|text=}{sub-section}{div:class=sIndent}{sub-section:saveData_see|trigger=none}{sub-section}{div}{td}{tr}{builder-show}{builder-show:permission=edit}{tr:id=link}{td}*External links*\\{sub-section:saveData_link|trigger=button|text=}{sub-section}{div:class=sIndent}{sub-section:saveData_link|trigger=none}{sub-section}{div}{td}{tr}{builder-show}{tr:id=sam}{td}*Sample*\\{sub-section:saveData_sam|trigger=button|text=}{sub-section}{div:class=sIndent}{sub-section:saveData_sam|trigger=none}{code:language=javascript}
databaseManager.saveData();
//databaseManager.saveData(foundset.getRecord(1));//save specific record
//databaseManager.saveData(foundset);//save all records from foundset

// when creating many records in a loop do a batch save on an interval as every 10 records (to save on memory and roundtrips)
// for (var recordIndex = 1; recordIndex <= 5000; recordIndex++) 
// {
//		foundset.newRecord();
//		someColumn = recordIndex;
//		anotherColumn = "Index is: " + recordIndex;
//		if (recordIndex % 10 == 0) databaseManager.saveData();
// }
{code}{sub-section}{div}{td}{tr}{tr:class=lastDetailRow}{td}{td}{tr}{tbody}{table}