问题描述:通过程序更改FileNet中Class的displayName后,通过FileNet API查询出来Document,使用document.get_ClassDescription.getDisplayName()获取到的仍然是修改之前的displayName。重启本地的Server后,再调用 document.get_ClassDescription.getDisplayName()方法,获取到的是修改后displayName。
问题分析:FileNet中的Document,关于Class的信息,是在FileNet自身的缓存中读取到的,而非实时取自其Class的displayName。FileNet本身为提高Document的查询效率,没有提供修改Class后,立即刷新缓存的方法。
解决方案一:虽然修改了Class的相关信息后,没有刷新Document的缓存信息,但是Class的相关信息已经刷新。我们可以通过 document.getProperties.getSymbolicName()取到当前的symbolicName,再根据symbolicName取到对应的Class,然后使用ClassDefinition API查询到最新的displayName。
尽管这样做,能够保证返回前端的displayName是正确的,但是由于对每一个Document返回数据时,都要调用ClassDefinition API查询Class相关属性,这势必会造成系统的查询效率大大降低。
解决方案二:由于document.getProperties.getSymbolicName()取的数据是正确的,而且是不会更改的。我们可以在修改更改文件类型时,将displayName放到缓存,或者数据库中,我们从缓存或数据库中查询最新的displayName,这样保证数据是正确的。
如果你有更好的解决方案,欢迎分享^_^!