IManage WorkSite перекомпилирует WorkSpace через SDK
Используя 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 = w
Будучи IManWorkSpace в моем коде вышеDim objProf as IManProfile = objProfFldr.Profile
Затем я могу получить объект безопасности WorkSpace через:
Dim oSecurity AS IManSecurity = w.SecurityAnd
положить это вместе, я думаю, что это делает полный Refile()
метод называется Refile(objProf, oSecurity)
,
Мне просто непонятно, как применить все это к WorkSpace, нужно ли перебирать все подпапки и применять метод Refile() к каждому документу, или я могу запустить метод на уровне WorkSpace, который будет выполнять итерация для меня?
2 ответа
К сожалению, нет способа перезаписи уровня папки или рабочей области. Refile
метод доступен только на IManDocument
объект, поэтому вы должны рекурсивно перечислять каждую папку, и это .Contents
в рабочей области и вызвать Refile
метод на каждом документе.
Вы должны проверить возвращаемое значение (IManProfileUpdateResult
) метода Refile, поскольку у вас может не быть прав на изменение профиля документа, если пользователь заблокировал свой документ.
Вы можете достичь этого поведения с помощью одного из следующих методов из объекта IManWorkspace:
IManProfileUpdateResult UpdateAllWithResults(string file);
void UpdateAll(string file, ref object errors);
Для получения более подробной информации, пожалуйста, ознакомьтесь с "Справочным руководством разработчика iManage WorkSite COM (стр.344)"
Следующий вспомогательный метод может быть полезен:
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);
}
}
Надеюсь, что это поможет вам или кому-то еще.