Let me preface this code with there is another way to do this but it's
undocumented.
That is using the GlideappVariablePoolQuestionSet class as posted
here by Chuck Tomasi
.

/*jslint eqeq: true*/
/*global GlideRecord, current*/
var tablestart = '<div ';
tablestart += 'class="nmmcbg" width="100%" ';
tablestart += 'style="background-color: LightGoldenRodYellow;">';
var d = '<div style="display:inline;font-weight:bold;" class="nmmcbold">';
var dn = '</div>\n';
var i;
var gr = new GlideRecord('sc_req_item');
gr.addQuery('sys_id', '=', current.sys_id);
gr.query();
var vtp = '';
var v = new GlideRecord('sc_item_option_mtom');
v.addQuery('request_item', current.sys_id);
v.orderBy('sc_item_option.order');
v.query();
while (v.next()) {
if (vtp.length >= 0) {
/*****************************
This code dynamically pulls the questions from the forms in the order
they are presented (numerically) and then displays them in a
consistant readable format.
Right now nothing links to any records but can with some slight
changes to this code.
*****************************/

var questionType = v.sc_item_option.item_option_new.type;
var question = '<p><b>';
question += v.sc_item_option.item_option_new.getDisplayValue();
question += '</b></p>';
var answer = v.sc_item_option.value.getDisplayValue() + '\n';
if (answer != '') { /*if the value is blank, don't print*/
if (questionType == 1) { //Yes / No
vtp += question + answer;
}
if (questionType == 2) { //Multi Line Text
vtp += question + answer;
}
if (questionType == 3) { //Multiple Choice
vtp += question + answer;
}
if (questionType == 4) { //Numeric Scale
vtp += question + answer;
}
if (questionType == 5) { //Select Box
vtp += question + answer;
}
if (questionType == 6) { //Single Line Text
vtp += question + answer;
}
if (questionType == 7) { //Check Box
vtp += question + answer;
}
if (questionType == 8) { //Reference
var reftable = v.sc_item_option.item_option_new.reference;
var referencegr = new GlideRecord(reftable);
referencegr.addQuery('sys_id', '=', v.sc_item_option.value);
referencegr.query();
while (referencegr.next()) {
vtp += question + ': ' + referencegr.getDisplayValue();
vtb += '\n';
}
}
if (questionType == 9) { //Date
vtp += question + answer;
}
if (questionType == 10) { //Date/Time
vtp += question + answer;
}
/*
if (questionType == 11) { //Label
//Do nothing
}
if (questionType == 12) { //Break
//Do nothing
}
if (questionType == 13) { //Not Listed
//Do nothing
}
if (questionType == 14) { //Macro
//Do nothing
}
if (questionType == 15) { //UI Page
//Do nothing
}
*/

if (questionType == 16) { //Wide Single Line Text
vtp += question + answer;
}
/*
if (questionType == 17) { //Macro with Label
//Do nothing
}
*/

if (questionType == 18) { //Lookup Select Box
var lstable = v.sc_item_option.item_option_new.lookup_table;
var lsbgr = new GlideRecord(lstable);
lsbgr.addQuery('sys_id', '=', v.sc_item_option.value);
lsbgr.query();
while (lsbgr.next()) {
vtp += question + ': ' + lsbgr.getDisplayValue() + '\n';
}
}
/*
if (questionType == 19) { //Container Start
//Do nothing
}
if (questionType == 20) { //Container End
//Do nothing
}
*/

if (questionType == 21) { //List Collector
var list = answer;
var listarray = list.split(',');
vtp += question + '</b></p>\n';
for (i = 0; i < listarray.length; i = i + 1) {
var listtable = v.sc_item_option.item_option_new.list_table;
var igr = new GlideRecord(listtable);
igr.addQuery('sys_id', '=', listarray[i]);
igr.query();
while (igr.next()) {
vtp += '- ' + igr.getDisplayValue() + '\n'; //displayvalues
}
//vtp += 'i = ' + i + '- ' + listarray<i> + '\n';//sys_ids
}
}
if (questionType == 22) { //Lookup Multiple Choice //success
vtp += question + answer;
}
}
}
}

var wn = '\n';
wn += tablestart;
wn += vtp;
wn += "</div>";

// then either write wn pre and appended with [code] tags in a journal
// field, or put it in a mail script.

Further Reading

Community Thread