2024年8月15日木曜日

ServiceNow の UIBuilder で使える変数について説明

ServiceNow の UIBuilder で使える変数について説明

概要

これまでも UIBuilder 内でいくつかの変数 (context や data) を使ってきました
今回は改めてそれら変数について説明しておきます

環境

  • ServiceNow (2024/08/05 時点)
    • Release Washington DC

@context

このページ内で使えるコンテキストの値を参照することができます

例えば @context.props.table はこのページに渡された table 変数を参照しています

このページ渡された変数は UIBuilder の右上で確認できます
このページであれば sysid も同様に参照できます

@data

データリソースを参照することができます
UI Builder のデータリソースは右下から追加 /参照できます

@data.[id] 形式で参照します
id はデータリソースを作成した際に割り振られる ID を使います

なおデータリソースの情報はクライアントスクリプトからでも参照することができます (api.data.[id])

@elements

現在の要素の情報を参照することができます
他のコンポーネントを他のコンポーネントでバインドする場合に使います

TODO: 正直使い方がよくわからないのでわかった追記

@state

クライアントステートの値を参照することができるようです
変数を定義しその値を UI Builder で参照できます
また変数の値を変更したい場合はクライアントスクリプトで行います

https://docs.servicenow.com/ja-JP/bundle/tokyo-application-development/page/administer/ui-builder/task/state-parameters.html

TODO: 正直使い方がよくわからないのでわかった追記

@payload

TODO: 正直使い方がよくわからないのでわかった追記

最後に

context/data 変数は UI Builder 上でかなり使うので使い方に慣れておいたほうが良いかなと思います
他の変数についても使いこなせるとより複雑な UI が作れるようになるかなと思います

参考サイト

2024年8月14日水曜日

ServiceNow のポータルに別ページへのリンクボタンを設置する

ServiceNow のポータルに別ページへのリンクボタンを設置する

概要

ボタンを設置し「Link to destination」というイベントを使います

環境

  • ServiceNow (2024/08/05 時点)
    • Release Washington DC

ボタンコンポーネントの設定

App Engine Studio から Experience でポータルを選択し UI Builder を表示します

ポータル用のページを開きます

コンポーネントの一覧から Button を選んで好きな位置に設置します

スタイルなどを調整しましょう

Link to destination イベントの設定

次にボタンにイベントを設置します
Events タブから Add event handler を選択します

イベントの一覧から Link to destination を選択します
そしてリンク先を設定するので Select destination を設定します

前回 作成した独自のフォームページにリンクするので Record Page (request) を選択します
そして次のページに渡すための変数を設定します
この変数はページごとに違い変数が不要なページもあります
Record Page (request) では Sys ID とテーブル名を渡します
ポータルページでは context にこれらの情報がないので固定の情報を渡しています
次のページではこれらの情報を @context.props.table などで参照することができるようになります

動作確認

Preview を開いて動作確認します
設置したボタンをクリックしてちゃんと次のページに遷移することを確認します

遷移した独自のフォームページからもちゃんとリクエストが飛ばせるか確認してみましょう
ここでうまく登録できない場合などは変数として渡したテーブルデータなどが間違っている可能性があります

最後に

ServiceNow のポータルページに別ページにリンクするボタンを設置してみました
Link to destination を使えば簡単に別ページへのリンクが作成できます

今回は紹介しませんでしたがイベントからクライアントスクリプトを使って別ページに遷移することも可能です

2024年8月13日火曜日

ServiceNow でポータルに独自のフォーム画面を作成する方法

ServiceNow でポータルに独自のフォーム画面を作成する方法

概要

データテーブルを作成するとそれに付随する簡易的なフォーム画面は作成してくれますがそれをポータルで使うことができません
今回はポータルで使える独自のフォーム画面を作成してみます
なお データリソースや Glide From、Client Script といったやや応用の技術を使うので少し複雑な処理になります

環境

  • ServiceNow (2024/08/05 時点)
    • Release Washington DC

データリソースの追加 (Glide Form)

まずは App Engine Studio から Experience で作成してあるポータルを開きます
ポータルは UI Builder で開きます

Record Page (request) というページがあるのでこれを使います

左下にデータリソースを管理するボタンがあるので選択します

データリソースを追加するので Add を選択します
そしてデータリソースの一覧から Glide Form を選択し追加します
画面にないですがデータリソースの追加ボタンは検索画面の下の方にあります

Glide Form の設定をします

  • Table -> @context.props.table
  • Sys ID -> @context.props.sysId

とりあえずデータリソースの設定は以上です

フォームコンポーネントの追加

次に UI のフォームコンポーネントを追加します
好きなところに Form を追加します

フォームの設定をします

  • Preset -> None
  • Table -> @context.props.table
  • Sys ID -> @context.props.sysId
  • Sections -> @data.glide_form_1.nowRecordFormBlob.sections
  • Fields -> @data.glide_form_1.nowRecordFormBlob.fields
  • Disable section collapsing -> ON

ここで参照している glide_form_1 変数は先程作成した Glide Form データリソースを識別するために自動で振られた ID になります

UI Builder 内で使用するテスト変数の設定

UI Builder がプレビューで表示するためのテーブル情報やテスト用の ID を設定します
右上の警告マークから設定します

テーブルはテーブルを識別するための ID を入力します
これはデータテーブルから確認でき Properties から確認できます
確認できたらテーブル ID と一緒に Sys ID も入力します
とりあえずテストなので存在しない -1 という値を入力しておきます
テスト値が設定できると警告マークが消えるのが確認できると思います

クライアントスクリプトの追加

ServiceNow には Glide クラスという機能がありクライアント側からサーバ側のデータを操作するための便利クラスがあります
その中の Glide Form というクラスを UI Builder で使用します
使用する Glide Form は冒頭で作成したデータリソースから参照することができます

クライアントスクリプトは右下のスクリプトボタンから追加できます

クライアントスクリプトの追加画面になるので Add を選択し追加します
そしてクライアントスクリプトの名前を入力し以下の内容でクライアントスクリプトを登録します

/**
 * @param {params} params
 * @param {api} params.api
 * @param {any} params.event
 * @param {any} params.imports
 */
function handler({
    api,
    event,
    helpers,
    imports
}) {
    // フォームからではなく固定の値を設定する場合はsetValueを使う
    //api.data.glide_form_1.setValue({
    //    fieldName: 'name',
    //    value: 'hawksnowlog'
    //});
    // フォームに入力されている値をそのまま使う場合はsetMandatoryを使う
    api.data.glide_form_1.setMandatory({
        fieldName: 'name',
        mandatory: false
    });
    api.data.glide_form_1.save();
    console.log("saved!!");
}

glide_form_1 はデータリソースで定義した Glide Form クラスのオブジェクトです
フォームに入力されているデータを save するだけでサーバ側にデータを登録することができます

これでクライアントスクリプトの登録は完了です
あとはボタンを設置しこのスクリプトを紐づけるだけです

ボタンコンポーネントの設定

先程のフォームの下にでも登録すれば OK です ラベルや色などを適宜調整しましょう

  • Label -> Send
  • Variant -> Primary
  • Size -> Medium
  • Disable -> OFF

そしてイベントを登録します
Add Event handler から先ほど作成したクライアントスクリプトの Send を選択し追加します

動作確認

設定を保存し Preview から確認しましょう
Preview がうまく表示されない場合はデータリソースに Form Controller が追加されていないか確認しましょう

ボタンを押してちゃんとデータテーブルに登録されていることを確認しましょう

今回は以下を考慮していないので追加で実装してみてもいいかもしれません

  • 登録後に登録完了画面に移動しないので何度も登録できてしまう
  • 同一 Preview 内では同一 Sys ID が使われるためボタンを複数回押しても別の Preview でなければ同一レコードの書き換えになる

最後に

ServiceNow でポータルに独自のフォームを実装しデータリソースとクライアントスクリプトを使ってデータを登録する方法を紹介しました

Glide 関連のクラスは ServiceNow でのコア技術になっているので応用したアプリなどを作りたい場合は必須かもしれません

参考サイト

2024年8月11日日曜日

ServiceNow で Logic and automation を使ってメール通知してみる

ServiceNow で Logic and automation を使ってメール通知してみる

概要

前回アカウントを作成しメール送信できる状態まで設定しました
今回は実際にイベントを元にメールを送信する仕組みを作成してみます

環境

  • ServiceNow (2024/08/05 時点)
    • Release Washington DC

Logic and automation の作成

App Engine Studio で Logic and automation を表示し Add を選択します

Email を選択します

メール送信の設定をします
まずこの Logic and automation の名前を設定します
そして Notification trigger settings にメールが送信されるトリガーを設定します
今回はあたらしくレコードが追加もしくはレコードの内容が更新されたらメールを送信するようにするので「When a record is created or updated」を選択します
テーブルにはアプリに紐づいているデータテーブルを指定しましょう

Sys ID の条件の部分はなくても OK です

下にスクロールして更にメール送信の設定をします
Recipients は誰に送るかを設定します
個人やグループ、またはデータ内の特定のカラムにあるユーザやアドレス情報を元に送信先を決定することができます
ここで一点注意しなければいけないのが ServiceNow では SMTP サーバの from アドレスとここで指定される Recipients のアドレスが同一である場合に send-ignored という状態でメールが送信されないので注意しましょう

あとはメール本文の内容を設定すれば OK です
基本的にはテンプレートから選択すれば OK です
テンプレート自体を独自の設定で上書きすることも可能です

動作確認

実際に Experience の Form からレコードを登録してみます
Form の詳細から Open form in Platform でフォームのサンプルを開くことができます

Submit してメールが気ているか確認しましょう 実際に以下のようなメールが来て入れば OK です

メールがうまく受信できない場合は再度 Email Accounts から SMTP サーバの設定がうまくできているか確認してください
Emails にメールの一覧があるのでそこで送信のステータスを確認することもできます

先ほど紹介しましたが ServiceNow の場合 SMTP の from と宛先のアドレスが同一の場合にはメールが送信されずに send-ignored になるのでそこも確認してみてください

最後に

Logic and automation を使ってメール送信を試してみました
メール送信以外にもさまざまなフローを定義することができるので特定のイベントに対して処理を自動化するときに使います

2024年8月10日土曜日

Youtube でいいねした動画を一括で削除する方法

Youtube でいいねした動画を一括で削除する方法

概要

Google アカウントのアクティビティからなら一括で削除できます

環境

  • Youtube (2024/08/05時点)

やり方

https://myactivity.google.com/product/youtube/interactions?hl=ja&utm_source=my-activity ここから

操作

動画の高評価と低評価

右上 -> すべて削除

で削除できます

直リンク

https://myactivity.google.com/page?page=youtube_likes&continue=https://myactivity.google.com/product/youtube/interactions?hl%3Dja&hl=ja

こちらです

2024年8月9日金曜日

ServiceNow にユーザを追加する方法とemailを送信する設定

ServiceNow にユーザを追加する方法とemailを送信する設定

概要

ユーザはアプリ単位ではなく環境全体で管理されています

環境

  • ServiceNow (2024/08/05 時点)
    • Release Washington DC

追加方法

ServiceNow Developers のトップページから Start Building を選択しトップページを表示します

All から機能を検索します
「Users」で検索すると出てくるので選択します

するとユーザの一覧画面になるので右上の「New」で追加します

あとは必要な情報を入力します
最低限入力が必要なのは

  • UserID
  • Email
  • First name
  • Last name

あたりかなと思います
何も入力しなくてもユーザ自体は作成できるようです

パスワードの設定

作成したユーザを一覧から検索し詳細を表示します
すると Set Password ボタンがあるのでそこからパスワードを設定しましょう

ロールの設定

もし作成したユーザにロールを設定したい場合は下にスクロールし Roles タブから設定できます
Edit を選択します

そしてロールの一覧から追加したいロールを選択し右に移動します
その後 Save することでロールが設定できます
アプリに付属しているデフォルトのロールを設定することで Portal や Workspace にアクセスすることができます

メールの有効化

PDI 環境ではデフォルトでメールが送信できないようになっています
まずは有効にします

ServiceNow Developers のトップページから「Manage Email Properties」を選択します

トグルボタンで有効にします
Save で設定を保存します

Email Properties でも有効になっていることを確認できます (ここからだと有効/無効を切り替えできないらしい)

メールアカウントの追加

Email Accounts のページから追加できます
All -> Email Accounts で検索すると見つかります

PDI 環境では SMTP サーバや POP サーバまでは用意されていないので自分で用意する必要があります
一番簡単なのは Gmail の SMTP アカウントを使えば OK です

New から追加できるので行います
今回は通知用にメールを送りたいだけなので SMTP のみ設定します

Active にもチェックを入れましょう

メール送信の確認

どうやらテストメールを送信する仕組みは ServiceNow にはないようです

https://www.servicenow.com/community/developer-forum/send-test-email-button-is-there-any-out-there/m-p/2191059

実際にメール送信のイベントを作成してテストするしかないようです

ただ Email Accounts を作成すると Admin にメールが飛ぶようなので事前に Admin のメールアドレスを自分のアドレスに変えておけばテストできるかなと思います

Email Diagnostics からでも SMTP サーバが有効かどうか確認できます

トラブルシューティング: SMTPSender: no recipients, email send ignored

メール送信時に Emails を見ると「SMTPSender: no recipients, email send ignored」と表示されていることがあります

どうやら ServiceNow では to と from が同一の場合にはメールを送らないようで自動的に send-ignored ステータスにするようです

参考: https://www.servicenow.com/community/developer-forum/smtpsender-no-recipients-email-send-ignored/m-p/1539024

最後に

ServiceNow でアカウントを作成する方法と SMTP サーバを設定する方法を紹介しました
個人の環境でメール通知を使う場合はメール機能自体を有効してかつ SMTP サーバを設定する必要があります

次回はアプリないでフローを作成しメール送信のイベントを試してみたいと思います

参考サイト

2024年8月8日木曜日

ServiceNow でポータルページを作成する方法

ServiceNow でポータルページを作成する方法

概要

前回 Workspace を追加してデータを表示してみました
今回は ServiceNow で作成したアプリにホームページ的な役割を持つポータルを追加してみます

環境

  • ServiceNow (2024/08/05 時点)
    • Release Washington DC

Experience に Portal の追加

App Engine Studio でアプリを選択しアプリの Experience 一覧から Add を選択します

Portal を選択し次にいきます

Begin で次に進みます

Portal の名前を設定します
アクセスする URL に関係するのでそれっぽい名前にしましょう
なおすでに Workspace などがある場合は URL の関係で別の名前にする必要があります

あとは作成されるまで待ちましょう

作成された Portal の確認

Experience の一覧に Portal が表示された Preview ボタンを押します

UI Builder 自動で起動するので UI Builder の左上にある Portal へのリンクを選択します

すると Portal のプレビューが表示されます

Portal の編集

次に Portal を編集してみます
先程の Experience の一覧から Editor を選択します

UI Builder の Body の設定からヘッダ部分を選択し右ペインの Background から背景の画像 URL を変更してみましょう

背景画像が変更できたら Save しあとは同様に Preview で確認すれば OK です

最後に

ServiceNow でアプリに Portal を追加しトップページを作成してみました
今回は画像しか変更していませんが表示するコンテンツは @data などの変数を使って動的に参照することもできます
自分にアサインされているタスクや承認フローだけを表示したりすることもできるようです

変数の参照方法などもあとで紹介できればと思います