联系
我们

工作日 9:00-18:00

13632615190

常用Javascript脚本

1、选择项目负责人后,自动在团队成员中增加项目负责人,并且不能删除:

image.png

这涉及到2个操作:

1)、自动把项目负责人加入到团队成员列表

这要用到E6的fillGrid()这个JS接口方法,在“项目负责人”这个引用字段的“选择后事件”中增加Javascript脚本:

image.png

脚本如下:由于项目负责人引用的是员工表单(Employee),所以可以通过getvalue("__FK_Employee_")获得选择后的项目负责人记录ID,通过getvalue("Employee___Name__")获得选择后的项目负责人姓名。这些都可以字段名都可以通过查看浏览器读取数据时候的返回JSON中进行查看。inputData的rows中提供的字段名,就是“团队成员”这个可编辑子表的字段名,可以在浏览器中,单据页面,右键“查看框架的源代码”中进行查看。

var paramData = {
     "billid": "当前主单据编号",
     "gridbillid": "团队成员可编辑子表“子单据ID”",
     "gridid":"团队成员可编辑子表“子单据ID”",
     "rowIdx":"0"
 };
 var id = getvalue("__FK_Employee_");
 var name = getvalue("Employee___Name__");
 var inputData = {
     "团队成员可编辑子表“子单据ID”": {
         "rows": [
             {"__FK_Employee_": id, "Employee___Name__": name },
         ]
     }
 }
 $.bo.fillGrid(paramData , inputData);

2)、团队成员列表中,项目负责人这一行的“操作列”不能删除:

这就要在“团队成员”可编辑子表的“操作列格式化”属性中添加格式化脚本:

image.png

加入下列脚本。row["__FK_Employee_"]表示团队成员可编辑子表中的成员引用数据ID字段(这是个隐藏字段),getvalue("__FK_Employee_")表示获取项目负责人的ID值。在E6中,只要A单据(不论是主单据还是可编辑子表中)引用了B单据字段,则A单据中一定有一个引用ID字段:__FK_B_。

if(row["__FK_Employee_"]==getvalue("__FK_Employee_")) return "";


2、按条件删除表单上的可编辑子表的行

对于复杂一些的场景,可能您需要能够比如勾选某个选项,或者某个值改变后能够删除某个可编辑子表中的行:

let grid = jQuery('#这里替换成可编辑子表的ID记得保留井号');
let rows = grid.datagrid('getRows');

jQuery.each(rows, function(idx) {
    let row = rows[idx];
    if(row && row["这里替换成可编辑子表中的字段名"] && row["这里替换成可编辑子表中的字段名"]=="这里替换成具体的值") {
        delRow这里替换成可编辑子表的ID(row["__ID__"]);     
    }
});


3、页面上通过“功能按钮”调用数据库存储过程:

如果你有某个特殊的计算需求,可以通过E6插件来进行计算,或者使用数据库存储过程来进行计算(推荐)。那么我们除了可以提交单据保存的时候调用存储过程,或者执行SQL之外,E6也提供了在页面上通过“功能按钮”直接调用存储过程的功能。

假设我们有一个存储过程sp_CalcTest(SQLServer的,MySQL的类似,写法有些不同),有三个INT类型的参数A,B,C,如下图:

image.png

那么我们就可以在E6开发平台中,使用功能按钮进行调用:功能按钮属性“操作类型”设置为“脚本”,响应脚本就可以使用E6的JS接口进行调用了。

image.png

响应脚本:

procname:存储过程名;

condition存储过程参数,是一个JSON对象,对象值可以通过getvalue("字段名")等等获得表单中的字段值;

callback执行成功后的返回值,返回值类型可以通过浏览器F12进入开发者工具后,在Network页中进行查看;

$.bo.procedureRpcCall({
  procname:'sp_CalcTest',
  condition:{A: '1', B: '2', C: 'c'},
  callback:function(data) {
      console.log(data);
  }
})


4、在可编辑子表单元格中显示tips

假设我们有这样一个需求,在订单明细单元格中会校验当前输入的“单价”不能大于1000,如果输入的单价大于1000则显示一个tips提示一下,如下图

image.png

怎么实现呢?假设子表的表单编号是“OrdersItem”这个用于获得子表。

首先需要在可编辑子表的“列设置”中找到“单价”列,在单价列的“内容改变”事件中使用JavaScript来实现,如下:

image.png

代码解释:

首先需要了解,每个单元格的内容改变事件对应的方法是如下这样的,参数rows表示当前子表的所有行对象,rowidx表示当前改变的单元格所在的行号(从0开始编号,第一行rowidx是0),field表示当前单元格所在的字段名:

function onChangeOrdersItem__Price__(rows,rowidx,field) {    
    var row = rows[rowidx];    
    ...
}

那么怎么理解上图的代码呢?

if(parseFloat(row["__Price__"]) > 1000) {
    $("#OrdersItem").datagrid('getPanel').find('tr[datagrid-row-index="' + rowidx + '"]').find('td[field="' + field + '"]').tips({msg:"单价不能大于1000"})
}


row["__Price__"] : 表示获得编辑的这个单元格的值,因为我们在onChangeOrdersItem__Price__方法第一行已经定义了row变量,所以直接获得;

所以if(parseFloat(row["__Price__"]) > 1000)的意识是使用javascript的parseFloat先把这个值转换成数字类型后看是不是大于1000;

下面这一行怎么回的单元格所在的td,就是基本的既能了。

$("#OrdersItem").datagrid() 表示获得当前子表元素;

$("#OrdersItem").datagrid('getPanel').find('tr[datagrid-row-index="' + rowidx + '"]').find('td[field="' + field + '"]').tips({msg:"单价不能大于1000"})


那后面一段怎么写,怎么看呢?右键点中“单价”列的某个单元格,然后点击弹出菜单“审查”。

image.png

然后就可以看到这个单元格所在的tr,td的属性了,根据属性,使用jquery的find语法就可以精确定位到单元格,调tips({msg:"xxxxx"})即可。

image.png