برای کارمندان گواهی های قدردانی شخصی ارسال کنید

سطح کدنویسی : مبتدی
مدت زمان : ۱۵ دقیقه
نوع پروژه : اتوماسیون با منوی سفارشی

اهداف

  • بفهمید که راه حل چه کاری انجام می‌دهد.
  • درک کنید که سرویس‌های Apps Script در این راهکار چه کاری انجام می‌دهند.
  • محیط خود را تنظیم کنید.
  • اسکریپت را تنظیم کنید.
  • اسکریپت را اجرا کنید.

درباره این راهکار

الگوی گواهی کارمند گوگل اسلایدز را به طور خودکار با داده‌های کارمند در گوگل شیت سفارشی کنید، سپس گواهی‌ها را با استفاده از جیمیل ارسال کنید.

ایجاد گواهی کارمند

چگونه کار می‌کند؟

این اسکریپت از الگوی ارائه گواهی کارمند از اسلایدها و یک صفحه گسترده Sheets با جزئیات کارمند استفاده می‌کند. اسکریپت الگو را کپی کرده و متغیرهای آن را با داده‌های صفحه گسترده جایگزین می‌کند. هنگامی که اسکریپت برای هر کارمند اسلایدی ایجاد می‌کند، هر اسلاید را به صورت جداگانه به عنوان پیوست PDF استخراج کرده و گواهی‌ها را برای کارمندان ارسال می‌کند.

سرویس‌های اسکریپت برنامه‌ها

این راهکار از سرویس‌های زیر استفاده می‌کند:

  • سرویس Drive - الگوی گواهی کارمند Slides را کپی می‌کند.
  • سرویس صفحه گسترده - جزئیات کارمند را ارائه می‌دهد و وضعیت هر کارمند فهرست شده را به‌روزرسانی می‌کند.
  • سرویس اسلایدها - متغیرهای موجود در ارائه را با داده‌های کارمند از صفحه گسترده جایگزین می‌کند.
  • سرویس جیمیل - اسلایدهای تک تک را به صورت PDF دریافت کرده و برای کارمندان ارسال می‌کند.

پیش‌نیازها

برای استفاده از این نمونه، به پیش‌نیازهای زیر نیاز دارید:

  • یک حساب گوگل (حساب‌های کاربری گوگل ورک‌اسپیس ممکن است نیاز به تأیید مدیر داشته باشند).
  • یک مرورگر وب با دسترسی به اینترنت.

محیط خود را تنظیم کنید

  1. برای تهیه یک کپی از الگوی اسلایدهای گواهی‌های کارمندان ، روی دکمه زیر کلیک کنید.
    یک کپی تهیه کنید

  2. شناسه ارائه خود را برای استفاده در مرحله بعد یادداشت کنید. می‌توانید شناسه را در URL پیدا کنید:

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

  3. در درایو، یک پوشه جدید برای نگهداری گواهینامه‌ها ایجاد کنید.

  4. شناسه پوشه خود را برای استفاده در مرحله بعد یادداشت کنید. می‌توانید شناسه را در URL پیدا کنید: https://drive.google.com/drive/folders/ FOLDER_ID

اسکریپت را تنظیم کنید

  1. برای تهیه یک کپی از نمونه صفحه گسترده گواهی‌های کارمندی ، روی دکمه زیر کلیک کنید. پروژه Apps Script برای این راهکار به صفحه گسترده پیوست شده است.
    یک کپی تهیه کنید

  2. در صفحه گسترده، پروژه Apps Script را با کلیک روی Extensions > Apps Script باز کنید.

  3. برای متغیر slideTemplateId ، PRESENTATION_ID را جایگزین کنید. PRESENTATION_ID به همراه شناسه ارائه شما.

  4. برای متغیر tempFolderId ، FOLDER_ID را جایگزین کنید FOLDER_ID با شناسه پوشه شما.

  5. روی ذخیره کلیک کنید آیکون ذخیره .

اسکریپت را اجرا کنید

  1. به صفحه گسترده برگردید و روی قدردانی > ایجاد گواهی‌ها کلیک کنید. ممکن است لازم باشد صفحه را برای نمایش این منوی سفارشی رفرش کنید.
  2. وقتی از شما خواسته شد، اسکریپت را تأیید کنید. اگر صفحه رضایت OAuth هشدار « این برنامه تأیید نشده است» را نشان می‌دهد، با انتخاب Advanced > Go to {Project Name} (unsafe) ادامه دهید.

  3. دوباره روی قدردانی > ایجاد گواهی‌ها کلیک کنید.

  4. پس از اینکه ستون وضعیت همه ردیف‌ها به «ایجاد شده» به‌روزرسانی شد، روی «تقدیر» > «ارسال گواهی‌ها» کلیک کنید.

کد را مرور کنید

برای بررسی کد Apps Script برای این راهکار، روی مشاهده کد منبع در زیر کلیک کنید:

مشاهده کد منبع

کد.gs

راهکارها/اتوماسیون‌ها/گواهی کارمند/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();
  }
}

مشارکت‌کنندگان

این نمونه توسط سوراب چوریا، وبلاگ نویس و متخصص توسعه گوگل، ایجاد شده است.

این نمونه توسط گوگل و با کمک متخصصان توسعه‌دهنده گوگل نگهداری می‌شود.

مراحل بعدی