文件外发管控
======

从6.0.0(20)开始，支持设置和获取审批信息、配置空间互传单双通策略的能力。

#### 场景介绍

![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/d1/v3/knHxOYqzToemQGmJmDh9jw/zh-cn_image_0000002625108693.jpg?HW-CC-KV=V1&HW-CC-Date=20260612T073606Z&HW-CC-Expire=86400&HW-CC-Sign=D1FF9DC2409FE7584389B51B1240F57EAFFEAA29D147E9261CC05FF2928692ED)

支持在文件传输场景中，通过设置空间的单通或双通策略，灵活配置应用文件在空间间的外发权限，实现安全可控的跨空间文件共享。当文件外发需纳入审批流程管控时，系统支持配置相关审批信息。同时，通过调用审批状态同步接口，实时获取审批结果，确保外发流程的安全与合规。

单通模式下，仅允许个人空间向企业空间发送文件，禁止反向传输。

双通模式则允许个人空间与企业空间双向互发文件。

#### 接口说明

详细接口说明可参考[接口文档](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/enterprisespace-spacedatatransfer)。

| 接口名 | 描述 |
| :-- | :-- |
| [policyPush](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/enterprisespace-spacedatatransfer#policypush)(policyContext: string): void | 配置空间互传单双通策略。 |
| [setAuditInfo](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/enterprisespace-spacedatatransfer#setauditinfo)(transactionNum: string, info: [AuditInfo](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/enterprisespace-spacedatatransfer#auditinfo)): number | 设置审批信息并返回结果。 |
| [getAuditInfo](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/enterprisespace-spacedatatransfer#getauditinfo)(transactionNum: string): [AuditInfo](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/enterprisespace-spacedatatransfer#auditinfo) | 获取审批信息。 |

#### 开发步骤

1.导入Enterprise Space Kit模块。

import { fileTransfer } from '@kit.EnterpriseSpaceKit';

2.配置空间互传单双通策略。

@Entry()
@Component
struct Index {
  // 配置空间互传单双通策略
  policyPush() {
    let policyContext =
      '{' +
        '  "config": {' +
        '    "inEnable": "1",' +
        '    "incoming\_check": {' +
        '      "data\_list": \[' +
        '        {' +
        '          "allow": "VirusCheck.result == 0",' +
        '          "approval": "",' +
        '          "check\_point": "VirusCheck",' +
        '          "check\_point\_name": "VirusCheck\_in",' +
        '          "is\_enable": "true",' +
        '          "forbidden": "VirusCheck.result == 1",' +
        '          "order": "0"' +
        '        }' +
        '      \]' +
        '    },' +
        '    "outEnable": "1",' +
        '    "outgoing\_check": {' +
        '      "data\_list": \[' +
        '        {' +
        '          "allow": "SecurityCheck.Result == 3 or SecurityCheck.Result == 4 or SecurityCheck.Result == 6 or SecurityCheck.Result == 7",' +
        '          "approval": "SecurityCheck.Result == 10",' +
        '          "check\_point": "SecurityCheck",' +
        '          "check\_point\_name": "SecurityCheck\_out",' +
        '          "is\_enable": "true",' +
        '          "forbidden": "SecurityCheck.Result == 0 or SecurityCheck.Result == 1 or SecurityCheck.Result == 12 or SecurityCheck.Result == 2 or SecurityCheck.Result == 5 or SecurityCheck.Result == 8 or SecurityCheck.Result == 9 or SecurityCheck.Result == 11",' +
        '          "order": "0"' +
        '        }' +
        '      \]' +
        '    },' +
        '    "checkpoint\_config": {' +
        '      "data\_list": \[' +
        '        {' +
        '          "check\_point\_name": "SecurityCheck",' +
        '          "bundle\_name": "com.example.enterprisespacekit\_samplecode\_clientdemo\_arkts",' +
        '          "ability\_name": "TestScanAbility",' +
        '          "func\_code": "2",' +
        '          "type": "2"' +
        '        },' +
        '        {' +
        '          "check\_point\_name": "VirusCheck",' +
        '          "bundle\_name": "com.example.enterprisespacekit\_samplecode\_clientdemo\_arkts",' +
        '          "ability\_name": "TestScanAbility",' +
        '          "func\_code": "3",' +
        '          "type": "1"' +
        '        }' +
        '      \]' +
        '    },' +
        '    "approvalpoint\_config": {' +
        '      "data\_list": \[' +
        '        {' +
        '          "bundle\_name": "com.example.enterprisespacekit\_samplecode\_clientdemo\_arkts",' +
        '          "ability\_name": "TestApprovalAbility"' +
        '        }' +
        '      \]' +
        '    }' +
        '  }' +
        '}';
    try {
      fileTransfer.policyPush(policyContext);
      console.info(\`Succeeded in pushing policy\`);
    } catch (err) {
      console.error(\`Failed to push policy. Code: ${err.code}, message: ${err.message}\`);
    }
  }

  build() {
    Column() {
      Row() {
        Button('配置空间互传单双通策略')
          .width(200)
          .height(50)
          .backgroundColor('#6366F1')
          .fontColor('#FFFFFF')
          .fontSize(14)
          .margin({ left: 20, bottom: 5 })
          .onClick(() => {
            this.policyPush();
          })
      }
    }
  }
}

3.设置文件外发流程控制的审批信息以及实时获取审批结果，开发者可通过审批结果判断是否允许文件外发至个人空间。

@Entry
@Component
struct Index {
  // 设置审批信息
  setAuditInfo() {
    const transactionNum: string = '1234567890123456789'; // 数据库自动生成的传输编号，需要在数据库中实际存在。
    const info: fileTransfer.AuditInfo = {
      auditId: '123456789', // 企业应用对审批条目的自定义唯一标识
      userId: '100', // 用户ID
      userName: 'test', // 用户名称
      time: Date.now(), // 审批时间戳
      comments: 'Waiting approval', // 审批评论
      status: '1' // 文件审批状态
    };
    try {
      const ret: number = fileTransfer.setAuditInfo(transactionNum, info);
      console.info(\`Succeeded in setting audit info, number:\`, ret);
    } catch (err) {
      console.error(\`Failed to set audit info. Code: ${err.code}, message: ${err.message}\`);
    }
  }

  // 获取审批信息
  getAuditInfo() {
    const transactionNum: string = '1234567890123456789'; // 数据库自动生成的传输编号，需要在数据库中实际存在。
    try {
      const auditInfo: fileTransfer.AuditInfo = fileTransfer.getAuditInfo(transactionNum);
      console.info(\`Succeeded in getting audit info:\` + JSON.stringify(auditInfo));
    } catch (err) {
      console.error(\`Failed to get audit info. Code: ${err.code}, message: ${err.message}\`);
    }
  }

  build() {
    Column() {
      Row() {
        Button('设置审批信息')
          .width(200)
          .height(50)
          .backgroundColor('#6366F1')
          .fontColor('#FFFFFF')
          .fontSize(14)
          .margin({ left: 20, bottom: 5 })
          .onClick(() => {
            this.setAuditInfo();
          })
      }

      Row() {
        Button('获取审批信息')
          .width(200)
          .height(50)
          .backgroundColor('#6366F1')
          .fontColor('#FFFFFF')
          .fontSize(14)
          .margin({ left: 20, bottom: 5 })
          .onClick(() => {
            this.getAuditInfo();
          })
      }
    }
  }
}