2016-11-11 5 views
2

Je veux un ordre d'achat à générer lorsqu'une personne clique sur le bouton d'approbation sur une commande client. J'ai le script déployé dans les enregistrements de commande client et le type d'événement à déclencher lorsque le bouton d'approbation est cliqué. Toutefois, ce code ne créera pas de commande car j'ai une valeur de champ non valide pour la valeur de l'élément de sous-liste.Je veux créer un ordre d'achat après le bouton « approuver » est cliqué sur une commande client

Je l'ai utilisé à la fois l'identification interne et le nom de chaîne de l'élément en tant que valeurs et je reçois la même erreur « valeur de champ non valide ». Quelqu'un sait ce qui ne va pas?

function beforeSubmit(context) { 
    var sRecord = context.newRecord; 
    var user = runtime.getCurrentUser(); 

    //get line count 
    var itemCount = sRecord.getLineCount({ 
     sublistId: 'item' 
    }); 

    for (var i = 0; i<itemCount; i++){ 
     var pOrder = record.create({ 
      type: record.Type.PURCHASE_ORDER, 
      isDynamic: true 
     }); 

     //get item internal id 
     var itemId = sRecord.getSublistValue({ 
      sublistId : 'item', 
      fieldId  : 'item', 
      line  : i 
     }); 

     //get qty 
     var qty = sRecord.getSublistValue({ 
      sublistId : 'item', 
      fieldId  : 'quantity', 
      line  : i 
     }); 

     //get vendor of item 
     var vendor = search.lookupFields({ 
      type : 'item', 
      id  : itemId, 
      columns : ['vendorname'] 
     }); 

     //add vendor to record 
     pOrder.setValue('vendorname', vendor); 

     //selects new line 
     pOrder.selectNewLine({sublistId: 'item'}); 

     //add item to sublist 
     pOrder.setCurrentSublistValue({ 
      sublistId : 'item', 
      fieldId  : 'item', 
      value  : itemId 
     }); 

     //add quantity to sublist 
     pOrder.setCurrentSublistValue({ 
      sublistId : 'item', 
      fieldId  : 'quantity', 
      value  : qty 
     }); 
     pOrder.commitLine({sublistId: 'item'}); 
     pOrder.save(); 

    } 
} 
+0

ou est-il un moyen de déclencher le « créer un ordre spécial » pour chaque élément de ligne dans une commande client lorsque le bouton d'approbation est cliqué? –

+0

Je suppose que vous avez essayé de définir un de ces éléments sur un PO via l'interface utilisateur, pour être sûr qu'il est disponible pour les bons de commande? – W3BGUY

+0

@ W3BGUY oui créer un PO via l'interface utilisateur fonctionne parfaitement bien. l'erreur se produit seulement au point où j'ajoute un article –

Répondre

3

Le champ entity est nécessaire sur l'achat dossier de commande. Le champ vendorname de l'enregistrement d'article ne stocke pas d'enregistrement fournisseur, et même s'il l'a fait, il n'y a pas de champ vendorname correspondant sur le bon de commande. Cette valeur de l'enregistrement d'article est utilisée pour identifier le nom/code du fournisseur pour l'article lui-même, dans le cas où ils ont un nom différent.

Comme écrit, ce code fonctionne au moins situationnellement si le champ entity est situé sur le bon de commande. Si vous avez défini une Preferred Vendor ou si vous utilisez les différents fournisseurs ont configuré un fonction fournisseur préféré là, vous pouvez rechercher le champ approprié entity directement à partir du dossier de l'article encore.

Un moyen facile d'obtenir ce que ce script semble faire sans script pour les articles en stock et non en stock est d'utiliser la case à cocher Drop Ship Item ou Special Order Item sur ces enregistrements d'article. La sélection de chaque élément éligible permettra la création automatique de po pour les éléments de campagne de votre commande client. Recherchez Special Order Items dans l'aide de Netsuite pour plus d'informations sur les différences et comment configurer non plus.

+0

je vois. donc je suppose que parce que le champ d'entité n'est pas défini, il ne peut pas trouver d'éléments associés pour la commande d'achat (parce que vous devez définir un fournisseur avant d'ajouter des éléments). Est-ce correct? edit: Je ne peux pas croire que c'était le problème. Bien que je n'aie pas redéployé le script, je pense que c'était le problème. Merci beaucoup! –