
前提
GASで業務管理アプリを作成しています。
実現したいこと
調べた情報を元に最低限の機能については実装することができました。
もう1点見直しをしたい仕様があります。
現在は、
Session.getActiveUser().getEmail();
を使ってgoogleアカウントの判定をし、対象のhtml(※メインページ)を呼び出しています。
この仕様だと本人以外の業務のアサイン状況が確認できない仕様となっています。
以下の仕様で、googleアカウントに紐づく情報(※ID)を受け渡し、
各担当者のメインページを呼び出したいと考えていますがそもそも可能なのでしょうか。
画面遷移
1.本人のメインページを呼び出す。
2.メインページ内に各担当者のIDを含んだリンクを記述しておく。
3.リンクからhtmlを呼び出した際に、IDに基づいたメインページを呼び出す。
※ここでは自分以外の担当者のメインページを開く。
発生している問題・エラーメッセージ
現状試してみた方法だと、IDの受け渡しができない状態です。
ページの情報はIDを元に、スプレッドシートを指定し、スプレッドシートの内容を
反映しているためメインページには何も表示されません。
該当のソースコード
index.html
1<!DOCTYPE html> 2<html> 3 <head> 4 <base target="_top"> 5 <?!= HtmlService.createHtmlOutputFromFile('css').getContent(); ?> 6 </head> 7 <body> 8 <div class='contents'> 9 <div class='main'> 10 <h3><?=name?>の管理</h3> 11 12 <div class='table_Layout'> 13 <p>業務1</p> 14 <table id='業務1'></table> 15 </div> 16 17 </div><br> 18 <div class="link"> 19 <a id="link" href="<?= getAppUrl() ?>?p=manage&n=hogehoge">このリンクから他の人のページに移動したい</a> 20 </div> 21 </div> 22 </body> 23</html> 24 25<!--jQueryのCDN読み込み--> 26<script 27 src="https://code.jquery.com/jquery-3.6.0.slim.min.js" 28 integrity="sha256-u7e5khyithlIdTpu22PHhENmPcRdFiHRjhAuHcs05RI=" 29 crossorigin="anonymous"> 30</script> 31 32<script> 33 34 //webページの読み込み時に実行 35 window.onload = function(){ 36 //エクセルDBからアサイン状況を表示 37 google.script.run.withSuccessHandler(function(dt) { 38 for(var i = 0; i<dt.length - 1; i++) { 39 var date = new Date(dt[i][0]); 40 var dateText = `${date.getMonth() + 1}月${date.getDate()}日`; 41 $('#業務1').append(`<input type="button" 42 id="${dt[i][3]}" 43 value="${dateText + '_' + 業務名をDB(スプレッドシート)から取得)'}" 44 onclick="window.open('<?= getAppUrl();?>?p=assign&d=${date}&f=${dt[i][1]}&n=${dt[i][2]}','_blank','width=280,height=400')">`); 45 } 46 }).values1get();
gs
1if(page == 'index' || page == null) { 2 const ssID = SpreadsheetApp.openById('1HCaDY19PHQLkWMKH7YqNlgyLX-GNSF4v6GKB8sRbLvQ'); 3 const sheetID = ssID.getSheetByName('ID'); 4 5 const rowCountID = sheetID.getLastRow(); 6 const regAccountID = sheetID.getRange(2,3,rowCountID - 1,1).getValues(); 7 var userID = Session.getActiveUser().getEmail(); 8 const regssDBName = sheetID.getRange(2,2,rowCountID - 1,1).getValues(); 9 10 for(let i = 0; i<= rowCountID - 1; i++) { 11 if(regAccountID[i] == userID) { 12 var ssDBName = regssDBName[i]; 13 break; 14 } 15 } 16 let htmlOutput = HtmlService.createTemplateFromFile('index'); 17 htmlOutput.name = ssDBName; 18 return htmlOutput.evaluate().setTitle('業務管理').addMetaTag('viewport', 'width=device-width,initial-scale=1'); 19 20 } 21
gs
1function values1get() { 2 //ログイン中のgmailアカウントを元に、IDファイルからデータベースのIDを取得 3 const ssID = SpreadsheetApp.openById('全担当者のIDを保存しているスプレッドシートのID'); 4 const sheetID = ssID.getSheetByName('ID'); 5 6 let rowCountID = sheetID.getLastRow(); 7 const regAccountID = sheetID.getRange(2,3,rowCountID - 1,1).getValues(); 8 const userID = Session.getActiveUser().getEmail(); 9 const regssDbID = sheetID.getRange(2,4,rowCountID - 1,1).getValues(); 10 11 for(let i = 0; i<= rowCountID - 1; i++) { 12 if(regAccountID[i] == userID) { 13 const ssDbID = regssDbID[i]; 14 15 //管理画面に業務進捗を出力 16 var ss = SpreadsheetApp.openById(ssDbID); 17 var sheet = ss.getSheets(); 18 19 //各シートのデータを配列に格納 20 var rowCount = sheet[0].getLastRow(); 21 var dataRange = sheet[0].getRange(2,1,rowCount,4); 22 const values1 = dataRange.getValues(); 23 24 return values1; 25 break; 26 } else { 27 //エラー時の処理いれる 28 } 29 } 30}
実現したいこと
indes.html内に仮で『n=hogehoge』と入れていますが、何らかの形でリンクを踏む際に担当者のID情報を受け渡す。
values1get()の関数で呼び出すスプレッドシートのIDをgetEmail()によるログイン中のIDを、リンクを踏んだ際に受け渡されたID情報を元に参照する担当者のDBを設定したい。
ご教授いただけますと幸いです。

