ריריות באמצעות כללים מקבצי Excel

1. סקירה כללית

ל- Drools יש תמיכה בניהול כללים עסקיים בפורמט של גיליון אלקטרוני.

במאמר זה נראה דוגמה מהירה לשימוש ב- Drools לניהול כללים עסקיים באמצעות קובץ Excel.

2. תלות Maven

בואו נוסיף את התלות הדרושים ל- Drools ליישום שלנו:

 org.kie kie-ci 7.1.0.Beta2 org.drools רירויות-החלטות לוחות 7.1.0.Beta2 

את הגרסה האחרונה של תלות אלה ניתן למצוא ב- kie-ci ובשולחנות ריר-החלטות.

3. הגדרת כללים ב- Excel

לדוגמא שלנו, בואו נגדיר כללים לקביעת הנחה בהתבסס על סוג הלקוח ומספר השנים שלקוח:

  • לקוחות בודדים עם יותר משלוש שנים מקבלים הנחה של 15%
  • לקוחות בודדים עם פחות משלוש שנים מקבלים 5% הנחה
  • כל הלקוחות העסקיים מקבלים 20% הנחה

3.1. קובץ האקסל

נתחיל ביצירת קובץ ה- Excel שלנו בהתאם למבנה הספציפי ולמילות המפתח הנדרשות על ידי דרולס:

לדוגמא הפשוטה שלנו, השתמשנו במערכת מילות המפתח הרלוונטית ביותר:

  • RuleSet - מציין את תחילת טבלת ההחלטות
  • יְבוּא - שיעורי Java המשמשים בחוקים
  • RuleTable - מציין את תחילת מערך הכללים
  • שֵׁם - שם הכלל
  • מַצָב - קטע הקוד של התנאי שיש לבדוק מול נתוני הקלט. כלל צריך להכיל לפחות תנאי אחד
  • פעולה - קטע הקוד של הפעולה שיש לבצע אם מתקיימים תנאי הכלל. כלל צריך להכיל לפחות פעולה אחת. בדוגמה, אנו מתקשרים setDiscount על צרכן לְהִתְנַגֵד

בנוסף, השתמשנו ב- צרכן בכיתה בקובץ Excel. אז בואו ניצור את זה עכשיו.

3.2. ה צרכן מעמד

כפי שניתן לראות מהתנאים והפעולה בגיליון ה- Excel, אנו משתמשים באובייקט של ה- צרכן מחלקה לנתוני הקלט (סוּג ו שנים) ולאחסן את התוצאה (הנחה).

ה צרכן מעמד:

לקוח ברמה ציבורית {סוג CustomerType פרטי; שנים אינטנסיביות פרטיות; הנחה למתן פרטי; // גטרים וקובעים סטנדרטיים ציבור ציבורי CustomerType {INDIVIDUAL, BUSINESS; }}

4. יצירת מופעי מנוע כלל של דרולים

לפני שנוכל לבצע את הכללים שהגדרנו, עלינו לעבוד עם מופע של מנוע הכלל של דרול. לשם כך עלינו להשתמש ברכיבי הליבה של Kie.

4.1. KieServices

ה KieServices מחלקה מספקת גישה לכל מתקני הבנייה והשעה של Kie. הוא מספק מספר מפעלים, שירותים ושיטות שירות. אז בואו נתפוס תחילה א KieServices למשל:

KieServices kieServices = KieServices.Factory.get ();

באמצעות KieServices, אנו הולכים ליצור מקרים חדשים של מערכת KieFileSystem, KieBuilder, ו מיכל KieContainer.

4.2. מערכת KieFileSystem

מערכת KieFileSystem היא מערכת קבצים וירטואלית. בואו נוסיף אליו את הגיליון האלקטרוני שלנו:

Resource dt = ResourceFactory .newClassPathResource ("com / baeldung / drools / rules / Discount.xls", getClass ()); KieFileSystem kieFileSystem = kieServices.newKieFileSystem (). כתוב (dt); 

4.3. KieBuilder

עכשיו, בנה את התוכן של ה- מערכת KieFileSystem על ידי העברתו ל KieBuilder:

KieBuilder kieBuilder = kieServices.newKieBuilder (kieFileSystem); kieBuilder.buildAll ();

אם נבנה בהצלחה, הוא יוצר KieModule (כל צנצנת המיוצרת על ידי Maven עם kmodule.xml, היא KieModule).

4.4. KieRepository

המסגרת מוסיפה אוטומטית את KieModule (כתוצאה מהבנייה) ל KieRepository:

KieRepository kieRepository = kieServices.getRepository ();

4.5. מיכל KieContainer

כעת ניתן ליצור חדש מיכל KieContainer עם זה KieModule באמצעות שלה ReleaseId. במקרה זה, Kie מקצה ברירת מחדל ReleaseId:

ReleaseId krDefaultReleaseId = kieRepository.getDefaultReleaseId (); KieContainer kieContainer = kieServices.newKieContainer (krDefaultReleaseId);

4.6. KieSession

כעת אנו יכולים להשיג KieSession מ ה מיכל KieContainer. היישום שלנו מתקשר עם KieSession, המאחסנת ומבצעת על נתוני זמן הריצה:

KieSession kieSession = kieContainer.newKieSession ();

5. ביצוע הכללים

לבסוף, הגיע הזמן לספק נתוני קלט ולבטל את הכללים:

לקוח לקוח = לקוח חדש (CustomerType.BUSINESS, 2); kieSession.insert (לקוח); kieSession.fireAllRules ();

6. מקרי מבחן

בואו כעת נוסיף כמה מקרי מבחן:

מחלקה ציבורית DiscountExcelIntegrationTest {פרטי KieSession kSession; @ לפני התקנת הריק הציבורי () {Resource dt = ResourceFactory .newClassPathResource ("com / baeldung / drools / rules / Discount.xls", getClass ()); kSession = DroolsBeanFactory חדש (). getKieSession (dt); } @Test ציבורי בטל giveIndvidualLongStanding_whenFireRule_thenCorrectDiscount () זורק חריג {לקוח לקוח = לקוח חדש (CustomerType.INDIVIDUAL, 5); kSession.insert (לקוח); kSession.fireAllRules (); assertEquals (customer.getDiscount (), 15); } @Test public void giveIndvidualRecent_whenFireRule_thenCorrectDiscount () זורק חריג {לקוח לקוח = לקוח חדש (CustomerType.INDIVIDUAL, 1); kSession.insert (לקוח); kSession.fireAllRules (); assertEquals (customer.getDiscount (), 5); } @Test ציבורי בטל giveBusinessAny_whenFireRule_thenCorrectDiscount () זורק חריג {לקוח לקוח = לקוח חדש (CustomerType.BUSINESS, 0); kSession.insert (לקוח); kSession.fireAllRules (); assertEquals (customer.getDiscount (), 20); }}

7. פתרון בעיות

דרולים ממיר את טבלת ההחלטות ל- DRL. בשל כך, ההתמודדות עם שגיאות והקלדה בקובץ Excel יכולה להיות קשה. לעתים קרובות השגיאות מתייחסות לתוכן ה- DRL. אז לפתרון בעיות, זה עוזר להדפיס ולנתח את ה- DRL:

Resource dt = ResourceFactory .newClassPathResource ("com / baeldung / drools / rules / Discount.xls", getClass ()); DecisionTableProviderImpl decisionTableProvider = DecisionTableProviderImpl חדש (); מחרוזת drl = decisionTableProvider.loadFromResource (dt, null);

8. מסקנה

במאמר זה ראינו דוגמה מהירה לשימוש ב- Drools לניהול כללים עסקיים בגיליון אלקטרוני של Excel. ראינו את המבנה ואת מערך מילות המפתח המינימלי לשמש להגדרת כללים בקובץ אקסל. לאחר מכן, השתמשנו ברכיבי Kie כדי לקרוא ולהפעיל את הכללים. לבסוף, כתבנו מקרי בדיקה לאימות התוצאות.

כמו תמיד, ניתן למצוא את הדוגמה המשמשת במאמר זה בפרויקט Github.


$config[zx-auto] not found$config[zx-overlay] not found