1

Web サービス用の 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 開発者リファレンス ガイド (pg 244)

IManProfiledFolder オブジェクトを取得してから、プロファイルされたフォルダー オブジェクトに属するプロファイルを取得する必要があると述べています。

コード:

Dim objProfFldr as IManProfiledFolder = ww 上記のコードでは IManWorkSpace であり、次の方法で Dim objProf as IManProfile = objProfFldr.Profile WorkSpace セキュリティ オブジェクトを取得できます。

Dim oSecurity AS IManSecurity = w.SecurityAndこれをまとめると、これにより完全なRefile()メソッドが as として呼び出されると思いRefile(objProf, oSecurity)ます。

これをすべて WorkSpace に適用する方法が明確ではありません。すべてのサブフォルダーを反復処理して Refile() メソッドを各ドキュメントに適用する必要がありますか、それとも WorkSpace レベルでメソッドを発行できますか?私のための反復?

4

2 に答える 2

1

残念ながら、フォルダーまたはワークスペース レベルのリファイリング方法はありません。Refileメソッドはオブジェクトでのみ使用できるため、IManDocument各フォルダーを再帰的に列挙する必要があり、それはワークスペースにあり、各ドキュメントでメソッド.Contentsを呼び出す必要があります。Refile

IManProfileUpdateResultユーザーがドキュメントをロックダウンしている場合、ドキュメント プロファイルを修正する権限がない可能性があるため、Refile メソッドの戻り値 ( ) を確認する必要があります。

于 2015-10-14T14:07:31.287 に答える
0

IManWorkspace オブジェクトから次のいずれかのメソッドを使用して、この動作を実現できます。

 IManProfileUpdateResult UpdateAllWithResults(string file);
 void UpdateAll(string file, ref object errors);

詳細については、「iManage WorkSite COM 開発者リファレンス ガイド (p.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);
    }
}

あなたや他の誰かに役立つことを願っています。

于 2015-10-22T19:27:34.640 に答える