googleappsのフォームのsubmitのイベント処理に
スクリプトを書いていてそこで
ログインユーザのe-mailアドレスを取得したいのです


var to = Session.getActiveUser.getEmail()

これでテストしてみたところ自分のe-mailアドレスが取得できたので
できたと思ってほかの人にフォーム入力をしてもらったところ
取得した値は私のe-mailアドレスでした・・・・
これってスクリプトを作成者の情報を取得する!?


ためしにgetEffectiveUser メソッド,getUserメソッドも試してみましたが
同じ結果です

googleappsフォームを入力した人のe-mailを取得するスクリプトはどのようにしたらいいでしょうか?

このQ&Aに関連する最新のQ&A

A 回答 (2件)

フォームの設定でログインを強制しても動作は同じですか? まずはそれを確認して下さい。

フォームは、他のスプレッドシートやドキュメントなどのように利用を許可された人間だけがログインして使うのでなく、誰でもアクセスできるので、そのままではActiveUserがとれないのかも知れません。ログインを強制するよう設定してください。
    • good
    • 0
この回答へのお礼

フォームの設定でログインを強制しても同じ動作でした

お礼日時:2014/06/21 05:56

>取得した値は私のe-mailアドレスでした・・・・



これって、どういう形で確認しています? 例えば、Loggerでログ出力させているとかですか。だとすると、例えばスクリプトが動作しておらず、最後に実行した結果が残っているということも考えられますが……。

ユーザーのログイン情報の取得は、基本的にSession.getActiveUser.getEmailでいいはずです。getEffectiveUserは確かdeprectedなので使わないで下さい。

これで取れるはずですが、しかし当たり前ですがログインできてないとスクリプトは正常に動きません。Google Appsユーザーなら、一番上の「フォームの設定」のところに、「このフォームを表示する際に○○へのログインを求める」というチェックがありますので、これをONにしてください。これで、フォームにアクセスすると強制的にログインされます。結果、Session.getActiveUser.getEmailで正常にメールアドレスが取れるようになるはずです。
    • good
    • 0
この回答へのお礼

お返事ありがとうございます

値の確認は自分に向けて取得した値をメールしています
MailApp.sendEmail("自分のメールアドレス", "test", Session.getActiveUser().getEmail());


自分でフォームをサブミットすれば当然メールの本文には自分のメールアドレスがセットされていますが
他の人がフォームを開いてサブミットしてもその人のメールアドレスではなく自分のメールアドレスが
セットされています

お礼日時:2014/06/19 21:34

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qgetとpostのメソッドがごっちゃになったようなフォームの結果は、条件によって変わる?変わらない

getとpostのメソッドがごっちゃになったようなフォームの結果は、条件によって変わる?変わらない

以下のように、getとpostのメソッドがごっちゃになったようなフォームについて質問させてください。


====================================================================================================
<?php

//なお、PHP Version 5.1.6、CentOS4.4です。

/**
以下のように、
form tagで、actionにはクエリーストリングをつけて、でもmethodとしてpostを指定した場合、
*/
?>


<form action="/phpinf.php?foo=bar&fuga=hoge" method="post" name="f">

<input type="hidden" name="text_InsideFormElementWhichDeclaresExpresslyThatMethodIsPost" value="ddddd" />

<input type="submit" name="submit" value="送信" />

</form>
====================================================================================================


の結果は、

$_GETの中身(全部)は

$_GET["foo"]bar
$_GET["fuga"]hoge

//-----------------------------------------------------------

$_POSTの中身(全部)は

$_POST["text_InsideFormElementWhichDeclaresExpresslyThatMethodIsPost"]ddddd
$_POST["submit"]送信

//-----------------------------------------------------------

$_REQUESTの中身(全部) は、

$_REQUEST["foo"]bar
$_REQUEST["fuga"]hoge
$_REQUEST["text_InsideFormElementWhichDeclaresExpresslyThatMethodIsPost"]ddddd
$_REQUEST["submit"]送信
$_REQUEST["セッションidの文字列"]fdhfdshdsfhhkfdsjfdsjf

//-----------------------------------------------------------

また、$_SERVER から抜粋すると、
$_SERVER["REQUEST_METHOD"]POST
$_SERVER["QUERY_STRING"]foo=bar&fuga=hoge
$_SERVER["REQUEST_URI"]/phpinf.php?foo=bar&fuga=hoge

//-----------------------------------------------------------

となりました。

こういった結果は、

OS,Webサーバ,phpやperlやrubyやasp...などの言語の種類(or 素のhtml)、
また、user agent にも関係なく、

同様の結果となるのでしょうか?


さらに質問ですが、こういったformの記述は、RFCやW3Cの規約に反していないのでしょうか?

ご存じの方がいらっしゃしまた、お教えいただければ幸いです。

以上、よろしくお願いいたします。

getとpostのメソッドがごっちゃになったようなフォームの結果は、条件によって変わる?変わらない

以下のように、getとpostのメソッドがごっちゃになったようなフォームについて質問させてください。


====================================================================================================
<?php

//なお、PHP Version 5.1.6、CentOS4.4です。

/**
以下のように、
form tagで、actionにはクエリーストリングをつけて、でもmethodとしてpostを指定した場合、
*/
?>


<form...続きを読む

Aベストアンサー

phpの場合はphpinfo()関数で確認していただけばわかりますが
variables_orderの値がEGPCSになっています。
値はそれぞれ以下の頭文字で右側が優先になります。
ENV<GET<POST<COOKIE<SERVER
つまりGETとPOSTが競合した場合は右側のPOSTが優先するという意味です。
すべて展開が終わると$_REQUESTで参照できます。

GETとPOSTを併用することは仕組みがあるわけですから使ってもかまいませんが
管理がしづらくなるのであまり使わない方がよいでしょう。

QVBスクリプトで指定したコマンドで日付を取得するには?

お世話になります。
VBスクリプトがうまく設定できなくて困っています。
下記は日付取得までです。

rem #*****************************************
Option Explicit
dim w_date

rem #*****************************************
rem # STEP01 パラメータチェック
rem #*****************************************
IF WScript.Arguments.Count = 0 then
WScript.Echo "Parameter_No"
WScript.Quit 99
End IF
IF IsNumeric(WScript.Arguments.Item(0)) = False then
WScript.Echo "Numeric_Check_Error"
WScript.Quit 99
End IF

rem #*****************************************
rem # STEP02 日付計算
rem #*****************************************
w_date = replace(DateAdd("d",WScript.Arguments.Item(0), date),"/","")
WScript.Echo w_date

Script.Quit 0


【前提】
cip△dtコマンドをDOSで打つと例のように出力されます。

【例】
YYYY/MM/DD△00:00:00 cip~~~~~~~
YYYY/MM/DD△00:00:00 cip~~~~~~~

【実現したいこと】
VBスクリプトで、その1行目の日付を取得し、DOSの変数として保持したいです。

【前提】
cip△-dYYYYMMDDをDOSで打つとYYYYMMDDが入力した通りにでます。

【例】
YYYY/MM/DD△00:00:00 cip~~~~~~~

【実現したいこと】
VBスクリプトで、前日の日付を取得し、DOSの変数として保持したいです。

どなたか助けてください。
宜しくお願いします。

お世話になります。
VBスクリプトがうまく設定できなくて困っています。
下記は日付取得までです。

rem #*****************************************
Option Explicit
dim w_date

rem #*****************************************
rem # STEP01 パラメータチェック
rem #*****************************************
IF WScript.Arguments.Count = 0 then
WScript.Echo "Parameter_No"
WScript.Quit 99
End IF
IF IsNumeric(WScript.Arguments.Item(0)) = False then
WScript.Echo "Numeric_C...続きを読む

Aベストアンサー

cip コマンドについて知らないのですが、
コマンド > ファイル名

で標準出力の内容をファイルに保存することができます。
VBScript からは、このファイルから読込すれば、
コマンドの実行結果をVBScript に取り込むことができます。
また、
Set WshShell = CreateObject("WScript.Shell")
Set oExec = WshShell.Exec("コマンド")
のようにすれば、
oExec.StdOut
から標準出力を取り込めます。

ところで、DOSの変数ってなんどすか
環境変数のこと?
バッチ変数のこと?
VBスクリプトで実行しているならVBスクリプトの変数で保持すれば良いように思います。

QバッチファイルとVBスクリプトの連携エラーコード取得

イベントログにアベンドしたJOBが出力されない場合
せめて、logファイルにだけでも内容を書きたいのですが
うまくいきません。
リターンコードが全部(1)の元バッチファイルで0がかえってきます。
どなたがご教授願います。

(1)親バッチファイルの中味
@echo off
rem==============================================
rem
rem ARG1 = スケジュール日
rem ARG2 = ネットワーク名
rem ARG3 = 終了コード
rem
rem ================================================

set SDATE=%1
set NETWORK=%2
set RC=%3
set SDATE_SHORT=%SDATE:~2,6%
set WK_DIR=D:\temp
set TOML_TXT=%WK_DIR%\toml_%NETWORK%.txt
set VBSCRIPT=D:\stage\tools\bat\GetJobName.vbs

echo ### ARG1(%1) ARG2(%2) ARG3(%3) ###

if "%RC%"=="00" (
echo NETWORK NORMAL END #AUTONEND#
) else (
echo NETWORK ABNORMAL END #AUTONEND#
if exist %TOML_TXT% (
del %TOML_TXT%
)
toml -p999 > %TOML_TXT%
cscript //Nologo %VBSCRIPT% %SDATE_SHORT% %NETWORK% %RC% %TOML_TXT%
)
     if not "%errlrlevel%"=="0" (
set EVT_CRT_RC=%errorlevel%
echo EVETCREATE Failed. RC=%EVT_CRT_RC%
)
)

exit



(2)VBスクリプトの中味
800文字以上になるので、補足要求してください。

(3)イベントログ出力バッチファイルの中味
@echo off
rem
rem 引数
rem %1:SDATE
rem %2:NETWORK
rem %3:RC
rem %4:JOB

set MSG=A-AUTO JOBNET : NETWORK(%2) JOB(%4) SDATE=%1 ABNORMALLY ENDED RC=%3
eventcreate /l application /t error /so autonend /id 999 /d "%MSG%"

exit %errorlevel%

イベントログにアベンドしたJOBが出力されない場合
せめて、logファイルにだけでも内容を書きたいのですが
うまくいきません。
リターンコードが全部(1)の元バッチファイルで0がかえってきます。
どなたがご教授願います。

(1)親バッチファイルの中味
@echo off
rem==============================================
rem
rem ARG1 = スケジュール日
rem ARG2 = ネットワーク名
rem ARG3 = 終了コード
rem
rem ================================================

set SDATE=%1
set NETWORK=%2...続きを読む

Aベストアンサー

(1)の括弧の数が合わないので、どこかに抜けているんだと思いますが、それはさておき、

if aa==aa (
この中で%EE%とか書いた場合、if文の開始前にEEの中身の置換が行われる
)

という仕様にひっかかって、%ERRORLEVEL%が常に0になっているものと思われます。

解決策1:
if の後で ( ) を使わず、goto文を多用する。

解決策2:
先頭に、setlocal enabledelayedexpansion を書いて、( ) 内の変数は !ERRORLEVEL! 等と % でなく ! で囲む。
参考: set /?

Qシェルスクリプト 自身のファイルパスを取得する方法

基本的なことかもしれないのですが、教えて下さい。

シェルスクリプトをLinuxで作成しています。
シェルスクリプトを実行して、実行したスクリプトまでの絶対パスを取得したいのですが、方法がわかりません。
いろいろ調べて、
dirname $0
という方法で出来るような記述も見つけたのですが、$0ではスクリプト名を取得することしか出来ず、ファイルパスを取得することが出来ませんでした。
OS : Linux カーネル : 2.6
です。
他に必要な情報があれば教えて下さい。
よろしくお願いいたします。

Aベストアンサー

可能性があるのは
$PWD/${0%/*}
ですね.... 厳密にいうと, シンボリックリンクが入るとどうにもならないんですが. mount とか find とかを駆使すればできるかなぁ?

QシェルスクリプトでFTPの実行結果を取得するには

OS redhat linux
シェル bornシェル

でftpを実行するスクリプトを作っていますが、
ftpの実行結果は取得できるのでしょうか?

ftp -n < ftpCom.txt

宜しくお願いします。

Aベストアンサー

No.1です。補足拝見しました。

直接ftpコマンドの戻り値では実行結果が判断できないので、私が以前に携わっていたプロジェクトでは、FTPサーバが出すエラーコードをgrepでハンドリングしていました。

FTPはコマンドの結果を「行頭に3桁の数字」で出力する仕様になっており、putもgetも送受信が成功した場合は226が出力されるので、

ftp -nv < ftpCom.txt > ftpLog.txt 2>&1

を例えにとると、このコマンドを実行した後に、
grep ^226 ftpLog.txt > /dev/null
if $? ne 0
then
echo "FTPでエラーが発生しました" >> logfile
exit 1
fi

みたいなことをしていました。grep の引数 ^226 は行頭が226から始まる行を検索、という意味で、grepでマッチする行があった場合は0が戻り値となり、マッチしなければ0以外が戻り値となるので、それを利用していました。

実際の運用では、処理が異常終了したときにlogfileを見て、FTPのエラーだったらさらにftpLog.txtを見る、みたいな感じでした。

なお、FTPサーバが返すコードについては下記RFCの4.2辺りを参照してください。もっとも、サーバによってこれら全てが実装されてるとは限りませんが。

http://hp.vector.co.jp/authors/VA002682/rfc959j.htm

No.1です。補足拝見しました。

直接ftpコマンドの戻り値では実行結果が判断できないので、私が以前に携わっていたプロジェクトでは、FTPサーバが出すエラーコードをgrepでハンドリングしていました。

FTPはコマンドの結果を「行頭に3桁の数字」で出力する仕様になっており、putもgetも送受信が成功した場合は226が出力されるので、

ftp -nv < ftpCom.txt > ftpLog.txt 2>&1

を例えにとると、このコマンドを実行した後に、
grep ^226 ftpLog.txt > /dev/null
if $? ne 0
then
echo "FTPでエラー...続きを読む


人気Q&Aランキング

おすすめ情報