---
title: "4.2.3.2、表单布局版本：FormLayoutVersionApiService"
docId: "954968064014680064"
source: "https://weapp.eteams.cn/build/techdoc/wdoc/index.html#/public/repository/9c2e5f92-03b4-4207-9b22-a0c1dd79ac56/doc/954968064014680064"
---
> 所属包：weaver-common-form-extend
> 
> 所属类：com.weaver.common.form.formapi.FormAPIService

### 1 表单布局(FormLayout)相关接口

#### 1.1 根据ID获取表单布局

**方法名：**

```java
/**
 * @Description: 根据ID获取表单布局
 * @param layoutId 布局ID
 * @param employee 用户信息（必须包含id和tenantKey）
 * @return FormLayout 表单布局
 * @throws
 */
FormLayout getFormLayoutById(Long layoutId, SimpleEmployee employee);
```

**参数：**

| 参数名 | 必传 | 类型 | 类型所属包路径 | 描述 |
| --- | --- | --- | --- | --- |
| layoutId | 是 | Long | java.lang.Long | 表单布局ID |
| employee | 是 | SimpleEmployee | com.weaver.teams.domain.user.SimpleEmployee | 用户信息（必须包含id和tenantKey） |
| **返回值：** |  |  |  |  |

| 类型 | 类型所属包路径 | 描述 |
| --- | --- | --- |
| FormLayout | com.weaver.common.form.layout.FormLayout | 表单布局Bean |
| **示例：** |  |  |

```java
FormLayout formLayout = formAPIService.getFormLayoutById(layoutId, employee);
```

#### 1.2 根据表单ID获取表单最新布局（默认返回1条-根据创建时间排序）

**方法名：**

```java
/**
 * @Description: 根据表单ID获取表单最新布局（默认返回1条-根据创建时间排序）
 * @param formId 表单ID
 * @param employee 用户信息（必须包含id和tenantKey）
 * @return FormLayout 表单布局
 * @throws
 */
FormLayout getLatestFormLayoutByFormId(Long formId,SimpleEmployee employee);
```

**参数：**

| 参数名 | 必传 | 类型 | 类型所属包路径 | 描述 |
| --- | --- | --- | --- | --- |
| formId | 是 | Long | java.lang.Long | 表单ID |
| employee | 是 | SimpleEmployee | com.weaver.teams.domain.user.SimpleEmployee | 用户信息（必须包含id和tenantKey） |
| **返回值：** |  |  |  |  |

| 类型 | 类型所属包路径 | 描述 |
| --- | --- | --- |
| FormLayout | com.weaver.common.form.layout.FormLayout | 表单布局Bean |
| **示例：** |  |  |

```java
FormLayout formLayout = formAPIService.getLatestFormLayoutByFormId(formId, employee);
```

#### 1.3 高级搜索：根据表单布局搜索实体类，查询表单布局集合

**方法名：**

```java
/**
 * @Description: 高级搜索：根据表单布局搜索实体类，查询表单布局集合
 * @param entity 表单布局搜索实体类
 * @param employee 用户信息（必须包含id和tenantKey）
 * @return List<FormLayout> 表单布局集合 
 * @throws
 */
List<FormLayout> listFormLayoutBySearchEntity(FormLayoutSearchEntity entity, SimpleEmployee employee);
```

**参数：**

| 参数名 | 必传 | 类型 | 类型所属包路径 | 描述 |
| --- | --- | --- | --- | --- |
| entity | 是 | FormLayoutSearchEntity | com.weaver.common.form.searchentity.FormLayoutSearchEntity | 表单布局高级搜索实体类 |
| employee | 是 | SimpleEmployee | com.weaver.teams.domain.user.SimpleEmployee | 用户信息（必须包含id和tenantKey） |

**FormLayoutSearchEntity：**

> 描述：表单布局高级搜索实体类（支持扩展条件）
> 
> 所属包：weaver-common-form-extend
> 
> 所属类：com.weaver.common.form.searchentity.FormLayoutSearchEntity

| 属性名 | 必传 | 类型 | 类型所属包路径 | 描述 |
| --- | --- | --- | --- | --- |
| layoutId | 否 | Long | java.lang.Long | 表单布局Id |
| formId | 否 | Long | java.lang.Long | 表单Id |
| limitNumber | 否 | int | - | 限制查询的记录条数（默认为0，只有传入大于0的数字时才限制） |
| **返回值：** |  |  |  |  |

| 类型 | 类型所属包路径 | 描述 |
| --- | --- | --- |
| `List<FormLayout>` | com.weaver.common.form.layout.FormLayout | 表单布局Bean集合 |
| **示例：** |  |  |

```java
List<FormLayout> formLayouts = formAPIService.listFormLayoutBySearchEntity(entity, employee);
```

#### 1.4 根据表单Id、字段权限Id集合重置表单布局

**方法名：**

```java
/**
 * @Description: 根据表单Id、字段权限Id集合重置表单布局
 * @param formLayout 表单布局Bean
 * @param formId 表单Id
 * @param permissionIds 字段权限Id集合
 * @param employee 用户信息（必须包含id和tenantKey）
 * @return FormLayout 表单布局
 * @throws
 */
void resetFormLayoutByFormIdAndPermissionIds(FormLayout formLayout, Long formId, List<Long> permissionIds, SimpleEmployee employee);
```

**参数：**

| 参数名 | 必传 | 类型 | 类型所属包路径 | 描述 |
| --- | --- | --- | --- | --- |
| formLayout | 是 | FormLayout | com.weaver.common.form.layout.FormLayout | 表单布局Bean |
| formId | 是 | Long | java.lang.Long | 表单ID |
| permissionIds | 是 | `List<Long>` | java.lang.Long | 字段权限ID集合 |
| employee | 是 | SimpleEmployee | com.weaver.teams.domain.user.SimpleEmployee | 用户信息（必须包含id和tenantKey） |

**返回值：** 无

**说明：**

> 预览表单、查看表单数据时根据字段权限设置，将字段权限数据放入布局中
> 
> 对接步骤：
> 
> - 1、前端对接支持传入自定义参数customParam
> - 2、后端表单远程接口重载两个方法(见下面说明及示例代码)
> - 3、后端重载方法中，根据自定义参数获取字段权限ID集合
> - 4、调用formAPIService.resetFormLayoutByFormIdAndPermissionIds，将字段权限详情放入布局中
> 
> 后端各模块表单远程接口(如：FlowFreeFormService)，需要重载FreeFormService中两个方法(详情见示例)：
> 
> - getByFormIdAndTypeAndCustomParam
> - getByLayoutIdAndTypeAndCustomParam

**示例：**

```java
@Override
public FormLayout getByFormIdAndTypeAndCustomParam(Long formId, LayoutType layoutType, SimpleEmployee employee, FormData formData, Map<String, Object> customParam) {
    FormLayout formLayout = super.getByFormIdAndTypeAndCustomParam(formId, layoutType, employee, formData, customParam);
    List<Long> permissionIds = ........;    // 根据自定义参数customParam获取字段权限Id集合
    formAPIService.resetFormLayoutByFormIdAndPermissionIds(formLayout, formId, permissionIds, employee);
    return formLayout;
}

@Override
public FormLayout getByLayoutIdAndTypeAndCustomParam(Long layoutId, LayoutType layoutType, SimpleEmployee employee, FormData formData, Long formId, Map<String, Object> customParam) {
    FormLayout formLayout = super.getByLayoutIdAndTypeAndCustomParam(layoutId, layoutType, employee, formData, formId, customParam);
    List<Long> permissionIds = ........;    // 根据自定义参数customParam获取字段权限Id集合
    formAPIService.resetFormLayoutByFormIdAndPermissionIds(formLayout, formId, permissionIds, employee);
    return formLayout;
}
```
