首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >IManage WorkSite通过SDK重新文件WorkSpace

IManage WorkSite通过SDK重新文件WorkSpace
EN

Stack Overflow用户
提问于 2015-10-02 04:18:56
回答 2查看 1.3K关注 0票数 1

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

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

目前,我有一个授予用户对WorkSpace的访问权限的函数,我已经测试了这个函数,并且这个函数可以工作,下面是函数的一部分,在此代码之前,我已经启动了WorkSpace搜索方法,下面的代码正在迭代搜索结果。

代码语言:javascript
复制
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对象,然后获取属于profile文件夹对象的配置文件:

代码:

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

Dim oSecurity AS IManSecurity = w.SecurityAnd将其组合在一起,我猜这使得完整的Refile()方法被调用为Refile(objProf, oSecurity)

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-10-14 14:07:31

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

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

票数 1
EN

Stack Overflow用户

发布于 2015-10-22 19:27:34

您可以借助IManWorkspace对象中的下列方法之一实现此行为:

代码语言:javascript
复制
 IManProfileUpdateResult UpdateAllWithResults(string file);
 void UpdateAll(string file, ref object errors);

详情请参阅"iManage WorkSite COM开发人员参考指南“(第334页)。

下面的助手方法可能会有所帮助:

代码语言:javascript
复制
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);
    }
}

希望这对你或其他人有帮助。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32900494

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档