problème avec specializeType (JS)

cancel
Showing results for 
Search instead for 
Did you mean: 
nancygaillard
Active Member

problème avec specializeType (JS)

Bonjour,

J'ai un ensemble de dossiers avec des documents d'un type personnalisé "facture". Je souhaiterais changer leur type en "content" et ajouter un aspect personnalisé "facture".
Etant donné que mon essai ne fonctionne pas, je souhaiterais avec votre aide juste changer le type.

INFOS :
Il s'agit d'un serveur Alfresco de test, installé sur Windows XP 32 bits, avec Alfresco Community 4.2.e


ESSAI :
J'ai créé un script comme suit :

<blockcode>

var dossierFacture = companyhome.childByNamePath("Sites/test-facture-courrier/documentLibrary/facture");

var factures = dossierFacture.children;
var r = companyhome.childByNamePath("r.txt") || companyhome.createFile("r.txt","cm:content"); //Rapport
r.content="nb factures "+factures.length;

if(factures){
   for(var i=0; i<factures.length;i++){
      var fact = factures;
      var props = [];//propriétés ajoutés avec l'aspect
      props["fac:aspFactdateFacture"] = new Date(fact.properties["fac:factdateFacture"]);
      props["fac:aspFactdateReglement"]= new Date(fact.properties["fac:afactdateReglement"]);
      props["fac:aspFactreference"]= fact.properties["fac:factreference"];
      props["fac:aspFactnbpai"]= Number(fact.properties["fac:factnbpai"]);
      props["fac:aspFactmontant"]= Number(fact.properties["fac:factmontant"]);
      props["fac:aspFactEmplacement"]= fact.properties["fac:Emplacement"] || "";
      
      r.content+="\r\n"+fact.type+"\r\n";
      
      fact.specializeType("cm:content");
      //fact.addAspect("fac:aspFacture",props);
      fact.save();
      
      r.content+=fact.type+"\r\n";
   }
}
</blockcode>

Je l'ai ajouté dans Dictionnaire de données/Scripts sous le nom de "transformer_facture_doc_asp.js"
J'ai créé un dossier dans mon site de test, et créé une règle sur ce dossier qui déclenche ce script quand n'importe quel élément entre dans le dossier.
Le script fonctionne, et j'obtiens mon rapport "r.txt" dans l'Entrepôt dans lequel se trouve le texte suivant :
<blockquote>
nb factures 3
{http://www.alfresco.org/model/content/1.0}systemfolder
{http://www.alfresco.org/model/content/1.0}systemfolder

{http://www.alfresco.org/model/pisys/1.0}facture
{http://www.alfresco.org/model/pisys/1.0}facture

{http://www.alfresco.org/model/pisys/1.0}facture
{http://www.alfresco.org/model/pisys/1.0}facture
</blockquote>

Résultat : les factures ne changent pas de type.
PS : il n'y a que 2 factures dans le dossier "facture", mais le script m'indique 3 factures???

Bref! Si vous avez une idée de ce qui ne va pas, je vous remercie d'avance pour l'aide que vous me procurerez!
1 Reply
mlagneaux
Active Member

Re: problème avec specializeType (JS)

Bonjour,

La méthode specializeType de ScriptNode a pour but de spécialiser un noeud, c'est-à-dire affecter au noeud un sous-type du type de noeud actuel. Dans votre cas, le type facture est un sous-type du type content : il n'est donc pas possible de spécialiser une facture en content. Seul l'inverse serait possible.

D'autre part, vous travaillez dans votre script sur les enfants du dossier Sites/test-facture-courrier/documentLibrary/facture. Dans votre cas, ce dossier contient bien 2 factures mais il contient également un noeud de type systemFolder. C'est pour cela que dossierFacture.children retourne 3 résultats. Il faudrait tester que vos noeuds sont bien du type facture avant de les traiter.

Enfin, jetez un oeil à l'API Javascript pour voir s'il existe une autre méthode que specializeType. L'attribut type de ScriptNode est peut-être modifiable => A vérifier.