0

在 Content Server 用户通过在其 pc 上打开 word 并保存(使用企业连接对话框)创建 word doc 之后,在 word doc 关闭之前,我使用 word 宏获取 OpenText Content Server 节点 ID - 我是构建一个宏来挂钩项目编号并将一些元数据提取到文档中,允许用户插入/更新文档页脚。

在这种情况下,各种 API 或 SDK 的某些方面是否允许 word 宏访问其自己的节点 ID(可能还有其他元数据)?

我找到了文件 C:\Users[username]\AppData\Roaming\OpenText\OTEdit\sync.fedb 似乎包含文件位置/名称和内容服务器中的文档之间的映射,但是直接询问这个似乎有点 hack,因为 OTEdit.exe 总是锁定文件,我想知道是否有支持的方法来执行此操作。

我已经研究了 DPS 作为将内容服务器节点 ID 标记到单词 doc 属性中的一种方法,虽然如果用户关闭并重新打开 doc,这可以工作,但在 doc 关闭之前属性不可用,所以它是在这种情况下没有用。

4

1 回答 1

0

我找到了一种不同的方法,因为sync.fedbOTEdit进程锁定,并且似乎没有任何方法可以使用 word 宏通过 SDK 访问文档元数据。这有点骇人听闻,但我已将详细信息放在这里,以防其他人有兴趣这样做。

编辑后的文档存储在一个文件夹下,路径如下:C:\Users\[username]\AppData\Roaming\OpenText\OTEdit\EC_[servername]\[folder]\[current document name]

[folder]可能匹配 Content Server 中的文件夹,也可能不匹配 - 最好检查文件并从url~otdirinfo.ini中解析父文件夹 ID 。Browse

从这里我们可以使用类似的东西进行数据库搜索:

SELECT
  t.DataID AS NodeId,
  CAST(t.CreateDate AS DATE) AS CreateDate,
  CASE WHEN k.FirstName IS NULL
            AND k.LastName IS NULL THEN k.Name
       ELSE LTRIM(RTRIM(( ISNULL(k.FirstName, '') + ' ' + ISNULL(k.LastName, '') )))
  END AS CreatedByFullName,
  CASE WHEN kr.FirstName IS NULL
            AND kr.LastName IS NULL THEN kr.Name
       ELSE LTRIM(RTRIM(( ISNULL(kr.FirstName, '') + ' ' + ISNULL(kr.LastName, '') )))
  END AS ReservedByFullName,
  t.CreatedBy,
  t.ReservedBy,
  t.ParentID,
  t.Name AS Title,
  v.FileName
FROM
  DTree t
  INNER JOIN KUAF k
  ON t.CreatedBy = k.ID
  LEFT OUTER JOIN KUAF kr
  ON t.ReservedBy = kr.ID
  INNER JOIN DVersData v
  ON t.DataID = v.DocID AND t.VersionNum = v.Version

在实践中,我编写了一个 API 来包装数据库查找,它以 JSON 格式返回感兴趣的结果,这比管理数据库连接更容易处理,并且在我的站点上返回结果比 CWS 更快。我使用方便的VBA-Web宏进行调用并处理解析,将调用结果放入 word doc 属性中,然后调用我们现有的页脚生成宏。

注意:我为此使用 Content Server 10.5,显然提取父 ID 的方法有时因版本而异。

于 2015-10-19T22:40:29.667 回答