使用用于Web的Service,我已经能够将用户添加到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对象,然后获取属于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级别上发布一个方法来为我执行迭代?
发布于 2015-10-14 14:07:31
不幸的是,没有文件夹或工作区级别的重新归档方法。Refile方法仅在IManDocument对象上可用,因此您必须递归地枚举每个文件夹及其工作区中的.Contents,并对每个文档调用Refile方法。
您应该检查Refile方法的返回值(IManProfileUpdateResult),因为如果用户锁定了他们的文档,您可能没有修改文档配置文件的权限。
发布于 2015-10-22 19:27:34
您可以借助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);
}
}希望这对你或其他人有帮助。
https://stackoverflow.com/questions/32900494
复制相似问题