Salesforce Flow Loop: हर तारीख या शिफ़्ट के लिए एक रिकॉर्ड बनाएँ
एक स्क्रीन, कई रिकॉर्ड। वह loop पैटर्न जो हर Screen Flow बनाने वाले को चाहिए, कॉपी करने के लिए तीन स्टार्टर फ़्लो के साथ: शिफ़्ट, छुट्टी और डेट रेंज।
एक रिक्रूटर को किसी जॉब में बारह शिफ़्ट जोड़नी हैं। एक मैनेजर एक हफ़्ते की छुट्टी मंज़ूर करता है। एक इवेंट प्लानर तीन दिन की वर्कशॉप और एक फ़ॉलो-अप दिन बुक करता है। हर काम एक स्क्रीन पर लिया गया एक फ़ैसला है, और हर एक से कई रिकॉर्ड बनने चाहिए।
Screen Flow में ऐसा कोई एलिमेंट नहीं जो कहे “हर तारीख के लिए एक रिकॉर्ड बनाओ”। इसे आप तीन स्टैंडर्ड हिस्सों से बनाते हैं: एक loop, एक assignment और एक सेव। यह लेख उस पैटर्न को कदम-दर-कदम समझाता है और उस पर बने तीन चालू फ़्लो देता है।
यह पैटर्न TalentRover पर एक रिक्रूटिंग प्रोजेक्ट से निकला, जहाँ रिक्रूटर को किसी जॉब में लगातार कई शिफ़्ट जोड़नी होती थीं। एक-एक रिकॉर्ड डालने में शेड्यूलिंग से ज़्यादा समय लगता था। दिन और घंटे एक बार चुनकर loop से शिफ़्ट लिखवाने से यह समस्या हल हुई, और यह किसी भी ऑब्जेक्ट के लिए वैसे ही काम करता है।
पाँच एलिमेंट में पूरा पैटर्न
- Screen। एक MultiDatePick कैलेंडर, जहाँ यूज़र हर तारीख, और ज़रूरत हो तो समय भी, एक साथ चुनता है।
- Parse।
Parse Date Entries from JSONaction चुनी गई चीज़ों को ऐसी सूची में बदलता है जिस पर Flow loop चला सके। - Loop। एक Loop एलिमेंट सूची की हर एंट्री पर बारी-बारी से चलता है।
- Assignment। loop के भीतर: एंट्री की तारीख और समय को record variable पर कॉपी करें, फिर उस रिकॉर्ड को record collection में जोड़ें।
- Create Records। loop के बाद एक Create Records पूरा collection सहेज देता है।
सेव loop के बाद क्यों होता है
Create Records को loop के भीतर डालने का मन करता है: एक चक्कर, एक रिकॉर्ड। तीन तारीखों पर यह चल जाता है, तीस पर टूट जाता है। हर Create Records डेटाबेस में एक अलग सेव है, और Salesforce एक transaction में ऐसे 150 सेव की अनुमति देता है, जो उन सेव से चलने वाले हर trigger और flow के साथ साझा होते हैं। loop के भीतर का सेव हर तारीख पर एक खर्च करता है।
collection बनाकर एक बार सहेजने में कुल एक ही सेव लगता है, यूज़र ने चाहे जितना चुना हो। यह तेज़ भी है, और या तो सब कुछ सहेजता है या कुछ नहीं, इसलिए गड़बड़ होने पर आधी शिफ़्ट अधूरी नहीं छूटतीं।
| loop के भीतर Create Records | collection, loop के बाद सहेजा गया | |
|---|---|---|
| 30 तारीखों पर सेव | 30 | 1 |
| लिमिट का जोखिम | हर चुनी गई तारीख के साथ बढ़ता है | loop से कोई नहीं |
| एरर आने पर | कुछ रिकॉर्ड सहेजे गए, कुछ नहीं | सब या कुछ नहीं |
उपयोग का उदाहरण: जॉब में शिफ़्ट जोड़ें
रिक्रूटर जॉब से फ़्लो खोलता है, कैलेंडर पर शिफ़्ट के दिन और टाइम ग्रिड पर घंटे चुनता है, और Next पर क्लिक करता है। फ़्लो हर दिन की एक शिफ़्ट लिखता है, जो जॉब से जुड़ी होती है।
कैलेंडर चुनी गई चीज़ें अपने selectedDatesWithTimesJson आउटपुट में JSON के रूप में फ़्लो को देता है। Flow JSON नहीं पढ़ सकता, और यहीं पार्सर काम आता है। उसकी लौटाई हर एंट्री में ये फ़ील्ड होते हैं:
| फ़ील्ड | प्रकार | इसमें क्या होता है |
|---|---|---|
fromDate | Date | शिफ़्ट का दिन |
toDate | Date | शिफ़्ट के लिए वही दिन; रेंज के लिए आख़िरी दिन |
startTime | समय | पहला चुना गया स्लॉट |
endTime | समय | आख़िरी चुने गए स्लॉट का अंत |
लगातार स्लॉट मिलकर एक शिफ़्ट बनते हैं, इसलिए 13:00 और 13:30 मिलकर 13:00 से 14:00 हो जाते हैं। किसी दिन दो अलग ब्लॉक चुनने पर, जैसे सुबह और दोपहर, उस दिन की दो एंट्री और दो शिफ़्ट बनती हैं।
स्टार्टर फ़्लो: Add Shifts
दिन और घंटे चुनें, फिर हर ब्लॉक की एक शिफ़्ट सहेजें, उस रिकॉर्ड से जुड़ी जिससे फ़्लो लॉन्च हुआ है। MDP_Starter_Add_Shifts.flow-meta.xml
उपयोग का उदाहरण: छुट्टी के हर दिन का एक रिकॉर्ड
छुट्टी आमतौर पर दिन के हिसाब से ट्रैक होती है: पेरोल दिन गिनता है, और आधा मंज़ूर हुआ अनुरोध वैसे भी दिनों में बाँटना पड़ता है। यहाँ पार्सर की भी ज़रूरत नहीं। Date कंपोनेंट selectedDates भी आउटपुट करता है, एक सादी टेक्स्ट सूची जिसमें हर चुना गया दिन होता है, और रेंज दिन-ब-दिन लिखी होती हैं।
उस सूची पर सीधे loop चलाएँ। बस एक बात ध्यान रखें: हर आइटम 2026-11-09 जैसा टेक्स्ट है, इसलिए एक लाइन का formula, DATEVALUE({!Loop_Days}), assignment से रिकॉर्ड पर कॉपी होने से पहले उसे तारीख में बदल देता है।
स्टार्टर फ़्लो: Record per Day
दिन और रेंज चुनें, फिर हर एक दिन का एक रिकॉर्ड सहेजें, पार्सर की ज़रूरत नहीं। MDP_Starter_Record_Per_Day.flow-meta.xml
उपयोग का उदाहरण: हर डेट रेंज का एक रिकॉर्ड
कुछ चीज़ें कई दिनों तक चलती हैं पर होती एक ही हैं: तीन दिन की वर्कशॉप, उपकरण का किराया, सोमवार से बुधवार तक चलने वाली साइट विज़िट। इनके लिए शुरुआत और अंत की तारीख वाला एक रिकॉर्ड चाहिए, तीन नहीं।
इसके लिए selectedDateRangesJson आउटपुट है। कैलेंडर लगातार दिनों को एक रेंज में जोड़ देता है, इसलिए 9, 10 और 11 तारीख चुनने पर 9 से 11 तक की एक एंट्री मिलती है। इसे पार्स करें, loop चलाएँ, और fromDate और toDate को शुरुआत और अंत वाले फ़ील्ड पर कॉपी करें।
स्टार्टर फ़्लो: Record per Range
तारीखें और रेंज चुनें, फिर हर रेंज का एक रिकॉर्ड उसकी शुरुआत और अंत की तारीख के साथ सहेजें। MDP_Starter_Record_Per_Range.flow-meta.xml
bookingSuccessCount में बताता है कि कितनी सहेजी गईं और bookingConflictDates में कि किन तारीखों पर टकराव हुआ।अपने org में स्टार्टर फ़्लो इस्तेमाल करें
स्टार्टर फ़्लो MultiDatePick के साथ आने वाले Schedule और Event ऑब्जेक्ट में सहेजते हैं, इसलिए ये जैसे हैं वैसे ही डिप्लॉय होते हैं और इंस्टॉल के तुरंत बाद चलते हैं। इन्हें चलता देख लेने के बाद अपने ऑब्जेक्ट लगा दें।
- ऊपर से फ़्लो का XML कॉपी या डाउनलोड करें।
- VS Code से डिप्लॉय करें। VS Code से Flow डिप्लॉय करें में हर कदम समझाया गया है।
- इसे Flow Builder में खोलें और पहली स्क्रीन पर कैलेंडर पर क्लिक करें। अपनी सेटिंग्स देने के लिए Setup Wizard में सहेजे गए, या Config Library से इम्पोर्ट किए गए कॉन्फ़िगरेशन का Config Name टाइप करें।
- अगर आप Schedule और Event इस्तेमाल नहीं कर रहे, तो इसे अपने ऑब्जेक्ट से जोड़ें: record variable का ऑब्जेक्ट और assignment के फ़ील्ड बदलें।
- इसे Activate करें और Flow कंपोनेंट से या action के रूप में रिकॉर्ड पेज पर जोड़ें। यह रिकॉर्ड का Id अपने
recordIdvariable से पढ़ता है।
गलतियाँ जो पूरी दोपहर खा जाती हैं
- loop के भीतर सहेजना। तीन तारीखों वाले टेस्ट में ठीक, प्रोडक्शन में चालीस पर लिमिट एरर।
- रिकॉर्ड को collection में जोड़ना भूल जाना। assignment के दो हिस्से होते हैं: फ़ील्ड सेट करें, फिर record variable को collection में Add करें। दूसरे हिस्से के बिना आख़िर में सहेजने के लिए कुछ नहीं होता।
- Date फ़ील्ड में टेक्स्ट असाइन करना।
selectedDatesसूची टेक्स्ट है। हर आइटम को पहलेDATEVALUE()में लपेटें। - Output As JSON बंद छोड़ देना। JSON आउटपुट तभी भरते हैं जब कैलेंडर की Output As JSON सेटिंग चालू हो। स्टार्टर फ़्लो इसे चालू कर देते हैं।
- गलत जगह से लॉन्च करना। फ़्लो हर रिकॉर्ड को
recordIdसे जोड़ता है। इसे उसी जॉब, इवेंट या व्यक्ति से चलाएँ जिसके रिकॉर्ड हैं, वरना लिंक खाली रह जाता है।
लोग अक्सर पूछते हैं
एक Salesforce Screen Flow से कई रिकॉर्ड कैसे बनाएँ?
एक स्क्रीन पर सारे विकल्प लें, उन पर loop चलाएँ, और loop के भीतर एक Assignment से record variable भरें और उसे record collection में जोड़ें। loop के बाद एक Create Records एलिमेंट पूरा collection सहेज देता है।
क्या Create Records को Flow loop के भीतर रखना चाहिए?
नहीं। loop के भीतर रखा Create Records हर आइटम पर एक बार सहेजता है, और एक transaction में ऐसे सिर्फ़ 150 सेव की अनुमति है, इसलिए लंबी सूची फ़ेल हो जाती है और हर सूची धीमी चलती है। loop में record collection बनाएँ और loop खत्म होने के बाद उसे एक बार सहेजें।
Salesforce Flow में JSON पर loop कैसे चलाएँ?
Flow खुद JSON नहीं पढ़ सकता। पहले उसे collection में बदलें: MultiDatePick में एक action है, Parse Date Entries from JSON, जो कैलेंडर के JSON आउटपुट को fromDate, toDate, startTime और endTime वाली एंट्री की सूची में बदल देता है, जिस पर Loop एलिमेंट चल सकता है।
Salesforce में किसी जॉब में कई शिफ़्ट कैसे जोड़ें?
जॉब रिकॉर्ड से लॉन्च होने वाले Screen Flow पर तारीख और समय पिकर रखें, रिक्रूटर को शिफ़्ट के दिन और घंटे चुनने दें, चुनी गई चीज़ों को सूची में पार्स करें, और उस पर loop चलाकर हर दिन का एक शिफ़्ट रिकॉर्ड बनाएँ, जो जॉब से जुड़ा हो। loop के बाद एक ही Create Records में सब सहेज दें।
क्या चुनी गई तारीखों पर loop चलाने के लिए Apex चाहिए?
नहीं। पार्स करने वाला action MultiDatePick के साथ आता है, और loop, assignment और सेव स्टैंडर्ड Flow एलिमेंट हैं। पूरे दिनों के लिए तो action की भी ज़रूरत नहीं: कैलेंडर चुने गए दिनों की एक सादी सूची भी आउटपुट करता है।
एक स्क्रीन, और उससे बनने वाला हर रिकॉर्ड।
ऊपर से कोई स्टार्टर फ़्लो कॉपी करें, या पहले लाइव डेमो में कैलेंडर आज़माएँ।
- $20/यूज़र/माह, हर फ़ीचर
- 30 दिन का फ़्री ट्रायल, कार्ड नहीं
- 100% नेटिव Salesforce
- कोई Apex नहीं
- जल्द ही Salesforce AppExchange पर