客户端方法为JS方法。
系统提供了很多触发点,可以嵌入客户端方法,如下:
1 对象类的客户端事件页签:
2 窗体的Form Event和Filed Event
3.关系类的网格事件:
4 属性事件:
5.可自定义Action,触发客户端事件:
。
下面我们用一个示例,演示Form Event和Field Event的使用方法。
该示例依旧使用My Part对象类,我们使用客户端方法,计算零件的总成本。
总成本的计算方式:My BOM页签每条关系数据的成本*数量,然后相加即为总成本。
第一个客户端方法,在My Part的Form Event的On Load触发,方法如下:
top.window.moveTo(0,0);
top.window.resizeTo(screen.width,screen.height-50); //自动根据屏幕大小调整窗体大小
document.CostRollupThisItem = function()
{
var total = 0;
var boms = document.thisItem.getItemsByXPath(
"//Item[@type='My BOM']"); //获取My BOM页签的数据
var count = boms.getItemCount();
for (var i=0; i<count; ++i) ///遍历数据
{
var bom = boms.getItemByIndex(i);
var part = bom.getRelatedItem();
var cost = part.getProperty("cost");
var qty = bom.getProperty("qty");
total += cost * qty;
}
handleItemChange("cost",total);
};
document.CostRollupFromServer = function()
{
var total = 0;
var q = document.thisItem.newItem("My BOM","get"); ///从服务端查询My BOM关系页签数据
q.setProperty("source_id",document.itemID);
q.setAttribute("select","qty,related_id(cost)");
var result = q.apply();
var boms = result.getItemsByXPath("//Item[@type='My BOM']");
var count = boms.getItemCount();
for (var i=0; i<count; ++i)
{
var bom = boms.getItemByIndex(i);
var part = bom.getRelatedItem();
var cost = part.getProperty("cost");
var qty = bom.getProperty("qty");
total += cost * qty;
}
handleItemChange("cost",total);
};
document.CostRollupFromGrid = function()
{
var total = 0;
//var grid = top.relationships.frames[0].grid; //11SP9及老版本获取关系类页签网格
var grid=top.frames.relationships.iframesCollection[1].contentWindow.grid; ///11SP12及新版本获取关系类网格
var ids = grid.getAllItemIds('|').split('|'); ///获取网格的所有行ID
for (var i=0; i<ids.length; ++i)
{
var id = ids[i];
var cost = grid.cells(id,6).GetValue(); //获取对应的列的数据,列索引从0开始
var qty = grid.cells(id,2).GetValue();
total += cost * qty;
}
handleItemChange("cost",total);
};
方法命名为Lab34,嵌入至Form的On Load事件:
此方法书写完成后,再写三个客户端方法,用来触发三种计算方式,因第一个方法在预先加载,因此此处仅调用客户端方法即可,代码如下:
在窗体上添加三个按钮,然后在按钮的Field Event的On Click事件中嵌入对应的客户端方法,如下图:
窗体保存后,我们打开My Part窗体,点击按钮,即可计算总成本,如下:
Form Event和Field Event为较常用的客户端事件。