使用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级别发出一个方法会为我做迭代吗?
答案 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);
}
}
希望能帮到你或其他人。