0

Profiles Library を使用して、apps スクリプトでいくつかの共有連絡先を取得および更新しています。私はまったく専門家ではなく、次のシナリオで問題が発生しています。

名前、会社、部署、役職、電子メール、職場の電話、携帯電話など、各要素の特定の「フィールド」を常に取得したいと考えています。問題は、それを動的に行う方法がわからないことです。そのため、値のないフィールドを取得すると、スプレッドシートに出力したくない不快な「未定義」が表示され、試してみました/catch は、出力する前に値が存在することを保証する if ステートメントですが、うまくいきません。

取得関数は次のとおりです。

function listAllProfiles() {
 var profiles = null;
 var token = null;
 var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
 do {
   var result = ProfilesApp.getProfilesForPaging(token);
   profiles = result.getProfiles();
   token = result.getToken();
   for (var i = 0; i < profiles.length; i++) {
     var workEmail, workPhone, mobilePhone, noEmpleado;
     var emails = profiles[i].getEmails(ContactsApp.Field.WORK_EMAIL);
     var workPhones = profiles[i].getPhones(ContactsApp.Field.WORK_PHONE);
     var mobilePhones = profiles[i].getPhones(ContactsApp.Field.MOBILE_PHONE);
     var custom = profiles[i].getCustomFields(ContactsApp.Field.NUMERO_DE_EMPLEADO);    

     for (var j in emails) { workEmail = emails[0].getAddress(); } 
     for (var k in workPhones) { workPhone = workPhones[k].getPhoneNumber(); }
     for (var l in mobilePhones) 
     { if ( mobilePhones[l].getPhoneNumber() != undefined) { //this is not working
       mobilePhone = mobilePhones[l].getPhoneNumber(); } else {
      Logger.log("does not exist");
    }
  }
  for (var m in custom) { noEmpleado = custom[m].getValue(); }


// Sólo imprime usuarios reales dados de alta
      if (workEmail != ".@nchezg.com") { 
        if(workEmail != "secure-data-connector-user@nchezg.com"){ 
             sheet.appendRow([profiles[i].getFullName(),profiles[i].getCompanyName(),profiles[i].getDepartment(),profiles[i].getJobTitle(),workEmail,
                           profiles[i].getOfficeLocation(),workPhone,mobilePhone,noEmpleado]);
        }
      }
    }
  } while (token != null);
}

この情報を動的に取得すると、未定義の問題で終わると思いますが、その方法がわからないので、その方法に関するヘルプや推奨事項は大歓迎です。

4

1 に答える 1

0

ですから、データが保持されていない場合を処理したいと思います。これは、同様のシナリオに適用できる職場の電話番号の簡単な例です。次のように動作します: getPhones(...)1 つ以上の PhoneFields を返す場合、最初の電話番号を変数workPhoneNumberに割り当てます。それ以外の場合は、空の文字列を割り当てます。

//gets first work phone number from a ProfilesApp Profile
var workPhoneNumber = profile.getPhones(ContactsApp.Field.WORK_PHONE).length >
  0 ? profile.getPhones(ContactsApp.Field.WORK_PHONE)[0].getPhoneNumber() :  '';
于 2013-06-29T02:35:29.087 に答える