質問

私は、私たちのDMSサーバー上の個人の「マイドキュメント」フォルダに文書をコピーするにはC#を使用して小さなアプリケーションを書いているます。

「現場SDK 8:新規ドキュメントフォルダファイルにIMANEXT2Lib.IManRefileCmdを活用」

私はで提供物件の周りのコードbeasedてきました。ブログを

私は、ユーザーのDMS「マイドキュメント」フォルダにソースフォルダからファイルをコピーする問題がないのWinFormアプリケーションでこのコードを使用します。

私はコピー処理中に、コマンドラインアプリケーション/ .dllファイルまたは(Winフォーム以外の)アプリケーションの任意の他のタイプのコードを使用する場合、

しかし、私はエラーメッセージを表示する

1。

  イベントをログに記録しようとすると、

エラーが発生しました!

     

IManExt:イベントをログに記録しようとすると、エラーが発生しました。

!      

のアクセスが拒否されます。

2。

  

文書がデータベースにインポートされたが、それに追加することができませんでした   フォルダーます。

     

IManExt:文書がデータベースにインポートされましたが、できませんでした   フォルダに追加ます。

     

IManExt.LogRuleEventsCmd.1:イベントをログに記録しようとすると、エラーが発生しました。

!      

IManExt.LogRuleEventsCmd.1:アクセスが拒否されました。

イベントをログに記録しようとすると、

エラーが発生しました!

- % -

私は文書をコピーするために非WinFormsのアプリケーションを使用するときに、エラーメッセージ「アクセスが拒否されました」を受けていただきたい理由

誰でも知っていますか? 私は、この問題を回避するために実行する必要があるでしょうか?

すべてのヘルプは素晴らしいだろう!

の場所でコード:

    public void moveToDMS(String servName, String dBName, String foldName)
    {
        const string SERVERNAME = servName; //Server name
        const string DATABASENAME = dBName; //Database name
        const string FOLDERNAME = foldName; //Matter alias of workspace

        IManDMS dms = new ManDMSClass();
        IManSession sess = dms.Sessions.Add(SERVERNAME);
        sess.TrustedLogin();

        //Get destination database.
        IManDatabase db = sess.Databases.ItemByName(DATABASENAME);

        //Get destination folder by folder and owner name.
        IManFolderSearchParameters fparms = dms.CreateFolderSearchParameters();
        fparms.Add(imFolderAttributeID.imFolderOwner, sess.UserID);
        fparms.Add(imFolderAttributeID.imFolderName, FOLDERNAME);           

        //Build a database list in which to search.
        ManStrings dblist = new ManStringsClass();
        dblist.Add(db.Name);

        IManFolders results = sess.WorkArea.SearchFolders(dblist, fparms);

        if (results.Empty == true)
        {
            //No results returned based on the search criteria.
            Console.WriteLine("NO RESULTS FOUND!");
        }

        IManDocumentFolder fldr = null;

        if (results.Empty == false)
        {
            //Assuming there is only one workspace returned from the results.
            fldr = (IManDocumentFolder)results.ItemByIndex(1);
        }

        if (fldr != null)
        {
            // Import file path
            string docPath = @"C:\Temp\";
            string docName = "MyWord.doc";

            // Create an instance of the ContextItems Collection Object.
            ContextItems context = new ContextItemsClass();

            // Invoke ImportCmd to import a new document to WorkSite database.
            ImportCmd impCmd = new ImportCmdClass();

            // The WorkSite object you pass in can be a database, session, or folder.
            // Depends on in where you want the imported doc to be stored.
            context.Add("IManDestinationObject", fldr); //The destination folder.

            // Filename set here is used for easy example, a string variable is normally used here
            context.Add("IManExt.Import.FileName", docPath + docName);

            // Document Author
            context.Add("IManExt.Import.DocAuthor", sess.UserID); //Example of a application type.

            // Document Class
            context.Add("IManExt.Import.DocClass", "BLANK"); //Example of a document class.
            //context.Add("IManExt.Import.DocClass", "DOC"); //Example of a document class.

            // Document Description (optional)
            context.Add("IManExt.Import.DocDescription", docName); //Using file path as example of a description.

            // Skip UI
            context.Add("IManExt.NewProfile.ProfileNoUI", true);

            impCmd.Initialize(context);
            impCmd.Update();

            if (impCmd.Status == (int)CommandStatus.nrActiveCommand)
            {
                impCmd.Execute();

                bool brefresh = (bool)context.Item("IManExt.Refresh");
                if (brefresh == true)
                {
                    //Succeeded in importing a document to WorkSite
                    IManDocument doc = (IManDocument)context.Item("ImportedDocument");

                    //Succeeded in filing the new folder under the folder.
                    Console.WriteLine("New document number, " + doc.Number + ", is successfully filed to " + fldr.Name + " folder.");
                }

            }


        }

    }

役に立ちましたか?

解決

念のために、これは他の誰かを助けます。

私の問題は、スレッドの問題の結果であったようです。

私は、私が作成したC#のWinフォームアプリケーションは自動的にシングル「ApartmentState」スレッド([STAThread])上で実行するように設定された気づいています。

コンソールアプリケーション&クラスライブラリのスレッドの状態と管理のに対し、プロジェクト内で定義されていないと、デフォルトの.NETの設定で処理されていました。

この作業を取得するには、次のコンソールアプリケーションでは、私はちょうど私のメインメソッド呼び出しの上の行に[STAThread]タグを追加しました。

クラスライブラリでは、私はIMANxxx.dllを参照する機能のためのスレッドを定義し、ApartmentState例えばを設定します。

Thread t = new Thread(new ThreadStart(PerformSearchAndMove));
t.SetApartmentState(ApartmentState.STA);
t.Start();

シングル「ApartmentState」スレッドを確保する両方のケースでセットしても問題が解決します実装されました。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top