ServiceNow 从数组中检索对象
ServiceNow retrieving objects from array
我在 ServiceNow 工作,遇到有关对象、数组以及如何访问元素的业余编码问题。下面,我从一个空数组开始并用对象填充它。现在我有了一个包含对象的数组,我的问题是如何访问不同的元素?我希望能够生成一个 table,其中列是数字、short_desc 和 url,并且行是动态生成的。我怎样才能做到这一点?
data.list = [];
var ka = new GlideRecord('x_81991_knowledge');
ka.addQuery('kb_category.label', 'Benefits');
ka.query();
while(ka.next()) {
data.list.push({
number: ka.getValue('number'),
short_desc: ka.getValue('short_description'),
url:'kb_view.do?sysparm_article=' + ka.getValue('number')
});
}
所以,您有一个对象:data
,并且在该对象中有一个元素:list
。该元素是一个数组,其中包含其他对象。
正如 JavaScript 中的对象包含带名称的属性一样,数组就像具有属性的对象一样,这些属性都具有按顺序编号的名称。
例如,如果您有一个像 var fruitz = ['apple', 'banana', 'hammer', 'pear'];
这样的数组,它与拥有一个如下所示的对象非常相似:
var fruitz = {
0:'apple',
1:'banana',
3:'hammer',
4:'pear'
};
在任一示例中,您都可以通过以下方式访问值为 'banana' 的元素:fruitz[1];
。
当然有一些差异 - 当然,对象通常不具有具有连续数字名称的属性! - 这只是一种可视化如何访问数组元素的好方法。
JS 中的数组元素 do 保留它们的顺序,因此位置 3 的元素(第四个元素 - 记住,数组使用 "zero-based index")将保留在位置3.
您可以执行 for 循环来迭代并从数组中获取元素,如下所示:
var i;
for (i = 0; i < fruitz.length; i++) {
gs.info(fruitz[i] + ' is element number ' + i + ' in the array.');
}
网上有一些很好的学习资源Angular,如果您想了解服务门户在前端的工作原理,这绝对是至关重要的。
下面是一个如何将数组输出为平面数组的示例 table。 运行这个作为"background script",因为它使用"gs.print"来输出结果。请注意,我必须添加第一行,只是在脚本中设置 "data" 对象,但如果它已经存在于您的代码中,则不需要它。
var data = {}
data.list = [];
var ka = new GlideRecord('x_81991_knowledge');
ka.addQuery('kb_category.label', 'Benefits');
ka.query();
while(ka.next()) {
data.list.push({
number: ka.getValue('number'),
short_desc: ka.getValue('short_description'),
url:'kb_view.do?sysparm_article=' + ka.getValue('number')
});
}
for(var i=0; i < data.list.length; i++){
gs.print("Number: " + data.list[i].number + ", Short Description: " + data.list[i].short_desc + ", URL: " + data.list[i].url);
}
这是使用带有数组的 obj 获取数据的方法:
data = []; // array
var ka = new GlideRecord('x_81991_knowledge');
ka.addQuery('kb_category.label', 'Benefits');
ka.query();
while (ka.next()) {
var list = {}; // object
list.number = ka.getValue('number');
list.short_desc = ka.getValue('short_description');
list.url = 'kb_view.do?sysparm_article=' + ka.getValue('number');
data.push(list);
}
此外,如果您想在 servicenow 中获取记录的 url,我建议您使用 ka.getLink()
。参考:getLink()
我在 ServiceNow 工作,遇到有关对象、数组以及如何访问元素的业余编码问题。下面,我从一个空数组开始并用对象填充它。现在我有了一个包含对象的数组,我的问题是如何访问不同的元素?我希望能够生成一个 table,其中列是数字、short_desc 和 url,并且行是动态生成的。我怎样才能做到这一点?
data.list = [];
var ka = new GlideRecord('x_81991_knowledge');
ka.addQuery('kb_category.label', 'Benefits');
ka.query();
while(ka.next()) {
data.list.push({
number: ka.getValue('number'),
short_desc: ka.getValue('short_description'),
url:'kb_view.do?sysparm_article=' + ka.getValue('number')
});
}
所以,您有一个对象:data
,并且在该对象中有一个元素:list
。该元素是一个数组,其中包含其他对象。
正如 JavaScript 中的对象包含带名称的属性一样,数组就像具有属性的对象一样,这些属性都具有按顺序编号的名称。
例如,如果您有一个像 var fruitz = ['apple', 'banana', 'hammer', 'pear'];
这样的数组,它与拥有一个如下所示的对象非常相似:
var fruitz = {
0:'apple',
1:'banana',
3:'hammer',
4:'pear'
};
在任一示例中,您都可以通过以下方式访问值为 'banana' 的元素:fruitz[1];
。
当然有一些差异 - 当然,对象通常不具有具有连续数字名称的属性! - 这只是一种可视化如何访问数组元素的好方法。
JS 中的数组元素 do 保留它们的顺序,因此位置 3 的元素(第四个元素 - 记住,数组使用 "zero-based index")将保留在位置3.
您可以执行 for 循环来迭代并从数组中获取元素,如下所示:
var i;
for (i = 0; i < fruitz.length; i++) {
gs.info(fruitz[i] + ' is element number ' + i + ' in the array.');
}
网上有一些很好的学习资源Angular,如果您想了解服务门户在前端的工作原理,这绝对是至关重要的。
下面是一个如何将数组输出为平面数组的示例 table。 运行这个作为"background script",因为它使用"gs.print"来输出结果。请注意,我必须添加第一行,只是在脚本中设置 "data" 对象,但如果它已经存在于您的代码中,则不需要它。
var data = {}
data.list = [];
var ka = new GlideRecord('x_81991_knowledge');
ka.addQuery('kb_category.label', 'Benefits');
ka.query();
while(ka.next()) {
data.list.push({
number: ka.getValue('number'),
short_desc: ka.getValue('short_description'),
url:'kb_view.do?sysparm_article=' + ka.getValue('number')
});
}
for(var i=0; i < data.list.length; i++){
gs.print("Number: " + data.list[i].number + ", Short Description: " + data.list[i].short_desc + ", URL: " + data.list[i].url);
}
这是使用带有数组的 obj 获取数据的方法:
data = []; // array
var ka = new GlideRecord('x_81991_knowledge');
ka.addQuery('kb_category.label', 'Benefits');
ka.query();
while (ka.next()) {
var list = {}; // object
list.number = ka.getValue('number');
list.short_desc = ka.getValue('short_description');
list.url = 'kb_view.do?sysparm_article=' + ka.getValue('number');
data.push(list);
}
此外,如果您想在 servicenow 中获取记录的 url,我建议您使用 ka.getLink()
。参考:getLink()