联系
我们

工作日 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);
  }
})