IManage WorkSite通过SDK重新调整WorkSpace

时间:2015-10-02 04:18:56

标签: vb.net imanage worksite-sdk

使用SDK进行Web服务,我已经能够将用户添加到WorkSpace并授予他们访问权限,但是WorkSpace不会被重新编译,因此他们实际上只能访问根文件夹而不能访问其他内容。 / p>

我知道有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对象,然后获取属于profiled文件夹对象的配置文件:

代码:

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

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

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

2 个答案:

答案 0 :(得分:1)

不幸的是,没有文件夹或工作区级别的重新制作方法。 Refile方法仅适用于IManDocument对象,因此您必须以递归方式枚举工作区中的每个文件夹及其.Contents,并调用Refile方法每个文件。

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

答案 1 :(得分:0)

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

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

有关详细信息,请查看“iManage WorkSite COM”   开发人员参考指南(第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);
    }
}

希望能帮到你或其他人。