我是ServiceNow的新用户,但我知道SQL
,我无法在他们的官方网站和谷歌上找到ServiceNow的简单查询示例。
有没有办法JOIN
或只是检查表1中的X字段是否等于来自table2的Y字段?
实施例:
我有2个表,公司和用户,我需要“SELECT
”所有在伦敦工作的用户。在用户表格中,我有一个字段“company_name
”,在公司表格中我有字段company_name
和city
。
在SQL中,我可以通过简单的查询来解决它:
SELECT u.* from users u, companies c
WHERE u.company_name = c.company_name and c.city = 'London'
或加入:
SELECT u.* from users u
LEFT JOIN companies c on u.company_name = c.company_name
WHERE c.city = 'London'
如何在ServiceNow中执行此操作? 感谢
答案 0 :(得分:4)
参考字段可以为您处理。
如果您在ServiceNow中为用户(sys_user
)和公司(core_company
)使用现成的表格,则会通过用户的参考字段({{ 1}})。
使用引用字段(基本上是外键),您可以使用点走来查询引用字段以查询引用记录上的字段。 用于检索位于伦敦的公司中的所有用户的GlideRecord查询看起来像:
sys_user.company
通过编码URL查询可以做同样的事情:
var user = new GlideRecord('sys_user');
user.addQuery('company.city', 'London');
user.query();
while (user.next()) {
gs.info("User: " + user.user_name);
gs.info("Company: " + user.company.name);
gs.info("Company Address: " + user.company.street);
gs.info("Company City: " + user.company.city);
}
yourinstance.service-now.com/sys_user_list.do?sysparm_query=company.city=London
查询或编码后的URL最终会在您正在寻找的连接中生成SQL(您可以作为管理员激活Debug SQL会话调试以查看生成的sql) :
GlideRecord
现在,您可能实际上并未使用这些OOB表,但是您尝试使用连接查询的关系将通过类似配置的引用字段来解决
答案 1 :(得分:1)
我只想在上面的答案中添加一些内容(我将举例说明)。我将使用encodedQuery,它比addQuery()更安全。
var gr=new GlideRecord('users');//Creating object
gr.addEncodedQuery("Paste query after creating from query builder");
gr.query();//Executing query
while(gr.next())
{
gs.addInfoMessage("User=" + gr.user_name);
gs.addInfoMessage("Company Name=" + gr.company.name);
gs.addInfoMessage("Company Address=" + gr.company.street);
gr.addInfoMessage("Company City=" + gr.company.city);
}
答案 2 :(得分:0)
报告可以帮助您在ServiceNow中使用数据库视图:
http://wiki.servicenow.com/index.php?title=Database_Views#gsc.tab=0
数据库视图定义用于报告目的的表连接。