kd.bos.entity.datamodel

## 接口 IDataModel

- 所有超级接口:
    IDataProvider, IEntryOperate, kd.bos.dataentity.entity.ISupportInitialize
  所有已知子接口:
    IBaseModel, IBillModel
  所有已知实现类:
    AbstractFormDataModel, DynamicFormModelProxy

      public interface IDataModel
      extends kd.bos.dataentity.entity.ISupportInitialize, IEntryOperate, IDataProvider

  动态表单数据模型编程接口

- - ### 方法概要

    所有方法 实例方法 抽象方法 默认方法 已过时的方法
    限定符和类型 | 方法和说明
    --- | ---
    `void` | `addDataModelChangeListener(IDataModelChangeListener l)` 订阅模型改变事件
    `void` | `addDataModelListener(IDataModelListener l)` 订阅模型相关事件
    `default void` | `addService(java.lang.Class<?> clazz, java.lang.Object service)` 注册服务
    `int[]` | `batchInsertEntryRow(EntryProp entryProp, int row, kd.bos.dataentity.entity.DynamicObjectCollection entryRows)`
    `int[]` | `batchInsertEntryRow(java.lang.String entryKey, int row, int rowCount)`
    `void` | `cacheExpireAfter(int timeout)` 刷新模型
    `void` | `clearDirty()` 已过时。
    `void` | `clearDirty(java.lang.String entityKey, int row)` 已过时。
    `void` | `clearNoDataRow()` BOS在新建时，会自动创建分录的行，如果用户未修改此行，需要删除此行。
    `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)` 已过时。 废弃，请使用createNewData(Object newObject, Supplier initializer)
    `void` | `forceClearNoDataRow()` 此方法提供给单据转换强制删除空行，ClearNoDataRow在单据体必录并且只有1行分录情况下，不会删除此行
    `default 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()` 已过时。
    `java.lang.String` | `getEntryCurrentFieldKey(java.lang.String entryKey)` 已过时。
    `java.util.Map<java.lang.String,java.lang.Object>` | `getOrgbyYzjorgId(java.lang.String yzjorgId)` 通过云之家组织内码，返回一个云ERP的组织内码
    `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` | `putContextVariable(java.lang.String name, java.lang.Object value)` 添加上下文变量
    `void` | `removeContextVariable(java.lang.String name)` 删除上下文变量
    `void` | `setDataChanged(boolean value)`
    `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()` 提交当前实体数据到缓存

    - ### 从接口继承的方法 kd.bos.dataentity.entity.ISupportInitialize

      `beginInit, endInit, isInitialized`

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

      `appendEntryRow, batchCreateNewEntryRow, batchCreateNewEntryRow, copyEntryRow, createNewEntryRow, createNewEntryRow, createNewEntryRow, deleteEntryData, deleteEntryRow, deleteEntryRows, getEntryCurrentRowIndex, getEntryEntity, getEntryEntity, getEntryNextRowCount, getEntryNextRows, getEntryRowCount, getEntryRowEntity, insertEntryRow, moveEntryRowDown, moveEntryRowsDown, moveEntryRowsUp, moveEntryRowUp, setEntryCurrentRowIndex`

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

      `loadReferenceData, loadReferenceDataBatch`

- - ### 方法详细资料

    - #### getContextVariable

          <T> T getContextVariable(java.lang.String name)

      获取上下文变量
      参数:
        `name` -
      返回:

    - #### putContextVariable

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

      添加上下文变量
      参数:
        `name` -
        `value` -

    - #### removeContextVariable

          void removeContextVariable(java.lang.String name)

      删除上下文变量
      参数:
        `name` -
        `value` -

    - #### addDataModelListener

          void addDataModelListener(IDataModelListener l)

      订阅模型相关事件
      参数:
        `l` -

    - #### addDataModelChangeListener

          void addDataModelChangeListener(IDataModelChangeListener l)

      订阅模型改变事件
      参数:
        `l` -

    - #### getDataEntityType

          MainEntityType getDataEntityType()

      获取实体类型
      返回:
        实体类型

    - #### getProperty

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

      获取字段对应的
      参数:
        `name` -
      返回:

    - #### createNewData

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

      创建数据包，调用初始化方法后触发afterCreateNew事件（一般webapi用来填充数据包）

    - #### createNewData

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

      已过时。 废弃，请使用createNewData(Object newObject, Supplier initializer)

    - #### createNewData

          java.lang.Object createNewData(java.lang.Object newObject)

      以已经有的空动态实体创建空的数据包
      参数:
        `newObject` - 动态实体对象

    - #### createNewData

          java.lang.Object createNewData()

      创建空的数据包

    - #### getDataEntity

          kd.bos.dataentity.entity.DynamicObject getDataEntity()

      获取根实体对象,当在缓存情况下不包含分录

    - #### getDataEntity

          kd.bos.dataentity.entity.DynamicObject getDataEntity(boolean includeEntry)

      /** 获取根实体对象，可以指定在缓存情况是否含分录
      参数:
        `includeEntry` - 是否包含分录
      返回:

    - #### updateCache

          void updateCache()

      提交当前实体数据到缓存

    - #### getValue

          java.lang.Object getValue(java.lang.String propName)

      获取根实体字段对应的值
      参数:
        `propName` - 字段属性名称
      返回:

    - #### getValue

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

      获取分录实体字段对应的值
      参数:
        `propName` - 字段属性名称
        `rowIndex` - 分录行号
      返回:

    - #### setValue

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

    - #### setValue

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

    - #### setValue

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

    - #### setValue

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

    - #### getTimeService

          ITimeService getTimeService()

    - #### clearDirty

          @Deprecated
          void clearDirty()

      已过时。
      清除整个实体的所有脏标志，包括单头和所有分录。

    - #### clearDirty

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

      已过时。
      清除某个分录或单头的某行的脏标志。
      参数:
        `entityKey` - 要清除的分录或单头的键
        `row` - 第几行数据

    - #### getDirty

          @Deprecated
          boolean getDirty()

      已过时。
      获取整个实体的脏标志情况，有任何行脏都认为整个实体已经脏
      返回:
        true表示有某个部分已经修改过，false表示没有任何修改，包括行的新增、修改和删除以及字段的修改。

    - #### clearNoDataRow

          void clearNoDataRow()

      BOS在新建时，会自动创建分录的行，如果用户未修改此行，需要删除此行。

    - #### forceClearNoDataRow

          void forceClearNoDataRow()

      此方法提供给单据转换强制删除空行，ClearNoDataRow在单据体必录并且只有1行分录情况下，不会删除此行

    - #### setItemValueByNumber

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

      请求根据基础资料的代码，设置基础资料完整信息
      参数:
        `key` - 基础资料字段Key
        `number` - 代码
        `row` - 所在分录行，从0开始

    - #### setItemValueByNumber

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

    - #### setItemValueByNumber

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

    - #### setItemValueByNumber

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

    - #### setItemValueByNumber

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

    - #### setItemValueByNumber

          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)

    - #### setItemValueByNumbers

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

    - #### setItemValueByID

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

      /** 请求根据基础资料的内码，设置基础资料完整信息
      参数:
        `key` - 基础资料字段Key
        `id` - 内码
        `row` - 所在分录行，从0开始

    - #### setItemValueByID

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

    - #### setItemValueByID

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

    - #### setItemValueByID

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

    - #### setItemValueByID

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

    - #### setItemValueByID

          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)

    - #### getEntryCurrentFieldKey

          @Deprecated
          java.lang.String getEntryCurrentFieldKey(java.lang.String entryKey)

      已过时。

    - #### getDataChanged

          boolean getDataChanged()

    - #### setDataChanged

          void setDataChanged(boolean value)

    - #### getChangeDesc

          default java.lang.String getChangeDesc()

      输出数据包中发生了修改的实体、字段
      返回:

    - #### getCurrUserSetting

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

      获取当前用户的配置信息
      参数:
        `key:` - 配置项的标识
      返回:

    - #### getOrgbyYzjorgId

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

      通过云之家组织内码，返回一个云ERP的组织内码
      参数:
        `yzjorgid` - 云之家组织id，为guid字符串
      返回:
        存在则返回Map{id-内码,number-代码,name-名称}，否则Map为空

    - #### getCompanyfromOrg

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

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

    - #### addService

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

      注册服务
      参数:
        `clazz` -
        `service` -

    - #### getService

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

      获取服务
      参数:
        `clazz` -
      返回:

    - #### cacheExpireAfter

          void cacheExpireAfter(int timeout)

      刷新模型

    - #### batchInsertEntryRow

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

    - #### batchInsertEntryRow

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