Çalışanlara kişiselleştirilmiş teşekkür sertifikaları gönderin

Kodlama seviyesi: Başlangıç
Süre: 15 dakika
Proje türü: Özel menü ile otomasyon

Hedefler

  • Çözümün ne işe yaradığını anlayın.
  • Apps Komut Dosyası hizmetlerinin çözüm kapsamında neler yaptığını öğrenin.
  • Ortamınızı ayarlayın.
  • Komut dosyasını ayarlayın.
  • Komut dosyasını çalıştırın.

Bu çözüm hakkında

Google Slaytlar Çalışan Sertifikası şablonunu Google E-Tablolar'daki çalışan verileriyle otomatik olarak özelleştirin ve ardından Gmail'i kullanarak sertifikaları gönderin.

Çalışan sertifikası oluşturma

İşleyiş şekli

Komut dosyası, Slaytlar'daki Çalışan Sertifikası sunum şablonunu ve çalışan ayrıntılarını içeren bir E-Tablolar e-tablosunu kullanır. Komut dosyası, şablonu kopyalar ve yer tutucuları e-tablodaki verilerle değiştirir. Komut dosyası her çalışan için bir slayt oluşturduktan sonra, her bir slaytı PDF eki olarak çıkarır ve sertifikaları çalışanlara gönderir.

Apps Komut Dosyası hizmetleri

Bu çözüm aşağıdaki hizmetleri kullanır:

  • Drive hizmeti: Slaytlar Çalışanı Sertifika şablonunu kopyalar.
  • E-tablo hizmeti - Çalışanla ilgili bilgileri sağlar ve listelenen her çalışanla ilgili durumu günceller.
  • Slaytlar hizmeti: Sunudaki yer tutucuları e-tablodaki çalışan verileriyle değiştirir.
  • Gmail hizmeti: Slaytları PDF olarak alır ve çalışanlara gönderir.

Ön koşullar

Bu örneği kullanmak için aşağıdaki önkoşullara ihtiyacınız vardır:

  • Google Hesabı (Google Workspace hesapları için yönetici onayı gerekebilir).
  • İnternet erişimi olan bir web tarayıcısı.

Ortamınızı ayarlama

  1. Çalışan sertifikaları Slaytlar şablonunun bir kopyasını oluşturmak için aşağıdaki düğmeyi tıklayın.
    Kopya oluştur

  2. Sonraki bir adımda kullanmak üzere sunu kimliğinizi not edin. Kimliği URL'de bulabilirsiniz:

    https://docs.google.com/presentation/d/PRESENTATION_ID/edit

  3. Drive'da sertifikaları saklayacak yeni bir klasör oluşturun.

  4. Sonraki bir adımda kullanmak üzere klasör kimliğinizi not edin. Kimliği URL'de bulabilirsiniz: https://drive.google.com/drive/folders/FOLDER_ID

Komut dosyasını ayarlayın

  1. Çalışan sertifikaları örnek e-tablosunun bir kopyasını oluşturmak için aşağıdaki düğmeyi tıklayın. Bu çözüme ilişkin Apps Komut Dosyası projesi e-tabloya eklenmiştir.
    Kopya oluştur

  2. E-tabloda, Uzantılar > Apps Komut Dosyası'nı tıklayarak Apps Komut Dosyası projesini açın.

  3. slideTemplateId değişkeni için PRESENTATION_ID ifadesinin yerine sununuzun kimliğini yazın.

  4. tempFolderId değişkeni için FOLDER_ID ifadesinin yerine klasörünüzün kimliğini yazın.

  5. Kaydet'i Kaydet simgesi tıklayın.

Komut dosyasını çalıştırma

  1. E-tabloya geri dönün ve Teşekkür > Sertifika oluştur'u tıklayın. Bu özel menünün görünmesi için sayfayı yenilemeniz gerekebilir.
  2. İstendiğinde komut dosyasını yetkilendirin. OAuth izin ekranında Bu uygulama doğrulanmadı uyarısı gösteriliyorsa Gelişmiş'i seçerek devam edin > {Project Name} adlı projeye git (güvenli değil).

  3. Takdir'i tıklayın > Sertifika oluştur'u tekrar tıklayın.

  4. Tüm satırların durum sütunu Oluşturuldu olarak güncellendikten sonra Teşekkür > Sertifikaları gönder'i tıklayın.

Kodu inceleyin

Bu çözümün Apps Komut Dosyası kodunu incelemek için aşağıdaki Kaynak kodu görüntüle'yi tıklayın:

Kaynak kodu göster

Code.gs

solutions/automations/employee-certificate/Code.js
// To learn how to use this script, refer to the documentation:
// https://developers.google.com/apps-script/samples/automations/employee-certificate

/*
Copyright 2022 Google LLC

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    https://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/

const slideTemplateId = 'PRESENTATION_ID';
const tempFolderId = 'FOLDER_ID'; // Create an empty folder in Google Drive

/**
 * Creates a custom menu "Appreciation" in the spreadsheet
 * with drop-down options to create and send certificates
 */
function onOpen() {
  const ui = SpreadsheetApp.getUi();
  ui.createMenu('Appreciation')
      .addItem('Create certificates', 'createCertificates')
      .addSeparator()
      .addItem('Send certificates', 'sendCertificates')
      .addToUi();
}

/**
 * Creates a personalized certificate for each employee
 * and stores every individual Slides doc on Google Drive
 */
function createCertificates() {
  // Load the Google Slide template file
  const template = DriveApp.getFileById(slideTemplateId);

  // Get all employee data from the spreadsheet and identify the headers
  const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  const values = sheet.getDataRange().getValues();
  const headers = values[0];
  const empNameIndex = headers.indexOf('Employee Name');
  const dateIndex = headers.indexOf('Date');
  const managerNameIndex = headers.indexOf('Manager Name');
  const titleIndex = headers.indexOf('Title');
  const compNameIndex = headers.indexOf('Company Name');
  const empEmailIndex = headers.indexOf('Employee Email');
  const empSlideIndex = headers.indexOf('Employee Slide');
  const statusIndex = headers.indexOf('Status');

  // Iterate through each row to capture individual details
  for (let i = 1; i < values.length; i++) {
    const rowData = values[i];
    const empName = rowData[empNameIndex];
    const date = rowData[dateIndex];
    const managerName = rowData[managerNameIndex];
    const title = rowData[titleIndex];
    const compName = rowData[compNameIndex];

    // Make a copy of the Slide template and rename it with employee name
    const tempFolder = DriveApp.getFolderById(tempFolderId);
    const empSlideId = template.makeCopy(tempFolder).setName(empName).getId();
    const empSlide = SlidesApp.openById(empSlideId).getSlides()[0];

    // Replace placeholder values with actual employee related details
    empSlide.replaceAllText('Employee Name', empName);
    empSlide.replaceAllText('Date', 'Date: ' + Utilities.formatDate(date, Session.getScriptTimeZone(), 'MMMM dd, yyyy'));
    empSlide.replaceAllText('Your Name', managerName);
    empSlide.replaceAllText('Title', title);
    empSlide.replaceAllText('Company Name', compName);

    // Update the spreadsheet with the new Slide Id and status
    sheet.getRange(i + 1, empSlideIndex + 1).setValue(empSlideId);
    sheet.getRange(i + 1, statusIndex + 1).setValue('CREATED');
    SpreadsheetApp.flush();
  }
}

/**
 * Send an email to each individual employee
 * with a PDF attachment of their appreciation certificate
 */
function sendCertificates() {
  // Get all employee data from the spreadsheet and identify the headers
  const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  const values = sheet.getDataRange().getValues();
  const headers = values[0];
  const empNameIndex = headers.indexOf('Employee Name');
  const dateIndex = headers.indexOf('Date');
  const managerNameIndex = headers.indexOf('Manager Name');
  const titleIndex = headers.indexOf('Title');
  const compNameIndex = headers.indexOf('Company Name');
  const empEmailIndex = headers.indexOf('Employee Email');
  const empSlideIndex = headers.indexOf('Employee Slide');
  const statusIndex = headers.indexOf('Status');

  // Iterate through each row to capture individual details
  for (let i = 1; i < values.length; i++) {
    const rowData = values[i];
    const empName = rowData[empNameIndex];
    const date = rowData[dateIndex];
    const managerName = rowData[managerNameIndex];
    const title = rowData[titleIndex];
    const compName = rowData[compNameIndex];
    const empSlideId = rowData[empSlideIndex];
    const empEmail = rowData[empEmailIndex];

    // Load the employee's personalized Google Slide file
    const attachment = DriveApp.getFileById(empSlideId);

    // Setup the required parameters and send them the email
    const senderName = 'CertBot';
    const subject = empName + ', you\'re awesome!';
    const body = 'Please find your employee appreciation certificate attached.' +
    '\n\n' + compName + ' team';
    GmailApp.sendEmail(empEmail, subject, body, {
      attachments: [attachment.getAs(MimeType.PDF)],
      name: senderName
    });

    // Update the spreadsheet with email status
    sheet.getRange(i + 1, statusIndex + 1).setValue('SENT');
    SpreadsheetApp.flush();
  }
}

Katkıda bulunanlar

Bu örnek, blog yazarı ve Google Geliştirici Uzmanı Sourabh Choraria tarafından oluşturuldu.

Bu örnek, Google Geliştirici Uzmanlarının yardımıyla Google tarafından yönetilir.

Sonraki adımlar