- 新着としてマーク
- ブックマーク
- 購読
- ミュート
- RSS フィードを購読する
- ハイライト
- 印刷
- 不適切なコンテンツを報告
11-16-2024 02:52 AM - 編集済み 11-16-2024 03:03 AM
提供しているスクリプトとの詳しい差分は下記リンクのオプション3を見るとわかると思いますが、CartAPIなしの場合において、カタログに定義されたフローを実行するには、オプション 3 のような記載が必要なようです。
コードを使用して ServiceNow カタログ要求を送信する方法
個人的にここまでスクリプトを書くかつ非推奨なスクリプトなら、そもそもメールでカタログをリクエストする運用自体を考え直したいなと思うので、こちらは実際にInbound mail actionで実行できるかまでは確認してません。
また同リンクのオプション1のCartJS APIでInbound mail actionを実装してみましたが、こちらも上手くいきませんでした。
一応スクリプトを載せます。
バックグラウンドスクリプトで実行するとカタログに設定されたFlowの実行まで動作しますが、Inbound mail actionでは上手く実行できませんでした。現在ではアイテムのリクエストをスクリプトで操作するにはCartJS APIが推奨されますが、Inbound mail actionでは相性が悪いのか...?引き続き試してみて下さい。
var itemName = "Standard Laptop";
// カタログアイテムを検索し、sys_idを取得
var scCatItem = new GlideRecord("sc_cat_item");
scCatItem.addQuery('name', itemName);
scCatItem.query();
if (scCatItem.next()) {
var itemSysId = '';
itemSysId = scCatItem.getValue('sys_id'); // sys_idを取得
gs.info('Inbound mail action:Request Catalog/ Reuest Catalog SYS ID is : ' + itemSysId);
// カートのインスタンスを作成
var cart = new sn_sc.CartJS();
// カタログアイテムをJSONオブジェクトとして定義
var requestItem = {
'sysparm_id': itemSysId, //カタログのsys_id
'sysparm_quantity': '1', //数量
'variables': {
'acrobat': 'true',
'photoshop': 'false',
}
};
//JSON文字列に変換
requestItem = JSON.stringify(requestItem);
//jsオブジェクトに変換
requestItem = JSON.parse(requestItem);
// カートにアイテムを追加
var cartDetails = cart.addToCart(requestItem); // ここではitemがオブジェクトである必要があります
// カートをチェックアウトするためにリクエストをJSONオブジェクトとして定義
var requestInfo = {
'special_instructions': '',
'requested_for': "6816f79cc0a8016401c5a33be04be441", // admin user
'delivery_address': "",
};
//JSON文字列に変換
requestInfo = JSON.stringify(requestInfo);
//jsオブジェクトに変換
requestInfo = JSON.parse(requestInfo);
// オーダーを送信
var requestDetails = cart.submitOrder(requestInfo); // requestもオブジェクト形式で渡す
gs.info('Inbound mail action:Request Catalog/ Reuest Order Info: ' + JSON.stringify(requestDetails)); // 結果をログに出力
} else {
gs.error('Inbound mail action:Request Catalog/ No catalog item found with the name: ' + itemName);
// アイテムが見つからなかった場合は、処理を中断する
}
また、ちゃんと試せずに恐縮ですが、CartAPIであれば、以下のリンクで上手くいっている報告がありました。
解決済み: インバウンド アクションからカタログ アイテムを送信する - ページ 3 - ServiceNow Community
さらに、以下のYouTubeでInbound mail actionをFlowで実装する方法もあります。
この場合、カタログ変数の値をメール本文から取得が難しいのですが、ただリクエストするだけならこちらの方が実装は楽です。
Submit a catalog item through inbound email | Flow Designer | ServiceNow
FlowのInbound mail actionでカタログ変数をメール本文で取得する議論は、以下のcommunityスレッドで議論されています。こちらも含めて、Flowでもnbound mail actionでカタログをリクエストできそうです。
解決済み: 受信メールフローを使用したメール本文の解析 - ServiceNow Community
- 新着としてマーク
- ブックマーク
- 購読
- ミュート
- RSS フィードを購読する
- ハイライト
- 印刷
- 不適切なコンテンツを報告
11-17-2024 07:15 PM
こんにちは
@senon さん
教えていただいた方法をいくつか試してみましたところ、CartAPIの以下の方法で実現することができました。
解決済み: インバウンド アクションからカタログ アイテムを送信する - ページ 3 - ServiceNow Community
cart.addItemのところを対象カタログアイテムにするだけでとりあえず最低限の実行ができました。
色々と情報ありがとうございました。
情報までにコードを掲載させていただきます。
Inbound Action: Create Requested Item
Table: sc_request
Script:
FlowのInbound mail actionについても参考になりました。ありがとうございました。
今回はInbound Action & CartAPIで実現したいと思いますが、今後の参考とさせていただきます。
- 新着としてマーク
- ブックマーク
- 購読
- ミュート
- RSS フィードを購読する
- ハイライト
- 印刷
- 不適切なコンテンツを報告
11-14-2024 05:05 PM
こんにちは。 @shirakazu さん
カタログにセットされているFlowは、フローデザイナーのトリガーアクションの「カタログ」によって実行されます。つまり、そこにセットしているFlowをキックするにはカタログをリクエストする必要があります。
しかし、今回の場合ですが単純にFlowを実行する必要があるので、要求アイテムが作られてたタイミングで実行されるbusiness ruleを作成し、指定のFlowを実行するAPIを使用すれば、Flowを実行することができます。
FlowAPI - スコープ指定、グローバル
しかし"Mail Inbound Actionで要求アイテムを作成する"という要件に疑問を感じます。
もし、それがメールでカタログリクエストを受け付けるための実装であれば、あまり推奨されない実装だと、私なら考えます。
もしメールでカタログをリクエストすることが要求なのでしたら、Mail Inbound Actionでカタログをリクエストするようにスクリプトを作成する方法が良いと思います。
以下のリンクはこの実装アイデアになるかもしれません。
解決済み: メール受信アクションでカタログリクエストを作成 - ServiceNow Community
CartJS - スコープ指定
また、私の考えが全く違うのであれば、ご容赦下さい。加えて"何を達成するため"に、質問内容の実装方法を求めているのかを記載していただくと、別の良いアプローチを考えることができますので、もしよろしければ、お書きください。
- 新着としてマーク
- ブックマーク
- 購読
- ミュート
- RSS フィードを購読する
- ハイライト
- 印刷
- 不適切なコンテンツを報告
11-14-2024 11:00 PM
こんにちは。
@senon さん
回答ありがとうございます。
やりたいこととしてはMail Inbound Actionからカタログをリクエストしたいが正しい要件になります。
ご指摘いただきありがとうございます。
当方まだまだ実装経験が少なく言葉足らずにところありますが、今後は"何を達成するため"を加えて質問をさせていただきたいと思います。
先ずは回答いただいたリンクを参考に実装ができそうか確認してみたいと思います。
- 新着としてマーク
- ブックマーク
- 購読
- ミュート
- RSS フィードを購読する
- ハイライト
- 印刷
- 不適切なコンテンツを報告
11-15-2024 12:18 AM - 編集済み 11-15-2024 12:19 AM
良かったです。
他にもcommunityに同様な質問がありました。
解決済み: インバウンドアクションからカタログアイテムを送信する - ServiceNow Community
英語にはなりますが、英語で検索すると同様な情報がヒットすることが多いです。
もし、自分が作成したものが上手くいったら、他のユーザーの手助けができるように、
このスレッドに実装方法を記載してみてください。
- 新着としてマーク
- ブックマーク
- 購読
- ミュート
- RSS フィードを購読する
- ハイライト
- 印刷
- 不適切なコンテンツを報告
11-15-2024 02:07 AM
@senon さん
情報ありがとうございます。
頂いた解決案を参考に試しに実装してみました。
カタログアイテムで要求、要求アイテムの作成ができました。ただ、カタログアイテムに設定されているフローが動作しない状態で作成がされました。フローを実行は何かほかに処理が必要になりますでしょうか?
対象のカタログアイテムについて、ポータルサイトから申請した場合は正しくフローが動くことは確認しております。
画面上の要求:RITM0011523はポータルサイトから作成したケース
画面下の要求:RITM0011520はInboud Actionから作成したケース
コードは以下になります。CartAPIを使用しない実装としています。
Inbound Action: Create Requested Item
Table: sc_req_item
Script: