kd.bos.entity.datamodel

## 类 AbstractFormDataModel

- java.lang.Object
- - kd.bos.entity.datamodel.AbstractFormDataModel

- 所有已实现的接口:
    kd.bos.dataentity.entity.ISupportInitialize, IDataModel, IDataProvider, IEntryOperate, IRefrencedataProvider
  直接已知子类:
    DynamicFormModelProxy

      public abstract class AbstractFormDataModel
      extends java.lang.Object
      implements IDataModel, IRefrencedataProvider

- - ### 字段概要

    字段
    限定符和类型 | 字段和说明
    --- | ---
    `static java.lang.String` | `SEQ_FIELD_NAME`

  - ### 构造器概要

    构造器
    构造器和说明
    `AbstractFormDataModel(MainEntityType entityType)`
    `AbstractFormDataModel(java.lang.String entityName, java.lang.String pageId, java.util.Map<java.lang.Class<?>,java.lang.Object> services)`
    `AbstractFormDataModel(java.lang.String entityName, java.lang.String pageId, java.util.Map<java.lang.Class<?>,java.lang.Object> services, java.lang.String appId, java.lang.String permissionItem)`

  - ### 方法概要

    所有方法 实例方法 具体方法
    限定符和类型 | 方法和说明
    --- | ---
    `void` | `addDataModelChangeListener(IDataModelChangeListener l)` 订阅模型改变事件
    `void` | `addDataModelListener(IDataModelListener l)` 订阅模型相关事件
    `void` | `addService(java.lang.Class<?> clazz, java.lang.Object service)` 注册服务
    `int[]` | `appendEntryRow(java.lang.String entryKey, int row, int count)` 后续再有需要，不再改动，尽量新增代码，并单独提到这一块 by agbyte *********************** begin 回滚上面所有的改动，建议model的问题不要再给我改了，怕有问题，担不起责任 bug场景：树表F7返回多行，应该自动覆盖追加同级多行 不服请删除下面代码，自行修复 public int[] insertEntryRow(String entryKey, int row, int count) // 插入多行 public int[] appendEntryRow(String entryKey, int row, int count) // 追加多行 public int[] getEntryNextRows(String entryKey, int row, boolean includeSelf) // 行后面的所有同级行（树表有多级） public int getEntryNextRowCount(String entryKey, int row) // 统计行后面的所有同级行个数 另外，IEntryOperate里面加了对应的接口方法；知悉 另外，如果觉得直接batchCreateNewEntryRow然后修改pid可能会更简单，自行修改吧（自觉会有问题）
    `int[]` | `batchCreateNewEntryRow(java.lang.String entryKey, kd.bos.dataentity.entity.DynamicObject entityTemplate, int rowCount)` 批量创建行数以指定的行模板
    `int[]` | `batchCreateNewEntryRow(java.lang.String entryKey, int rowCount)` 批量新建分录行
    `int[]` | `batchCreateNewEntryRow(java.lang.String entryKey, TableValueSetter values)` 带值生成批量分录，只能使用此函数，禁止创建空行后再单行赋值
    `int[]` | `batchInsertEntryRow(EntryProp entryProp, int row, kd.bos.dataentity.entity.DynamicObjectCollection entryRows)`
    `int[]` | `batchInsertEntryRow(java.lang.String entryKey, int row, int rowCount)` 现只支持树形单据体，单据体暂未支持
    `void` | `beginInit()`
    `void` | `cacheExpireAfter(int timeout)` by agbyte *********************** over
    `void` | `clearDirty()` 清除整个实体的所有脏标志，包括单头和所有分录。
    `void` | `clearDirty(java.lang.String entityKey, int row)` 清除某个分录或单头的某行的脏标志。
    `void` | `clearNoDataRow()` BOS在新建时，会自动创建分录的行，如果用户未修改此行，需要删除此行。
    `void` | `copyEntryRow(java.lang.String entryKey, int[] row, boolean isCopyLinkEntry)` 复制分录行
    `void` | `create()`
    `java.lang.Object` | `createNewData()` 创建空的数据包
    `java.lang.Object` | `createNewData(java.lang.Object newObject)` 以已经有的空动态实体创建空的数据包
    `java.lang.Object` | `createNewData(java.lang.Object newObject, java.util.function.Supplier<OperationResult> initializer)` 创建数据包，调用初始化方法后触发afterCreateNew事件（一般webapi用来填充数据包）
    `java.lang.Object` | `createNewData(java.util.function.Supplier<OperationResult> initializer)`
    `int` | `createNewEntryRow(java.lang.String entrykey)` 新建分录/含子分路数据行
    `int` | `createNewEntryRow(java.lang.String entryKey, kd.bos.dataentity.entity.DynamicObject entityTemplate)`
    `int` | `createNewEntryRow(java.lang.String entrykey, int row, kd.bos.dataentity.entity.DynamicObject entryRow)` 创建一个新的分录行。
    `void` | `deleteEntryData(java.lang.String entryKey)` 清除分录数据包
    `void` | `deleteEntryRow(java.lang.String entryKey, int rowIndex)` 删除分录行
    `void` | `deleteEntryRows(java.lang.String entryKey, int[] rows)` 批量删除分录行
    `void` | `endInit()`
    `void` | `forceClearNoDataRow()` 此方法提供给单据转换强制删除空行，ClearNoDataRow在单据体必录并且只有1行分录情况下，不会删除此行
    `SetValueCallManager<SetValueCallInfo>` | `getCallManager()`
    `java.lang.String` | `getChangeDesc()` 输出数据包中发生了修改的实体、字段
    `<T> java.util.Map<java.lang.String,java.lang.Object>` | `getCompanyfromOrg(T org)` 得到某个组织的所属公司（通过行政组织树获得）。
    `<T> T` | `getContextVariable(java.lang.String name)` 获取上下文变量
    `java.lang.String` | `getCurrUserSetting(java.lang.String key)` 获取当前用户的配置信息
    `boolean` | `getDataChanged()`
    `kd.bos.dataentity.entity.DynamicObject` | `getDataEntity()` 获取根实体对象,当在缓存情况下不包含分录
    `kd.bos.dataentity.entity.DynamicObject` | `getDataEntity(boolean includeEntry)` /** 获取根实体对象，可以指定在缓存情况是否含分录
    `MainEntityType` | `getDataEntityType()` 获取实体类型
    `boolean` | `getDirty()` 获取整个实体的脏标志情况，有任何行脏都认为整个实体已经脏
    `kd.bos.dataentity.entity.DynamicObjectCollection` | `getEntityEntity(java.lang.String entryKey)`
    `java.lang.String` | `getEntryCurrentFieldKey(java.lang.String entryKey)`
    `kd.bos.dataentity.entity.DynamicObject` | `getEntryCurrentRow(java.lang.String entryKey)`
    `int` | `getEntryCurrentRowIndex(java.lang.String entryKey)` 获取分录当前行行号
    `kd.bos.dataentity.entity.DynamicObjectCollection` | `getEntryEntity(java.lang.String entryKey)` 获取单据体（包含子单据体）分录对应的数据集合
    `kd.bos.dataentity.entity.DynamicObject` | `getEntryEntity(java.lang.String entryKey, int rowIndex)` 返回某个实体指定行的记录，如果是子单据体，根据上级单据体确定索引。
    `kd.bos.dataentity.entity.DynamicObject[]` | `getEntryEntity(java.lang.String entryKey, int startRowIndex, int endRowInex)`
    `int` | `getEntryNextRowCount(java.lang.String entryKey, int row)` 树表F7返回数据后，需要判断后面有没有足够同级行 不够就appendEntryRow（不能insert，因为insert是插入下级行）
    `int[]` | `getEntryNextRows(java.lang.String entryKey, int row, boolean includeSelf)` 当前节点后面的同级节点
    `int` | `getEntryRowCount(java.lang.String entryKey)` 获取分录行数量
    `kd.bos.dataentity.entity.DynamicObject` | `getEntryRowEntity(java.lang.String entryKey, int rowIndex)` 获取单据体内的一行数据
    `MainEntityType` | `getMainEntityType()`
    `java.util.Map<java.lang.String,java.lang.Object>` | `getOrgbyYzjorgId(java.lang.String yzjorgId)` 通过云之家组织内码，返回一个云ERP的组织内码
    `java.lang.String` | `getPageId()`
    `kd.bos.dataentity.metadata.IDataEntityProperty` | `getProperty(java.lang.String name)` 获取字段对应的
    `<T> T` | `getService(java.lang.Class<?> clazz)` 获取服务
    `ITimeService` | `getTimeService()`
    `java.lang.Object` | `getValue(java.lang.String propName)` 获取根实体字段对应的值
    `java.lang.Object` | `getValue(java.lang.String propName, int rowIndex)` 获取分录实体字段对应的值
    `void` | `importEntry(java.lang.String key, java.lang.String uploadFile)`
    `int` | `insertEntryRow(java.lang.String entryKey, int row)` 插入分录行
    `boolean` | `isInitialized()`
    `kd.bos.dataentity.entity.DynamicObject` | `loadReferenceData(kd.bos.dataentity.metadata.dynamicobject.DynamicObjectType dt, java.lang.Object pkValue)` 动态实体类型、对象主键，获取动态实体对象
    `java.util.Map<java.lang.Object,kd.bos.dataentity.entity.DynamicObject>` | `loadReferenceDataBatch(kd.bos.dataentity.metadata.dynamicobject.DynamicObjectType dt, java.util.List<kd.bos.orm.query.QFilter> qFilters)`
    `java.util.Map<java.lang.Object,kd.bos.dataentity.entity.DynamicObject>` | `loadReferenceDataBatch(kd.bos.dataentity.metadata.dynamicobject.DynamicObjectType dt, java.lang.Object[] pkValues)` 动态实体类型、对象主键，获取动态实体对象集合
    `void` | `moveEntryRowDown(java.lang.String entryKey, int index)` 分录行下移
    `void` | `moveEntryRowsDown(java.lang.String entryKey, int[] rowIndexs)` 批量分录行下移
    `void` | `moveEntryRowsUp(java.lang.String entryKey, int[] rowIndexs)` 批量分录行上移
    `void` | `moveEntryRowUp(java.lang.String entryKey, int index)` 分录行上移
    `void` | `putContextVariable(java.lang.String name, java.lang.Object value)` 添加上下文变量
    `void` | `release()`
    `void` | `removeContextVariable(java.lang.String name)` 删除上下文变量
    `void` | `setCombinedValue(java.lang.String combinedKey, java.lang.String valueKey, java.lang.Object value, int row)`
    `void` | `setDataChanged(boolean value)`
    `void` | `setEntryCurrentRowIndex(java.lang.String entryKey, int row)`
    `void` | `setItemValueByID(kd.bos.dataentity.metadata.IDataEntityProperty property, kd.bos.dataentity.entity.DynamicObject dataEntity, java.lang.Object id)`
    `void` | `setItemValueByID(kd.bos.dataentity.metadata.IDataEntityProperty property, kd.bos.dataentity.entity.DynamicObject dataEntity, java.lang.Object id, java.util.List<kd.bos.orm.query.QFilter> qFilters)`
    `void` | `setItemValueByID(java.lang.String key, java.lang.Object id, int row)` /** 请求根据基础资料的内码，设置基础资料完整信息
    `void` | `setItemValueByID(java.lang.String key, java.lang.Object id, int row, int parentRowIndex)`
    `void` | `setItemValueByID(java.lang.String key, java.lang.Object id, int row, int parentRowIndex, java.util.List<kd.bos.orm.query.QFilter> qFilters)`
    `void` | `setItemValueByID(java.lang.String key, java.lang.Object id, int row, java.util.List<kd.bos.orm.query.QFilter> qFilters)`
    `void` | `setItemValueByNumber(kd.bos.dataentity.metadata.IDataEntityProperty property, kd.bos.dataentity.entity.DynamicObject dataEntity, java.lang.String number)`
    `void` | `setItemValueByNumber(kd.bos.dataentity.metadata.IDataEntityProperty property, kd.bos.dataentity.entity.DynamicObject dataEntity, java.lang.String number, java.util.List<kd.bos.orm.query.QFilter> qFilters)`
    `void` | `setItemValueByNumber(java.lang.String key, java.lang.String number, int row)` 请求根据基础资料的代码，设置基础资料完整信息
    `void` | `setItemValueByNumber(java.lang.String key, java.lang.String number, int row, int parentRowIndex)` 基础资料和多选基础资料赋值需要特殊处理
    `void` | `setItemValueByNumber(java.lang.String key, java.lang.String number, int row, int parentRowIndex, java.util.List<kd.bos.orm.query.QFilter> qFilters)`
    `void` | `setItemValueByNumber(java.lang.String key, java.lang.String number, int row, java.util.List<kd.bos.orm.query.QFilter> qFilters)`
    `void` | `setItemValueByNumbers(java.lang.String key, java.lang.String[] numbers, int startRow)`
    `void` | `setValue(kd.bos.dataentity.metadata.IDataEntityProperty prop, kd.bos.dataentity.entity.DynamicObject dataEntity, java.lang.Object value)`
    `void` | `setValue(java.lang.String propName, java.lang.Object value)`
    `void` | `setValue(java.lang.String propName, java.lang.Object value, int rowIndex)`
    `void` | `setValue(java.lang.String propName, java.lang.Object value, int rowIndex, int parentRowIndex)`
    `void` | `updateCache()` 提交当前实体数据到缓存

    - ### 从类继承的方法 java.lang.Object

      `equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

    - ### 从接口继承的方法 kd.bos.entity.datamodel.IRefrencedataProvider

      `fillReferenceData`

- - ### 字段详细资料

    - #### SEQ_FIELD_NAME

          public static final java.lang.String SEQ_FIELD_NAME

      另请参阅:
        常量字段值

  - ### 构造器详细资料

    - #### AbstractFormDataModel

          public AbstractFormDataModel(MainEntityType entityType)

    - #### AbstractFormDataModel

          public AbstractFormDataModel(java.lang.String entityName,
                                       java.lang.String pageId,
                                       java.util.Map<java.lang.Class<?>,java.lang.Object> services)

    - #### AbstractFormDataModel

          public AbstractFormDataModel(java.lang.String entityName,
                                       java.lang.String pageId,
                                       java.util.Map<java.lang.Class<?>,java.lang.Object> services,
                                       java.lang.String appId,
                                       java.lang.String permissionItem)

  - ### 方法详细资料

    - #### addService

          public void addService(java.lang.Class<?> clazz,
                                 java.lang.Object service)

      从接口复制的说明: `IDataModel`
      注册服务
      指定者:
        `addService` 在接口中 `IDataModel`

    - #### getService

          public <T> T getService(java.lang.Class<?> clazz)

      从接口复制的说明: `IDataModel`
      获取服务
      指定者:
        `getService` 在接口中 `IDataModel`
      返回:

    - #### getCallManager

          public SetValueCallManager<SetValueCallInfo> getCallManager()

    - #### getMainEntityType

          public MainEntityType getMainEntityType()

    - #### endInit

          @KSMethod
          public void endInit()

      指定者:
        `endInit` 在接口中 `kd.bos.dataentity.entity.ISupportInitialize`

    - #### beginInit

          @KSMethod
          public void beginInit()

      指定者:
        `beginInit` 在接口中 `kd.bos.dataentity.entity.ISupportInitialize`

    - #### isInitialized

          @KSMethod
          public boolean isInitialized()

      指定者:
        `isInitialized` 在接口中 `kd.bos.dataentity.entity.ISupportInitialize`

    - #### getDataEntity

          @KSMethod
          public kd.bos.dataentity.entity.DynamicObject getDataEntity()

      从接口复制的说明: `IDataModel`
      获取根实体对象,当在缓存情况下不包含分录
      指定者:
        `getDataEntity` 在接口中 `IDataModel`

    - #### getTimeService

          public ITimeService getTimeService()

      指定者:
        `getTimeService` 在接口中 `IDataModel`

    - #### getDataEntity

          @KSMethod
          public kd.bos.dataentity.entity.DynamicObject getDataEntity(boolean includeEntry)

      从接口复制的说明: `IDataModel`
      /** 获取根实体对象，可以指定在缓存情况是否含分录
      指定者:
        `getDataEntity` 在接口中 `IDataModel`
      参数:
        `includeEntry` - 是否包含分录
      返回:

    - #### getPageId

          @KSMethod
          public java.lang.String getPageId()

    - #### getDataChanged

          @KSMethod
          public boolean getDataChanged()

      指定者:
        `getDataChanged` 在接口中 `IDataModel`

    - #### setDataChanged

          @KSMethod
          public void setDataChanged(boolean value)

      指定者:
        `setDataChanged` 在接口中 `IDataModel`

    - #### getChangeDesc

          public java.lang.String getChangeDesc()

      从接口复制的说明: `IDataModel`
      输出数据包中发生了修改的实体、字段
      指定者:
        `getChangeDesc` 在接口中 `IDataModel`
      返回:

    - #### createNewData

          @KSMethod
          public java.lang.Object createNewData()

      从接口复制的说明: `IDataModel`
      创建空的数据包
      指定者:
        `createNewData` 在接口中 `IDataModel`

    - #### getContextVariable

          @KSMethod
          public <T> T getContextVariable(java.lang.String name)

      获取上下文变量
      指定者:
        `getContextVariable` 在接口中 `IDataModel`
      参数:
        `name` -
      返回:

    - #### putContextVariable

          @KSMethod
          public void putContextVariable(java.lang.String name,
                                                    java.lang.Object value)

      添加上下文变量
      指定者:
        `putContextVariable` 在接口中 `IDataModel`
      参数:
        `name` -
        `value` -

    - #### removeContextVariable

          @KSMethod
          public void removeContextVariable(java.lang.String name)

      删除上下文变量
      指定者:
        `removeContextVariable` 在接口中 `IDataModel`
      参数:
        `name` -
        `value` -

    - #### createNewData

          @KSMethod
          public java.lang.Object createNewData(java.lang.Object newObject,
                                                           java.util.function.Supplier<OperationResult> initializer)

      从接口复制的说明: `IDataModel`
      创建数据包，调用初始化方法后触发afterCreateNew事件（一般webapi用来填充数据包）
      指定者:
        `createNewData` 在接口中 `IDataModel`

    - #### createNewData

          @KSMethod
          public java.lang.Object createNewData(java.util.function.Supplier<OperationResult> initializer)

      指定者:
        `createNewData` 在接口中 `IDataModel`

    - #### createNewData

          @KSMethod
          public java.lang.Object createNewData(java.lang.Object newObject)

      从接口复制的说明: `IDataModel`
      以已经有的空动态实体创建空的数据包
      指定者:
        `createNewData` 在接口中 `IDataModel`
      参数:
        `newObject` - 动态实体对象

    - #### getEntryCurrentRowIndex

          @KSMethod
          public int getEntryCurrentRowIndex(java.lang.String entryKey)

      从接口复制的说明: `IEntryOperate`
      获取分录当前行行号
      指定者:
        `getEntryCurrentRowIndex` 在接口中 `IEntryOperate`
      返回:

    - #### getEntryCurrentFieldKey

          @KSMethod
          public java.lang.String getEntryCurrentFieldKey(java.lang.String entryKey)

      指定者:
        `getEntryCurrentFieldKey` 在接口中 `IDataModel`

    - #### getEntryCurrentRow

          public kd.bos.dataentity.entity.DynamicObject getEntryCurrentRow(java.lang.String entryKey)

    - #### getEntryRowCount

          @KSMethod
          public int getEntryRowCount(java.lang.String entryKey)

      从接口复制的说明: `IEntryOperate`
      获取分录行数量
      指定者:
        `getEntryRowCount` 在接口中 `IEntryOperate`
      返回:
        返回总行数

    - #### createNewEntryRow

          @KSMethod
          public int createNewEntryRow(java.lang.String entryKey,
                                                  kd.bos.dataentity.entity.DynamicObject entityTemplate)

      指定者:
        `createNewEntryRow` 在接口中 `IEntryOperate`

    - #### createNewEntryRow

          @KSMethod
          public int createNewEntryRow(java.lang.String entrykey)

      从接口复制的说明: `IEntryOperate`
      新建分录/含子分路数据行
      指定者:
        `createNewEntryRow` 在接口中 `IEntryOperate`

    - #### batchCreateNewEntryRow

          @KSMethod
          public int[] batchCreateNewEntryRow(java.lang.String entryKey,
                                                         int rowCount)

      从接口复制的说明: `IEntryOperate`
      批量新建分录行
      指定者:
        `batchCreateNewEntryRow` 在接口中 `IEntryOperate`
        `rowCount` - 批量创建行数

    - #### batchCreateNewEntryRow

          @KSMethod
          public int[] batchCreateNewEntryRow(java.lang.String entryKey,
                                                         kd.bos.dataentity.entity.DynamicObject entityTemplate,
                                                         int rowCount)

      从接口复制的说明: `IEntryOperate`
      批量创建行数以指定的行模板
      指定者:
        `batchCreateNewEntryRow` 在接口中 `IEntryOperate`
        `rowCount` - 行数

    - #### batchCreateNewEntryRow

          public int[] batchCreateNewEntryRow(java.lang.String entryKey,
                                              TableValueSetter values)

      带值生成批量分录，只能使用此函数，禁止创建空行后再单行赋值
      参数:
        `entryKey` -
        `values` -
      返回:

    - #### deleteEntryData

          @KSMethod
          public void deleteEntryData(java.lang.String entryKey)

      从接口复制的说明: `IEntryOperate`
      清除分录数据包
      指定者:
        `deleteEntryData` 在接口中 `IEntryOperate`

    - #### insertEntryRow

          public int insertEntryRow(java.lang.String entryKey,
                                    int row)

      从接口复制的说明: `IEntryOperate`
      插入分录行
      指定者:
        `insertEntryRow` 在接口中 `IEntryOperate`
        `row` - 分录行号
      返回:

    - #### batchInsertEntryRow

          public int[] batchInsertEntryRow(java.lang.String entryKey,
                                           int row,
                                           int rowCount)

      现只支持树形单据体，单据体暂未支持
      指定者:
        `batchInsertEntryRow` 在接口中 `IDataModel`
      参数:
        `entryKey` -
        `row` - 行号
        `rowCount` - 插入行数
      返回:

    - #### batchInsertEntryRow

          public int[] batchInsertEntryRow(EntryProp entryProp,
                                           int row,
                                           kd.bos.dataentity.entity.DynamicObjectCollection entryRows)

      指定者:
        `batchInsertEntryRow` 在接口中 `IDataModel`

    - #### copyEntryRow

          public void copyEntryRow(java.lang.String entryKey,
                                   int[] row,
                                   boolean isCopyLinkEntry)

      从接口复制的说明: `IEntryOperate`
      复制分录行
      指定者:
        `copyEntryRow` 在接口中 `IEntryOperate`
      参数:
        `entryKey` - 单据体分录标识
        `isCopyLinkEntry` - 是否复制关联单据体??

    - #### deleteEntryRow

          @KSMethod
          public void deleteEntryRow(java.lang.String entryKey,
                                                int rowIndex)

      从接口复制的说明: `IEntryOperate`
      删除分录行
      指定者:
        `deleteEntryRow` 在接口中 `IEntryOperate`

    - #### deleteEntryRows

          @KSMethod
          public void deleteEntryRows(java.lang.String entryKey,
                                                 int[] rows)

      从接口复制的说明: `IEntryOperate`
      批量删除分录行
      指定者:
        `deleteEntryRows` 在接口中 `IEntryOperate`

    - #### moveEntryRowUp

          @KSMethod
          public void moveEntryRowUp(java.lang.String entryKey,
                                                int index)

      从接口复制的说明: `IEntryOperate`
      分录行上移
      指定者:
        `moveEntryRowUp` 在接口中 `IEntryOperate`
        `index` - 要移动的行号

    - #### moveEntryRowsUp

          @KSMethod
          public void moveEntryRowsUp(java.lang.String entryKey,
                                                 int[] rowIndexs)

      从接口复制的说明: `IEntryOperate`
      批量分录行上移
      指定者:
        `moveEntryRowsUp` 在接口中 `IEntryOperate`
        `rowIndexs` - 要移动的批量行号

    - #### moveEntryRowDown

          @KSMethod
          public void moveEntryRowDown(java.lang.String entryKey,
                                                  int index)

      从接口复制的说明: `IEntryOperate`
      分录行下移
      指定者:
        `moveEntryRowDown` 在接口中 `IEntryOperate`
        `index` - 要移动的批量行号

    - #### moveEntryRowsDown

          @KSMethod
          public void moveEntryRowsDown(java.lang.String entryKey,
                                                   int[] rowIndexs)

      从接口复制的说明: `IEntryOperate`
      批量分录行下移
      指定者:
        `moveEntryRowsDown` 在接口中 `IEntryOperate`

    - #### importEntry

          public void importEntry(java.lang.String key,
                                  java.lang.String uploadFile)

    - #### setValue

          @KSMethod
          public void setValue(java.lang.String propName,
                                          java.lang.Object value)

      指定者:
        `setValue` 在接口中 `IDataModel`

    - #### setValue

          @KSMethod
          public void setValue(java.lang.String propName,
                                          java.lang.Object value,
                                          int rowIndex)

      指定者:
        `setValue` 在接口中 `IDataModel`

    - #### setValue

          @KSMethod
          public void setValue(java.lang.String propName,
                                          java.lang.Object value,
                                          int rowIndex,
                                          int parentRowIndex)

      指定者:
        `setValue` 在接口中 `IDataModel`

    - #### setValue

          @KSMethod
          public void setValue(kd.bos.dataentity.metadata.IDataEntityProperty prop,
                                          kd.bos.dataentity.entity.DynamicObject dataEntity,
                                          java.lang.Object value)

      指定者:
        `setValue` 在接口中 `IDataModel`

    - #### getValue

          @KSMethod
          public java.lang.Object getValue(java.lang.String propName)

      从接口复制的说明: `IDataModel`
      获取根实体字段对应的值
      指定者:
        `getValue` 在接口中 `IDataModel`
      参数:
        `propName` - 字段属性名称
      返回:

    - #### getValue

          @KSMethod
          public java.lang.Object getValue(java.lang.String propName,
                                                      int rowIndex)

      从接口复制的说明: `IDataModel`
      获取分录实体字段对应的值
      指定者:
        `getValue` 在接口中 `IDataModel`
      参数:
        `propName` - 字段属性名称
        `rowIndex` - 分录行号
      返回:

    - #### getDataEntityType

          @KSMethod
          public MainEntityType getDataEntityType()

      从接口复制的说明: `IDataModel`
      获取实体类型
      指定者:
        `getDataEntityType` 在接口中 `IDataModel`
      返回:
        实体类型

    - #### getEntryEntity

          public kd.bos.dataentity.entity.DynamicObject getEntryEntity(java.lang.String entryKey,
                                                                       int rowIndex)

      返回某个实体指定行的记录，如果是子单据体，根据上级单据体确定索引。
      参数:
        `cp` - 分录对应实体
        `row` - 行索引
      返回:
        分录行动态实体

    - #### getEntityEntity

          public kd.bos.dataentity.entity.DynamicObjectCollection getEntityEntity(java.lang.String entryKey)

    - #### setEntryCurrentRowIndex

          @KSMethod
          public void setEntryCurrentRowIndex(java.lang.String entryKey,
                                                         int row)

      指定者:
        `setEntryCurrentRowIndex` 在接口中 `IEntryOperate`

    - #### updateCache

          public void updateCache()

      从接口复制的说明: `IDataModel`
      提交当前实体数据到缓存
      指定者:
        `updateCache` 在接口中 `IDataModel`

    - #### createNewEntryRow

          @KSMethod
          public int createNewEntryRow(java.lang.String entrykey,
                                                  int row,
                                                  kd.bos.dataentity.entity.DynamicObject entryRow)

      从接口复制的说明: `IEntryOperate`
      创建一个新的分录行。
      指定者:
        `createNewEntryRow` 在接口中 `IEntryOperate`
        `row` - 所在行索引，可以是-1，表示加入到末尾。
        `entryRow` - 如果指定此参数，表示外部已经构建了数据。

    - #### getProperty

          @KSMethod
          public kd.bos.dataentity.metadata.IDataEntityProperty getProperty(java.lang.String name)

      从接口复制的说明: `IDataModel`
      获取字段对应的
      指定者:
        `getProperty` 在接口中 `IDataModel`
      返回:

    - #### getEntryRowEntity

          @KSMethod
          public kd.bos.dataentity.entity.DynamicObject getEntryRowEntity(java.lang.String entryKey,
                                                                                     int rowIndex)

      从接口复制的说明: `IEntryOperate`
      获取单据体内的一行数据
      指定者:
        `getEntryRowEntity` 在接口中 `IEntryOperate`
        `rowIndex` - 行索引
      返回:

    - #### getEntryEntity

          @KSMethod
          public kd.bos.dataentity.entity.DynamicObjectCollection getEntryEntity(java.lang.String entryKey)

      从接口复制的说明: `IEntryOperate`
      获取单据体（包含子单据体）分录对应的数据集合
      指定者:
        `getEntryEntity` 在接口中 `IEntryOperate`
      参数:
        `entryKey` - 实体定义 数据包
      返回:
        分录数据集合

    - #### getEntryEntity

          @KSMethod
          public kd.bos.dataentity.entity.DynamicObject[] getEntryEntity(java.lang.String entryKey,
                                                                                    int startRowIndex,
                                                                                    int endRowInex)

      指定者:
        `getEntryEntity` 在接口中 `IEntryOperate`

    - #### release

          public void release()

    - #### create

          public void create()

    - #### loadReferenceData

          public kd.bos.dataentity.entity.DynamicObject loadReferenceData(kd.bos.dataentity.metadata.dynamicobject.DynamicObjectType dt,
                                                                          java.lang.Object pkValue)

      从接口复制的说明: `IDataProvider`
      动态实体类型、对象主键，获取动态实体对象
      指定者:
        `loadReferenceData` 在接口中 `IDataProvider`
      参数:
        `dt` - 动态实体类型
        `pkValue` - 主键值
      返回:

    - #### loadReferenceDataBatch

          public java.util.Map<java.lang.Object,kd.bos.dataentity.entity.DynamicObject> loadReferenceDataBatch(kd.bos.dataentity.metadata.dynamicobject.DynamicObjectType dt,
                                                                                                               java.lang.Object[] pkValues)

      从接口复制的说明: `IDataProvider`
      动态实体类型、对象主键，获取动态实体对象集合
      指定者:
        `loadReferenceDataBatch` 在接口中 `IDataProvider`
      参数:
        `dt` - 动态实体类型
        `pkValues` - 主键值集合
      返回:

    - #### loadReferenceDataBatch

          public java.util.Map<java.lang.Object,kd.bos.dataentity.entity.DynamicObject> loadReferenceDataBatch(kd.bos.dataentity.metadata.dynamicobject.DynamicObjectType dt,
                                                                                                               java.util.List<kd.bos.orm.query.QFilter> qFilters)

    - #### clearDirty

          public void clearDirty()

      从接口复制的说明: `IDataModel`
      清除整个实体的所有脏标志，包括单头和所有分录。
      指定者:
        `clearDirty` 在接口中 `IDataModel`

    - #### clearDirty

          public void clearDirty(java.lang.String entityKey,
                                 int row)

      从接口复制的说明: `IDataModel`
      清除某个分录或单头的某行的脏标志。
      指定者:
        `clearDirty` 在接口中 `IDataModel`
      参数:
        `entityKey` - 要清除的分录或单头的键
        `row` - 第几行数据

    - #### getDirty

          public boolean getDirty()

      从接口复制的说明: `IDataModel`
      获取整个实体的脏标志情况，有任何行脏都认为整个实体已经脏
      指定者:
        `getDirty` 在接口中 `IDataModel`
      返回:
        true表示有某个部分已经修改过，false表示没有任何修改，包括行的新增、修改和删除以及字段的修改。

    - #### clearNoDataRow

          public void clearNoDataRow()

      从接口复制的说明: `IDataModel`
      BOS在新建时，会自动创建分录的行，如果用户未修改此行，需要删除此行。
      指定者:
        `clearNoDataRow` 在接口中 `IDataModel`

    - #### forceClearNoDataRow

          public void forceClearNoDataRow()

      从接口复制的说明: `IDataModel`
      此方法提供给单据转换强制删除空行，ClearNoDataRow在单据体必录并且只有1行分录情况下，不会删除此行
      指定者:
        `forceClearNoDataRow` 在接口中 `IDataModel`

    - #### setCombinedValue

          public void setCombinedValue(java.lang.String combinedKey,
                                       java.lang.String valueKey,
                                       java.lang.Object value,
                                       int row)

    - #### setItemValueByNumber

          @KSMethod
          public void setItemValueByNumber(java.lang.String key,
                                                      java.lang.String number,
                                                      int row)

      从接口复制的说明: `IDataModel`
      请求根据基础资料的代码，设置基础资料完整信息
      指定者:
        `setItemValueByNumber` 在接口中 `IDataModel`
      参数:
        `key` - 基础资料字段Key
        `number` - 代码
        `row` - 所在分录行，从0开始

    - #### setItemValueByNumber

          @KSMethod
          public void setItemValueByNumber(java.lang.String key,
                                                      java.lang.String number,
                                                      int row,
                                                      java.util.List<kd.bos.orm.query.QFilter> qFilters)

      指定者:
        `setItemValueByNumber` 在接口中 `IDataModel`

    - #### setItemValueByNumber

          @KSMethod
          public void setItemValueByNumber(java.lang.String key,
                                                      java.lang.String number,
                                                      int row,
                                                      int parentRowIndex)

      基础资料和多选基础资料赋值需要特殊处理
      指定者:
        `setItemValueByNumber` 在接口中 `IDataModel`

    - #### setItemValueByNumber

          @KSMethod
          public void setItemValueByNumber(java.lang.String key,
                                                      java.lang.String number,
                                                      int row,
                                                      int parentRowIndex,
                                                      java.util.List<kd.bos.orm.query.QFilter> qFilters)

      指定者:
        `setItemValueByNumber` 在接口中 `IDataModel`

    - #### setItemValueByNumber

          public void setItemValueByNumber(kd.bos.dataentity.metadata.IDataEntityProperty property,
                                           kd.bos.dataentity.entity.DynamicObject dataEntity,
                                           java.lang.String number)

      指定者:
        `setItemValueByNumber` 在接口中 `IDataModel`

    - #### setItemValueByNumber

          public void setItemValueByNumber(kd.bos.dataentity.metadata.IDataEntityProperty property,
                                           kd.bos.dataentity.entity.DynamicObject dataEntity,
                                           java.lang.String number,
                                           java.util.List<kd.bos.orm.query.QFilter> qFilters)

      指定者:
        `setItemValueByNumber` 在接口中 `IDataModel`

    - #### setItemValueByNumbers

          @KSMethod
          public void setItemValueByNumbers(java.lang.String key,
                                                       java.lang.String[] numbers,
                                                       int startRow)

      指定者:
        `setItemValueByNumbers` 在接口中 `IDataModel`

    - #### setItemValueByID

          @KSMethod
          public void setItemValueByID(java.lang.String key,
                                                  java.lang.Object id,
                                                  int row)

      从接口复制的说明: `IDataModel`
      /** 请求根据基础资料的内码，设置基础资料完整信息
      指定者:
        `setItemValueByID` 在接口中 `IDataModel`
      参数:
        `key` - 基础资料字段Key
        `id` - 内码
        `row` - 所在分录行，从0开始

    - #### setItemValueByID

          @KSMethod
          public void setItemValueByID(java.lang.String key,
                                                  java.lang.Object id,
                                                  int row,
                                                  java.util.List<kd.bos.orm.query.QFilter> qFilters)

      指定者:
        `setItemValueByID` 在接口中 `IDataModel`

    - #### setItemValueByID

          @KSMethod
          public void setItemValueByID(java.lang.String key,
                                                  java.lang.Object id,
                                                  int row,
                                                  int parentRowIndex)

      指定者:
        `setItemValueByID` 在接口中 `IDataModel`

    - #### setItemValueByID

          @KSMethod
          public void setItemValueByID(java.lang.String key,
                                                  java.lang.Object id,
                                                  int row,
                                                  int parentRowIndex,
                                                  java.util.List<kd.bos.orm.query.QFilter> qFilters)

      指定者:
        `setItemValueByID` 在接口中 `IDataModel`

    - #### setItemValueByID

          public void setItemValueByID(kd.bos.dataentity.metadata.IDataEntityProperty property,
                                       kd.bos.dataentity.entity.DynamicObject dataEntity,
                                       java.lang.Object id)

      指定者:
        `setItemValueByID` 在接口中 `IDataModel`

    - #### setItemValueByID

          public void setItemValueByID(kd.bos.dataentity.metadata.IDataEntityProperty property,
                                       kd.bos.dataentity.entity.DynamicObject dataEntity,
                                       java.lang.Object id,
                                       java.util.List<kd.bos.orm.query.QFilter> qFilters)

      指定者:
        `setItemValueByID` 在接口中 `IDataModel`

    - #### addDataModelListener

          public void addDataModelListener(IDataModelListener l)

      从接口复制的说明: `IDataModel`
      订阅模型相关事件
      指定者:
        `addDataModelListener` 在接口中 `IDataModel`

    - #### addDataModelChangeListener

          public void addDataModelChangeListener(IDataModelChangeListener l)

      从接口复制的说明: `IDataModel`
      订阅模型改变事件
      指定者:
        `addDataModelChangeListener` 在接口中 `IDataModel`

    - #### getCurrUserSetting

          public java.lang.String getCurrUserSetting(java.lang.String key)

      获取当前用户的配置信息
      指定者:
        `getCurrUserSetting` 在接口中 `IDataModel`
      参数:
        `key:` - 配置项的标识
      返回:

    - #### getOrgbyYzjorgId

          public java.util.Map<java.lang.String,java.lang.Object> getOrgbyYzjorgId(java.lang.String yzjorgId)

      从接口复制的说明: `IDataModel`
      通过云之家组织内码，返回一个云ERP的组织内码
      指定者:
        `getOrgbyYzjorgId` 在接口中 `IDataModel`
      返回:
        存在则返回Map{id-内码,number-代码,name-名称}，否则Map为空

    - #### getCompanyfromOrg

          public <T> java.util.Map<java.lang.String,java.lang.Object> getCompanyfromOrg(T org)

      从接口复制的说明: `IDataModel`
      得到某个组织的所属公司（通过行政组织树获得）。如果当前组织为公司则直接返回，否则向上遍历得到最近的公司。可能返回为空map
      指定者:
        `getCompanyfromOrg` 在接口中 `IDataModel`
      参数:
        `org` - 组织内码（long）或者 组织代码（String）
      返回:
        行政组织视图上的组织所属公司，数据{id-内码,number-代码,name-名称}

    - #### appendEntryRow

          public int[] appendEntryRow(java.lang.String entryKey,
                                      int row,
                                      int count)

      后续再有需要，不再改动，尽量新增代码，并单独提到这一块 by agbyte *********************** begin 回滚上面所有的改动，建议model的问题不要再给我改了，怕有问题，担不起责任 bug场景：树表F7返回多行，应该自动覆盖追加同级多行 不服请删除下面代码，自行修复 public int[] insertEntryRow(String entryKey, int row, int count) // 插入多行 public int[] appendEntryRow(String entryKey, int row, int count) // 追加多行 public int[] getEntryNextRows(String entryKey, int row, boolean includeSelf) // 行后面的所有同级行（树表有多级） public int getEntryNextRowCount(String entryKey, int row) // 统计行后面的所有同级行个数 另外，IEntryOperate里面加了对应的接口方法；知悉 另外，如果觉得直接batchCreateNewEntryRow然后修改pid可能会更简单，自行修改吧（自觉会有问题）
      指定者:
        `appendEntryRow` 在接口中 `IEntryOperate`
      返回:

    - #### getEntryNextRows

          public int[] getEntryNextRows(java.lang.String entryKey,
                                        int row,
                                        boolean includeSelf)

      从接口复制的说明: `IEntryOperate`
      当前节点后面的同级节点
      指定者:
        `getEntryNextRows` 在接口中 `IEntryOperate`
      返回:

    - #### getEntryNextRowCount

          public int getEntryNextRowCount(java.lang.String entryKey,
                                          int row)

      从接口复制的说明: `IEntryOperate`
      树表F7返回数据后，需要判断后面有没有足够同级行 不够就appendEntryRow（不能insert，因为insert是插入下级行）
      指定者:
        `getEntryNextRowCount` 在接口中 `IEntryOperate`
      返回:

    - #### cacheExpireAfter

          public void cacheExpireAfter(int timeout)

      by agbyte *********************** over
      指定者:
        `cacheExpireAfter` 在接口中 `IDataModel`