
# 如何开发映射脚本
OneAccess支持将企业的组织与用户属性映射至应用系统。可通过映射脚本自动生成应用的属性值，同时，可限制映射至应用的属性值。
下面将为您介绍如何开发映射定义的脚本。
#### 代码规则
在编写映射脚本时，OneAccess对脚本做了一些限制。包括禁止使用Java class、限制使用CPU的时间、限制内存的使用量、限定脚本格式、限制使用部分函数。
- 禁止使用Java class。 如果使用下面的代码：
  ```
  var File = Java.type('java.io.File'); File;
  ```
  会抛出下面的异常：
  ```
  java.lang.ClassNotFoundException: java.io.File
  ```
  
- 限制使用CPU的时间。 默认限制执行时间为1秒，超过时间将抛出异常。
  如果使用下面的代码：
  ```
  do{}while(true);
  ```
  会抛出下面的异常：
  ```
  ScriptCPUAbuseException
  ```
  
- 限制内存的使用量。 默认大小为10M，超过将抛出异常。
  如果使用下面的代码：
  ```
  var o={},i=0; while (true) {o[i++] = 'abc'}
  ```
  会抛出下面的异常：
  ```
  ScriptMemoryAbuseException
  ```
  
- 限定脚本格式。 为了方便重写脚本，脚本中的if、while、for语句必须使用大括号，否则将出现格式错误。
  如果使用下面的代码：
  ```
  var o={},i=0; while (true) o[i++] = 'abc';
  ```
  会抛出下面的异常：
  ```
  BracesException
  ```
  
- 限制使用部分函数。 如下的函数不允许在代码中使用，如果使用，将没有任何效果。
  ```
  print 
  echo 
  quit 
  exit
  readFully 
  readLine 
  load
  loadWithNewGlobal
  ```
  
 
#### 脚本示例
- 用户属性 在脚本中可以使用用户(user)这个对象，这个对象中包含了用户的所有属性，具体的属性以属性定义中的属性代码为准。用户属性定义可参考[用户属性定义](https://support.huaweicloud.com/usermanual-oneaccess/oneaccess_03_0026.html)，账号属性定义可参考[9](https://support.huaweicloud.com/devg-oneaccess/oneaccess_06_0011.html#oneaccess_06_0011__li1999573792412)。
  ![](https://support.huaweicloud.com/devg-oneaccess/zh-cn_image_0000002118128586.png)
  - 示例1：映射用户注册时间：
    ```
    var createdAt = user.createdAt; 
    var date =new Date(createdAt); 
    date.toISOString();
    ```
    
  
  - 示例2：映射用户的手机号，并隐藏中间4位：
    ```
    var mobile = user.mobile;
    var result = "";
    if(mobile.length == 15) {
      result = mobile.slice(0,7) + "****" + mobile.slice(-4);
    }
    result;
    ```
    
  
  - 示例3：根据用户名生成用户邮箱：
    ```
    var username = user.userName; 
    username.toLowerCase()+"@huaweicloud.com";
    ```
    
    

- 组织属性 在脚本中可以使用组织（organization）这个对象，这个对象中包含了组织的所有属性。
  - 示例1：映射组织名称：
    ```
    var orgName = organization.name;
    orgName.toString();
    ```
    
  
  - 示例2：映射组织编码：
    ```
    var orgCode = organization.code;
    orgCode.toString();
    ```
    
  
  - 示例3：映射组织id：
    ```
    var id= organization.id;
    id.toString();
    ```
    
   

- 系统属性 获取系统属性，如日期。
  示例：映射明天的当天时间：
  ```
  var date =new Date();
  date.setDate(date.getDate()+1); 
  date.toISOString();
  ```
  
 
