AppendRTItem : item corrompu

Forum destiné aux questions sur le développement : Formules, LotusScript, Java ...

AppendRTItem : item corrompu

Messagepar R-one » 28 Juin 2011 à 10:28

Bonjour à tous,


Actuellement, j'ai créé au préalable des documents "modèles" avec un champs texte riche "organigramme" qui dispose d'une pièce jointe.

Quand, un utilisateur crée un nouveau document, je ramene la pièce jointe d'un document modèle et je la met dans un champs texte riche du nouveau document. Cette opération est transparente pour l'utilisateur.

Pour cela, j'utilise :

Dim rtitemA As Variant
Dim rtitemB As Variant

Set rtitemA = docSource.GetFirstItem( "Organigramme" ) 'texte riche du document modèle
Set rtitemB = docCible.GetFirstItem( "Organigramme" ) 'texte riche du nouveau document
Call rtitemB.AppendRTItem(rtitemA)



Tout ceci fonctionne parfaitement Mais, parce qu'il y a un Mais, le texte riche du nouveau document est corrompu, selon moi.
Je ne peux pas masquer ce champs, et dans les propriètes du champs, la propriété "Indicateurs de champ :" est vide.

Nom du champ : organigramme
Type de données : Texte riche
Longueur des données : 3466 octets
Numéro d'ordre : 7
ID d'élément en double : 0
Indicateurs de champ :


Connaissez vous la raison de ce problème? Y a t'il des précédents avec la fonction AppendRTItem?
Y a t'il un autre moyen de transférer la pièce jointe d'un document à un autre?

Merci d'avance!
R-one
Posteur néophyte
Posteur néophyte
 
Message(s) : 85
Inscrit(e) le : 28 Juin 2011 à 09:51

Messagepar Michael DELIQUE » 28 Juin 2011 à 10:53

hello & Welcome

tu as été voir dans l'aide en ligne et c'est très bien. par contre à la place d'un variant utilise plustot l'objet qui va bien : NotesRichTextItem. les exemples de l'aide en ligne sont bien pour voir comment ça fonctionne pas pour être utilisé telquel.

ensuite les options de masquage d'un champ richtext ne fonctionnent pas ! surtout s'il ya une piece jointe dedans. et les pièces jointe sont stocké réélement dans un autre champs (systeme) : $file.

deplus tout traitement sur un champ richtext qui ajout/retire une piece jointe dois ce faire en back-end pas en frontal sinon c'est pas pris en compte.

pour ma part j'utilise régulièrement AppendRTItem et je n'est pas de souci avec.
Cordialement

Michael (SMS-Phobique)
----------------------------
"La théorie, c'est quand on sait tout et que rien ne fonctionne. La pratique, c'est quand tout fonctionne et que personne ne sait pourquoi."
Albert EINSTEIN
Avatar de l’utilisateur
Michael DELIQUE
Administrateur
Administrateur
 
Message(s) : 12183
Inscrit(e) le : 16 Déc 2004 à 10:36
Localisation : Paris/Cergy

Messagepar R-one » 28 Juin 2011 à 11:40

Tout d'abord, merci pour cette réponse rapide et assez complète.

Je fais toutes ces opérations en back end.
Voici le code :
Call Importer(doc, docSource)
Call doc.Computewithform(True, False)
Call doc.Save(True, False)
Set uiDoc = w.EditDocument(True,doc)

La procédure Importer correspond au code que je t'ai montré juste au dessus.

J'ai remplacé variant par NotesRichTextItem. ça n'a rien changé.
J'ai même tenté un computeWihForm, avant la sauvegarde.


Pour moi, on peut masquer un champs texte riche qui dispose d'une pièce jointe. Voici ce que j'ai fait :

1er Cas :

J'ai ouvert un document avec un champs texte riche vide, j'ai rattaché manuellement 2 pièces jointes dans ce champs texte riche.
Au préalable, j'ai mi une condition de masquage sur ce champs texte riche : nbPJModification = "2"
J'ai un champs "nbPJModification" qui calcule le nombre de pièce jointe de mon document : @Text(@Attachments)

Si j'enregistre ou si je fais F9, le champs texte riche est masqué.


2ème Cas :
J'ai utilisé mon code LS, avec l'importation de la pièce jointe avec le code que je t'ai montré. (tout ça en back end)
Du coup, le nouveau document s'ouvre avec déjà une pièce jointe à l'intérieur. Je rattache ensuite une pièce jointe manuellement dans ce même champs texte riche.

Et là, que je fasse F9 ou que j'enregistre, le texte riche n'est pas masqué.
Pourtant, il y a 2pièces jointes, la condition de masquage devrait fonctionné. C'est pour ça que j'ai l'impression que l'opération en back end, pose problème.


Si tu as des explications à ce phénomène, je suis preneur.
J'ai passé pas mal de temps à comprendre, avant de poster sur le forum.
Je suis même allé regarder sur le forum IBM... Ils disaient comme toi, que la pièce jointe est stockée dans $File. Mais ça n'explique pas le problème que j'ai soulevé sur le masquage.

Merci d'avance
R-one
Posteur néophyte
Posteur néophyte
 
Message(s) : 85
Inscrit(e) le : 28 Juin 2011 à 09:51

Messagepar Michael DELIQUE » 28 Juin 2011 à 12:31

re,

comme je te le disais, le masquage des champs richtext n'est pas top, on a toujours des soucis avec.
Cordialement

Michael (SMS-Phobique)
----------------------------
"La théorie, c'est quand on sait tout et que rien ne fonctionne. La pratique, c'est quand tout fonctionne et que personne ne sait pourquoi."
Albert EINSTEIN
Avatar de l’utilisateur
Michael DELIQUE
Administrateur
Administrateur
 
Message(s) : 12183
Inscrit(e) le : 16 Déc 2004 à 10:36
Localisation : Paris/Cergy

Messagepar R-one » 28 Juin 2011 à 13:39

Ah, ben ça ne m'arrange pas tellement. :-)

Je vais poser le problème autrement alors :

L'utilisateur ouvre un document avec une pièce jointe transférée en back end. Donc ça, ça "marche".
Mais ensuite, je veux empêcher l'utilisateur de supprimer ma pièce jointe et l'empêcher également d'en rajouter une autre manuellement.
En revanche, il doit pouvoir modifier le contenu de ma pièce jointe que j'ai importée.

Question : comment faire?

Y a bien une solution mais elle est très dangeureuse => ça serait de faire confiance à l'utilisateur... :-)
Si on pouvait éviter de rentrer dans ce genre d'extrême, ça serait pas mal.
R-one
Posteur néophyte
Posteur néophyte
 
Message(s) : 85
Inscrit(e) le : 28 Juin 2011 à 09:51

Messagepar Michael DELIQUE » 28 Juin 2011 à 13:53

re,

L'utilisateur ouvre un document avec une pièce jointe transférée en back end. Donc ça, ça "marche".
Mais ensuite, je veux empêcher l'utilisateur de supprimer ma pièce jointe et l'empêcher également d'en rajouter une autre manuellement.


pour ça regarde du coté des section à acces controlé ou passe ton champ en calculé

En revanche, il doit pouvoir modifier le contenu de ma pièce jointe que j'ai importée.


incompatible avec ce que tu veux au dessus. deplus je te rappel que l'utilisateur s'ilouvre le fichier pour lemodifier il sera enregistré dans les temporaires. il faut dans ce cas utilisé des fichier "intégré"

sinon il faut penser a une solution ou la modification ce fait par un autre chemin
Cordialement

Michael (SMS-Phobique)
----------------------------
"La théorie, c'est quand on sait tout et que rien ne fonctionne. La pratique, c'est quand tout fonctionne et que personne ne sait pourquoi."
Albert EINSTEIN
Avatar de l’utilisateur
Michael DELIQUE
Administrateur
Administrateur
 
Message(s) : 12183
Inscrit(e) le : 16 Déc 2004 à 10:36
Localisation : Paris/Cergy

Messagepar R-one » 28 Juin 2011 à 15:45

Merci pour ta réactivité,

Du coup, je planche sur 2 solutions.

La première :
Je voulais lancer la pièce jointe en modification dès qu'il rentre dans le champs texte riche (avec l'évenment "entering").
Je cherche comment on peut faire ça en LS.
Sinon un bouton en formule avec @Command([AttachmentLaunch]), mais ça ne veut pas se lancer.

La deuxième solution :
Je veux utiliser un de tes tips (http://forum.dominoarea.org/verifier-lattachement-dun-fichier-sur-un-champ-t24117.html)
En effet, je calcule le nom de la pièce jointe que j'attache à la création.
Je peux tester le nom de la pièce jointe avant l'enregistrement. Mais, y a une faille : il peut remplacer la pièce jointe par une autre avec le même nom...


Je n'ai pas bien saisi ton concept de fichier intégré. Tu parles des OLE? Au début, j'avais mi un objet OLE, mais ça merdait. Le fichier OLE doublait de volume, lorsqu'on changeait à peine une lettre dans le document. Du coup, je me suis rabattu sur la bonne vieille pièce jointe.
La modification a l'air de fonctionner. Si tu ouvres la pièce jointe en modification et qu'ensuite t'enregistre, puis que tu enregistres le document qui la contient, les modifications restent...
R-one
Posteur néophyte
Posteur néophyte
 
Message(s) : 85
Inscrit(e) le : 28 Juin 2011 à 09:51

Messagepar Michael DELIQUE » 29 Juin 2011 à 07:15

re,

oui fichier OLE je me suis croisé les doigts sur le clavier avec la "vue intégré". pour la modif du fichier c'est vrai ça a changé...

il peut remplacer la pièce jointe par une autre avec le même nom..


désolé je comprend pas
Cordialement

Michael (SMS-Phobique)
----------------------------
"La théorie, c'est quand on sait tout et que rien ne fonctionne. La pratique, c'est quand tout fonctionne et que personne ne sait pourquoi."
Albert EINSTEIN
Avatar de l’utilisateur
Michael DELIQUE
Administrateur
Administrateur
 
Message(s) : 12183
Inscrit(e) le : 16 Déc 2004 à 10:36
Localisation : Paris/Cergy

Messagepar R-one » 29 Juin 2011 à 08:27

Bonjour,


Pour la première solution, j'ai pas encore trouvé comment lancer la pièce en modification avec du code...

Grâce à ton tip, je peux maintenant vérifier avant l'enregistrement si l'utilisateur a changé la pièce jointe. En effet, j'ai un champs calculé pour le nom de la pièce jointe à la création, et un champs calculé pour le nom de la pièce jointe à chaque modification. Du coup, avant l'enregistrement, je vérifie que les deux noms correspondent.
La faille, comme je te le disais. C'est si l'utilisateur supprime ma pièce jointe, et rattache une autre pièce jointe qui porte le même nom que la pièce jointe supprimée. Donc là quand je vais comparer les noms avant l'enregistrement, je ne vais pas voir la supercherie.


En tout cas, pour le fichier OLE, ça pose problème quand tu as un document word avec un SmartArt à l'intérieur.(outil microsoft office permettant la creation de forme, de graphisme)
Moi je l'utilise pour créer des organigrammes. Et bien à chaque que je reenregistre, la taille de l'objet OLE double presque de taille.
R-one
Posteur néophyte
Posteur néophyte
 
Message(s) : 85
Inscrit(e) le : 28 Juin 2011 à 09:51

Messagepar Michael DELIQUE » 29 Juin 2011 à 08:47

re,

pour ton lancement de pj en code regarde là => http://forum.dominoarea.org/tip-ouvrir- ... 38544.html

pour ton probleme de suppression, dans ce cas, il faut le gérér toi-même comme ça tu pourra le controler
Cordialement

Michael (SMS-Phobique)
----------------------------
"La théorie, c'est quand on sait tout et que rien ne fonctionne. La pratique, c'est quand tout fonctionne et que personne ne sait pourquoi."
Albert EINSTEIN
Avatar de l’utilisateur
Michael DELIQUE
Administrateur
Administrateur
 
Message(s) : 12183
Inscrit(e) le : 16 Déc 2004 à 10:36
Localisation : Paris/Cergy

Messagepar LSong » 29 Juin 2011 à 14:52

R-one a écrit:Ah, ben ça ne m'arrange pas tellement. :-)

Je vais poser le problème autrement alors :

Mais ensuite, je veux empêcher l'utilisateur de supprimer ma pièce jointe et l'empêcher également d'en rajouter une autre manuellement.
En revanche, il doit pouvoir modifier le contenu de ma pièce jointe que j'ai importée.

Question : comment faire?



Si tu veux qu'il ne puisse pas ajouter ou changer la piece jointe il ne faut pas que le rich text soit editable
soit il est calculé soit il est dans une section avec acces controlé

pour la modification fait un bouton pour ouvrir l'attachement, et un autre pour le remplacer, ca n'empechera pas un utilisateur d'aller chercher le fichier dans le répertoir ou tu l'as detaché pour truander mais ca devient plus compliquer à contourner (il est illusoire de voiloir un truc imparable, si le gus a decider de remplacer la pièce jointe il peu le faire en scripte ...)

pour les masquage dans les champs richtext c'est un peu spécial
chaque ligne du champs richtext peu avoir sa propre option de masquage
et ne ne sais pas si une copie copie aussi les options
LSong
Posteur expérimenté
Posteur expérimenté
 
Message(s) : 353
Inscrit(e) le : 07 Nov 2007 à 14:27
Localisation : Ile de france

Messagepar R-one » 29 Juin 2011 à 16:59

Merci de vos réponses.

C'est vrai que c'est illusoire de penser pouvoir empêcher l'utilisateur de contourner ma restriction.

J'ai même tenté de lancer la pièce jointe dans l'évenement entering en simulant une action de la souris.

Je vais juste tester avant la sauvegarde, si il a changé la pièce jointe.
S'il a osé le faire, l'utilisateur sera bizuté à titre d'exemple... :twisted:

En tout cas, ça m'aura permis de découvrir pas mal de choses.

Merci à vous deux
R-one
Posteur néophyte
Posteur néophyte
 
Message(s) : 85
Inscrit(e) le : 28 Juin 2011 à 09:51


Retour vers Développement

cron