有没有办法使用单词宏获取 OpenText 内容服务器节点 ID

Is there a way to get the OpenText Content Server node id using a word macro

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

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

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

我研究了 DPS,将其作为将内容服务器节点 ID 标记到 word 文档属性中的一种方法,虽然如果用户关闭并重新打开文档,此方法有效,但在文档打开之前属性不可用已关闭,因此在这种情况下没有用。

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

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

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

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

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 来包装数据库查找 returns JSON 中感兴趣的结果,这比管理数据库连接更容易处理,并且returns 结果比我网站上的 CWS 快。我使用方便的 VBA-Web 宏进行调用和处理解析,将调用结果放入 word 文档属性中,然后调用我们现有的页脚生成宏。

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