承認アサインスクリプト
これは、有用な承認およびアサインスクリプトの検索可能なバージョンです。
警告:
ここに記載されているカスタマイズは、特定のインスタンスで使用するために開発されたものであり、Now Support ではサポートされていません。この方法は現状のまま提供され、実装の前に完全にテストする必要があります。このカスタマイズに関するすべての質問およびコメントは、コミュニティフォーラムに投稿してください。
Viewing my approvalsを参照してください。
- ESS 要求のグループのアサイン
-
次のアサインルールスクリプトは、すべての ESS 要求に対してグループを自動的にアサインします。
if(current.opened_by.roles==""){ current.assignment_group.setDisplayValue('Network'); current.update();} - 配送計画タスクに基づいたカタログアイテムのグループへのアサイン
-
このアサインルールは、デスクトップグループにアサインされたカタログタスクを持つ配送計画を使用する場合に、サービスカタログアイテムをデータベースグループにアサインします。
//Return catalog items that have no group but do have a delivery plan assigned var ri =new GlideRecord("sc_cat_item"); ri.addQuery("group","=",null); ri.addQuery("delivery_plan","!=",null); ri.query(); while(ri.next()){ gs.log("Found an item"); //Return tasks that point to the same delivery plan as the above item var dptask =new GlideRecord("sc_cat_item_delivery_task"); dptask.addQuery("delivery_plan","=",ri.delivery_plan); dptask.query();while(dptask.next()){ gs.log("Found a task");var gp = dptask.group.getDisplayValue(); gs.log(gp);//If the task is assigned to desktop, assign the item's group to desktop if(dptask.group.getDisplayValue()=="Desktop"){ ri.group.setDisplayValue("Desktop"); gs.log("updating "+ ri.getDisplayValue()); ri.update();break;}}} - 1 つのタスクでアイテムをアサイン
-
このアサインルールは、特定のグループに関連付けられた 1 つのタスクのみを持つカタログアイテムを自動的にアサインします。
//Get the catalog item for the current requested item var scCatItem =new GlideRecord("sc_cat_item"); if(scCatItem.get('sys_id', current.cat_item)){ // If the catalog item already has an assignment group or if using workflow we don't need to make an assignment if(!scCatItem.delivery_plan.nil()&& scCatItem.group.nil()){ var dpTask =new GlideRecord("sc_cat_item_delivery_task"); dpTask.addQuery("delivery_plan","=",scCatItem.delivery_plan); dpTask.query(); if(dpTask.getRowCount()==1&& dpTask.next()){ // Check that there is only 1 record in the GlideRecord dpTask.group;}}} - 作業負荷に基づく割り当て
-
タイプ:ビジネスルール。
説明:アクティブなインシデントの数が最も少ないアサイン先グループメンバーに基づいて、アサイン先を入力します。
パラメーター:- order:>1000 (アサインルールの後に実行する場合)
- condition:current.assigned_to == '' && current.assignment_group != ''
- when:before, insert/update
var assignTo = getLowestUser(); gs.addInfoMessage("assigning to is "+ assignTo); current.assigned_to= assignTo; function getLowestUser(){ var userList =new Array(); var cg =new GlideRecord('sys_user_grmember'); cg.addQuery('group', current.assignment_group); cg.query(); while(cg.next()){ var tech = cg.user.toString(); var cnt = countTickets(tech); gs.addInfoMessage("Tech counts "+ cg.user.name+' '+ cnt +" "+ tech); userList.push({ sys_id: tech,name: cg.user.name, count: cnt });} for(var i=0; i < userList.length; i++){ gs.addInfoMessage(userList[i].sys_id+" "+ userList[i].name+" "+ userList[i].count);} userList.sort(function(a, b){ gs.addInfoMessage("Sorting: "+ a.sys_id+"("+ a.count+"); "+ b.sys_id+"("+ b.count+")"); return a.count- b.count;}); if(userList.length<=0)return""; return userList[0].sys_id;} function countTickets(tech){ var ct =new GlideRecord('incident'); ct.addQuery('assigned_to',tech); ct.addQuery('active',true); ct.query(); return ct.getRowCount();} - カテゴリが変更されたときにアサインルールを実行
-
タイプ:クライアントスクリプト。
テーブル:インシデント。
説明:この例は、インシデント内のカテゴリフィールドの onChange クライアントスクリプトです。注意:このスクリプトは、同期 AJAX を使用していました (非同期動作は ajaxRequest 呼び出しの 3 番目のパラメーターで指定されます)。以下の実装では、非同期 AJAX を使用しています。同期バージョンを使用する場合の短所は、ネットワーク応答の問題によってブラウザーがハングアップする可能性があることです。// Make an AJAX request to the server to get who this incident would be // assigned to given the current values in the record. This runs the assignment // rules thathave been defined in System Policy and returns the assigned_to and // the assignment_group function onChange(control, oldValue, newValue, isLoading){ if(isLoading){return; // No change, do not do anything } // Construct the URL to ask the server for the assignment var url ="xmlhttp.do?sysparm_processor=AJAXAssignment&sys_target=incident"; var uv = gel('sys_uniqueValue'); if(uv){ url +="&sys_uniqueValue="+ uv.value;} // Make the AJAX request to the server and get the response var serial = g_form.serialize(); // get all values currently assigned to the incident var response = ajaxRequest(url, serial,true, responseFunc);} // This callback function handles the AJAX response. function responseFunc(response){ varitem= response.responseXML.getElementsByTagName("item")[0]; // Process the item returned by the server if(item){ // Get the assigned_to ID and its display value and put them on the form varname=item.getAttribute("name"); var name_label =item.getAttribute("name_label"); if(name_label &&name){ g_form.setValue('assigned_to',name, name_label);} else{ g_form.setValue('assigned_to','','');} // Get the assignment_group ID and its display value and put then on the form var group =item.getAttribute("group"); var group_label =item.getAttribute("group_label"); if(group_label && group){ g_form.setValue('assignment_group', group, group_label);} else{ g_form.setValue('assignment_group','','');}}} - カスタム承認 UI マクロ
- カスタム承認 UI マクロの作成については、「 UI マクロ」を参照してください。