首页 / 浏览问题 / 移动GIS / 问题详情
创建字段“SysServerNotifyTime”时提示信息非法!
18EXP 2023年05月15日

使用产品:imobile 11i 操作系统:华为平板 SCMR-W09
数据类型: 文件型
问题详细描述:使用 iMobile 中的 FieldInfos 对象创建“SysServerNotifyTime”字段失败,然后尝试使用 Supermap Desktop 10i(2020) 创建时提示信息非法。之前一直使用该字段都没有问题,今天才出现这个问题。

if (fieldInfos.indexOf("SysServerNotifyTime") < 0) {
    val info = FieldInfo().apply {
        name = "SysServerNotifyTime"
        type = FieldType.INT64
        caption = "服务端更新时间"
        defaultValue = null
        isRequired = false
    }
    val index = fieldInfos.add(info)
    if (index < 0) {
        throw IllegalArgumentException("${info.name} 属性添加失败,尝试修改属性名后重试")
    }
}


问题重现步骤: 1. 判断是否已经存在该字段;2. 没有则创建该字段,使用 iMobile 创建失败;3. 使用桌面端创建,提示字段信息非法。

1个回答

您好,请问用11i新版本idesktop创建该字段还会报错吗,这边使用imobile 11i(2023)对原有数据集添加64位整型且名称为”SysServerNotifyTime“的字段测试没出现问题呢
3,430EXP 2023年05月15日

异常的数据:链接:https://pan.baidu.com/s/1Xdt3AjEnjULfiB7NEyCQrg?pwd=zsky 

数据集是由 imoblie 创建的,创建代码如下:

fun checkAndCreateDataset(datasource: Datasource, datasetName: String) {
    datasource.apply {
        if (!datasets.contains(datasetName)) {
            val datasetType = DatasetType.TABULAR
            val info = DatasetVectorInfo().apply {
                name = datasetName
                type = datasetType
            }
            val newDataset = datasets.create(info)
                ?: throw IllegalStateException("《${datasetName}》数据集创建失败。")
            val fis = newDataset.fieldInfos
            // 创建字段略
            info.dispose()
            newDataset.close()
        }
    }
}

我对比了一下,异常的数据集表名和正常的表名命名方式有区别:

而且我将其他数据集都删除,只保留一个数据集的情况下,数据源文件还是很大。我猜想数据源是不是有个计数机制,记录数据集的改动,现在计数已经达到最大值,所以表名命名异常了?

应该在桌面工作空间管理器中右键数据源-点击紧缩数据源之后在进行添加字段操作即可
可以了。在 imobile 或 iobject 组件里有紧缩数据源的方法吗?
用Toolkit.compactDatasource方法
明白了。谢谢。
...