Version: 4.0.2
扩展例子
终端脚本
打开作业组直接跳到指定作业
需求描述
作业组中根据指定的作业名跳转到该作业
脚本代码
- 适用于配置逻辑中的脚本,不支持打开脚本、关闭脚本及显示后脚本
var curAllTasks = ScriptEngine.Context.GetCurTasks();
if (curAllTasks && curAllTasks.length > 0) {
var needJumpTask = _.find(curAllTasks, function(_task){
return _task.Name == '跳转的作业名';
});
if(needJumpTask){
page.executeTaskTree.JumpTask(needJumpTask);
}
}
return true;
- 适用于待执行,执行中的作业组脚本
var curAllTasks = ScriptEngine.Context.GetCurTasks();
if (curAllTasks && curAllTasks.length > 0) {
var needJumpTask = _.find(curAllTasks,function(_task){
return _task.Name == '跳转的作业名';
});
if (needJumpTask) {
var taskGroup = ScriptEngine.Context.curTaskGroup;
if (taskGroup.Status != JobStatus.New) {
GlobalInfo.SetTaskGroupTaskParentID(taskGroup.ID, taskGroup.SequenceID, needJumpTask.ParentTaskID);
GlobalInfo.SetTaskGroupTaskID(taskGroup.ID, taskGroup.SequenceID, needJumpTask.ID);
}
}
}
return true;
Web端脚本
得到资产的所有子孙,返回资产名的列表
需求描述
根据指定的资产名得到其所有子孙,返回资产名的列表
脚本代码
- 适用于作业组属性更多设置中的可选项脚本
var resultName = ScriptEngine.GetResultName();
var assetNames = [];
ScriptEngine.GetAssets('aaaaa', true, false, function (_result) { //'aaaaa'为资产名
if (_result && _result.length > 0) {
for (var i = 0; i < _result.length; i++) {
assetNames.push({ 'ID': _result[i].ID, 'Name': _result[i].Name });
}
}
ScriptEngine[resultName] = assetNames;
});
return { 'ResultName': resultName };
- 效果如图

得到固定组织单元的直接儿子,此外加一个固定的字符串,返回列表
需求描述
得到固定组织单元下所有的直接儿子,并在后面加一个固定的字符串,返回成列表
脚本代码
- 适用于作业组属性更多设置中的可选项脚本
var field = '*'; //固定字符串参数
var resultName = ScriptEngine.GetResultName();
var orgUnitNames = [];
var orgUnitName = '监理队';//参数 组织单元名
ScriptEngine.GetOrgUnits(orgUnitName, true, true, function (_result) {
if (_result && _result.length > 1) {//得到结果第一个是组织单元本身,只需儿子,则从第一个元素开始
for (var i = 1; i < _result.length; i++) {
orgUnitNames.push({ 'ID': _result[i].ID, 'Name': _result[i].Name + field});
}
}
ScriptEngine[resultName] = orgUnitNames;
});
return { 'ResultName': resultName };
- 效果如图

组织单元属于登录人组织单元,岗位为固定名称,所有人列表
需求描述
组织单元属于当前登录用户组织单元,岗位为固定名称,返回满足条件的所有人的列表
脚本代码
- 适用于作业组属性更多设置中的可选项脚本
var postName = '监理员';
var resultName = ScriptEngine.GetResultName();
var users = [];
ScriptEngine.GetLoginUser(function (_curLoginUser) {
if (_curLoginUser) {
var curUserID = _curLoginUser.UserID?_curLoginUser.UserID:_curLoginUser.ID;
var sql = 'select id,bi_name as Name from [User] where ai_deleted=\'0\' and id in(\
select userid from userrolegroup where orgunitID in(\
SELECT DISTINCT ID FROM H_OrgUnitRelation WHERE ParentID in(select orgunitid from userrolegroup where userid=\'' + curUserID + '\')\
or orgunitid IN(select orgunitid from userrolegroup where userid=\''+ curUserID + '\'))\
and roleid in(select id from role where bi_name=\'' + postName + '\' and ai_deleted=\'0\')) order by bi_name';
ScriptEngine.GetAjaxToApiServer('Sql', 'GetDataSetBySQL', 'sql=' + sql, null, 'POST', function (_result) {
if (_result && _result.Rows && _result.Rows.length > 0) {
for (var i = 0; i < _result.Rows.length; i++) {
users.push({ ID: _result.Rows[i].Cells[0], Name: _result.Rows[i].Cells[1] });
}
ScriptEngine[resultName] = users;
} else {
ScriptEngine[resultName] = users;
}
});
} else {
ScriptEngine[resultName] = users;
}
});
return { 'ResultName': resultName };
- 效果如图

组织单元属于作业组组织单元,岗位为固定名称, 所有人列表
需求描述
组织单元属于作业组的组织单元,岗位为固定名称,返回满足条件的所有人的列表
脚本代码
- 适用于作业组属性更多设置中的可选项脚本(计划和创建活动不适用)
var postName = '监理员';
var taskGroupProperyName = '库存'; // 后续代码会根据这个属性获取当前作业组
var users = [];
var taskgroupProperty = ScriptEngine.Context.GetTaskGroupProperty(taskGroupProperyName);
if (taskgroupProperty) {
var resultName = ScriptEngine.GetResultName();
var sql = 'select DISTINCT id,bi_name as Name from [User] where ai_deleted=\'0\' \
and id in(\
select userid from userrolegroup where orgunitID in(\
SELECT DISTINCT ID FROM H_OrgUnitRelation WHERE ParentID in(select OrgUnitID from taskGroupEntity where id IN(select TaskGroupID from TaskGroupProperty where ID=\''+ taskgroupProperty.ID + '\'))\
) or orgunitid IN(select OrgUnitID from taskGroupEntity where id IN(select TaskGroupID from TaskGroupProperty where ID=\''+ taskgroupProperty.ID + '\')) \
and roleid in(select id from role where bi_name=\''+ postName + '\' and ai_deleted=\'0\')\
) order by bi_name';
ScriptEngine.GetAjaxToApiServer('Sql', 'GetDataSetBySQL', 'sql=' + sql, null, 'POST', function (_result) {
if (_result && _result.Rows && _result.Rows.length > 0) {
for (var i = 0; i < _result.Rows.length; i++) {
users.push({ ID: _result.Rows[i].Cells[0], Name: _result.Rows[i].Cells[1] });
}
ScriptEngine[resultName] = users;
} else {
ScriptEngine[resultName] = users;
}
});
return { 'ResultName': resultName };
} else {
console.error('属性不存在:' + taskGroupProperyName);
return users;
}
- 效果如图

根据名称找到对应资产,将此资产的某一属性更新到另一作业组属性里
需求描述
根据名称找到对应资产,资产名唯一,将此资产的某一属性的值更新到另一作业组属性里
脚本代码
- 适用于作业组属性更多设置中的修改值事件后脚本
var assetName = '阀门11';
var assetPropertyName = '状态字符串';
var taskGroupPropertyName = '阀门11的状态字符串';
var urlParameters = 'parentID=invalid&name=' + assetName;
ScriptEngine.GetAjaxToApiServer('Asset','GetByName',urlParameters,null,'get',function(_result){
var asset = _result;
if(asset){
urlParameters = 'assetID='+asset.ID+'&propertyName=' + assetPropertyName;
ScriptEngine.GetAjaxToApiServer('Asset','GetAssetProperty',urlParameters,null,'get',function(_result){
var assetProperty = _result;
if(assetProperty){
ScriptEngine.Context.SetTaskGroupPropertyValue(taskGroupPropertyName,assetProperty.CurrentValue);
}
else{
console.error('资产属性不存在:' + assetName +'.' + assetPropertyName);
}
});
}else{
console.error('资产不存在:' + assetName);
}
});
return true;
- 效果如图

根据人员名称查找人员某一属性(更多属性)更新到另一个作业组属性
需求描述
根据人员的名称查找该人员更多属性中的某一属性,将此属性值更新到另一作业组属性里
脚本代码
- 适用于作业组属性更多设置中的修改值事件后脚本
var userName = 'a11甲班监理员';
var userPropertyName = '资质';
var taskGroupPropertyName = '人员属性的值';
var urlParameters = 'parentID=invalid&name=' + userName;
ScriptEngine.GetAjaxToApiServer('UserConfig','GetByName',urlParameters,null,'get',function(_result){
var user = _result;
if(user){
var customProperties = user.CustomProperty;
if(customProperties){
customProperties = JSON.parse(customProperties);
var property = _.find(customProperties,function(_item){return _item.Name==userPropertyName;});
if(property){
ScriptEngine.Context.SetTaskGroupPropertyValue(taskGroupPropertyName,property.Value);
}
else{
console.error('人员扩展属性不存在:' + userName + '.' + userPropertyName);
}
}
else{
console.error('人员没有扩展属性:' + userName);
}
}else{
console.error('人员不存在:' + userName);
}
});
return true;
- 效果如图

按照列表名得到列表项
需求描述
按照列表的名称,得到该列表的项
脚本代码
- 适用于作业组属性更多设置中的可选项脚本
var resultName = ScriptEngine.GetResultName();
var responseItems = [];
var responseName = '地区';//参数 自定义列表名
console.log(responseName);
var urlParameters = 'parentID=&name=' + responseName;
ScriptEngine.GetAjaxToApiServer('UserDefinedList','GetByName',urlParameters,null,'get',function(_result){
if(_result){
urlParameters = 'parentID=' + _result.ID;
ScriptEngine.GetAjaxToApiServer('UserDefinedList','GetChild',urlParameters,null,'get',function(_result){
if(_result){
ScriptEngine[resultName]=_result;
}
else{
console.error('没有找到“'+responseName+'”的列表项');
ScriptEngine[resultName]=[];
}
});
}
else{
console.error('没有找到“'+responseName+'”的列表类型');
ScriptEngine[resultName]=[];
}
});
return { 'ResultName':resultName};
- 效果如图

按照id得到列表项的名称
需求描述
按照列表项的id得到列表项的名称
脚本代码
- 适用于作业组属性更多设置中的可选项脚本
var resultName = ScriptEngine.GetResultName();
var responseItemID = '698DB607-ED42-4FC1-978A-144D410FC46C';
var list = [];
ScriptEngine.GetAjaxToApiServer('UserDefinedList','GetByID','id='+responseItemID, '','get',function(_result){
if(_result){
list.push({ 'ID': _result.ID, 'Name': _result.Name });
}
ScriptEngine[resultName] = list;
});
return { 'ResultName':resultName};
- 效果如图

退料明细 - 实际退料 = 退料差额
需求描述
退料明细 - 实际退料 = 退料差额,都为json格式的库存操作属性,以退料明细为准,相同物料的数量相减,有则减去实际退料,结果自动更新至退料差额,退料差额初始值为空
脚本代码
- 适用于作业组属性更多设置中的修改值事件后脚本
var materialReturn = ScriptEngine.Context.GetTaskGroupPropertyValue('退料明细');
var realReturn = ScriptEngine.Context.GetTaskGroupPropertyValue('实际退料');
if (materialReturn) {
var materialReturnObj = JSON.parse(materialReturn);
if(realReturn){
var realReturnObj = JSON.parse(realReturn);
if (materialReturnObj && materialReturnObj['操作项'] && realReturnObj && realReturnObj['操作项']) {
var materialReturnOperationItemList = materialReturnObj['操作项'];
var realReturnOperationItemList = realReturnObj['操作项'];
if (materialReturnOperationItemList && materialReturnOperationItemList.length > 0 && realReturnOperationItemList && realReturnOperationItemList.length > 0) {
for (var i = 0; i < materialReturnOperationItemList.length; i++) {
var materielName = materialReturnOperationItemList[i]['物料'];
if (materielName) {
var find = _.find(realReturnOperationItemList,function(_item){return _item['物料'] == materielName;});
if(find && find['数量']){
materialReturnOperationItemList[i]['数量'] = parseFloat(materialReturnOperationItemList[i]['数量']) - parseFloat(find['数量']) + '';
}
}
}
}
}
}
var modifyValue = JSON.stringify(materialReturnObj);
ScriptEngine.Context.SetTaskGroupPropertyValue('退料差额', modifyValue);
}
return true;
- 效果如图

作业组属性为json,操作项下有标准价格并且大于200时,更新另一个作业组属性为'是'
需求描述
当前作业组属性为json,其中操作项下有标准价格,当标准价格大于200时,更新另一个作业组属性为列表项的'是'
脚本代码
- 适用于作业组属性更多设置中的修改值事件后脚本
var curTaskGroupPropertyName = '库存';
var modifyTaskGroupPropertyName = '是否列表';
var property = ScriptEngine.Context.GetTaskGroupProperty(curTaskGroupPropertyName);
if(property){
if(property.Value){
var obj = JSON.parse(property.Value);
if(obj && obj['操作项'] && obj['操作项'].length>0){
var find = _.find(obj['操作项'],function(_item){ return _item['标准价格'] && parseFloat(_item['标准价格'])> 200 });
if(find){
var urlParameters = 'parentID=invalid&name=是';
// 获取名字为“是”的列表项(注意:列表项名字为“是”的不能有多个,否则有可能来自于不同的列表)
ScriptEngine.GetAjaxToApiServer('UserDefinedList','GetByName',urlParameters,null,'get',function(_result){
if(_result){
ScriptEngine.Context.SetTaskGroupPropertyValue(modifyTaskGroupPropertyName,_result.ID);
}
else{
console.error('没有找到“是”的列表项');
}
});
}
}
}
else{
console.error('作业组属性值为空:' + curTaskGroupPropertyName)
}
}
else{
console.error('作业组属性不存在:' + curTaskGroupPropertyName);
}
return true;
- 效果如图
