ドメイン上の各ユーザーは、休暇資格のために実行する簡単なスクリプトを開始しますが、ウェルカム メッセージを「こんにちは、ファーストネーム」にしたいと考えていますが、スクリプトは標準の getActiveUser() から getGivenName() を取得できないようです。ユーザー。
方法はありますか?
ドメイン上の各ユーザーは、休暇資格のために実行する簡単なスクリプトを開始しますが、ウェルカム メッセージを「こんにちは、ファーストネーム」にしたいと考えていますが、スクリプトは標準の getActiveUser() から getGivenName() を取得できないようです。ユーザー。
方法はありますか?
コメントとドキュメントに記載されているように、UserManager サービスにはドメイン管理者のみがアクセスできます。
これが代替案です。ドメイン ユーザーは自分の連絡先に自分自身を持っている可能性があります。
/**
* Get current user's name, by accessing their contacts.
*
* @returns {String} First name (GivenName) if available,
* else FullName, or login ID (userName)
* if record not found in contacts.
*/
function getOwnName(){
var email = Session.getEffectiveUser().getEmail();
var self = ContactsApp.getContact(email);
// If user has themselves in their contacts, return their name
if (self) {
// Prefer given name, if that's available
var name = self.getGivenName();
// But we will settle for the full name
if (!name) name = self.getFullName();
return name;
}
// If they don't have themselves in Contacts, return the bald userName.
else {
var userName = Session.getEffectiveUser().getUsername();
return userName;
}
}
UserManager サービスはドメイン管理者のみが利用できるため、ユーザーの名前を提供するサービスを管理者として公開し、 を使用してユーザー実行スクリプトから呼び出すことができますUrlFetchApp
。
これが基づいている背景情報については、コンテンツ サービスのドキュメントを参照してください。
サービスはパラメータ を受け入れます。このパラメータを使用して、管理者としてuserName
ルックアップを実行します。
次のコードをスクリプトに貼り付け、スクリプトを Web サービスとしてデプロイします。サービスは UserManager サービスにアクセスするため、これはドメイン管理者が行う必要がありますが、スクリプトはドメイン内のすべてのユーザーがアクセスできるようにする必要があります。(私は自分のドメインの管理者ではないため、UserManager にアクセスできません。そのため、最初の回答getOwnName()
で説明した関数を呼び出して、テスト用にドメイン ユーザー呼び出し可能な行を含めました。)
doGet()
公開されたサービスにアクセスする前に、必ずデバッガーから呼び出して承認を行ってください。
/**
* When invoked as a Web Service running as Domain Administrator,
* returns the GivenName of the requested user.
*
* @param {String} userName= Should be set to Session.getEffectiveUser().getUsername().
*/
function doGet(request) {
//return ContentService.createTextOutput(getOwnName()); // for testing by non-admin user
var userName = request.parameters.userName;
var givenName = UserManager.getUser(userName).getGivenName();
return ContentService.createTextOutput(givenName);
}
前のセクションで記述したサービスの使用方法の説明については、外部 API の使用を参照してください。別のスクリプトからサービスにアクセスする方法を紹介しますが、ドメイン内の Web ページからもアクセスできることを覚えておいてください。
を使用UrlFetchApp.fetch()
して、サービスがユーザーの名を文字列として返すようにします。
このサービスは 1 つのパラメーター を受け入れるように作成されておりuserName
、これを の形式で URL に追加しますuserName=<string>
。
URL を作成しfetch()
たら、応答から名前を取得します。この例では名前だけが返されますが、完全な "Hello User" 文字列を返すようにサービスを変更することもできます。
function testService() {
var domain = "my-google-domain.com";
var scriptId = "Script ID of service";
var url = "https://script.google.com/a/macros/"+domain+"/s/"+scriptId+"/exec?"
+ "userName="+Session.getEffectiveUser().getUsername();
var response = UrlFetchApp.fetch(url);
var myName = response.getContentText();
debugger; // pause in debugger
}
ユーザー名を取得できますが、最初にプロビジョニング API を使用してドメイン ユーザーを作成する必要があります。管理者アカウントにログインして API を有効にし、[ドメイン設定] と [ユーザー設定] タブを選択して、プロビジョニング API を有効にするチェックボックスを選択します。詳しくはこちら
その後、使用できます
user = user.getgivenName()