
# 创建"编辑设备"脚本
"编辑设备"脚本实现的功能是向设备对象中插入1条新记录，或者更新1条记录。
#### 操作步骤
1. 进入[创建"设备维修管理系统"应用](https://support.huaweicloud.com/bestpractice-astrozero/astrozero_07_1009.html)中创建的应用。
2. 在"Equipment"目录中，将鼠标放在"Script"上，单击界面上出现的"+"，在弹出菜单中选择"脚本"。
3. 在弹窗中，选中"创建一个新脚本"，在"名称"文本框中输入"editEquipment"，单击"添加"。 
   系统实际创建的脚本名称为"***HW__*** editEquipment"，"***HW__***"前缀由租户命名空间namespace决定。新建创建的脚本，默认是当前用户锁定状态，可以进行编辑保存等操作。
   当编辑已有脚本时，为防止编辑时多人篡改，编辑前请单击![](https://support.huaweicloud.com/bestpractice-astrozero/zh-cn_image_0000001483231221.png)，进行锁定。
   
   
4. 在代码编辑器中，插入如下脚本代码。 
   脚本代码中，"***HW__*** "前缀由租户命名空间namespace决定，请根据实际情况进行替换。
   ```
   //本脚本用于新增或者修改设备信息
   import * as db from 'db';//导入处理object相关的标准库
   import * as context from 'context';//导入上下文相关的标准库
   //定义入参结构，入参包含1个参数：equipment对象，为必填字段
   @action.object({ type: "param" })
   export class ActionInput {
       @action.param({ type: 'Any', required: true, label: 'equipment' })
       equipment: object;
   }
   //定义出参结构，出参包含1个参数，记录equipment的id
   @action.object({ type: "param" })
   export class ActionOutput {
       @action.param({ type: 'String' })
       equipmentId: string;
   }
   //使用数据对象HW__Equipment__CST
   @useObject(['HW__Equipment__CST'])
   @action.object({ type: "method" })
   export class EditEquipment {    //定义接口类，接口的入参为ActionInput，出参为ActionOutput
       @action.method({ input: 'ActionInput', output: 'ActionOutput' })
       public editEquipment(input: ActionInput): ActionOutput {
           let out = new ActionOutput();    //新建出参ActionOutput类型的实例，作为返回值
           let error = new Error();    //新建错误类型的实例，用于在发生错误时保存错误信息
           try {
               let equipment = input.equipment;    //将入参赋值给equipment变量，方便后面使用
               let s = db.object('HW__Equipment__CST');    //获取HW__Equipment__CST这个Object的操作实例
               delete equipment['cascaderAddress']; //删除入参中不需要插入HW__Equipment__CST对象的多余属性
               //新增设备
               if (!equipment['id']) {
                   //必填校验
                   if (!equipment['HW__equipmentSN__CST']) {
                       error.name = "EQM";
                       error.message = "Field 'HW__equipmentSN__CST' is required.";
                       throw error;
                   }
                   let equipmentId = s.insert(equipment);    //向HW__Equipment__CST插入一条数据，返回数据的唯一标识即设备ID
                   if (equipmentId && equipmentId != "") {
                       out.equipmentId = equipmentId;
                   }
                   else {
                       error.name = "EQM";
                       error.message = "Equipment Cannot Be Added.";
                       throw error;
                   }
               }
               //编辑修改设备
               else {
                   let id = equipment['id'];
                   delete equipment['id'];
                   let count = s.update(id, equipment);    //根据设备ID，编辑更新HW__Equipment__CST的一条数据
                   if (count && count == 1) {
                       out.equipmentId = id;
                   }
                   else {
                       error.name = "EQM";
                       error.message = "Equipment Cannot Be Updated.";
                       throw error;
                   }
               }
           } catch (error) {
               console.error(error.name, error.message);
               context.setError(error.name, error.message);
           }
           return out;
       }
   }
   ```
   
   
5. 单击编辑器上方的![](https://support.huaweicloud.com/bestpractice-astrozero/zh-cn_image_0000001432992554.png)，保存脚本。
 
#### 验证并发布
1. 测试新增逻辑能否正常执行。
   
   1. 单击编辑器上方的![](https://support.huaweicloud.com/bestpractice-astrozero/zh-cn_image_0000001432674970.png)，执行脚本。
   
   2. 如[图1]所示，在界面底部输入测试数据，单击测试窗口右上角![](https://support.huaweicloud.com/bestpractice-astrozero/zh-cn_image_0000001432834926.png)执行图标。
      图1测试脚本   
      ![](https://support.huaweicloud.com/bestpractice-astrozero/zh-cn_image_0000001482911437.png "点击放大")
      测试报文采用json格式，样例如下（报文中加粗斜体内容请替换为实际的字段名）：
      ```
      { 
          "equipment": { 
              "name": "百草园A栋1单元1号", 
              "HW__equipmentSN__CST": "3217890001" 
          } 
      }
      ```
      
      执行成功，会在"输出"页签返回equipmentId。请保存这个返回结果，后续的测试中会用到。
      ```
      { 
          "equipmentId": "cQue000000e1qnhgtCng" 
      }
      ```
      如果执行失败，请检查之前设备对象、脚本，以及测试报文三者中的对象名、字段名是否一致。
      
   
   
   
   
2. 到设备对象布局页面（Equipment Records），预览页面，检查数据是否插入成功。 
   1. 在"Equipment"目录的"Object"下，单击设备对象"***HW__*** Equipment__CST"，在"布局"页签下，单击"Equipment Records"后的预览图标![](https://support.huaweicloud.com/bestpractice-astrozero/zh-cn_image_0000001433151814.png)。
      图2对象布局页面   
      ![](https://support.huaweicloud.com/bestpractice-astrozero/zh-cn_image_0000001432992558.png "点击放大") 
   
   2. 在页面中，检查设备列表中是否包含刚插入的测试数据。
   
   3. 如果已新增数据，为了后续测试方便，建议多创建几条数据。
   
   
   
   
3. 测试修改逻辑能否正常执行。 
   1. 单击编辑器上方的![](https://support.huaweicloud.com/bestpractice-astrozero/zh-cn_image_0000001483071729.png)，执行脚本。
   
   2. 在界面底部输入测试数据，单击测试窗口右上角![](https://support.huaweicloud.com/bestpractice-astrozero/zh-cn_image_0000001432834930.png)执行图标。
      如下样例报文中的加粗id值，请修改为[图1]的返回结果，加粗斜体字段名请替换为实际的字段名。以下报文是修改name字段。
      ```
      { 
          "equipment": { 
              "id": "cQuXXXXXXXXng", 
              "name": "百草园B栋2单元2号",
              "HW__equipmentSN__CST": "3217890001" 
          } 
      }
      ```
      
   
   3. 刷新设备对象布局页面（Equipment Records）的预览页面，查看测试数据是否符合预期。
   
   
   
   
4. 测试成功，单击编辑器上方的![](https://support.huaweicloud.com/bestpractice-astrozero/zh-cn_image_0000001432674966.png)，启用脚本。
 
