步骤五:获取主管信息
- 创建学院对象脚本。
- 在应用设计器的左侧导航栏中,选择“逻辑”,单击脚本后的“+”,进入新增脚本页面。
图1 新建脚本
- 输入脚本的名称,单击“添加”,完成脚本的创建。
图2 新建createPerformance脚本
- 在脚本编辑器中,将以下脚本代码粘贴到代码编辑区。
import * as db from 'db'; import * as context from 'context'; @action.object({ type: "param" }) export class ActionInput { @action.param({ type: 'string', required: true, label: 'string' }) employee: string; @action.param({ type: 'string', required: true, label: 'string' }) manager: string; @action.param({ type: 'string', required: true, label: 'string' }) interviewID: string; @action.param({ type: 'string', required: true, label: 'string' }) employeeJob: string; @action.param({ type: 'string', required: true, label: 'string' }) timeOfPresentJob: string; @action.param({ type: 'string', required: true, label: 'string' }) employeeSelfAssessment: string; } @action.object({ type: "param" }) export class ActionOutput { @action.param({ type: 'String' }) id: string; } @useObject(['命名空间__performance__CST']) @action.object({ type: "method" }) export class CreatePerformance { @action.method({ input: 'ActionInput', output: 'ActionOutput' }) public run(input: ActionInput): ActionOutput { let out = new ActionOutput(); let error = new Error(); try { let s = db.object('命名空间__performance__CST'); const currentYear = new Date().getFullYear(); const oldPM = s.queryByCondition({ "conjunction": "AND", "conditions": [{ "field": "命名空间__employee__CST", "operator": "eq", "value": input.employee }, { "field": "createdDate", "operator": "ge", "value": `${currentYear}-01-01 00:00:00` }, { "field": "createdDate", "operator": "lt", "value": `${currentYear + 1}-01-01 00:00:00` }] }); if (oldPM && oldPM.length > 0) { out.id = oldPM[0].id; } else { let id = s.insert({ 命名空间__employee__CST: input.employee, 命名空间__interviewID__CST: input.interviewID, 命名空间__manager__CST: input.manager, 命名空间__employeeJob__CST: input.employeeJob, 命名空间__timeOfPresentJob__CST: input.timeOfPresentJob, 命名空间__employeeSelfAssessment__CST: input.employeeSelfAssessment, }); if (id) { out.id = id; } else { error.name = "CREATE_PERFORMANCE_ERROR"; error.message = "绩效创建失败!"; throw error; } } } catch (err) { console.error(err.name, err.message); context.setError(err.name, err.message); } return out; } }
其中,命名空间__performance__CST、命名空间__employee__CST、命名空间__interviewID__CST、命名空间__manager__CST、命名空间__employeeJob__CST、 命名空间__timeOfPresentJob__CST和命名空间__employeeSelfAssessment__CST为步骤三:添加绩效对象中添加的对象字段。
- 单击页面上方的
,保存脚本。
- 保持成功后,单击页面上方的
,启用该脚本。
- 在应用设计器的左侧导航栏中,选择“逻辑”,单击脚本后的“+”,进入新增脚本页面。
- 创建查询员工脚本。
- 按照1中操作,创建名称为“queryPMEmployees”脚本。
图3 创建脚本queryPMEmployees
- 在脚本编辑器中,将以下脚本代码粘贴到代码编辑区。
import * as db from 'db'; import * as queue from 'queue'; @action.object({ type: "param" }) export class ActionInput { } @action.object({ type: 'param' }) export class Option { @action.param({ type: 'String', required: true, label: 'display' }) display: string; @action.param({ type: 'String', required: true, label: 'value' }) value: string; } @action.object({ type: "param" }) export class ActionOutput { @action.param({ type: 'Option[]', required: true, isCollection: true }) userList: Option[]; } @useObject(['User']) @action.object({ type: "method" }) export class QueryManagerList { @action.method({ input: 'ActionInput', output: 'ActionOutput' }) public run(input: ActionInput): ActionOutput { let out = new ActionOutput(); let userObjAct = db.object('User'); var queueMgr = queue.newManager(); var managerQueue = queueMgr.getByName("Manager"); let users = []; if (managerQueue) { let userIds = queueMgr.getUsersByID(managerQueue.id); users = userObjAct.queryByCondition({ "conjunction": "AND", "conditions": [{ "field": "id", "operator": "in", "value": userIds }] }); } out.userList = users.map(function (v) { return { 'value': v['id'], 'display': v['name'] } }); return out; }
- 单击页面上方的
,保存脚本。
- 保持成功后,单击页面上方的
,启用该脚本。
- 按照1中操作,创建名称为“queryPMEmployees”脚本。
- 创建查询主管脚本。
- 按照1中操作,创建一个名称为“queryPMManagers”的脚本。
图4 创建脚本queryPMManagers
- 在脚本编辑器中,将以下脚本代码粘贴到代码编辑区。
import * as db from 'db'; import * as queue from 'queue'; @action.object({ type: "param" }) export class ActionInput { } @action.object({ type: 'param' }) export class Option { @action.param({ type: 'String', required: true, label: 'display' }) display: string; @action.param({ type: 'String', required: true, label: 'value' }) value: string; } @action.object({ type: "param" }) export class ActionOutput { @action.param({ type: 'Option[]', required: true, isCollection: true }) userList: Option[]; } @useObject(['User']) @action.object({ type: "method" }) export class QueryManagerList { @action.method({ input: 'ActionInput', output: 'ActionOutput' }) public run(input: ActionInput): ActionOutput { let out = new ActionOutput(); let userObjAct = db.object('User'); var queueMgr = queue.newManager(); var managerQueue = queueMgr.getByName("Manager"); let users = []; if (managerQueue) { let userIds = queueMgr.getUsersByID(managerQueue.id); users = userObjAct.queryByCondition({ "conjunction": "AND", "conditions": [{ "field": "id", "operator": "in", "value": userIds }] }); } out.userList = users.map(function (v) { return { 'value': v.id, 'display': v.name } }); return out; }
- 单击页面上方的
,保存脚本。
- 保持成功后,单击页面上方的
,启用该脚本。
- 按照1中操作,创建一个名称为“queryPMManagers”的脚本。
- 在应用设计器的左侧导航栏中,单击“界面”,再单击页面下的“员工自评”,进入员工自评页面。
- 选中主管信息下的下拉框,在
,进入模型选择页面。 中,单击属性值绑定后的“+”,属性选择“选项”,再单击模型字段后的
图5 单击设置图标 - 单击“新增模型”,设置模型名称为“queryPMManagers”,来源选择“服务”,单击“下一步”。
图6 新建模型queryPMManagers
- “选择服务类型”设置为“脚本”,项目选择步骤二:学院绩效考核系统应用项目初始化及配置中创建的“学院绩效考核系统应用”,再选择2中创建的脚本,单击“确定”。
图7 选择queryPMManagers脚本
- 单击“下一步”,再单击“确定”,返回选择模型页面。
- 展开“queryPMManagers”模型,再展开“outputParam”,选择“userList”,单击“确定”,返回设计页面。
图8 选择userList字段
- 添加页面加载事件。
- 单击页面空白处,在“事件”页签,单击加载后的“+”,进入添加动作页面。
- 在自定义动作中,输入如下示例代码,单击“创建”。
$model.ref("currentUser").setValue("name", context.$user.fullname); $model.ref('queryPMManagers').run().then(function (res) { }); loadData().then(function (data) { var performance = data.variables?.performance; if(performance){ $model.ref("命名空间__performance__CST").setData(performance); $model.ref("component").setValue("disabled", data.instance.curElement !== data.variables['$Task.Name']); } }).catch(function (err) { context.$message.error(err.resMsg || err.message || err); }); function loadData() { var bpTaskId = context.$page.params.interviewID; var variables = {}; return bpTaskId ? context.$bpm.loadVariables() .then(function (data) { variables = data; var instanceId = data['$Flow.InterviewID']; return instanceId ? context.$bpm.getBPinstance(instanceId) : Promise.resolve({}); }).then(function (instance) { return { instance: instance, variables: variables }; }) : Promise.resolve({}); }
其中,“命名空间__performance__CST”为步骤三:添加绩效对象中添加的对象字段。
- 单击页面上方的
,保存标准页面。