// --------------------------------------------------------------
// create a sub for for the sales
// for this, first create a sub form and bind it to the SALES table
XIndexContainer xSalesForm = m_document.createSubForm( m_xMasterForm, "Sales" );
XPropertySet xSalesFormProps = UNO.queryPropertySet( xSalesForm );
xSalesFormProps.setPropertyValue( "DataSourceName", m_database.getDocumentURL() );
xSalesFormProps.setPropertyValue( "CommandType", new Integer( CommandType.COMMAND ) );
String sCommand = new String( "SELECT * FROM " );
sCommand += s_tableNameSales;
sCommand += " WHERE " + s_tableNameSales + ".SNR = :salesmen";
xSalesFormProps.setPropertyValue( "Command", sCommand );
// the master-details connection
String[] aMasterFields = new String[] { "SNR" }; // the field in the master form
String[] aDetailFields = new String[] { "salesmen" }; // the name in the detail form
xSalesFormProps.setPropertyValue( "MasterFields", aMasterFields );
xSalesFormProps.setPropertyValue( "DetailFields", aDetailFields );
// the create thr grid model
XPropertySet xSalesGridModel = m_formLayer.createControlAndShape( "GridControl", 2, 80, 162, 40, xSalesForm );
xSalesGridModel.setPropertyValue( "Name", "SalesTable" );
XPropertySet xKeyColumn = createGridColumn( xSalesGridModel, "NumericField", "SALENR", 12 );
XPropertySet xCustomerColumn = createGridColumn( xSalesGridModel, "ListBox", "COS_NR", 40 );
XPropertySet xSalesNameColumn = createGridColumn( xSalesGridModel, "TextField", "NAME", 25 );
createGridColumn( xSalesGridModel, "DateField", "SALEDATE", 24 );
createGridColumn( xSalesGridModel, "CurrencyField", "PRICE", 16 );
// please note that a better solution for the SALEDATE field would have been to use
// a FormattedField. But we want to demonstrate some effects with DateFields here ...
m_aSalesNameValidator = new GridFieldValidator( m_xCtx, xSalesNameColumn );
m_aSalesNameValidator.enableColumnWatch( m_bAllowEmptySales );
xKeyColumn.setPropertyValue( "DecimalAccuracy", new Short( (short)0 ) );
// init the list box which is for choosing the customer a sale belongs to
xCustomerColumn.setPropertyValue( "BoundColumn", new Short( (short)1 ) );
xCustomerColumn.setPropertyValue( "Label", "Customer" );
xCustomerColumn.setPropertyValue( "ListSourceType", ListSourceType.SQL );
String sListSource = "SELECT LASTNAME, COS_NR FROM ";
sListSource += s_tableNameCustomers;
String[] aListSource = new String[] { sListSource };
xCustomerColumn.setPropertyValue( "ListSource", aListSource );
// We want to demonstrate how to reset fields to NULL, we do this with the SALEDATE field
// above. For this, we add as reset listener to the form
XReset xFormReset = UNO.queryReset( xSalesForm );
xFormReset.addResetListener( this );
// --------------------------------------------------------------
// the option for filtering the sales form
XIndexContainer xSalesFilterForm = m_document.createSiblingForm( xSalesForm, "SalesFilter" );
XPropertySet xSFFProps = UNO.queryPropertySet( xSalesFilterForm );
XPropertySet xLabel = m_formLayer.createControlAndShape( "FixedText", 2, 125, 35, 6, xSalesFilterForm );
xLabel.setPropertyValue( "Label", "show only sales since" );
xLabel.setPropertyValue( "Name", "FilterLabel" );
XPropertySet xFilterSelection = m_formLayer.createControlAndShape( "ListBox", 40, 125, 59, 6, xSalesFilterForm );
xFilterSelection.setPropertyValue( "Name", "FilterList" );
xFilterSelection.setPropertyValue( "LabelControl", xLabel );
XPropertySet xManualFilter = m_formLayer.createControlAndShape( "DateField", 104, 125, 30, 6, xSalesFilterForm );
xManualFilter.setPropertyValue( "Name", "ManualFilter" );
XPropertySet xApplyFilter = m_formLayer.createControlAndShape( "CommandButton", 139, 125, 25, 6, xSalesFilterForm );
xApplyFilter.setPropertyValue( "Name", "ApplyFilter" );
xApplyFilter.setPropertyValue( "DefaultButton", new Boolean( true ) );
m_aSalesFilter = new SalesFilter( m_document, xSalesFormProps, xFilterSelection,
xManualFilter, xApplyFilter );
// --------------------------------------------------------------
// the options section
// for this, we need a form which is a sibling of our master form (don't want to interfere
// the controls which represent options only with the controls which are used for data access)
XIndexContainer xOptionsForm = m_document.createSiblingForm( m_xMasterForm, "Options" );
xLabel = m_formLayer.createControlAndShape( "GroupBox", 98, 0, 66, 62, xOptionsForm );
xLabel.setPropertyValue( "Name", "Options" );
xLabel.setPropertyValue( "Label", "Options" );