1

使用用于 Web 服务的 SDK,我能够将用户添加到 WorkSpace 并授予他们访问权限,但是 WorkSpace 没有重新归档,因此他们实际上只能访问根文件夹,而没有其他权限。

我知道有Refile()方法,我只是不确定如何在 WorkSpace 中执行文件夹和文档的重新归档。

目前我有一个授予用户访问 WorkSpace 的功能,我已经测试并且该功能有效,以下是该功能的一部分,在此代码之前我已经启动了 WorkSpace 搜索方法,下面的代码正在遍历搜索结果。

Dim retString As String = ""
For Each w As IManWorkspace In oDB.SearchWorkspaces(oparams, oWparams)
' Get the WorkSpace security container
Dim oSec As IManSecurity = w.Security
Dim oUACLs As IManUserACLs = oSec.UserACLs
' Grant the user the defined access
oUACLs.Add(sUserID, imAccessRight.imRightReadWrite)
' Apply the changes
w.Update()
' Refresh the Collection on the client
oUACLs.Refresh()

' TO DO: REFILE THE SUB-FOLDERS AND DOCUMENTS

retString = oUACLs.Contains(sUserID).ToString()


Next

返回 retString(目前我已经硬编码了用户对 WorkSpace 的定义访问权限,这将在上线之前更改为动态值)。

因为我已经有了 WorkSpace 对象,所以

COM 开发人员参考指南(第 244 页)

说我需要获取一个 IManProfiledFolder 对象,然后获取属于已分析文件夹对象的配置文件:

代码:

Dim objProfFldr as IManProfiledFolder = ww 在上面的代码中是 IManWorkSpace, Dim objProf as IManProfile = objProfFldr.Profile 然后我可以通过以下方式获取 WorkSpace 安全对象:

Dim oSecurity AS IManSecurity = w.SecurityAnd把这些放在一起,我想这使得完整的Refile()方法被称为Refile(objProf, oSecurity).

我只是不清楚如何将这一切应用到 WorkSpace,我是否需要遍历所有子文件夹并将 Refile() 方法应用于每个文档,或者我是否可以在 WorkSpace 级别发出一个方法来执行为我迭代?

4

2 回答 2

1

不幸的是,没有文件夹或工作区级别的重新归档方法。该Refile方法仅在IManDocument对象上可用,因此您必须递归枚举每个文件夹,并且它位于工作区中并在每个文档上.Contents调用该方法。Refile

您应该检查IManProfileUpdateResultRefile 方法的返回值 ( ),因为如果用户锁定了他们的文档,您可能无权修改文档配置文件。

于 2015-10-14T14:07:31.287 回答
0

您可以在 IManWorkspace 对象的以下方法之一的帮助下实现此行为:

 IManProfileUpdateResult UpdateAllWithResults(string file);
 void UpdateAll(string file, ref object errors);

有关详细信息,请查看“iManage WorkSite COM 开发人员参考指南 (p.334)”

以下辅助方法可能会有所帮助:

public void UpdateWorkspace(IManWorkspace workspace)
{
    var filePath = Path.GetTempFileName();
    try
    {
        if (workspace.HasObjectID)
            workspace.GetCopy(filePath);

        var results = workspace.UpdateAllWithResults(filePath);

        if (!results.Succeeded)
        {
            // Error handling
        }
    }
    finally
    {
        if (File.Exists(filePath))
            File.Delete(filePath);
    }
}

希望对您或其他人有所帮助。

于 2015-10-22T19:27:34.640 回答