I'm refreshing my javascript and looking at creating some objects to do some work for me.
The code that I have written works in an HTML page. Works in an HTML field of of an Innovator Form. Fails miserably as a Client Side method attached to the OnClick event for a button in an Innovator form.
<html>
<body>
<script type="text/javascript">
function bom() {
this.m_bomlist = new Array();
}
bom.prototype.addBomItem = function fnAddBomItem(itemNumber, description, qty)
{
var tmpBomItem = new bomItem(itemNumber, description, qty );
this.m_bomlist.push( tmpBomItem );
};
bom.prototype.getBomItem = function getBomItem(itemNumber)
for (var j=0; j < this.m_bomlist.length; j++)
if ( this.m_bomlist[j].isItemNumber(itemNumber) )
return this.m_bomlist[j];
return null;
function bomItem(itemNumber, description, qty) {
this.m_itemNumber = itemNumber;
this.m_description = description;
this.m_qty = qty;
bomItem.prototype.getItemNumber = function fnGetItemNumber()
{ return this.m_itemNumber; };
bomItem.prototype.getDescription = function getDescription()
{ return this.m_description; };
bomItem.prototype.getQty = function getQty()
{ return this.m_qty; };
bomItem.prototype.isItemNumber = function isItemNumber(itemNumber)
{ return (this.m_itemNumber == itemNumber); };
bomItem.prototype.isQty = function isQty(qty)
{ return (this.m_qty == qty); };
var myBOM = new bom();
myBOM.addBomItem( "1234", "an item description", 5);
myBOM.addBomItem("1235","another description",3);
myBOM.addBomItem("1236","more interesting descriptions",1);
var rBom = myBOM.getBomItem("1234");
if (rBom === null)
document.write("BOM getItem failed");
document.write('<BR>');
else
document.write( "myBOM.getBomItem Success " + rBom.getItemNumber() + " " + rBom.getDescription() + " " + rBom.getQty());
for (var i=0; i<myBOM.m_bomlist.length;i++)
document.write("Element " + i + " " + myBOM.m_bomlist[i].getItemNumber() + " " + myBOM.m_bomlist[i].getDescription() + " " + myBOM.m_bomlist[i].getQty());
var r1Bom = myBOM.getBomItem("4321");
if (r1Bom === null)
document.write(r1Bom.getItemNumber() + " " + r1Bom.getDescription() + " " + r1Bom.getQty());
var myBOMItem = new bomItem( "1222", "a useful description", 5);
document.write( "myBOMItem readback " + myBOMItem.getItemNumber() + " " + myBOMItem.getDescription() + " " + myBOMItem.getQty() );
document.write("Rewrite of getBomItem object " + rBom.getItemNumber() + " " + rBom.getDescription() + " " + rBom.getQty());
document.write("End");
</script>
</body>
</html>
return this.m_itemNumber;
return this.m_description;
return this.m_qty;
return (this.m_itemNumber == itemNumber);
return (this.m_qty == qty);
top.aras.AlertError("BOM getItem failed");
top.aras.AlertSuccess(rBom.getItemNumber() + " " + rBom.getDescription() + " " + rBom.getQty());
top.aras.AlertSuccess(myBOM.m_bomlist[i].getItemNumber() + " " + myBOM.m_bomlist[i].getDescription() + " " + myBOM.m_bomlist[i].getQty());
top.aras.AlertSuccess(r1Bom.getItemNumber() + " " + r1Bom.getDescription() + " " + r1Bom.getQty());
top.aras.AlertSuccess( myBOMItem.getItemNumber() + " " + myBOMItem.getDescription() + " " + myBOMItem.getQty() );
top.aras.AlertSuccess("End");
return;
I would be overjoyed if someone could tell me why the code doesn't work as the onClick button event but works perfectly in an HTML window or HTML field.
Regards,
Brian.
Don't worry. I worked it out.
The "this" item in the object/function definitions was changed by Innovator to be the button onClick context. Therefore not being the "current item" as expected by JavaScript.
To test I included the object definition code in the widget_events.js which is included as part of innovator.aspx
It works fine now.
I guess the next question is where is the "approved" place to put JavaScript object/function code.
Cheers,
Alright. I think I have that worked out too.
Code goes in a .js file in the ..Innovator/Server/JavaScript directory.
Reference to this new file goes in "JSNamespaceConfig.xml"
Then it really works as expected without upsetting the upgradability of the system.