Intégrer des documents attachés par les objets métier V6

SOLVED

Bonjour,

Lors de mon projet de transfert d'article à gamme en article "plat" ou "simple". Je rencontre une difficulté inattendu sur la copie de documents attachés (Sur l'interface, au dessus de l'endroit ou on met la photo)

J'ai fait ce code qui copie physiquement les fichiers dans le dossier multimedia (ça c'est bon). J'ajoute les documents avec les objets métiers, tous me semble comme il faut quand je regarde dans la base. mais dans l'interface, quand je clique sur le lien... rien ne se passe. Ai-je oublier quelque chose?

 static void CreeMultimedia(IBOArticleGammeEnumRef3 om_artgamref, IBOArticle3 om_newArt)
        {
            try
            {
                int compteur = 2;
                foreach (IBOArticleMedia3 Media in om_artgamref.Article.FactoryArticleMedia.List)
                {
                    string pathphoto = Media.ME_Fichier;
                    string newnamephoto = om_newArt.AR_Ref + "_" + compteur.ToString() + Path.GetExtension(pathphoto);
                    string pathnewphoto = Path.Combine(pathmultimedia, newnamephoto);
                    if (!File.Exists(pathnewphoto)) File.Copy(Path.Combine(pathmultimedia, Path.GetFileName(pathphoto)), pathnewphoto, true);

                    IBOArticleMedia3 newMedia = (IBOArticleMedia3)om_newArt.FactoryArticleMedia.Create();
                    newMedia.SetDefault();
                    newMedia.ME_Commentaire = Media.ME_Commentaire;
                    newMedia.ME_Origine = Media.ME_Origine;
                    string strpathrelatif = @".\Multimedia\" + newnamephoto;
                    newMedia.ME_Fichier = strpathrelatif;
                    newMedia.Write();
                    compteur++;
                }
            }
            catch (Exception ex)
            {//On ne plante pas le process pour la photo
                Console.WriteLine($"Erreur : {ex.Message}");
                File.AppendAllText(patherror, ex.Message);
            }
        }

Merci de votre aide :-)

  • Bonjour, comment récupérer-vous le dossier pathmultimedia pour la ligne

    string pathnewphoto = Path.Combine(pathmultimedia, newnamephoto); ?

    Ca n'apparait pas dans votre code. C'est calculé à partir de $(Dossier.FichierCommercial) ?

    Qu'est-ce qui apparait en base dans la table F_ARTICLEMEDIA ?

  • 0
    SUGGESTED

    J'ai trouvé : il faut fournir le type MIME du document attaché pour que le lien soit actif. Sinon en cliquant sur Visualiser, l'OS propose d'ouvrir le document à partir de son extension. J'ai testé avec un PNG, j'ai effacé ensuite le type MIME en base. Windows 10 a ouvert le sélecteur d'applications capables d'affiche un PNG.

  • Je reviens sur mes propos : le type MIME n'est pas modifiable via les OM. Sage le déduit du fichier joint.

  • 0 in reply to Jean-Marc BLANCHET

    J'ai retrouvé le dossier sur mon serveur. pathmultimedia est une constante de type string =@"Monchemin". Mais comme je trouve la photo d'origine je suppose que je suis dans le bon dossier. Par contre ton idée de type mime automatique est peut-être le pb. J'ai pas vérifié ce qu'il mettait dans ce champs...

  • +1
    verified answer

    Bonjour Mme PALIER,

    Vous ne devez pas copier au préalable le fichier dans le répertoire Multimédia : lors de l'affectation d'un fichier, les Objets Métiers se chargent de le copier dans le répertoire Multimédia et de mettre à jour le chemin en conséquence.

    Exemple :

    IBOArticle3 om_Article = om_BaseCial.FactoryArticle.ReadReference("GRAVURE");
    IBOArticleMedia3 om_ArticleMedia = (IBOArticleMedia3)om_Article.FactoryArticleMedia.Create();
    om_ArticleMedia.ME_Fichier = @"C:\temp\259247-200.png";
    om_ArticleMedia.ME_Commentaire = Path.GetFileNameWithoutExtension(om_ArticleMedia.ME_Fichier);
    om_ArticleMedia.SetDefault();
    om_ArticleMedia.WriteDefault();

    Pour plus d'informations, je vous invite à consulter cette fiche de la base de connaissance : 

    https://fr-kb.sage.com/portal/app/portlets/results/viewsolution.jsp?solutionid=211010160103530

    Si vous disposez d'un contrat Sage Services Pro, vous pouvez obtenir une assistance sur le développement Sage 100 en passant par Zendesk (https://sagefr.zendesk.com/) et en sélectionnant Sage Service Pro.

    Thierry

  • 0 in reply to THJO

    Merci de l'infos. Je n'y aurai pas penser à tester le fichier local :-). J'ai eu aussi un pb sur la photo (j'ai contourné avec un update de F_Article) mais j'imagine que ça doit être la même astuce dans AR_Photo faut mettre @c:\temp\maphoto.jpg?

  • +1 in reply to Isabelle PALIER
    verified answer

    Mme PALIER,

    Oui, je vous confirme, c'est le même principe.

    Thierry

  • Bonjour  ,

    Faites-nous savoir si la réponse de THJO a été utile en la marquant comme vérifiée .

    Pour cela, cliquez sur  la ligne ‘Vérifier la réponse’.

    Cela aura pour effet de marquer la réponse en vert et de permettre aux autres membres de la communauté, ou aux personnes qui auraient également le besoin de voir que cela a fonctionné.

    Merci d'avoir utilisé la communauté.

    Yoan

  • 0 in reply to THJO

    Je viens d'essayer mais ça n'a pas copier les fichiers (ni les documents attachés ni la photo)... le writedefaut est important? le write ne suffit pas?

    int compteur = 2;
                    foreach (IBOArticleMedia3 Media in om_artgamref.Article.FactoryArticleMedia.List)
                    {
                        string pathphoto = Media.ME_Fichier;
                        string newnamephoto = om_newArt.AR_Ref + "_" + compteur.ToString() + Path.GetExtension(pathphoto);
                        string pathnewphoto = Path.Combine(pathphotosweb, newnamephoto);//pathphotosweb : chemin sur un autre serveur
                        if (!File.Exists(pathnewphoto)) File.Copy(Path.Combine(pathmultimedia, Path.GetFileName(pathphoto)), pathnewphoto, true);
    
                        IBOArticleMedia3 newMedia = (IBOArticleMedia3)om_newArt.FactoryArticleMedia.Create();
    
                        newMedia.SetDefault();
                        newMedia.ME_Commentaire = Media.ME_Commentaire;
                        newMedia.ME_Origine = Media.ME_Origine;
                        string strpathrelatif = pathnewphoto;//@".\Multimedia\" + newnamephoto;//  @"C:\temp\259247-200.png";
                        newMedia.ME_Fichier = strpathrelatif;
                        newMedia.Write();
                        compteur++;
                    }

  • +1 in reply to Isabelle PALIER
    verified answer

    Bonjour Mme PALIER,

    Je vous redonne le code complet (connexion à la base) qui fonctionne bien chez moi. Pouvez-vous le tester chez vous (en adaptant la connexion, l'article et le fichier) ?

    Précision : l'emplacement du répertoire Multimedia est déterminé en fonction de l'emplacement du fichier GCM. C'est pourquoi, pour vous connecter à la base en utilisant les Objets Métiers, utilisez la propriété Name plutôt que les propriétés CompanyServer et CompanyDatabaseName.

    Exemple :

    var om_BaseCial = new BSCIALApplication100c();
    om_BaseCial.Name = @"C:\Users\Public\Documents\Sage\Entreprise 100c\Bijou.gcm";
    om_BaseCial.Loggable.UserName = "<Administrateur>";
    om_BaseCial.Loggable.UserPwd = string.Empty;
    om_BaseCial.Open();

    Cordialement,

    Thierry

  • 0 in reply to THJO

    Bonjour,

    J'ai mis un peu de temps pour essayer mais mon pb était bien ma connexion par serveur/Base de données. En passant par le fichier gcm votre code s'exécute parfaitement :-)

    Merci