{div:style=display:none}
DO NOT EDIT THE CONTENT OF THIS PAGE DIRECTLY (EXCEPT INSIDE THE DIV BELOW WITH ID=DESCRIPTION), UNLESS YOU KNOW WHAT YOU'RE DOING.
		THE STRUCTURE OF THE CONTENT IS VITAL IN BEING ABLE TO AUTO UPDATE THE CONTENT THROUGH THE DOC GENERATOR.\\		\\		Enter additional information related to this 'class' inside the \{div} macro with 'id=description'{div}
{div:id=description}{div}\\ 

{table:id=|class=servoy sSummary}{colgroup}{column:width=80px|padding=0px}{column}{column}{column}{colgroup}{tr:style=height: 30px;}{th:colspan=2}Constants Summary{th}{tr}{tbody}{tr}{td}[Number]{td}{td}[#BODY]
Constant use for specifying the type of form parts.{td}{tr}{tbody}{tbody}{tr}{td}[Number]{td}{td}[#FOOTER]
Constant use for specifying the type of form parts.{td}{tr}{tbody}{tbody}{tr}{td}[Number]{td}{td}[#HEADER]
Constant use for specifying the type of form parts.{td}{tr}{tbody}{tbody}{tr}{td}[Number]{td}{td}[#LEADING_GRAND_SUMMARY]
Constant use for specifying the type of form parts.{td}{tr}{tbody}{tbody}{tr}{td}[Number]{td}{td}[#LEADING_SUBSUMMARY]
Constant use for specifying the type of form parts.{td}{tr}{tbody}{tbody}{tr}{td}[Number]{td}{td}[#TITLE_FOOTER]
Constant use for specifying the type of form parts.{td}{tr}{tbody}{tbody}{tr}{td}[Number]{td}{td}[#TITLE_HEADER]
Constant use for specifying the type of form parts.{td}{tr}{tbody}{tbody}{tr}{td}[Number]{td}{td}[#TRAILING_GRAND_SUMMARY]
Constant use for specifying the type of form parts.{td}{tr}{tbody}{tbody}{tr}{td}[Number]{td}{td}[#TRAILING_SUBSUMMARY]
Constant use for specifying the type of form parts.{td}{tr}{tbody}{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}{tbody}{tr}{td}[Boolean]{td}{td}[#allowBreakAcrossPageBounds]
When set, the remainder of a selected part that does not fit on the page currently 
being printed, will not be transported to the next page \- it will break where the page 
ends and continue on the next page.{td}{tr}{tbody}{tbody}{tr}{td}[String]{td}{td}[#background]
The background color of the form part.{td}{tr}{tbody}{tbody}{tr}{td}[Boolean]{td}{td}[#discardRemainderAfterBreak]
When set, the remainder of a selected part that is broken due to the page 
ending will not be printed on the next page \- it will be discarded.{td}{tr}{tbody}{tbody}{tr}{td}[String]{td}{td}[#groupbyDataProviderIDs]
For Leading Subsummary or Trailing Subsummary parts, one or more
dataproviders can be added as Break (GroupBy) dataproviders.{td}{tr}{tbody}{tbody}{tr}{td}[Number]{td}{td}[#height]
The height of a selected part; specified in pixels.{td}{tr}{tbody}{tbody}{tr}{td}[Number]{td}{td}[#pageBreakAfterOccurrence]
A page break will be inserted after a specified number of occurences of a selected part.{td}{tr}{tbody}{tbody}{tr}{td}[Boolean]{td}{td}[#pageBreakBefore]
When set, a page break will be inserted before each occurrence of a selected part.{td}{tr}{tbody}{tbody}{tr}{td}[Boolean]{td}{td}[#restartPageNumber]
When set, page numbering will be restarted after each occurrence of a selected part.{td}{tr}{tbody}{tbody}{tr}{td}[Boolean]{td}{td}[#sinkWhenLast]
When set, the last part on a page (such as a Trailing Grand Summary part) will 
"sink" to the lowest part of the page when there is free space.{td}{tr}{tbody}{tbody}{tr}{td}[String]{td}{td}[#styleClass]
The Cascading Style Sheet (CSS) class name applied to the part.{td}{tr}{tbody}{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}[Number]{td}{td}[#getPartType]\()
The type of this part.{td}{tr}{tbody}{tbody}{tr}{td}[Number]{td}{td}[#getPartYOffset]\()
The Y offset of the part on the form, this will include all the super forms parts if this form extends a form.{td}{tr}{tbody}{tbody}{tr}{td}[UUID]{td}{td}[#getUUID]\()
Returns the UUID of this component.{td}{tr}{tbody}{table}\\ 

{table:id=constant|class=servoy sDetail}{colgroup}{column:width=100%|padding=0px}{column}{colgroup}{tr:style=height: 30px;}{th:colspan=1}Constants Details{th}{tr}{tbody:id=BODY}{tr:id=name}{td}h6.BODY{td}{tr}{tr:id=ret}{td}*Returns*\\{div:class=sIndent}[Number]{div}{td}{tr}{tr:id=sam}{td}*Sample*\\{div:class=sIndent}{code:language=javascript}
var body = form.newPart(JSPart.BODY, 320);
{code}{div}{td}{tr}{tr:class=lastDetailRow}{td}{td}{tr}{tbody}{tbody:id=FOOTER}{tr:id=name}{td}h6.FOOTER{td}{tr}{tr:id=ret}{td}*Returns*\\{div:class=sIndent}[Number]{div}{td}{tr}{tr:id=sam}{td}*Sample*\\{div:class=sIndent}{code:language=javascript}
var footer = form.newPart(JSPart.FOOTER, 440);
{code}{div}{td}{tr}{tr:class=lastDetailRow}{td}{td}{tr}{tbody}{tbody:id=HEADER}{tr:id=name}{td}h6.HEADER{td}{tr}{tr:id=ret}{td}*Returns*\\{div:class=sIndent}[Number]{div}{td}{tr}{tr:id=sam}{td}*Sample*\\{div:class=sIndent}{code:language=javascript}
var header = form.newPart(JSPart.HEADER, 80);
{code}{div}{td}{tr}{tr:class=lastDetailRow}{td}{td}{tr}{tbody}{tbody:id=LEADING_GRAND_SUMMARY}{tr:id=name}{td}h6.LEADING_GRAND_SUMMARY{td}{tr}{tr:id=ret}{td}*Returns*\\{div:class=sIndent}[Number]{div}{td}{tr}{tr:id=sam}{td}*Sample*\\{div:class=sIndent}{code:language=javascript}
var leadingGrandSummary = form.newPart(JSPart.LEADING_GRAND_SUMMARY, 120);
{code}{div}{td}{tr}{tr:class=lastDetailRow}{td}{td}{tr}{tbody}{tbody:id=LEADING_SUBSUMMARY}{tr:id=name}{td}h6.LEADING_SUBSUMMARY{td}{tr}{tr:id=ret}{td}*Returns*\\{div:class=sIndent}[Number]{div}{td}{tr}{tr:id=sam}{td}*Sample*\\{div:class=sIndent}{code:language=javascript}
var leadingSubsummary = form.newPart(JSPart.LEADING_SUBSUMMARY, 160);
{code}{div}{td}{tr}{tr:class=lastDetailRow}{td}{td}{tr}{tbody}{tbody:id=TITLE_FOOTER}{tr:id=name}{td}h6.TITLE_FOOTER{td}{tr}{tr:id=ret}{td}*Returns*\\{div:class=sIndent}[Number]{div}{td}{tr}{tr:id=sam}{td}*Sample*\\{div:class=sIndent}{code:language=javascript}
var titleFooter = form.newPart(JSPart.TITLE_FOOTER, 500);
{code}{div}{td}{tr}{tr:class=lastDetailRow}{td}{td}{tr}{tbody}{tbody:id=TITLE_HEADER}{tr:id=name}{td}h6.TITLE_HEADER{td}{tr}{tr:id=ret}{td}*Returns*\\{div:class=sIndent}[Number]{div}{td}{tr}{tr:id=sam}{td}*Sample*\\{div:class=sIndent}{code:language=javascript}
var titleHeader = form.newPart(JSPart.TITLE_HEADER, 40);
{code}{div}{td}{tr}{tr:class=lastDetailRow}{td}{td}{tr}{tbody}{tbody:id=TRAILING_GRAND_SUMMARY}{tr:id=name}{td}h6.TRAILING_GRAND_SUMMARY{td}{tr}{tr:id=ret}{td}*Returns*\\{div:class=sIndent}[Number]{div}{td}{tr}{tr:id=sam}{td}*Sample*\\{div:class=sIndent}{code:language=javascript}
var trailingGrandSummary = form.newPart(JSPart.TRAILING_GRAND_SUMMARY, 400);
{code}{div}{td}{tr}{tr:class=lastDetailRow}{td}{td}{tr}{tbody}{tbody:id=TRAILING_SUBSUMMARY}{tr:id=name}{td}h6.TRAILING_SUBSUMMARY{td}{tr}{tr:id=ret}{td}*Returns*\\{div:class=sIndent}[Number]{div}{td}{tr}{tr:id=sam}{td}*Sample*\\{div:class=sIndent}{code:language=javascript}
var trailingSubsummary = form.newPart(JSPart.TRAILING_SUBSUMMARY, 360);
{code}{div}{td}{tr}{tr:class=lastDetailRow}{td}{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}{tbody:id=allowBreakAcrossPageBounds}{tr:id=name}{td}h6.allowBreakAcrossPageBounds{td}{tr}{tr:id=ret}{td}*Returns*\\{div:class=sIndent}[Boolean]{div}{td}{tr}{tr:id=sam}{td}*Sample*\\{div:class=sIndent}{code:language=javascript}
var body = form.newPart(JSPart.BODY, 320);
body.allowBreakAcrossPageBounds = true;
body.discardRemainderAfterBreak = true;
{code}{div}{td}{tr}{tr:class=lastDetailRow}{td}{td}{tr}{tbody}{tbody:id=background}{tr:id=name}{td}h6.background{td}{tr}{tr:id=ret}{td}*Returns*\\{div:class=sIndent}[String]{div}{td}{tr}{tr:id=sam}{td}*Sample*\\{div:class=sIndent}{code:language=javascript}
var body = form.newPart(JSPart.BODY, 320);
body.background = 'green';
{code}{div}{td}{tr}{tr:class=lastDetailRow}{td}{td}{tr}{tbody}{tbody:id=discardRemainderAfterBreak}{tr:id=name}{td}h6.discardRemainderAfterBreak{td}{tr}{tr:id=ret}{td}*Returns*\\{div:class=sIndent}[Boolean]{div}{td}{tr}{tr:id=sam}{td}*Sample*\\{div:class=sIndent}{code:language=javascript}
var body = form.newPart(JSPart.BODY, 320);
body.allowBreakAcrossPageBounds = true;
body.discardRemainderAfterBreak = true;
{code}{div}{td}{tr}{tr:class=lastDetailRow}{td}{td}{tr}{tbody}{tbody:id=groupbyDataProviderIDs}{tr:id=name}{td}h6.groupbyDataProviderIDs{td}{tr}{tr:id=ret}{td}*Returns*\\{div:class=sIndent}[String]{div}{td}{tr}{tr:id=sam}{td}*Sample*\\{div:class=sIndent}{code:language=javascript}
var leadingSubsummary = form.newPart(JSPart.LEADING_SUBSUMMARY, 160);
leadingSubsummary.groupbyDataProviderIDs = 'my_table_text';
{code}{div}{td}{tr}{tr:class=lastDetailRow}{td}{td}{tr}{tbody}{tbody:id=height}{tr:id=name}{td}h6.height{td}{tr}{tr:id=ret}{td}*Returns*\\{div:class=sIndent}[Number]{div}{td}{tr}{tr:id=sam}{td}*Sample*\\{div:class=sIndent}{code:language=javascript}
var part = form.newPart(JSPart.HEADER, 100);
part.height = 200;
{code}{div}{td}{tr}{tr:class=lastDetailRow}{td}{td}{tr}{tbody}{tbody:id=pageBreakAfterOccurrence}{tr:id=name}{td}h6.pageBreakAfterOccurrence{td}{tr}{tr:id=ret}{td}*Returns*\\{div:class=sIndent}[Number]{div}{td}{tr}{tr:id=sam}{td}*Sample*\\{div:class=sIndent}{code:language=javascript}
var body = form.newPart(JSPart.BODY, 320);
body.pageBreakAfterOccurrence = 2;
{code}{div}{td}{tr}{tr:class=lastDetailRow}{td}{td}{tr}{tbody}{tbody:id=pageBreakBefore}{tr:id=name}{td}h6.pageBreakBefore{td}{tr}{tr:id=ret}{td}*Returns*\\{div:class=sIndent}[Boolean]{div}{td}{tr}{tr:id=sam}{td}*Sample*\\{div:class=sIndent}{code:language=javascript}
var leadingSubsummary = form.newPart(JSPart.LEADING_SUBSUMMARY, 160);
leadingSubsummary.groupbyDataProviderIDs = 'my_table_text';
leadingSubsummary.pageBreakBefore = true;
{code}{div}{td}{tr}{tr:class=lastDetailRow}{td}{td}{tr}{tbody}{tbody:id=restartPageNumber}{tr:id=name}{td}h6.restartPageNumber{td}{tr}{tr:id=ret}{td}*Returns*\\{div:class=sIndent}[Boolean]{div}{td}{tr}{tr:id=sam}{td}*Sample*\\{div:class=sIndent}{code:language=javascript}
var trailingSubsummary = form.newPart(JSPart.TRAILING_SUBSUMMARY, 360);
trailingSubsummary.groupbyDataProviderIDs = 'my_table_text';
trailingSubsummary.restartPageNumber = true;
{code}{div}{td}{tr}{tr:class=lastDetailRow}{td}{td}{tr}{tbody}{tbody:id=sinkWhenLast}{tr:id=name}{td}h6.sinkWhenLast{td}{tr}{tr:id=ret}{td}*Returns*\\{div:class=sIndent}[Boolean]{div}{td}{tr}{tr:id=sam}{td}*Sample*\\{div:class=sIndent}{code:language=javascript}
var trailingGrandSummary = form.newPart(JSPart.TRAILING_GRAND_SUMMARY, 400);
trailingGrandSummary.sinkWhenLast = true;
{code}{div}{td}{tr}{tr:class=lastDetailRow}{td}{td}{tr}{tbody}{tbody:id=styleClass}{tr:id=name}{td}h6.styleClass{td}{tr}{tr:id=ret}{td}*Returns*\\{div:class=sIndent}[String]{div}{td}{tr}{tr:id=sam}{td}*Sample*\\{div:class=sIndent}{code:language=javascript}
var body = form.newPart(JSPart.BODY, 320);
body.styleClass = 'myBody';
{code}{div}{td}{tr}{tr:class=lastDetailRow}{td}{td}{tr}{tbody}{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=getPartType}{tr:id=name}{td}h6.getPartType{td}{tr}{tr:id=sig}{td}{span:style=margin-right: 5px;}[Number]{span}{span:style=font-weight: bold;}getPartType{span}{span}\(){span}{td}{tr}{tr:id=ret}{td}*Returns*\\{div:class=sIndent}[Number] -- A number representing the type of the form part.{div}{td}{tr}{tr:id=sam}{td}*Sample*\\{div:class=sIndent}{code:language=javascript}
var allParts = form.getParts()
for (var i=0; i<allParts.length; i++) {
	if (allParts[i].getPartType() == JSPart.BODY)
		application.output('body Y offset: ' + allParts[i].getPartYOffset());
}
{code}{div}{td}{tr}{tr:class=lastDetailRow}{td}{td}{tr}{tbody}{tbody:id=getPartYOffset}{tr:id=name}{td}h6.getPartYOffset{td}{tr}{tr:id=sig}{td}{span:style=margin-right: 5px;}[Number]{span}{span:style=font-weight: bold;}getPartYOffset{span}{span}\(){span}{td}{tr}{tr:id=ret}{td}*Returns*\\{div:class=sIndent}[Number] -- A number holding the Y offset of the form part.{div}{td}{tr}{tr:id=sam}{td}*Sample*\\{div:class=sIndent}{code:language=javascript}
var allParts = form.getParts()
for (var i=0; i<allParts.length; i++) {
	if (allParts[i].getPartType() == JSPart.BODY)
		application.output('body Y offset: ' + allParts[i].getPartYOffset());
}
{code}{div}{td}{tr}{tr:class=lastDetailRow}{td}{td}{tr}{tbody}{tbody:id=getUUID}{tr:id=name}{td}h6.getUUID{td}{tr}{tr:id=sig}{td}{span:style=margin-right: 5px;}[UUID]{span}{span:style=font-weight: bold;}getUUID{span}{span}\(){span}{td}{tr}{tr:id=ret}{td}*Returns*\\{div:class=sIndent}[UUID]{div}{td}{tr}{tr:id=sam}{td}*Sample*\\{div:class=sIndent}{code:language=javascript}
var button_uuid = solutionModel.getForm("my_form").getButton("my_button").getUUID();
application.output(button_uuid.toString());
{code}{div}{td}{tr}{tr:class=lastDetailRow}{td}{td}{tr}{tbody}{table}