2017-02-19 14 views
4

Я новичок в ServiceNow, но знаю SQL, и просто не имеет смысла, что я не смог найти такой простой пример запроса для ServiceNow на их официальном сайта и Google. Есть ли какой-либо способ для JOIN или просто проверить, является ли поле X из таблицы 1 равным Y полем из таблицы2?ServiceNow - как написать выбор запроса для получения значений из 2 таблиц

Пример: У меня есть 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' 

или JOIN:

SELECT u.* from users u 
LEFT JOIN companies c on u.company_name = c.company_name 
WHERE c.city = 'London' 

Как сделать это в ServiceNow? Thanks

ответ

3

Ссылочные поля будут обрабатывать это для вас.

Если вы используете таблицы из-из-коробки в ServiceNow для пользователя (sys_user) и компаний (core_company), они связаны между собой с помощью поля ссылки на пользователе (sys_user.company).

С помощью полей справки (по существу внешних ключей) вы можете использовать dot-walk для запроса через ссылочное поле для запроса к полям в указанной записи. GlideRecord запрос для получения всех пользователей в компании, расположенной в Лондоне, будет выглядеть следующим образом:

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); 
} 

Вы можете сделать то же самое с запрашивая через закодированные URL-адрес:

yourinstance.service-now.com/sys_user_list.do?sysparm_query=company.city=London 

Либо GlideRecord запроса или в закодированный URL-адрес в конечном итоге создает SQL под капотом, который выполняет поиск, которое вы ищете (вы можете активировать отладку SQL Debug SQL в качестве администратора, чтобы увидеть сгенерированный sql):

SELECT ... 
FROM sys_user LEFT JOIN 
     core_company ON sys_user.company = core_company.sys_id 
WHERE core_company.city = 'London' 

Теперь, вы не можете на самом деле использовать эти таблицы OOB, но отношения, которые вы пытаетесь запрос с использованием объединений будут решены с аналогичной конфигурацией ссылочных полеем

0

Я просто хочу добавить что-то к вышеуказанному ответу (я приведу пример). Я буду использовать 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); 
}