Version: Xanadu
この記事は以下の記事に書いていただいたことをServer SideのUI ActionとClient Script(onLoad)で試しただけの内容です料理レシピサイトの「作ってみた」みたいな感じです一旦Server Sideで試して書いてから追加でClientも試して追記したので読みづらくなってしまいました
Subflowの作成
メールアドレスを渡すとsys_userからそのUser IDを返すものを作成します
Filer navigatorでProcess Automation - Flow Designerを選択して別タブでFlow Designerを起動して[New]でSubflowを選択して
Nameに getUserNameFromEmailAddress と入力して[Build subflow]をクリックして
INPUTS & OUTPUTSにそれぞれTypeがStringの項目を追加して
1つめのActionをLook Up RecordにしてTableをsys_emailにしてConditionの検索条件でEmailをInputのemailAddressで検索するようにして(魔法の杖のようなアイコンをクリックすると検索条件にInputを選択できます)
2つめのActionでOutputsに1つめのActionの戻り値のレコードのUser IDを設定してPublishします
Create code Snippet(Server)
元記事にある手順通り右上の…アイコンからCreate Code Snippetを選択してみますServerとClientを切り替えられるようですが初期表示のServerをそのまま選択します
Copy Code Snippet to Clipboardした内容が以下です
(function() {
try {
var inputs = {};
inputs['emailaddress'] = ; // String
// Start Asynchronously: Uncomment to run in background. Code snippet will not have access to outputs.
// sn_fd.FlowAPI.getRunner().subflow('global.getusernamefromemailaddress').inBackground().withInputs(inputs).run();
// Execute Synchronously: Run in foreground. Code snippet has access to outputs.
var result = sn_fd.FlowAPI.getRunner().subflow('global.getusernamefromemailaddress').inForeground().withInputs(inputs).run();
var outputs = result.getOutputs();
// Get Outputs:
// Note: outputs can only be retrieved when executing synchronously.
var username = outputs['username']; // String
} catch (ex) {
var message = ex.getMessage();
gs.error(message);
}
})();
UI Actionの作成
sys_emailテーブルにUI Actionを追加してみたいのでsys_emailテーブルの適当なレコードを開いて
画面上部で右クリックして表示されるメニューから Configure - UI Actions を選択して
UI Actionの一覧が表示されるので [New] をクリックして
表示された画面でNameに getWildAndTough と入力してForm buttonをチェックして
ScriptにCode snippetからfunctionを外してinputsはcurrentでrecipients項目から設定して取得したusernameを画面にgs.addInfoMessageで表示して画面遷移を防ぐようにaction.setRedirectURL(current)を追加した以下を設定します
try {
var inputs = {};
inputs['emailaddress'] = current.getValue('recipients'); // String
// Start Asynchronously: Uncomment to run in background. Code snippet will not have access to outputs.
// sn_fd.FlowAPI.getRunner().subflow('global.getusernamefromemailaddress').inBackground().withInputs(inputs).run();
// Execute Synchronously: Run in foreground. Code snippet has access to outputs.
var result = sn_fd.FlowAPI.getRunner().subflow('global.getusernamefromemailaddress').inForeground().withInputs(inputs).run();
var outputs = result.getOutputs();
// Get Outputs:
// Note: outputs can only be retrieved when executing synchronously.
var username = outputs['username']; // String
gs.addInfoMessage("USER NAME IS HERE [" + username + "]");
} catch (ex) {
var message = ex.getMessage();
gs.error(message);
}
action.setRedirectURL(current);
動作確認(Server)
sys_email画面に戻ると[getWildAndTough]ボタンが追加されています
[getWildAndTough]ボタンをクリックすると画面上部に取得したユーザー名が表示されました
Client Sideも試す
当初やりかたかったことは出来たのですがCreate code SnippetにClientのコードがあったことが気になるので元記事を参考にまた続けてみます
ACLの作成
元記事にある内容そのままで作成してみます Filter navigatorからSystem Security - Access Control (ACL)でACLの一覧に遷移して[New]ボタンが見つからなくて面食らって
権限周りの設定だからElevate roleが必要になるのかなと思いついて画面右上のプロフィール画像をクリックして表示されたメニューからElevate roleを選択して表示されたダイアログ画面でsecurity_adminをチェックしてUpdateして
無事に[New]ボタンが表示されたのでクリックして表示された画面でAdvancedをチェックして以下の内容をそのまま設定して[Submit]します
Type: client_callable_flow_object
Operation: execute
Application: Global
Name: (適当)(例: Trigger flow from client script)
Requried roleとCoditionとScript: (適当)
roleは特に設定しなかったところsnc_internalが設定されたようです
Create to Code Snippet(Client)
Server Sideの手順で作成済みのSubflowのCode Snippetを取得します
Clientを選択したところ「このSubflowは現在の設定ではClientから呼べない」と警告が出てしまいました
ACLだけじゃダメなのかなと探すとどうも…ボタンの Manage security の設定が必要なようなのでクリックして
表示された別ウインドウでCallable by Client APIをチェックしてACLsに先に作成していた Trigger flow from client script を設定して[Update]します
別ウインドウを閉じてFlow Designerに戻り再びCreate Code SnippetをクリックしてClientを選択したら警告が消えました
取得したCode Snippetがこちらです
(function() {
var inputs = {};
inputs['emailaddress'] = ; // String
GlideFlow.startSubflow('global.getusernamefromemailaddress', inputs)
.then(function(execution) {
return execution.awaitCompletion();
}, errorResolver)
.then(function(completion) {
var status = completion.status;
// Available Outputs:
var outputs = completion.outputs;
var username = outputs['username']; // String
});
function errorResolver(error) {
// Handle errors in error resolver
}
})();
Client Scriptの作成
sys_userテーブルの適当なレコードを選択して画面上部から右クリックでConfigure - Client Scriptを選択して
表示された一覧から[New]をクリックしてNameに getWildAndToughClient と入力してTypeでonLoadを選択してScriptはinputsを画面のrecipients項目から取得するようにして取得した結果とerrorをalertで画面に表示するようにした以下で設定して
function onLoad() {
//Type appropriate comment here, and begin script below
var inputs = {};
inputs['emailaddress'] = g_form.getValue("recipients"); // String
GlideFlow.startSubflow('global.getusernamefromemailaddress', inputs)
.then(function(execution) {
return execution.awaitCompletion();
}, errorResolver)
.then(function(completion) {
var status = completion.status;
// Available Outputs:
var outputs = completion.outputs;
var username = outputs['username']; // String
alert("USER NAME IS HERE CLIENT:[" + username + "]");
});
function errorResolver(error) {
// Handle errors in error resolver
alert(error);
}
}
この状態にして[Save]します
動作確認(Client)
Client Scriptを追加したsys_email画面を表示してメッセージが表示されることを確認しました
感想
久しぶりにFlowを触ってみるもtriggerがレコードのinsert/updateと時間指定とメール受信などだけで…操作している人が任意に実行できるものがなくて困ったのでこちらを試しました
この記事は以下の記事に書いていただいたことを試しただけの内容です料理レシピサイトの「作ってみた」みたいな感じです





















