2017-08-29 3 views
1

Impossible de définir un champ de type INLINEHTML à l'aide de SuiteScript 2.0. Cependant, le même champ fonctionne avec SuiteScript 1.0. Voici l'extrait de code:Définition d'un champ HTML inline à partir de Client Script dans SuiteScript 2.0

/** 
* @NApiVersion 2.x 
* @NScriptType ClientScript 
*/ 
// In SuiteScript 2.0 
define(['N/search'], function(search) { 
    return { 
     pageInit: function(context) { 
      var currentRecord = context.currentRecord; 
      // Set Value (This does not set any data) 
      currentRecord.setValue({ fieldId: 'inline_html_field', value: '<div>Test Value</div>' }); 
      // Get value (Returns undefined) 
      currentRecord.getValue({ fieldId: 'inline_html_field'}); 
     } 
    } 
}); 

// In SuiteScript 1.0 
nlapiGetFieldValue('inline_html_field'); // Returns the data in field 
+0

Créez-vous ce champ dynamiquement ou s'agit-il d'un champ personnalisé qui réside dans l'enregistrement? –

+0

C'est un champ personnalisé qui est disponible sur le disque. – tarunbandil

Répondre

0

Je pense que vous avez besoin du module currentRecord.

/** 
* @NApiVersion 2.x 
* @NScriptType ClientScript 
*/ 
// In SuiteScript 2.0 
define(['N/search', 'N/currentRecord'], function(search, currentRecord) { 
    return { 
     pageInit: function(context) { 
      var currentRecord = context.currentRecord; 
      // Set Value (This does not set any data) 
      currentRecord.setValue({ fieldId: 'inline_html_field', value: '<div>Test Value</div>' }); 
      // Get value (Returns undefined) 
      currentRecord.getValue({ fieldId: 'inline_html_field'}); 
     } 
    } 
}); 
+0

J'ai ajouté le module currentRecord mais cela n'a pas fonctionné. – tarunbandil

+0

Vous avez raison. Cela ne fonctionne pas. Il semble que vous ne pouvez pas faire cela. J'ai copié votre code dans mon environnement et obtenu les mêmes résultats. Cela ne fonctionne pas sur les champs HTML Inline; cela fonctionne avec d'autres types de champs. – user3075978

0

Malheureusement, c'est une instance où la logique mis en place derrière le record.getValue() ou currentRecord.getValue() dans SS 2.0 est défectueux. Dans SS 1.0, nlapiGetFieldValue() passe moins de validation que la contrepartie SS 2.0. Voici un exemple (avec un peu de chance, je crois que NetSuite ne me jette pas en prison pour avoir violé leur propriété intellectuelle). C'est ce qui se passe lorsque vous demandez la valeur.

function getTheValue(options) 
     { 
      var fieldId; 

      fieldId = '....';// Do a bunch of logic to validate the options parameter is correct 

      return doGetTheValue(fieldId); 
     } 

     function doGetTheValue(fieldId) 
     { 
      var fieldObj = goodOlegetField(fieldId); // goodOle being our 1.0 api prefix.... 
      // the function call above returns null preventing your request from succeeding. 
      var value; 
      if (fieldObj == null) 
       return undefined; 


     } 

J'espère que cela est logique, et bien qu'il nest pas une réponse, il fournira un aperçu des raisons pour lesquelles vous obtenez la réponse que vous obtenez. C'est aussi une validation solide que vous n'êtes pas fou. J'ai souvent trouvé que j'ai besoin de cette assurance lorsque je travaille avec SS 2.0.

0

Lorsque je traite des champs html en ligne, je les traite comme des fichiers html normaux du côté client. Pour éviter les problèmes que je vais avoir en général une valeur par défaut

// User Event Before Load 
nlapiSetFieldValue('custbody_inline_field', '<div id="myuniqueid">default content</div>'); 

ou

var fld = form.addField('custpage_inline_field'...); // look up field creation in the help. 
fld.setDefaultValue('<div id="myuniqueid">default content</div>'); 

puis sur le client manipuler tout le contenu de $ ("# MyUniqueID"). Vous n'avez pas besoin d'utiliser jQuery mais il est maintenant inclus dans l'interface graphique NS.