微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在 ERPNext 中的员工自定义字段上生成随机字符串

如何解决在 ERPNext 中的员工自定义字段上生成随机字符串

我有一个名为 Misconduct Case Number 的自定义员工字段,应该在 Erpnext 之外的其他地方提取和使用该字段。随机字符串的格式应为 [8 个字母数字字符] [日期和时间] [固定组织编号] 例如 DX0FBN78 04200645 PTD0010045

出于某种原因,我无法使用以下自定义脚本生成随机字符串,并且控制台中没有错误

frappe.ui.form.on('Employee',{
    validate: function (frm) {
        randString(frm);
    }
});

    var randString = function (frm) {
    var s = "";
    var x = "";
    var today = new Date();
    var date = String(today.getFullYear()).substring(2,4) + '' + (today.getMonth() + 1);
    var time = today.getHours() + "" + today.getMinutes();
    var dateTime = date + time;
    var compNumber = " STR18001749";
    while (s.length < x && x > 0) {
        var r = Math.random();
        s += (r < 0.1 ? Math.floor(r * 100) : String.fromCharCode(Math.floor(r * 26) + (r > 0.5 ? 97 : 65)));
    }

    let  my_generated_string  = s.toupperCase() + ' ' + dateTime + compNumber;
    frm.doc.misconduct  =  my_generated_string ;
    refresh_field('misconduct');
};

解决方法

嗯,首先,x 不是数字,不会改变,也永远不会满足 x > 0

不确定 ERPNext 支持什么样的 JS,但这应该可行:

var pool = "abcdefghijklmnopqrstuvxyzABCDEFGHIJKLMNOPQRSTUVXYZ0123456789";
var compNumber = " STR18001749";

var randString = function(frm) {
  var s = "";
  var today = new Date();
  var date = String(today.getFullYear()).substring(2,4) + '' + (today.getMonth() + 1);
  var time = today.getHours() + "" + today.getMinutes();
  var dateTime = date + time;

  while (s.length < 8) {
    var i = Math.floor(Math.random() * pool.length);
    s += pool[i];
  }

  frm.doc.misconduct = s.toUpperCase() + ' ' + dateTime + compNumber;
  // refresh_field('misconduct'); // commented out so the snippet runs
};

x = {doc: {}};
randString(x);
console.log(x);

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。