要求アイテムをコピーするUIアクション
- 新着としてマーク
- ブックマーク
- 購読
- ミュート
- RSS フィードを購読する
- ハイライト
- 印刷
- 不適切なコンテンツを報告
09-19-2022 11:43 PM
お世話になっております。
以下要件を満たすことはUIアクションで実現可能でしょうか。
<要件>
①要求アイテム(sc_req_item)の入力画面にコピーボタンを作り、今開いている要求アイテムレコードをコピーする
②要求テーブル(sc_request)のレコードはコピーしない
③要求アイテム(sc_req_item)には変数(variables)のカラムを設定しており、その内容もコピーする
要求テーブル(sc_request)には要求と要求アイテムをコピーするOOTBのUIアクションがあるのは知っていますが、
それを使わずに、要求アイテムのみをコピーしたいです。
要求と要求アイテムを紐づけない考え方がそもそも間違っている可能性もあると思い、質問させていただいております。
- 新着としてマーク
- ブックマーク
- 購読
- ミュート
- RSS フィードを購読する
- ハイライト
- 印刷
- 不適切なコンテンツを報告
09-21-2022 04:57 AM
Scriptは catItemID や requestId を 修正して、 後は、値のコピーの処理を追記してみました。値のコピーの詳細コードを記載するとなると、行数も時間もかかるので省略しています。
//var catItemId = current.sys_id;
var catItemId = current.getValue('cat_item');
//var requestId = current.request;
var requestId = current.getValue('request');
var helper = new GlideappCalculationHelper();
var items = [];
//既存のItemを記録
var grReqItem = new GlideRecord('sc_req_item');
grReqItem.addQuery('request', current.request);
grReqItem.query();
while (grReqItem.next()) {
items.push('' + grReqItem.sys_id);
}
try {
helper.addItemToExistingRequest(requestId, catItemId, "1");
gs.addInfoMessage(gs.getMessage('Request copied successfully'));
} catch (e) {
var catalogExceptionUtils = new CatalogExceptionUtils();
if(catalogExceptionUtils.isCartException(e)) {
gs.addErrorMessage(e.getMessage());
}
}
grReqItem = new GlideRecord('sc_req_item');
grReqItem.addQuery('request', current.request);
grReqItem.addQuery('sys_id', 'NOT IN', items.join(','));
grReqItem.query();
while (grReqItem.next()) {
//値のコピー
}
- 新着としてマーク
- ブックマーク
- 購読
- ミュート
- RSS フィードを購読する
- ハイライト
- 印刷
- 不適切なコンテンツを報告
03-17-2023 02:53 AM
@iwai さん、度々すみません、もう1点確認させていただきます。。
GlideappCalculationHelper を使うことでRequest ItemをScriptから作成できます。Variablesのコピーは個別にScriptを作成する必要があります。このVariablesのコピーのスクリプトはどうのように作成すればいいでしょうか。下記サンプルをみつかりましたが、動かないです。
- 新着としてマーク
- ブックマーク
- 購読
- ミュート
- RSS フィードを購読する
- ハイライト
- 印刷
- 不適切なコンテンツを報告
03-17-2023 04:18 AM
一通りこちらで動くスクリプトを作成しました。こういう問題は、自分の手に負えないScriptは、実装しない方が良いです。良くわからないサンプルScriptを使うのも危険です。それは、このScriptに危険性があったりバグがあるかもしれませんし、追加の修正を行いたいときすべて誰かに調べてもらって修正してもらわないといけなくなるからです。
var catItemId = current.getValue('cat_item');
var requestId = current.getValue('request');
var helper = new GlideappCalculationHelper();
var itemsAll = [];
//要求に紐づく全てのItemを取得
var grReqItemAll = new GlideRecord('sc_req_item');
grReqItemAll.addQuery('request', current.request);
grReqItemAll.query();
while (grReqItemAll.next()) {
itemsAll.push('' + grReqItemAll.sys_id);
}
try {
helper.addItemToExistingRequest(requestId, catItemId, "1");
helper.rebalanceRequest(requestId);
gs.addInfoMessage(gs.getMessage("Request copied successfully"));
} catch (e) {
var catalogExceptionUtils = new CatalogExceptionUtils();
if (catalogExceptionUtils.isCartException(e)) {
gs.addErrorMessage(e.getMessage());
}
}
//コピー先のItemを取得
var itemsNew = [];
var grReqItemNew = new GlideRecord('sc_req_item');
grReqItemNew.addQuery('request', current.request);
grReqItemNew.addQuery('sys_id', 'NOT IN', itemsAll.join(','));
grReqItemNew.query();
while (grReqItemNew.next()) {
var currentVariables = current.variables.getElements(false); // with Multi Row Variables true false
for (var i = 0; i < currentVariables.length; i++) {
var name = currentVariables[i].getName();
grReqItemNew.variables[name].setValue(currentVariables[i].getValue());
}
grReqItemNew.update();
}
- 新着としてマーク
- ブックマーク
- 購読
- ミュート
- RSS フィードを購読する
- ハイライト
- 印刷
- 不適切なコンテンツを報告
03-17-2023 04:27 AM
@iwai さん、承知しました。ありがとうございます。やってみます。
- 新着としてマーク
- ブックマーク
- 購読
- ミュート
- RSS フィードを購読する
- ハイライト
- 印刷
- 不適切なコンテンツを報告
03-19-2023 06:15 PM
@iwai さん、お疲れ様です。度々すみません、MRVSの場合、Trueを設定して、下記通りロジックどおり、39行目ところにログから見ると、空を取得しました、うまく進めてないです。何か違いがありませんか。ご連絡いただければ幸いです。