更新时间:2025-08-14 GMT+08:00
分享

步骤五:获取主管信息

  1. 创建学院对象脚本。

    1. 在应用设计器的左侧导航栏中,选择“逻辑”,单击脚本后的“+”,进入新增脚本页面。
      图1 新建脚本
    2. 输入脚本的名称,单击“添加”,完成脚本的创建。
      图2 新建createPerformance脚本

      表1 新增脚本参数说明

      参数

      说明

      示例

      名称

      在输入框中,输入新建脚本的名称。命名要求如下:

      • 长度不能超过63个字符,包括前缀命名空间的长度。

        名称前的内容为命名空间,在华为云Astro轻应用中为了避免不同租户间数据的重名,租户在首次创建应用时需要先定义一个命名空间。一个租户只能创建一个命名空间,创建后不支持修改。

      • 必须以英文字母开头,只能由英文字母、数字或单下划线组成,没有连续的下划线,且不能以下划线结尾。

      createPerformance

    3. 在脚本编辑器中,将以下脚本代码粘贴到代码编辑区。
      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为步骤三:添加绩效对象中添加的对象字段。

    4. 单击页面上方的,保存脚本。
    5. 保持成功后,单击页面上方的,启用该脚本。

  2. 创建查询员工脚本。

    1. 按照1中操作,创建名称为“queryPMEmployees”脚本。
      图3 创建脚本queryPMEmployees
    2. 在脚本编辑器中,将以下脚本代码粘贴到代码编辑区。
      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; 
           }
    3. 单击页面上方的,保存脚本。
    4. 保持成功后,单击页面上方的,启用该脚本。

  3. 创建查询主管脚本。

    1. 按照1中操作,创建一个名称为“queryPMManagers”的脚本。
      图4 创建脚本queryPMManagers
    2. 在脚本编辑器中,将以下脚本代码粘贴到代码编辑区。
      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;
          }
    3. 单击页面上方的,保存脚本。
    4. 保持成功后,单击页面上方的,启用该脚本。

  4. 在应用设计器的左侧导航栏中,单击“界面”,再单击页面下的“员工自评”,进入员工自评页面。
  5. 选中主管信息下的下拉框,在数据绑定 > 属性值绑定中,单击属性值绑定后的“+”,属性选择“选项”,再单击模型字段后的,进入模型选择页面。

    图5 单击设置图标

  6. 单击“新增模型”,设置模型名称为“queryPMManagers”,来源选择“服务”,单击“下一步”。

    图6 新建模型queryPMManagers

  7. “选择服务类型”设置为“脚本”,项目选择步骤二:学院绩效考核系统应用项目初始化及配置中创建的“学院绩效考核系统应用”,再选择2中创建的脚本,单击“确定”

    图7 选择queryPMManagers脚本

  8. 单击“下一步”,再单击“确定”,返回选择模型页面。
  9. 展开“queryPMManagers”模型,再展开“outputParam”,选择“userList”,单击“确定”,返回设计页面。

    图8 选择userList字段

  10. 添加页面加载事件。

    1. 单击页面空白处,在“事件”页签,单击加载后的“+”,进入添加动作页面。
    2. 在自定义动作中,输入如下示例代码,单击“创建”
      $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”步骤三:添加绩效对象中添加的对象字段。

    3. 单击页面上方的,保存标准页面。

相关文档