没有使用缺省值来更新的 Boolean 或 Integer 属性
当设置为缺省值时,在布尔或整数数据类型的扩展属性未更新的情况下,遵循以下列示的步骤以作为变通方法。
问题
如果您尝试将单值布尔或整数数据类型的扩展属性值设置为其缺省值,那么该属性不会更新。 例如,如果您尝试将单值整数数据类型值设置为非 0(这是缺省值)的任何值,那么就成功执行了该更新。 但是,如果您尝试将其设置为其缺省值 0,那么属性值没有得到更新。 类似地,如果您尝试将布尔数据类型的扩展属性值设置为 true,那么就成功执行了该更新。 但是,如果您尝试将该属性设置为其缺省值 false,那么该值没有更新。
仅在扩展的属性定义为单值时才发生此情况。 这是 EMF 限制。
变通方法
完成以下步骤来变通此问题。
注: 在应用程序中使用样本代码片段之前,请确保您已阅读信息并完成主题 编程先决条件中描述的步骤。
- 在应用程序代码中使用 createSchema() 方法来新建多值设置为 true 的布尔或整数数据类型的扩展属性。
有关详细信息,请参阅 用于在文件存储库中扩展模式的样本代码, 用于在属性扩展存储库中扩展模式的样本代码和 用于在 LDAP 存储库中扩展模式的样本代码。
您还可以使用 addIdMgrPropertyToEntityTypes wsadmin 命令来新建多值设置为 true 的布尔或整数数据类型的扩展属性。
注: 您还可以通过直接编辑 wimxmlextension.xml 文件,将现有扩展属性的定义从单值更改为多值,但建议不要这样做。 - 使用 create() 或 update() 方法将新属性值指定为其缺省值,对于布尔值,缺省值为 false,对于整数,缺省值为 0。 属性值应该已成功更新。以下样本代码是如何使用 create() 方法来设置整数数据类型的多值属性的缺省值 0 的示例:
DataObject root = SDOHelper.createRootDataObject(); DataObject entity = SDOHelper.createEntityDataObject(root, null, SchemaConstants.DO_PERSON_ACCOUNT); // Set the properties of the person entity.set("uid", uid); entity.set("cn", cn); entity.set("sn", sn); // Create a new array list of size one List lst = new ArrayList(); lst.add(0); entity.set("jersyNumber", lst ); System.out.println("Input datagraph before creating user"+ printDO(root)); // Create the PersonAccount entity root = service.create(root); // Print the output datagraph System.out.println("Output datagraph after creating user"+ printDO(root)); return root;