2015-10-02 1 views
1

Используя SDK для веб-службы, я смог добавить пользователя в WorkSpace и предоставить им доступ, однако WorkSpace не обновляется и поэтому у них есть доступ только к корневому и ничего больше.IManage WorkSite refile WorkSpace через SDK

Я знаю, что есть метод Refile(), я просто не уверен, как выполнять реестр файлов и документов в 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, то

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).

Я просто не понимаю, как я применяю все это к рабочему пространству, нужно ли выполнять итерацию по всем подпапкам и применять метод Refile() к каждому документу, или я могу выпустить метод на уровне рабочей области что будет делать итерацию для меня?

ответ

1

К сожалению, нет способа перепрошивки уровня папки или рабочего пространства. Метод Refile доступен только на объекте IManDocument, поэтому вам необходимо рекурсивно перечислить каждую папку, а в рабочей области - .Contents, и вызвать метод Refile для каждого документа.

Вы должны проверить возвращаемое значение (IManProfileUpdateResult) метода Refile, поскольку у вас могут не быть прав на изменение профиля документа, если пользователь заблокировал их документ.

+0

Великий, спасибо за ответ я вроде думал, что это было слишком обнадеживающим.. что был бы волшебный метод, который мог бы сделать это для меня :) Спасибо также за указатели. – Lima

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

Надежда, что помогает вам или кому-то еще

+0

Выглядит интересно, я не знаком с методом Path.GetTempFileName(), что он делает? – Lima

+0

Этот метод создает временный файл во временной папке пользователя. Для получения дополнительной информации см. следующую [статью MSDN] (https://msdn.microsoft.com/en-us/library/system.io.path.gettempfilename%28v=vs.110%29.aspx). Затем он используется с IManWorkspace.GetCopy(), чтобы получить копию документа рабочей области, и после этого этот документ используется с методами UpdateAll() или UpdateAllWithResults(), чтобы не потерять данные (в случае их возникновения), связанные с этим рабочим пространством , – RUSH

+0

Итак, это получает XML-файл WorkSpaces? Как это сделать все документы в WorkSpace? – Lima

Смежные вопросы