ui builder client script ,UX Client Script Include

kack l
Tera Expert


I'm working on a "furigana auto-generation" feature in UI Builder on ServiceNow Workspace.
In a Client Script (onChange event), I wrote the following code:
,UX Client Script Include:

function include({ imports }) {
console.log(' AutoKanaUtil 被载入');

const kanjiToHiragana = {
'髙': 'たか', '山': 'やま',
'養': 'よう', '蜂': 'ほう', '場': 'じょう',
};

function convertKana(input) {
console.log('🔠 convertKana 被呼び出された:', input);
if (typeof input !== 'string') return '';

let result = '';
for (let char of input) {
if (kanjiToHiragana[char]) {
result += kanjiToHiragana[char];
} else {
result += char;
}
}

return result;
}

return {
convertKana
};
}

ui builder client scrip:

function handler({ api, event, imports }) {
  console.log('🔍 onChange triggered with value:', event.payload?.value);
  console.log('📦 imports object:', imports);

  try {
    const kanaUtil = imports['sn_cwf_wrkspc.AutoKanaUtil']();
    if (!kanaUtil || typeof kanaUtil.convertKana !== 'function') {
      console.error(' convertKana ');
      return;
    }

    const inputValue = event.payload?.value || '';
    const kana = kanaUtil.convertKana(inputValue);
    console.log(' kana result:', kana);

   
    if (api.record) {
      api.record.u_hurikana = kana;     // api.record.setValue('u_hurikana', kana);
    } else if (event.record) {
      event.record.u_hurikana = kana;
    } else {
      console.error('No record object available—check the API docs for the proper setter.');
    }
  } catch (e) {
    console.error(' ', e);
  }
}

However, this causes a runtime error: Error: TypeError: Cannot set properties of undefined (setting 'u_hurikana')

Should I use something like api.record.u_hurikana = kana instead?

I would appreciate any clarification regarding limitations or best practices for modifying field values within UI Builder Client Scripts.



0 REPLIES 0