जल्द ही Salesforce AppExchange पर

App Page, Home Page और Experience Site

MultiDatePick केवल रिकॉर्ड पेज पर नहीं, हर Lightning पेज पर काम करता है। तरकीब एक प्रॉपर्टी है: Static Parent Record Id।

सेटअप देखें समस्या निवारण

ये पेज अलग क्यों हैं

MultiDatePick आपकी चुनी तारीखों को एक संबंधित ऑब्जेक्ट पर रिकॉर्ड के रूप में सहेजता है, और हर रिकॉर्ड एक parent रिकॉर्ड से जुड़ा होता है। कंपोनेंट को बस यह जानना होता है कि कौन-सा parent।

  • रिकॉर्ड पेज पर (जैसे किसी Event रिकॉर्ड पर) Salesforce अपने आप कंपोनेंट को मौजूदा रिकॉर्ड का Id (recordId) दे देता है। अलग से कुछ कॉन्फ़िगर नहीं करना।
  • App Page, Home Page या Experience Site पर कोई "मौजूदा रिकॉर्ड" नहीं होता। Salesforce कुछ नहीं भेजता। parent के बिना कंपोनेंट के पास सहेजने की कोई जगह नहीं, इसलिए वह क्लिक पर फ़ेल होने वाला बटन दिखाने के बजाय जान-बूझकर Save बटन छिपा देता है।
समाधान है Static Parent Record Id प्रॉपर्टी। इसमें किसी ख़ास parent रिकॉर्ड का Id पेस्ट करें, और कंपोनेंट ठीक वैसे ही काम करता है जैसे वह उसी रिकॉर्ड के पेज पर हो। यह builder में सेट की जाने वाली प्रॉपर्टी है। इसका Salesforce Static Resource से कोई लेना-देना नहीं, जो अपलोड की गई फ़ाइलों के लिए एक अलग फ़ीचर है।

Lightning App Builder में MultiDatePick को App Page या Home Page पर, या Experience Builder में किसी पेज पर ड्रैग करने के बाद, प्रॉपर्टी पैनल में Static Parent Record Id मिलेगा।

Static Parent Record Id या Flow: कब कौन-सा

Static Parent Record Id कंपोनेंट को एक तय parent से जोड़ता है, इसलिए हर विज़िटर एक ही रिकॉर्ड देखता है। कुछ मामलों में यह बिल्कुल सही है, कुछ में ग़लत। जब रिकॉर्ड हर यूज़र या हर विज़िट पर बदलना हो, तो उसे स्क्रीन फ़्लो (Screen Flow) से चलाएँ। कंपोनेंट को Flow स्क्रीन पर रखें और उसके Parent Record Id को ऐसे variable से जोड़ें जिसे Flow रनटाइम पर तय करता है।

जब रिकॉर्ड सबके लिए एक ही हो, तब Static Parent Record Id

  • public बुकिंग पेज: guest के लिए "अपॉइंटमेंट का अनुरोध करें" पेज, जहाँ हर बुकिंग एक ही parent रिकॉर्ड (एक ऑफ़िस, लोकेशन या संसाधन) से जुड़ती है। तय Id ठीक यही चाहिए।
  • पूरे org का एक कैलेंडर: एक अकेला "Company Closures" रिकॉर्ड, या एक साझा संसाधन जिसे सब बुक करते हैं, जो यूज़र के हिसाब से कभी नहीं बदलता।
  • App या Home पेज पर तय डैशबोर्ड, जो हमेशा एक ही मास्टर रिकॉर्ड की ओर इशारा करता है।

सीधा नियम: जब "यह किसका रिकॉर्ड है?" का जवाब "सबके लिए वही एक" हो, तब Static Parent Record Id चुनें।

जब रिकॉर्ड रनटाइम पर चुना जाए, तब Flow

  • हर यूज़र का अपना रिकॉर्ड: हर व्यक्ति केवल अपना देखता है (जैसे हर कॉन्ट्रैक्टर अपने ही PTO कैलेंडर पर पहुँचता है)। Flow एक Get Records करता है जहाँ owner या जुड़ा हुआ Contact = {!$User.Id}, Id सहेजता है, और उसे कंपोनेंट को देता है।
  • URL से तय: Flow का एक input variable लिंक से ?id=… पढ़ता है, इसलिए एक ही पेज कई रिकॉर्ड के काम आता है। यह guest के लिए भी काम करता है, बिना लॉगिन।
  • पहले चुनें: स्क्रीन 1 पर यूज़र खोजता या चुनता है (कोई कर्मचारी, रूम, क्लाइंट); स्क्रीन 2 उस रिकॉर्ड का कैलेंडर दिखाती है।
Guest साइट: बिना लॉगिन वाली public साइट पर "यूज़र" एक ही साझा guest होता है, इसलिए हर यूज़र के हिसाब से ($User) तय करना लागू नहीं होता। या तो Static Parent Record Id से एक रिकॉर्ड साझा करें, या Flow के ज़रिए URL parameter से चलाएँ। हर यूज़र का अपना कैलेंडर केवल लॉग-इन यूज़र के लिए संभव है।

एक मिनट में सेटअप

Config Name सेटअप का एनिमेटेड डेमो: MultiDatePick Setup Wizard में कॉन्फ़िगरेशन नाम कॉपी करना, Lightning App Builder में Resource Booking कंपोनेंट को एक पेज पर डालना, Config Name पेस्ट करना और Static Parent Record Id दर्ज करना, और कॉन्फ़िगरेशन की हर सेटिंग के साथ बुकिंग कैलेंडर दिख जाता है
Setup Wizard में कॉन्फ़िगरेशन का नाम कॉपी करें, उसे parent record Id के साथ पेस्ट करें, और कैलेंडर तैयार है। बाकी हर सेटिंग कॉन्फ़िगरेशन से आती है।

Save बटन किससे दिखता है

चारों चाहिए, वरना Save छिपा रहता है:

#प्रॉपर्टी (builder लेबल)रिकॉर्ड पेजऐप / होम / Experience
1Parent रिकॉर्डअपने आप (recordId)Static Parent Record Id
2चाइल्ड ऑब्जेक्ट API नाम (Child Object API Name)ज़रूरीज़रूरी
3दिनांक फ़ील्ड API नाम (Date Field API Name)ज़रूरीज़रूरी
4संबंध फ़ील्ड API नाम (Relationship Field API Name)ज़रूरीज़रूरी

Config Name में Setup Wizard का कॉन्फ़िगरेशन डालें, तो 2 से 4 अपने आप भर जाते हैं।

इसे कहाँ लगाएँ

पेजकहाँ बनाएँलाइव कैसे करेंपहुँच किसे चाहिए
App PageLightning App Builder, New, App PageActivate करें और एक या ज़्यादा ऐप में जोड़ें (यह एक टैब बन जाता है)MultiDatePick - User अनुमति सेट
Home PageLightning App Builder, New, Home Pageorg डिफ़ॉल्ट के रूप में activate करें, या App Manager, Pages में हर ऐप के लिए अलगMultiDatePick - User अनुमति सेट
Experience SiteExperience Builder, Custom Components के अंदरसाइट publish करेंMember profile (या guest यूज़र): ऑब्जेक्ट और फ़ील्ड पर read और create, साथ में एक sharing rule। public साइट: guest चेकलिस्ट

Home Page टिप: केवल देखने वाले "क्या शेड्यूल है" व्यू के लिए Existing Dates Mode को readonly पर सेट करें।

public guest साइट: पाँच चरणों की चेकलिस्ट

public Experience Cloud पेज पर कोई भी बिना लॉगिन बुक कर सकता है। guest के रूप में टेस्ट करने से पहले पाँचों करें। चरण 4 और 5 सबसे ज़्यादा छूटते हैं। इसे लाइव डेमो पर चलता देखें, जो एक public guest साइट है।

#चरणक्या सेट करें
1Object permissionsकंपोनेंट जिस भी ऑब्जेक्ट का इस्तेमाल करता है, उस पर साइट के guest यूज़र को Read दें, और अगर guest सबमिट करते हैं तो Create भी। Guest कभी Edit या Delete नहीं कर सकते। यह हर ऐप पर लागू Salesforce guest license का नियम है, इसलिए एडिट और कैंसल लॉगिन वाले पेजों पर रखें।
2Field-level securityकैलेंडर जो भी फ़ील्ड दिखाता है उन पर Read। जो भी फ़ील्ड वह लिखता है उन पर Edit, जिसमें स्थिति, समय और relationship फ़ील्ड शामिल हैं। संसाधन के व्यावसायिक घंटे और बंदी वाले फ़ील्ड भी शामिल करें।
3Guest साझाकरण नियमguest यूज़र के लिए एक Read sharing rule, ताकि guest रिकॉर्ड देख सकें। rule लागू होने के लिए ऑब्जेक्ट का external org-wide default Private होना चाहिए। metadata के रूप में डिप्लॉय किए rule के लिए Sharing Settings में Recalculate पर एक क्लिक चाहिए।
4Guest अनुमति सेटसाइट के guest यूज़र को MultiDatePick - Guest असाइन करें। इसमें वह Apex class access है जिससे कैलेंडर अपना डेटा लोड करता है, और MultiDatePick ऑब्जेक्ट पर वे read और create अधिकार जो guest के पास हो सकते हैं।
5Publish और activate करेंPublish और activate अलग-अलग चरण हैं। Guest को केवल activate की गई साइट दिखती है।

guest के लिए दो और org सेटिंग्स

सेटिंगक्यों
डिफ़ॉल्ट record ownerGuest रिकॉर्ड के owner नहीं हो सकते, इसलिए Salesforce हर guest बुकिंग को एक डिफ़ॉल्ट owner को असाइन करता है। इसे Experience Workspaces, Administration, Preferences में सेट करें।
जुड़े हुए रिकॉर्ड पर Read पहुँचजो बुकिंग किसी संसाधन या parent से जुड़ी है, उसके लिए guest को उस रिकॉर्ड पर Read चाहिए, वरना सेव cross-reference error के साथ फ़ेल होता है। guest जिस भी चीज़ पर बुक करें, उसके लिए custom ऑब्जेक्ट इस्तेमाल करें: Contacts और Accounts पर guest की पहुँच बहुत सीमित है।

public बुकिंग पेज की योजना बना रहे हैं? Salesforce Experience Cloud साइट पर सेल्फ़-सर्विस बुकिंग बताता है कि guest क्या कर सकते हैं और उन्हें कौन-सा व्यू दिखाएँ।

रिकॉर्ड पेज के बाहर के छह पैटर्न

पैटर्नपेजकंपोनेंटजोड़ें
आंतरिक बुकिंग हब ("Book a Room")App PageBookingलाइव "3/10" उपलब्धता के लिए Capacity Field
ग्राहकों के लिए सेल्फ़-सर्विस शेड्यूलिंगExperience SiteBooking या Date Timeजब हर ग्राहक का अपना Case या Order parent हो, तब एक Flow
निजी उपलब्धता / छुट्टीHome PageDatesStatus Colors: एक नज़र में Pending बनाम Approved
इवेंट और बैच रजिस्ट्रेशनExperience Site या App PageDate TimeMax Dates Allowed (अधिकतम चयन) हर व्यक्ति के सेशन सीमित करता है
वॉलंटियर और शिफ़्ट साइन-अपExperience SiteBooking"बची जगहें" के लिए Capacity Field, Open बनाम Full के लिए Status Colors
प्रोजेक्ट माइलस्टोनApp PageDates या Date TimeStatus Colors (Planned, In Progress, Done) और Two-Month View

समस्या निवारण

लक्षणसमाधान
Save कभी नहीं दिखताचारों में से एक खाली है। रिकॉर्ड पेज के बाहर आम तौर पर Static Parent Record Id।
कैलेंडर लोड होता है, पर सेव फ़ेल होता हैऑब्जेक्ट की पहुँच नहीं है। MultiDatePick - User permission set असाइन करें; साइट पर member या guest profile को read और create दें।
सेव पर "Field does not exist"API नाम में टाइपो। इसे Setup, Object Manager से कॉपी करें। namespace prefix केवल किसी दूसरे पैकेज के ऑब्जेक्ट के लिए होता है (जैसे acme__Visit_Date__c)।
साइट के member अपने रिकॉर्ड नहीं देख पातेchild ऑब्जेक्ट पर एक sharing rule जोड़ें (या org-wide defaults ढीले करें)।
सहेजी तारीखें refresh पर गायब हो जाती हैंLoad Existing Dates चालू रखें (यह डिफ़ॉल्ट रूप से चालू है)।
Static Parent Record Id "isn't valid"parent ऑब्जेक्ट का असली 15 या 18 अक्षर का Id इस्तेमाल करें, वही ऑब्जेक्ट जिसकी ओर Relationship Field इशारा करता है।

कुछ और? समस्या निवारण में हर सेटअप संदेश स्क्रीनशॉट और समाधान के साथ है।

कोई और समस्या है जो यहाँ नहीं है?

अपने सवाल यहाँ ईमेल करें। मदद करके ख़ुशी होगी।

Support@MultiDatePick.com पर ईमेल करें शुरुआत की गाइड पर वापस लाइव डेमो आज़माएँ