2017-06-23 3 views
0

J'ai un flux de travail qui ajoute un bouton "Open Link" et un champ sur l'enregistrement appelé "URL" qui contient un lien hypertexte à une pièce jointe dans NetSuite. Je veux ajouter un script d'action de workflow qui ouvre cette URL dans une page différente. J'ai ajouté le script et l'action de workflow au workflow. Mon script:NetSuite/Suitescript/Workflow: Comment ouvrir une URL à partir d'un champ après avoir cliqué sur le bouton?

function openURL() { 

var url = nlapiGetFieldValue('custbody_url'); 

window.open(url);  

} 

je reçois cette erreur de script après avoir cliqué sur le bouton: « TypeError: fonction Vous ne trouvez pas ouverte dans l'objet [object Object]

Comment puis-je changer mon script pour qu'il ouvre l'URL. le terrain?

(Cette fonction fonctionne lorsque je tente dans la console)

Merci!

Répondre

1

Voulez-vous que cela fonctionne au moment de l'affichage ou de la modification de l'enregistrement? Ils ont des scripts légèrement différents. Je vais supposer que vous voulez que le bouton fonctionne lorsque l'enregistrement est en cours d'affichage, mais je l'écrirai pour que cela fonctionne même lorsque le document est en cours d'édition. La partie la plus difficile de la façon dont Netsuite l'a configuré est qu'il nécessite deux scripts, un script d'événement utilisateur et un script client. La façon dont @michoel suggère peut fonctionner aussi ... Je n'ai jamais inséré le script par le texte avant personnellement cependant. Je vais essayer ça peut-être aujourd'hui.

Voici un événement utilisateur que vous pouvez utiliser (ne l'avez pas testé moi-même, donc vous devriez le faire passer par un test avant de le déployer pour tout le monde). Utilisez-le en tant que fichier Suitescript pour un script d'événement utilisateur. Définissez la fonction Avant chargement dans la page de script sur userEvent_beforeLoad. Assurez-vous de le déployer dans l'enregistrement sur lequel vous voulez l'exécuter.

Voici le script client qui va avec.

function openURL() 
{ 
    /* 
    nlapiGetFieldValue() gets the url client side in a changeable field, which nlapiLookupField (which looks it up server side) can't do 
    if your url is hidden/unchanging or you only care about view mode, you can just get rid of the below and use nlapiLookupField() instead 
    */ 
    var url = nlapiGetFieldValue('custbody_url'); 

    /* 
    nlapiGetFieldValue() doesn't work in view mode (it returns null), so we need to use nlapiLookupField() instead 
    if you only care about edit mode, you don't need to use nlapiLookupField so you can ignore this 
    */ 
    if(url == null) 
    { 
     var myType = nlapiGetRecordType(); 
     var myId = nlapiGetRecordId(); 
     url = nlapiLookupField(myType, myId,'custbody_url'); 
    } 

    //opening up the url 
    window.open(url);  
} 

Ajouter comme un script client, mais ne font pas de déploiements (l'utilisateur script d'événement se joindre à la forme pour vous). Assurez-vous que ce script a l'ID customscript_my_client_script (ou quel que soit l'ID de script utilisé dans le script d'événement utilisateur dans form.setScript()), sinon cela ne fonctionnera pas. Une autre chose à garder à l'esprit est que chaque enregistrement ne peut avoir qu'un seul script ajouté à l'aide de form.setScript() (je pense?) Donc vous pouvez intituler le script d'événement utilisateur et le script client quelque chose en relation avec le forme que vous déployez sur. L'utilisation de form.setScript est équivalente à la définition de la valeur du script lorsque vous vous trouvez dans le menu Personnaliser le formulaire. Si vous pouvez faire fonctionner la réponse de @ michoel, cela peut aller mieux parce que vous gardez la logique tout en un script qui (de mon point de vue) facilite la gestion de vos scripts.

0

le problème que vous exécutez en est ce flux de travail Actio n Les scripts s'exécutent du côté du serveur, vous n'êtes donc pas en mesure d'effectuer des actions côté client comme l'ouverture d'un nouvel onglet. Je suggérerais d'employer un manuscrit d'événement d'utilisateur qui peut "injecter" le code de client dans la fonction de bouton onclick.

function beforeLoad(type, form) { 
    var script = "window.open(nlapiGetFieldValue('custbody_url'))"; 
    form.addButton('custpage_custom_button', 'Open URL', script); 
} 
+0

Cela ouvre une page blanche pour moi.Même lorsque j'essaie d'ajouter: 'var rec = nlapiLoadRecord ('vendorbill', nlapiGetRecordId()); var url = rec.getFieldValue ('custbody_url'); ' et essayer d'ouvrir cette page, il ne fait rien et reste sur la page – bluejay92