8

ドメイン上の各ユーザーは、休暇資格のために実行する簡単なスクリプトを開始しますが、ウェルカム メッセージを「こんにちは、ファーストネーム」にしたいと考えていますが、スクリプトは標準の getActiveUser() から getGivenName() を取得できないようです。ユーザー。

方法はありますか?

4

5 に答える 5

9

コメントとドキュメントに記載されているように、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;
  }
}
于 2013-03-26T02:44:37.973 に答える
2

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);
}

UrlFetch を使用してサービスを呼び出す

前のセクションで記述したサービスの使用方法の説明については、外部 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
}
于 2013-03-26T03:47:36.353 に答える
2

ユーザー名を取得できますが、最初にプロビジョニング API を使用してドメイン ユーザーを作成する必要があります。管理者アカウントにログインして API を有効にし、[ドメイン設定] と [ユーザー設定] タブを選択して、プロビジョニング API を有効にするチェックボックスを選択します。詳しくはこちら

その後、使用できます

   user = user.getgivenName()
于 2013-02-22T04:44:56.873 に答える