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);
    }
}

Надеюсь, что это поможет вам или кому-то еще.

Другие вопросы по тегам