ServicenowのServer Scriptで、URLから特定のパラメータを取得するスクリプトを組んで
ServiceNowのServer Scriptで、URLから特定のパラメータを取得するスクリプトを以下に示します。
(function() { // URLからクエリ文字列を取得 var queryString = decodeURIComponent(g_request.queryString); // クエリ文字列をパラメータに分割 var params = queryString.split("&"); // 取得したいパラメータの名前 var targetParam = "paramName"; // ここに取得したいパラメータの名前を指定 // パラメータを検索して値を取得 for (var i = 0; i < params.length; i++) { var param = params[i].split("="); if (param[0] === targetParam) { var paramValue = param[1]; // 取得したパラメータの値を使って処理を行う gs.info("Target Parameter Value: " + paramValue); break; } } })();
このスクリプトは、ServiceNowのServer Scriptとして実行されることを想定しています。g_request.queryStringを使用してURLのクエリ文字列を取得し、指定したパラメータの値を取得しています。取得したパラメータの値を使って、必要な処理を行ってください。また、"paramName"の部分に取得したいパラメータの名前を指定してください。
以下条件を満たすサイトを作成して。 ・angular1.5とboostrapを使用する ・ボタンAをクリックすることで、元々非表示だった別スコープのDOMを表示する
以下は、AngularJS 1.5とBootstrapを使用して、ボタンAをクリックすることで、元々非表示だった別スコープのDOMを表示するサイトの例です。
index.html:
<!DOCTYPE html> <html ng-app="myApp"> <head> <title>AngularJS Button Click Example</title> <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"> <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.11/angular.min.js"></script> <script src="app.js"></script> </head> <body ng-controller="MainController as mainCtrl"> <h1>Button Click Example</h1> <div class="form-group"> <button class="btn btn-primary" ng-click="mainCtrl.showHiddenDOM()">Show Hidden DOM</button> </div> <hr> <h2>Hidden DOM</h2> <div ng-if="mainCtrl.showDOM" class="alert alert-success">This DOM was hidden and now it's visible!</div> </body> </html>
app.js:
angular.module('myApp', []) .controller('MainController', function() { var mainCtrl = this; mainCtrl.showDOM = false; mainCtrl.showHiddenDOM = function() { // ボタンAがクリックされた場合、別スコープのDOMを表示する mainCtrl.showDOM = true; }; });
この例では、AngularJSコントローラーを使用しています。MainControllerコントローラーは、showDOMというフラグを持ち、ボタンAがクリックされた場合にng-clickディレクティブを使用してmainCtrl.showHiddenDOM()関数を呼び出します。showHiddenDOM()関数は、showDOMフラグをtrueに設定することで、別スコープのDOMを表示します。ng-ifディレクティブを使用して、showDOMがtrueの場合にのみ、別スコープのDOMを表示するようにしています。
以下条件を満たすサイトを作成して。 ・angular1.5とboostrapを使用する ・スコープAのラジオボタンAの変更に応じて、スコープBのラジオボタンの選択肢が変更される
以下は、AngularJS 1.5とBootstrapを使用して、スコープAのラジオボタンAの変更に応じてスコープBのラジオボタンの選択肢が変更されるサイトの例です。
index.html:
<!DOCTYPE html> <html ng-app="myApp"> <head> <title>AngularJS Radio Button Example</title> <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"> <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.11/angular.min.js"></script> <script src="app.js"></script> </head> <body ng-controller="ControllerA as ctrlA"> <h1>Controller A</h1> <div class="radio"> <label> <input type="radio" ng-model="ctrlA.selectedValue" ng-change="ctrlA.onRadioChange()" value="option1"> Option 1 </label> </div> <div class="radio"> <label> <input type="radio" ng-model="ctrlA.selectedValue" ng-change="ctrlA.onRadioChange()" value="option2"> Option 2 </label> </div> <hr> <h1>Controller B</h1> <div ng-controller="ControllerB as ctrlB"> <div class="radio" ng-repeat="option in ctrlB.options"> <label> <input type="radio" ng-model="ctrlB.selectedOption" value="{{option.value}}"> {{option.label}} </label> </div> </div> </body> </html>
app.js:
angular.module('myApp', []) .controller('ControllerA', function($rootScope) { var ctrlA = this; ctrlA.selectedValue = 'option1'; ctrlA.onRadioChange = function() { // ラジオボタンの値が変更された場合、$rootScopeを介してControllerBに伝える $rootScope.$broadcast('radioValueChanged', ctrlA.selectedValue); }; }) .controller('ControllerB', function($scope) { var ctrlB = this; ctrlB.selectedOption = null; $scope.$on('radioValueChanged', function(event, data) { // ControllerAからのイベントを受信して、選択肢を更新する if (data === 'option1') { ctrlB.options = [ { value: 'option1A', label: 'Option 1A' }, { value: 'option1B', label: 'Option 1B' } ]; } else if (data === 'option2') { ctrlB.options = [ { value: 'option2A', label: 'Option 2A' }, { value: 'option2B', label: 'Option 2B' } ]; } // 選択肢をリセットする ctrlB.selectedOption = null; }); });
この例では、ControllerAとControllerBの2つのAngularJSコントローラーを使用しています。ControllerAはラジオボタンを持ち、その値が変更された場合にng-changeディレクティブを使用してctrlA.onRadioChange()
以下条件を満たすサイトを作成して。 ・angular1.5とboostrapを使用する ・スコープAのラジオボタンのvalueが変更された場合、スコープBに伝える
以下は、AngularJS 1.5とBootstrapを使用して、スコープAのラジオボタンのvalueが変更された場合にスコープBに伝えるサイトの例です。
index.html:
<!DOCTYPE html> <html ng-app="myApp"> <head> <title>AngularJS Radio Button Example</title> <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"> <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.11/angular.min.js"></script> <script src="app.js"></script> </head> <body ng-controller="ControllerA as ctrlA"> <h1>Controller A</h1> <div class="radio"> <label> <input type="radio" ng-model="ctrlA.selectedValue" ng-change="ctrlA.onRadioChange()" value="option1"> Option 1 </label> </div> <div class="radio"> <label> <input type="radio" ng-model="ctrlA.selectedValue" ng-change="ctrlA.onRadioChange()" value="option2"> Option 2 </label> </div> <hr> <h1>Controller B</h1> <div ng-controller="ControllerB as ctrlB"> <p>Value from Controller A: {{ctrlB.valueFromControllerA}}</p> </div> </body> </html>
app.js:
angular.module('myApp', []) .controller('ControllerA', function($rootScope) { var ctrlA = this; ctrlA.selectedValue = 'option1'; ctrlA.onRadioChange = function() { // ラジオボタンのvalueが変更された場合、$rootScopeを介してControllerBに伝える $rootScope.$broadcast('radioValueChanged', ctrlA.selectedValue); }; }) .controller('ControllerB', function($scope) { var ctrlB = this; ctrlB.valueFromControllerA = 'option1'; $scope.$on('radioValueChanged', function(event, data) { // ControllerAからのイベントを受信して、値を更新する ctrlB.valueFromControllerA = data; }); });
この例では、ControllerAとControllerBの2つのAngularJSコントローラーを使用しています。ControllerAはラジオボタンを持ち、その値が変更された場合にng-changeディレクティブを使用してctrlA.onRadioChange()関数が呼ばれます。onRadioChange()関数内では、$rootScopeを介して$broadcast()メソッドを使用して、ControllerBにイベントを伝えます。
ControllerBは$scope.$on()メソッドを使用して、ControllerAからのイベントを受信し、値を更新します。これにより、ControllerBがラジオボタンの値の変更を検出し、処理を実行できます。
servicenowのClient scriptで以下の関数を作って。 ・引数でjsonを受け取る。 ・jsonをcsv形式に変換して、ダウンロードする
以下のような関数を作成することができます。
function downloadCsvFromJson(jsonData) { // JSONをパースして配列に変換する const jsonArray = JSON.parse(jsonData); // CSVフォーマットに変換する const csvArray = jsonArray.map((obj) => { return Object.values(obj).join(','); }); // ヘッダー行を追加する const headerRow = Object.keys(jsonArray[0]).join(','); csvArray.unshift(headerRow); // CSV形式の文字列に変換する const csvData = csvArray.join('\n'); // ファイル名を指定して、CSVファイルをダウンロードする const filename = 'data.csv'; const blob = new Blob([csvData], { type: 'text/csv' }); const link = document.createElement('a'); link.href = window.URL.createObjectURL(blob); link.download = filename; link.click(); }
この関数は、引数にJSONデータを受け取ります。JSONデータは文字列である必要があります。JSONをパースして、配列に変換します。配列の各要素をCSV形式の文字列に変換して、配列に格納します。ヘッダー行を追加して、配列の要素を改行区切りのCSV形式の文字列に変換します。最後に、Blobオブジェクトを生成して、ダウンロード用のリンクを作成して、ダウンロードを実行します。
この関数を呼び出すためには、以下のようにします。
const jsonData = '{"name": "John", "age": 30}\n{"name": "Mary", "age": 25}'; downloadCsvFromJson(jsonData);
上記の例では、JSONデータとして{"name": "John", "age": 30}と{"name": "Mary", "age": 25}の2つのオブジェクトを含む文字列を渡しています。この文字列をCSV形式に変換して、ダウンロードします。
servicenowのclient scriptで、restでヤフーの郵便番号検索APIにアクセスして、レスポンスを取得するプログラムを作って。以下条件にも従って。引数の郵便番号は固定で8100000で。
以下は、ServiceNowのクライアントスクリプトでYahoo! Japanの郵便番号検索APIにアクセスし、レスポンスを取得する例です。なお、Yahoo! Japanの郵便番号検索APIは、CORS(Cross-Origin Resource Sharing)に対応しているため、クロスオリジンの制約を考慮する必要はありません。
// RESTエンドポイントURL var url = "https://zipcloud.ibsnet.co.jp/api/search?zipcode=8100000"; // REST呼び出しオプション var options = { method: "get", headers: { "Content-Type": "application/json" } }; // REST呼び出し gs.ajax({ url: url, headers: options.headers, method: options.method, success: function(response) { // レスポンスを取得した後の処理 var result = JSON.parse(response.responseText); if (result.status === 200) { // レスポンスが成功した場合の処理 var address = result.results[0].address1 + result.results[0].address2 + result.results[0].address3; gs.addInfoMessage("検索結果: " + address); } else { // レスポンスが失敗した場合の処理 gs.addErrorMessage("郵便番号検索に失敗しました。"); } }, error: function(response) { // REST呼び出し自体がエラーとなった場合の処理 gs.addErrorMessage("REST呼び出しに失敗しました。"); } });
上記の例では、gs.ajax()を使用してYahoo! Japanの郵便番号検索APIにアクセスしています。APIエンドポイントURLはurl変数に指定されており、呼び出し方法はoptions変数に指定されています。gs.ajax()のsuccessコールバック関数内で、レスポンスを取得しています。取得したレスポンスはJSON形式で返されるため、JSON.parse()を使用してオブジェクトに変換しています。
APIから返される検索結果は、results配列に含まれています。上記の例では、検索結果のうち最初のものだけを取得し、都道府県・市区町村・町域名を連結して表示しています。なお、Yahoo! Japanの郵便番号検索APIは、1秒あたりのリクエスト数に制限があるため、連続での大量の検索は避けるようにしてください。
深津氏のChatGPTの使い方記事
ほーん、と思ったのでメモ