2016-04-07 1 views
0

J'essaye d'écrire un script qui empêchera les produits finis d'être retirés de l'inventaire si la construction de l'assemblage est en attente d'approbation. C'est le premier script que j'ai fait et la première fois que j'utilise JavaScript, je m'excuse si ce que j'ai fait jusqu'ici n'a pas de sens (et si j'ai l'air idiot). Le script vérifie si l'enregistrement est une construction d'assemblage en cours de création ou d'édition puis crée un champ temporaire, "quantité en attente". Lorsqu'il est enregistré, si le statut d'approbation est "en attente d'approbation", le script affecte la valeur de quantité en attente à la valeur Quantité à construire, puis Quantité à construire est définie sur 0 et l'enregistrement est soumis. Si le statut d'approbation est approuvé, la quantité à construire est définie sur la valeur stockée dans la quantité en attente, et la quantité en attente est définie sur 0, l'enregistrement est ensuite soumis. Encore une fois, je m'excuse si cela n'a aucun sens.NetSuite: L'assemblage de scripts ne permet de retirer l'inventaire que lorsqu'il est approuvé

J'ai essayé d'utiliser le débogueur de script, mais je ne pense pas que mon code fonctionne. Quelqu'un pourrait-il indiquer où je me suis trompé ou si je suis sur la bonne voie?

Voici ce que j'ai jusqu'à présent. Si quelqu'un a fait quelque chose comme ça ou connaît une meilleure approche, je suis tout ouïe.

function commitIfApproved() { 
    var cR = nlapiGetOldRecord();  
    var recordId = cR.nlapiGetRecordID();  
    var recordType = cR.nlapiGetRecordType();  
    if (recordId == 'assemblybuild') {  
     if(recordType = 'create' || 'edit') {  
      var approvalstatus = cR.nlapiGetFieldValue('approval status');  
      var quantityPending = cR.nlapiGetFieldValue('quantity to build - pending');  
      if (approvalstatus == "Awaiting Approval") {  
       cR.nlapiSetFieldValue('quantity to build', '0');   
       cR.nlapiSetFieldValue('quantity to build - pending', quantityPending);  
       cR.nlapiSubmitRecord();  
       alert("Finished goods will not be taken from inventory until this assembly build is approved."); 
      } 
      if (approvalstatus == "Approved") {  
       cR.nlapiSetFieldValue('quantity to build', quantityPending);  
       cR.nlapiSetFieldValue('quantity to build - pending', '0');  
       cR.nlapiSubmitRecord();  
       alert("This assembly build has been approved. Finished goods have been subtracted from inventory."); 
      } 
     } 
    } 
} 

Répondre

0

erreur d'abord que je vois est votre comparaison recordId. Vous aurez besoin de changer votre déclaration if qui se compare à assemblybuild pour utiliser recordType au lieu de recordId.

Deuxième est avec vos appels de méthode dans vos affectations recordId et recordType. nlapiGetRecordId() et nlapiGetRecordType() sont des méthodes statiques globales. Les méthodes d'instance sont getRecordType() et getId(). La même chose est vraie pour tous vos appels à setFieldValue. Voir l'article d'aide intitulé nlobjRecord pour plus de détails sur l'API de l'objet record.

var recordId = nlapiGetRecordId(); // alternatively, cr.getId() var recordType = nlapiGetRecordType(); // alternatively, cr.getRecordType();

Enfin, vos identifiants de champ sont tous faux. 'quantity to build' n'est pas un ID réel. Vous souhaiterez vérifier le navigateur d'enregistrements dans l'EDI Eclipse (Aide> Navigateur d'enregistrements NetSuite) pour la page sur les enregistrements Assemblage de construction pour voir tous les champs et leurs ID respectifs.

+0

Merci beaucoup d'avoir trouvé mes erreurs et d'avoir tout expliqué très clairement! Je n'ai pas fait d'ajustements à mon code jusqu'à présent mais je vous ferai savoir si cela fonctionne! Pour une raison quelconque, il est si difficile de trouver de bonnes sources sur les articles et l'aide de NetSuite. – Jordan