The billing sample is the main module of this set of examples:.
file: exemple.billing.html
This sample uses 2 files:
· advanced.XML.html, for the "Select customer" function, which is the sample of the XML for <SCRIPT> page and is also used in the include DFrameAPI page.
file: advanced.XML.html
· billing/articles.html for the "Select articles" function.
file: billing/articles.html
The billing.html module is included, with advance.XML.html and articles.html in one global example:
file: exemple.desktop.html
If you directly run the advanced.XML.html or billing/articles.html, without calling them with billing.html, the dFrame showing the detail of items will not have the "Select" button: The modules are customized when included in billing.html.
There is 2 ways to customize a module:
1 - Test a flag:
The customization code is stored in the module and is only launched is a flag is set.
The getParentDFrame function will return a handle on the parent of a DFrame (or null if there is no parent) and a value of the parent can then be tested:
This method is used to customize dFrameDetail of advanced.XML.html ("Select a Customer" function):
In billing.html:
dFrameCustomer.setURL('./advanced.XML.html')
dFrameCustomer.addSelectButton = true
In advanced.XML.html:
//baseAll.getParentDFrame = the DFrame which contains advanced.XML.html
if (baseAll.getParentDFrame() != null && baseAll.getParentDFrame().addSelectButton) {
dFrameDetail.addBar().addButton('Select', 'selectContact()')
}
It the same way it is possible to use the mainPage keyword and test a value of the window object which contains the dFrame, as shown in the inheritance paragraph.
2 - Use the event handling
The customization code is stored in the file which loads modules and is launched when an event is handled.
This method is used to customize dFrameDetail of billing/articles.html ("Select an Article" function):
In billing.html:
dFrameArticle.onEvent = function(e) {
if (e.action == 'preCreate' && e.dFrame.bubbleKey == 'dFrameDetail') {
var target = e.dFrame
var bar = target.addBar()
bar.addButton('Select', 'selectArticle()')
e.cancelBubble = true
}
}
In billing/articles.html:
dFrameDetail.bubbleKey = 'dFrameDetail'
Each loaded module can inherit values fromits parent.
This is easily done with the mainPage keyword.
In the articles.html, customer.html and billing.html modules the mainPage value is used to get the Style used by the module from its parent:
//Style
if (window.parent
&& window.parent != self && window.parent.getDFrameValues) {
//Setup
mainPage
window.parent.getDFrameValues()
dFrameStyle =
mainPage.dFrameStyle
} else DFrameAPI.include('styles/notes/styleNotes.js')
Used standalone the articles.html and customer.html modules will use the styleBlue.js file definition but loaded in billing.html they will use the style of this module.
Used standalone billing.html will use the styleNotes.js file definition but loaded in desktop.html it will use the style of this module, ie styleWindows, and transmit this style to articles.html and customer.html.
Remark
In some very rare circumstances using complicated code it can happend Netscape crashes. In this case inserting a
status = ''
statement
in the code causing the crash can prevent it.
We had to do so in the displayArticlesAsAList function of the /billing/articles.html file called by billing.html.