איך ליצור Package ו-Versions ב-Salesforce DX

ליאור נכתב על ידי ליאור לביא, עודכן בתאריך 08/11/2023

מה הן Package ו-Version

לפני שנתחיל ביצירת Packages ו-Versions, בוא נקדיש רגע כדי להבין מה הן Packages וכיצד הן משתלבות בתהליך ניהול השינויים שלנו ב-Salesforce.

Packages, כפי שהן מוגדרות ב-Salesforce, הן Distributable units of functionality, פונקציונאליות שניתן לעטוף ולהפיץ לסביבות שונות ב-Salesforce להתקנה ושימוש. דוגמה פשוטה לפונקציונאליות כזאת היא Lightning web component (להלן: "LWC") שפיתחנו וכעת אנחנו מעוניינים להפיץ ללקוחות שלנו להתקנה בסביבות השונות שלהם.

Versions, הן Snapshots של ה-Package שלנו בנקודת זמן ספציפית. Version היא Immutable, מרגע שנוצרה, לא ניתן לערוך אותה. כשלקוח מתקין את ה-Package שלנו בסביבה שלו, מה שהוא מתקין בפועל היא גרסה, Version, ספציפית של ה-Package שלנו.

מה הם יתרונות המעבר למודל פיתוח מבוסס Packages

לפיתוח מבוסס Packages מספר יתרונות על מודלים אחרים, כמו Change sets או Org based:

  1. שימוש ב-Packages מאפשר לנו להתחיל לחשוב על ה-Metadata הארגוני שלנו במונחים של פונקציונאליות מוגדרת וברורה, מה שיעזור לנו לזהות מקומות בהן יש תלויות לא נכונות בין מחלקות בקוד שלנו.
  2. Packages, בניגוד ל-Change sets לדוגמה, לא משתמשות בדלתאות כדי להגדיר שינויים. כל Package מכילה את כל ה-Metadata שלה, בין אם הוא שונה ובין אם לא במהלך הפיתוח האחרון, כך שאין צורך לעקוב יותר אחרי רכיבי Metadata ספציפיים ולוודא שהם קיימים בסביבת היעד.
  3. מאחר ו-Packages הן במידה רבה Standalone כי הן מכילות את כל ה-Metadata שהן מבוססות עליו, ניתן להשתמש בסוג מיוחד של סביבה איתן, Scratch org, כדי להתקין ולבדוק אותן. מאחר ו-Scratch orgs הן סביבות נקיות מ-Custom configurations ו-Data, התקנה והרצה מוצלחת של ה-Package שלנו ב-Scratch org מבטיחה לנו שלא הסתמכנו בטעות במהלך הפיתוח והבדיקות שלנו על קונפיגורציות או נתונים ייחודיים לסביבת הפיתוח.
  4. שימוש ב-Packages מאפשר לנו להגדיר Release schedule נפרד לכל Package, מאחר וכל Package מפותחת בנפרד. משמעות הדבר היא שניתן לבצע תעדוף פיתוחים בצורה הרבה יותר דקדקנית, ולהבטיח שפיתוחים בעדיפות גבוהה לא יתקעו ב-Pipeline בהמתנה להשלמת פיתוחים בעדיפות נמוכה המשתמשים ברכיבי Metadata משותפים. 

או.קיי., עכשיו כשאנחנו מבינים את היתרונות של שימוש ב-Package based development model, בוא נלמד איך ליצור ולהתקין Package חדשה. כדי לעשות את זה, נבצע את השלבים הבאים: 

  1. ניצור פרויקט SFDX חדש ב-Visual Studio Code באמצעות Salesforce DX.
  2. ניצור LWC פשוט.
  3. ניצור סביבת Trailhead playground שתתפקד כ-Dev Hub שלנו, תאפשר לנו ליצור Packages ובהמשך תהיה היעד להתקנת ה-Package שלנו לבדיקות.
  4. ניצור Package ו-Version ראשונית.
  5. ניצור Scratch org לבדיקת ה-LWC שלנו בסביבה נקייה.
  6. נתקין את ה-Version שלנו על ה-Scratch org ונבדוק ידנית שהיא עובדת כמצופה.
  7. נתקין את ה-Version שלנו על סביבת ה-Trailhead שלנו ונבדוק ידנית שהיא עובדת כמצופה.
  8. נכניס שינוי ל-LWC שלנו, ניצור עבורו גרסה חדשה ונתקין אותה בסביבת ה-Scratch org שלנו לבדיקה.
  9. נהפוך את ה-Version האחרונה שלנו לזמינה להתקנה בסביבות ייצור.

יצירת פרויקט SFDX חדש ב-Visual Studio Code

ליצירת פרויקט SFDX חדש ב-VS Code בצע את השלבים הבאים:

  1. פתח את Visual Studio Code.
  2. לחץ במקלדת על קיצור הדרך Ctrl + Shift + P לפתיחת פלטת הפקודות ב-VS Code.
  3. הקלד את המילה Project ולחץ על האופציה SFDX: Create Project.
  4. בחר תבנית פרויקט Standard.
  5. תן שם לפרויקט שלך, לדוגמה MyFirstPackage
  6. בחר תיקיה בה תרצה לשמור את הפרויקט החדש שלך.
  7. אם VS Code מציג מסך שכותרתו Do you trust the authors of the files in this folder? לחץ על הכפתור Yes, I trust the authors.

יצירת LWC חדש

  1. לחץ עם המקש הימני בעכבר על התיקיה force-app\main\default\lwc ובחר SFDX: Create Lightning Web Component.
  2. תן ל-LWC שם, לדוגמה HelloWorld.
  3. בחר את תיקיית היעד בה ישמר הרכיב. בדוגמה הזאת נבחר באופציה הראשונה ש-VS Code מציג לנו, שהיא תקיית ברירת המחדל עבור רכיבי LWC, והיא force-app\main\default\lwc.
  4. בקובץ helloWorld.html הזן את הקוד הבא:
        <template>
            <lightning-card title="My Name">
                <div class="slds-p-around_medium">
                    <lightning-input type="text" label="Enter your name" value={name} onchange={setName}></lightning-input>
                </div>
                <span class="slds-p-around_medium">Hello World! My name is <b>{name}</b></span>
            </lightning-card>
        </template>
    
  5.  בקובץ helloWorld.js הזן את הקוד הבא:
        import { LightningElement } from 'lwc';
        
        export default class HelloWorld extends LightningElement {
            name;
            setName(event){
                this.name = event.target.value;
            }
        }
  6.  בקובץ helloWorld.js-meta.xml הזן את הקוד הבא:
        <?xml version="1.0" encoding="UTF-8"?>
        <LightningComponentBundle xmlns="http://soap.sforce.com/2006/04/metadata">
            <apiVersion>55.0</apiVersion>
            <isExposed>true</isExposed>
            <targets>
                <target>lightning__AppPage</target>
                <target>lightning__HomePage</target>
                <target>lightning__RecordPage</target>
            </targets>
        </LightningComponentBundle>

יצירת Trailhead Playground

ליצירת סביבת Trailhead playground שתשמש אותנו כ-Dev Hub ותאפשר לנו ליצור Packages ו-Scratch orgs בצע את השלבים הבאים:

  1. התחבר ל-Trailhead. אם אין לך חשבון Trailhead, לחץ כאן למדריך לפתיחת חשבון ב-Trailhead וסביבת Playground ראשונה.
  2. לחץ על השם שלך בפינה הימנית העליונה של המסך, לצד תמונת הפרופיל שלך, ומהתפריט בחר Hands-On Orgs.
  3. לחץ על הכפתור Create Playground.
  4. הענק שם לסביבה החדשה, למשל Package Testing, ולחץ על Create.
  5. המתן ש-Salesforce יסיימו ליצור עבור את הסביבה. זה עשוי לקחת כמה דקות. Waiting for New Trailhead Playground
  6. לאחר שהסביבה נוצרה, לחץ על כפתור ה-Launch ליד שם הסביבה כדי לפתוח אותה.
  7. לאחר שהסביבה נפתחה, לחץ על הלשונית Get Your Login Credentials.
  8. בלשונית Get Your Login Credentials, העתק את שם המשתמש שלך ושמור אותו בצד, אנחנו נזדקק לו בהמשך.
  9. לחץ על הכפתור Reset My Password. בחלונית שנפתחה לחץ OK.
  10.  פתח את תיבת האימייל איתה נרשמת ל-Trailhead, פתח את האימייל שכותרתו Finish resetting your Your Developer Edition password.
  11. לחץ על הקישור במייל לאיפוס סיסמה.
  12. בלשונית הדפדפן שנפתחה, לחץ על Reset Password.
  13. במסך Change Your Password בחר סיסמה חדשה ולחץ על הכפתור Change Password.

מעולה! יצרנו סביבת Playground חדשה. עכשיו נגדיר אותה כ-Dev Hub כדי שנוכל ליצור ממנה Packages ו-Scretch Orgs.

  1. בסביבה החדשה, לחץ על סמל גלגל השיניים ליד סמל הפעמון ותמונת הפרופיל שלך, ובחר Setup.
  2. בלשונית שנפתחה, מצד שמאל למעלה, בשדה החיפוש Quick Find, הזן את המילים Dev Hub ולחץ על התוצאה Dev Hub תחת Development.
  3. העבר את הכפתור Enable Dev Hub למצב Enabled. שים לב! מרגע שהפעלת את האפשרות הזאת, לא ניתן לבטל אותה!
  4. העבר את הכפתור Enable Unlocked Packages and Second-Generation Managed Packages למצב Enabled. שים לב! מרגע שהפעלת את האפשרות הזאת, לא ניתן לבטל אותה!

יצירת Package ו-Version

ב-VS Code בצע את השלבים הבאים ליצירת Package ו-Version ראשונית:

  1. בפאנל ה-Explorer ב-VS Code, הפאנל מצד שמאל שמציג את הקבצים בפרויקט, פתח את הקובץ sfdx-project.json שנמצא בתיקית ה-root של הפרויקט לצד קבצים כמו README.md ו-package.json.
  2. וודא שתוכן הקובץ נראה דומה לקוד הבא. מספר ה-sourceApiVersion שלך עשוי להיות שונה. זה תקין.
    {
          "packageDirectories": [
            {
              "path": "force-app",
              "default": true
            }
          ],
          "name": "MyFirstPackage",
          "namespace": "",
          "sfdcLoginUrl": "https://login.salesforce.com",
          "sourceApiVersion": "55.0"
        }
  3. אם המסוף, ה-Terminal, שלך לא פתוח ב-VS Code, הקש את קיצור הדרך Ctrl + ~ כדי לפתוח אותו.
  4. הקלד את הפקודה הבאה במסוף כדי לפתוח ולחבר את ה-Trailhead playground שיצרנו לפרויקט שלנו כ-Dev Hub.
    sfdx auth:web:login -d --setalias MyTP
    שם לב לדגל -d, דגל זה מגדיר את ה-Org שנתחבר אליו, ה-Trailhead playground שלנו, כסביבת ברירת המחדל של הפרויקט ליצירת Scretch orgs ו-Packages.
  5. בלשונית הדפדפן שנפתחה הזן את שם המשתמש ששמרת בצד קודם, ואת הסיסמה שלך לסביבת ה-Trailhead playground. אם הדפדפן מציג לך הודעת Allow Access? לחץ על הכפתור Allow. במסוף אתה תראה הודעת הצלחה כשתכנס לסביבה.
  6. הקלד את הפקודה הבאה במסוף.
    sfdx force:package:create -n MyFirstPackage -t Unlocked -r force-app -d "My awesome first package!"
    הודעת הצלחה עם ה- Id של ה-Package צריכה להופיע ב-Trminal.
    אם תסתכל על התוכן של הקובץ sfdx-project.json תוכל לראות שהתווספו לו משתנים המתארים את שם הגרסה ומספרה, ו-packageAliases עם שם ה-Package שלנו וה-Id שלה המתחיל בתוים 0Ho.
  7. הקלד את הפקודה הבאה כדי לראות את רשימת החבילות המשוייכות לסביבה המוגדרת Dev Hub ברירת מחדל ליצירת Scretch orgs ו-Packages בפרויקט. אתה אמור לראות שם רק חבילה אחת, בשם MyFirstPackage.
    sfdx force:package:list
    Package list.PNGמזל טוב! יצרנו Package! השלב הבא: יצירת Version.
  8. ב-Root של הפרויקט, פתח את הקובץ sfdx-project.json. הקובץ שלך צריך להיראות בערך ככה:
    {
            "packageDirectories": [
                {
                    "path": "force-app",
                    "default": true,
                    "package": "MyFirstPackage",
                    "versionName": "ver 0.1",
                    "versionNumber": "0.1.0.NEXT"
                }
            ],
            "name": "MyFirstPackage",
            "namespace": "",
            "sfdcLoginUrl": "https://login.salesforce.com",
            "sourceApiVersion": "55.0",
            "packageAliases": {
                "MyFirstPackage": "0Ho***"
            }
        }
  9.  שנה את הערכים בשדות הבאים:
    1. versionName - מ-"ver 0.1" ל-"Version 1". השדה versionName מחזיק את שם החבילה, והוא יכול להיות איזה טקסט שנרצה. אם היינו מעוניינים בכך, היינו יכולים לכתוב בו את הביטוי "Summer '22" כשם הגרסה, כפי שעושים Salesforce.
    2. versionNumber - מ-"0.1.0.NEXT" ל-"1.0.0.NEXT". שדה זה מחזיק את מספר הגרסה במבנה של major.minor.patch.build. הביטוי NEXT מאפשר לנו לבצע העלאה באחד של מספר ה-build בכל פעם שניצור גרסה חדשה.
    לאחר השינוי הקוד שלך צריך להיראות בערך ככה:
    {
            "packageDirectories": [
                {
                    "path": "force-app",
                    "default": true,
                    "package": "MyFirstPackage",
                    "versionName": "Version 1.0",
                    "versionNumber": "1.0.0.NEXT"
                }
            ],
            "name": "MyFirstPackage",
            "namespace": "",
            "sfdcLoginUrl": "https://login.salesforce.com",
            "sourceApiVersion": "55.0",
            "packageAliases": {
                "MyFirstPackage": "0Ho***"
            }
        }
  10. ליצירת Version חדשה, הזן את הפקודה הבא ב-Terminal:
    sfdx force:package:version:create -p MyFirstPackage -d force-app -k test1234 --wait 10
    הסבר על הדגלים בפקודה:
    p - שם החבילה (Package) עבורה אנחנו יוצרים גרסה.
    d - שם התיקיה (Directory) בה נמצאת ה-Package עבורה אנחנו יוצרים גרסה.
    k - מפתח (Key) התקנה עבור גרסאות מוגנות מפתח. באמצעות מפתח זה אנחנו יכולים להגדיר שרק מי שנרצה יוכל להתקין את הגרסה שניצור.
    wait - הגדרת wait גורמת ליצירת ה-Version בצורה סינכרונית, וה-Terminal יראה לנו כל כמה שניות שורת טקסט עם מעקב סטטוס עד השלמת או כישלון יצירת ה-Version. ה-Terminal יציג לנו את שורות התקדמות הסטטוס במשך מספר הדקות שציינו עבור הדגל, ובדוגמה שלנו, 10 דקות. לאחר שהגרסה תיווצר בצורה תקינה, הפקודה תעדכן אוטומטית את הקובץ sfdx-project.json עם שם ו-Id הגרסה החדשה תחת הפרמטר packageAliases. אם לא נגדיר את הדגל הזה, נקבל חזרה מה-Terminal את השורה הבאה:
    Package version creation request status is 'Initializing'. Run "sfdx force:package:version:create:report -i 08c***" to query for status.
    העתקת הפקודה שקיבלנו בפלט של פקודת היצירה תאפשר לנו לקבל דוח מפורט ב-Terminal של הגרסה החדשה, אבל קובץ הפרויקט לא יעודכן אוטומטית ונצטרך לבצע את העדכון ל-packageAliases ידנית.
  11. לאחר השלמת יצירת הגרסה, כדי לראות את הגרסה שיצרת, הזן את הפקודה הבאה ב-Terminal:
    sfdx force:package:version:list
    Version List השלמנו את יצירת ה-Version! מעולה! עכשיו ניצור Scratch org להתקנה ובדיקת ה-LWC שלנו.

יצירת Scratch Org

Scratch org היא סביבת זמנית, מהירה להקמה ונקייה לחלוטין מ-Metadata ו-data, מה שהופך אותה למושלמת לבדיקות ממוקדות.

כדי ליצור Scratch org בצע את השלבים הבאים:

  1. בפרויקט שלנו, תחת התיקיה config ישנו קובץ בשם project-scratch-def.json. קובץ זה מכיל את ההגדרות עבור סביבות Scratch orgs בפרויקט שלנו. הקוד בקובץ אמור להיראות בערך ככה:
    {
                "orgName": "Demo company",
                "edition": "Developer",
                "features": ["EnableSetPasswordInApi"],
                "settings": {
                    "lightningExperienceSettings": {
                    "enableS1DesktopEnabled": true
                    },
                    "mobileSettings": {
                    "enableS1EncryptedStoragePref2": false
                    }
                }
                }

    כדי להתחיל בצורה נקייה, שנה את שם ה-orgName לערך אחר, כמו למשל My Cool Company, ומחק את הערך "EnableSetPasswordInApi" כך שהמערך תחת features ישאר ריק.

    {
                "orgName": "My Cool Company",
                "edition": "Developer",
                "features": [],
                "settings": {
                    "lightningExperienceSettings": {
                    "enableS1DesktopEnabled": true
                    },
                    "mobileSettings": {
                    "enableS1EncryptedStoragePref2": false
                    }
                }
                }
  2. כדי ליצור Scratch org חדש, הקלד את הפקודה הבאה ב-Terminal:
    sfdx force:org:create -s -f config/project-scratch-def.json

    הפקודה force:org:create יוצרת סביבה חדשה ב-Salesforce. סוג הסביבה הוא Scratch org כברירת מחדל, הדגל s מציין שה-Org הזה הוא Org ברירת המחדל של הפרויקט כרגע, וכל הפקודות בהן נדרש Org יופנו אליו, והדגל מפנה את הפקודה לקובץ ההגדרות עבור Scratch org בפרויקט שלנו.

  3. כדי לפתוח את סביבת ה-Scratch org שיצרנו בדפדפן, הקלד את הפקודה הבאה:
    sfdx force:org:open
    מאחר והגדרנו את ה-Scratch org שלנו כסביבת ברירת המחדל של הפרויקט, הפקודה Open לא מצריכה שנציין בה אותו כסביבת היעד.
  4. בעמוד שנפתח לנו, עמוד ה-Setup בסביבת ה-Scratch שלנו, בתיבת החיפוש Quick Find, הקלד את הביטוי Installed Packages. לחץ על הקישור שמצאת ל-Installed Packages. רשימת ה-Installed packages צריכה להיות ריקה.

התקנת Version בסביבת ה-Scratch שלנו

הקלד את הפקודה הבאה כדי להתקין את הגרסה האחרונה שיצרנו בסביבת ה-Scratch:

sfdx force:package:install --wait 10 --publishwait 10 --package MyFirstPackage@1.0.0-1 -k test1234 --noprompt

הסבר על הדגלים בפקודה:

  1. wait - התקנה סינכרונית של ה-Version תוך מספר דקות. בדוגמה למעלה, ההתקנה תבוצע מידית, בצורה סינכרונית ויהיו לה 10 דקות להשלמה. אם עברו יותר מ-10 דקות וההתקנה לא הסתיימה, תוצג בפנינו הההודעה הבאה, בזמן שתהליך ההתקנה ימשיך לרוץ ברקע.
    PackageInstallRequest is currently InProgress. You can continue to query the status using
    sfdx force:package:install:report -i 0Hf*** -u test-***@example.com
  2. publishwait - כשאנחנו מנסים להתקין גרסה חדשה, לוקח ל-Salesforce כמה דקות לוודא שהגרסה קיימת בסביבה לפני שהמערכת תנסה להתקין אותה. הדגל publishwait מגדיר כמה זמן על Salesforce לחכות שהגרסה תהיה נוכחת בסביבה לפני שהמערכת תנסה להתקין אותה.

רענן את העמוד בדפדפן עבור Installed packages וראה שהחבילה התווספה לנו לרשימת החבילות המותקנות.

הטמעת ה-LWC שלנו בסביבת ה-Scratch לבדיקה

כעת נבדוק שההתקנה שלנו עברה בהצלחה ושהרכיב שלנו עובד כמצופה.

הרכיב שכתבנו פשוט למדי, הוא יוצר אלמנט UI מסוג Card המכיל שדה קלט טקסט וכשהמשתמש מזין בו שם, המשפט Hello World! My name is מתחת לשדה הקלט מושלם עם השם אותו הזין המשתמש.

בצע את הצעדים הבאים כדי לבדוק שהרכיב הותקן בהצלחה:

  1. היכנס ב-Scratch org שלך לאפליקציה Sales של Salesforce.
  2. היכנס לעמוד ה-Home.
  3. לחץ על סמל גלגל השיניים לצד תמונת הפרופיל שלך בפינה הימנית העליונה של המסך ובחר Edit Page.
    אם אינך רואה את האופציה Edit Page תחת תפריט ה-Setup, נסה לעבור ל-Tab אחר ולחזור ל-Tab של Home.
  4. מתוך רשימת ה-Components בצד שמאל של המסך גלול למטה ומצא את הרכיב helloWorld תחת Custom.
  5. גרור את הרכיב ושחרר אותו היכן שתרצה במסך הבית.
  6. לחץ על Save.
  7. אם מוצגת בפניך הודעה על ביצוע אקטיבציה לעמוד, בצע את השלבים הבאים:
    1. לחץ על הכפתור Activate.
    2. בחלונית שנפתחה, Activation: Home Page Default, לחץ על הכפתור Assign as Org Default
    3. בחלונית Set as Org Default: Home Page Default לחץ על Save
  8. חזור למסך הבית על ידי לחיצה על החץ Back מצד שמאל של כותרת העמוד Lightning App Builder.
  9. הרכיב עם הכתובת My Name צריך להופיע על הדף. הזן שם בשדה Enter your name ובדוק שהשורה Hello World! My name is מושלמת אוטומטית עם השם שהזנת, בפונט מודגש.

כעת בוא נבדוק שהרכיב שלנו עובר בהצלחה התקנה גם בסביבת Trailhead.

הטמעת ה-LWC שלנו בסביבת ה-Trailhead לבדיקה

  1. הזן את הפקודה הבאה ב-Terminal להתקנת הגרסה. שם לב לדגל u שמצביע על סביבת ה-Trailhead playground.
    sfdx force:package:install --wait 10 --publishwait 10 --package MyFirstPackage@1.0.0-1 -k test1234 --noprompt -u MyTP
  2. הזן ב-Terminal את הפקודה הבאה כדי לפתוח את סביבת ה-Trailhead שלך בדפדפן.
    sfdx force:org:open -u MyTP
  3. היכנס בסביבת ה-Trailhead שלך לאפליקציה Sales של Salesforce.
  4. היכנס לעמוד ה-Home.
  5. לחץ על סמל גלגל השיניים לצד תמונת הפרופיל שלך בפינה הימנית העליונה של המסך ובחר Edit Page.
  6. מתוך רשימת ה-Components בצד שמאל של המסך גלול למטה ומצא את הרכיב helloWorld תחת Custom.
  7. גרור את הרכיב ושחרר אותו היכן שתרצה במסך הבית.
  8. לחץ על Save.
  9. אם מוצגת בפניך הודעה על ביצוע אקטיבציה לעמוד, בצע את השלבים הבאים:
    1. לחץ על הכפתור Activate.
    2. בחלונית שנפתחה, Activation: Home Page Default, לחץ על הכפתור Assign as Org Default
    3. בחלונית Set as Org Default: Home Page Default לחץ על Save
  10. חזור למסך הבית על ידי לחיצה על החץ Back מצד שמאל של כותרת העמוד Lightning App Builder.
  11. הרכיב עם הכתובת My Name צריך להופיע על הדף. הזן שם בשדה Enter your name ובדוק שהשורה Hello World! My name is מושלמת אוטומטית עם השם שהזנת, בפונט מודגש.

כל הכבוד! יצרנו LWC, יצרנו עבורו חבילה וגרסה והתקנו ובדקנו אותה בסביבת Scratch org ו-Trailhead playground מסוג Developer Edition.

עכשיו נלמד איך להכניס שינוי לקוד שלנו, ליצור עבור השינוי הזה גרסה חדשה, ולהתקין אותה בסביבת ה-Scratch org שלנו לבדיקה.

יצירת גרסה חדשה ובדיקה שלה בסביבת Scratch org

ליצירת שינוי וגרסה חדשה בצע את השלבים הבאים:

  1. ראשית, נכניס שינוי קטן לקוד שלנו. בקובץ helloWorld.html נוסיף inline styling כך שהטקסט שהמשתמש מזין בתיבת הטקסט, יופיע בטקסט מתחתיה באדום באופן הבא:
    <template>
        <lightning-card title="My Name">
            <div class="slds-p-around_medium">
                <lightning-input type="text" label="Enter your name" value={name} onchange={setName}></lightning-input>
            </div>
            <span class="slds-p-around_medium">Hello World! My name is <b style="color: red;">{name}</b></span>
        </lightning-card>
    </template>
  2. שמור את השינוי שביצעת.
  3. כעת ניצור גרסה חדשה. הזן את הפקודה הבא ב-Terminal כדי ליצור גרסה חדשה של החבילה שלנו. לאחר שהגרסה תיווצר תוכל לראות אותה ברשימת ה-packageAliases בקובץ sfdx-project.json.
    sfdx force:package:version:create -p MyFirstPackage -d force-app -k test1234 -w 10
  4. הזן את הפקודה הבאה ב-Terminal כדי להתקין את הגרסה החדשה בסביבת ה-Scratch org שלנו. שים לב שמספר ה-build שלנו עלה מ-1 ל-2.
    sfdx force:package:install --wait 10 --publishwait 10 --package MyFirstPackage@1.0.0-2 -k test1234 --noprompt
  5. פתח את העמוד Installed Packages ב-Setup של סביבת ה-Scratch שלך וראה שה-Version Number עלתה מ-1.0 (Beta 1) ל-1.0 (Beta 2)
  6. פתח או רענן את עמוד הבית של אפליקציית Sales ב-Scratch org שלך.
  7. הזן את השם שלך בתיבת הטקסט Enter your name וודא שהשם שלך מופיע באדום בסוף המשפט Hello World! My name is מתחת לתיבת הטקסט.

הפיכת ה-Version האחרונה שלנו לזמינה להתקנה בסביבות ייצור

עד עכשיו הגרסאות שיצרנו עבור ה-Package שלנו הן גרסאות Beta ולא ניתן להתקין אותן על סביבות ייצור. בצע את השלבים הבאים כדי להפוך גרסה לזמינה להתקנה בסביבות ייצור.

  1. צור גרסה חדשה עם Code coverage באופן הבא:
    sfdx force:package:version:create -p MyFirstPackage -d force-app -k test1234 -w 10 --codecoverage

    Code coverage של למעלה מ-75% היא דרישה מקדימה לפני קידום גרסה לייצור. קח בחשבון שיצירת גרסה עם Code coverage דורשת יותר זמן מיצירת גרסה ללא Code coverage.  כשיצירת Version לוקחת יותר מהזמן אותו הגדרנו באמצעות הדגל -w, ה-Terminal יציג הודעה דומה לזאת:

    Package version creation request status is 'Verifying metadata'. Run "sfdx force:package:version:create:report -i 08c***" to query for status.

    נוכל לעקוב אחרי התקדמות יצירת הגרסה על ידי הרצת הפקודה הבאה ובדיקת שדה ה-Status בפלט שלה:

    sfdx force:package:version:create:report -i 08c***
  2. (אופציונלי) הרץ את הפקודה הבאה כדי לבדוק את אחוז ה-Code coverage של הגרסה שיצרנו. הפקודה תיצור קובץ יומן (log) עם סיומת txt בנתיב בו הפקודה הורצה, אותו נוכל לפתוח כדי לקרוא בנוחות את המידע.
    sfdx force:package:version:list --verbose > log.text
    הדגל --verbose יציג לנו מידע מפורט על כל ה-Versions המשוייכות ל-Dev hub שלנו. הסימן < ידפיס לנו את הפלט הזה לקובץ טקסט. קובץ הטקסט אמור להיראות בערך כך:
    Using specified username lior***@mindful-narwhal-***.com
    
    === Package Versions [3]
     Package Name   Namespace Version Name Version Subscriber Package Version Id Alias                  Installation Key Released Validation Skipped Ancestor Ancestor Version Branch Package Id         Installation URL                                                                  Package Version Id Created Date     Last Modified Date Tag Description Code Coverage Code Coverage Met Converted From Version Id Org-Dependent Unlocked Package Release Version Build Duration in Seconds Managed Metadata Removed Created By         
     ────────────── ───────── ──────────── ─────── ───────────────────────────── ────────────────────── ──────────────── ──────── ────────────────── ──────── ──────────────── ────── ────────────────── ───────────────────────────────────────────────────────────────────────────────── ────────────────── ──────────────── ────────────────── ─── ─────────── ───────────── ───────────────── ───────────────────────── ────────────────────────────── ─────────────── ───────────────────────── ──────────────────────── ────────────────── 
     MyFirstPackage           Version 1    1.0.0.1 04t***                        MyFirstPackage@1.0.0-1 true             false    false              N/A      N/A                     0Ho***             https://login.salesforce.com/packaging/installPackage.apexp?p0=04t***             05i***             2022-08-21 17:21 2022-08-21 17:21                                 false                                       No                             55.0            42                        N/A                      005*** 
     MyFirstPackage           Version 1    1.0.0.2 04t***                        MyFirstPackage@1.0.0-2 true             false    false              N/A      N/A                     0Ho***             https://login.salesforce.com/packaging/installPackage.apexp?p0=04t***             05i***             2022-08-21 17:36 2022-08-21 17:36                                 false                                       No                             55.0            45                        N/A                      005***
     MyFirstPackage           Version 1    1.0.0.3 04t***                                               true             false    false              N/A      N/A                     0Ho***             https://login.salesforce.com/packaging/installPackage.apexp?p0=04t***             05i***             2022-09-07 15:23 2022-09-07 15:23                   100%          true                                        No                             55.0            723                       N/A                      005***
    

    שים לב ל-Code coverage שלנו (מודגש בשחור) ששווה ל-100% בדוגמה הזאת. בנוסף, תוכל לראות שהערך בעמודה Released הוא False. אנחנו מעוניינים להפוך אותו ל-True כדי שנוכל להתקין את הגרסה בסביבות ייצור.

  3. אם זמן יצירת הגרסה התארך ונאלצנו להריץ את הפקודה sfdx force:package:version:create:report פירוש הדבר הוא שקובץ הפרויקט שלנו, sfdx-project.json, לא התעדכן אוטומטית בשם הגרסה החדשה שלנו, ויהיה עלינו להוסיף אותה ידנית.
    ראשית, נריץ את הפקודה הבאה ונעתיק את ה-Subscriber Package Version Id של הגרסה החדשה שלנו מתוך הטבלה:
    sfdx force:package:version:list
    sfdx-project.json - גרסה ישנה
    {
        "packageDirectories": [
            {
                "path": "force-app",
                "default": true,
                "package": "MyFirstPackage",
                "versionName": "Version 1",
                "versionNumber": "1.0.0.NEXT"
            }
        ],
        "name": "MyFirstPackage",
        "namespace": "",
        "sfdcLoginUrl": "https://login.salesforce.com",
        "sourceApiVersion": "55.0",
        "packageAliases": {
            "MyFirstPackage": "0Ho***",
            "MyFirstPackage@1.0.0-1": "04t***",
            "MyFirstPackage@1.0.0-2": "04t***"
        }
    }
    sfdx-project.json - גרסה חדשה
    {
        "packageDirectories": [
            {
                "path": "force-app",
                "default": true,
                "package": "MyFirstPackage",
                "versionName": "Version 1",
                "versionNumber": "1.0.0.NEXT"
            }
        ],
        "name": "MyFirstPackage",
        "namespace": "",
        "sfdcLoginUrl": "https://login.salesforce.com",
        "sourceApiVersion": "55.0",
        "packageAliases": {
            "MyFirstPackage": "0Ho***",
            "MyFirstPackage@1.0.0-1": "04t***",
            "MyFirstPackage@1.0.0-2": "04t***",
            "MyFirstPackage@1.0.0-3": "04t***"
        }
    }
  4. כדי לקדם את ה-Released state של הגרסה שלנו נשתמש בפקודה Promote באופן הבא:
    sfdx force:package:version:promote -p MyFirstPackage@1.0.0-3 -v MyTP

    ה-Terminal יציג לנו את ההודעה הבאה וישאל אותנו אם אנחנו בטוחים שאנחנו רוצים לבצע Release ל-Version שלנו ושמדובר בפעולה בלתי הפיכה. הקלד y ולחץ Enter לאישור.

    Are you sure you want to release package version MyFirstPackage@1.0.0-2? You can't undo this action. Release package (y/n)?:
    בסיום קידום הגרסה ה-Terminal יציג לנו את ההודעה הבאה:
    Successfully promoted the package version, ID: 04t***, to released. Starting in Winter ‘21, only unlocked package versions that have met the minimum 75% code coverage requirement can be promoted. Code coverage minimums aren’t enforced on org-dependent unlocked packages.
    
    זהו! עכשיו נוכל להתקין את הגרסה שלנו בסביבות ייצור!