Question

Je suis en train d'écrire une petite application en C # pour copier un document dans un dossier de personnes Mes documents sur notre serveur de DMS.

J'ai beased le code dans la liste fournie dans le. 'WorkSite SDK 8: Utiliser le IMANEXT2Lib.IManRefileCmd dans un fichier nouveau document Dossiers de blog

En utilisant ce code dans une application WinForm Je n'ai aucun problème de copier le fichier à partir du dossier source dans le dossier des utilisateurs DMS 'Mes documents de.

Cependant, si j'utilise le code dans une application ligne de commande / dll ou tout autre type d'application (autre que WinForm) pendant le processus de copie je recevoir les messages d'erreur;

1.

  

Une erreur est survenue lorsque vous essayez d'enregistrer l'événement!

     

IManExt: Une erreur est survenue lorsque vous essayez d'enregistrer l'événement

     

L'accès est refusé.

2.

  

Le document a été importé dans la base de données, mais n'a pas pu être ajouté à   le dossier.

     

IManExt: Le document a été importé dans la base de données, mais ne pouvait pas être   ajouté au dossier.

     

IManExt.LogRuleEventsCmd.1: Une erreur est survenue lorsque vous essayez d'enregistrer l'événement

     

IManExt.LogRuleEventsCmd.1. L'accès est refusé

Une erreur est survenue lorsque vous essayez d'enregistrer l'événement!

-% -

Quelqu'un sait pourquoi je recevoir le « Accès refusé » des messages d'erreur lors de l'utilisation d'une application non-WinForms pour copier des documents? Qu'est-ce que je dois faire pour contourner ce problème?

Toute aide serait incroyable!

code à la place:

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

            }


        }

    }

Était-ce utile?

La solution

Juste au cas où cela aide quelqu'un d'autre.

Il semble que mon problème a été le résultat d'un problème de filetage.

J'ai remarqué les applications C # Winform j'avais créés ont été mis automatiquement pour fonctionner sur un seul thread 'de ApartmentState' (de [STAThread]).

considérant que l'état de fil bibliothèque d'applications de la console et de la classe et la gestion n'avaient pas été définis dans le projet et a été manipulé avec la configuration par défaut .NET.

Pour obtenir ce travail. Dans l'application de la console, je viens d'ajouter la balise [STAThread] sur la ligne au-dessus de mon appel de méthode principale

Dans la bibliothèque de classes, I définie un filetage pour la fonction faisant référence à la IMANxxx.dll et mis ApartmentState par exemple.

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

Dans les deux cas assurant seul thread « de ApartmentState » a été mis en œuvre ensemble résoudrait le problème.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top