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 बटन छिपा देता है।
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 उस रिकॉर्ड का कैलेंडर दिखाती है।
$User) तय करना लागू नहीं होता। या तो Static Parent Record Id से एक रिकॉर्ड साझा करें, या Flow के ज़रिए URL parameter से चलाएँ। हर यूज़र का अपना कैलेंडर केवल लॉग-इन यूज़र के लिए संभव है।एक मिनट में सेटअप
Save बटन किससे दिखता है
चारों चाहिए, वरना Save छिपा रहता है:
| # | प्रॉपर्टी (builder लेबल) | रिकॉर्ड पेज | ऐप / होम / Experience |
|---|---|---|---|
| 1 | Parent रिकॉर्ड | अपने आप (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 Page | Lightning App Builder, New, App Page | Activate करें और एक या ज़्यादा ऐप में जोड़ें (यह एक टैब बन जाता है) | MultiDatePick - User अनुमति सेट |
| Home Page | Lightning App Builder, New, Home Page | org डिफ़ॉल्ट के रूप में activate करें, या App Manager, Pages में हर ऐप के लिए अलग | MultiDatePick - User अनुमति सेट |
| Experience Site | Experience 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 साइट है।
| # | चरण | क्या सेट करें |
|---|---|---|
| 1 | Object permissions | कंपोनेंट जिस भी ऑब्जेक्ट का इस्तेमाल करता है, उस पर साइट के guest यूज़र को Read दें, और अगर guest सबमिट करते हैं तो Create भी। Guest कभी Edit या Delete नहीं कर सकते। यह हर ऐप पर लागू Salesforce guest license का नियम है, इसलिए एडिट और कैंसल लॉगिन वाले पेजों पर रखें। |
| 2 | Field-level security | कैलेंडर जो भी फ़ील्ड दिखाता है उन पर Read। जो भी फ़ील्ड वह लिखता है उन पर Edit, जिसमें स्थिति, समय और relationship फ़ील्ड शामिल हैं। संसाधन के व्यावसायिक घंटे और बंदी वाले फ़ील्ड भी शामिल करें। |
| 3 | Guest साझाकरण नियम | guest यूज़र के लिए एक Read sharing rule, ताकि guest रिकॉर्ड देख सकें। rule लागू होने के लिए ऑब्जेक्ट का external org-wide default Private होना चाहिए। metadata के रूप में डिप्लॉय किए rule के लिए Sharing Settings में Recalculate पर एक क्लिक चाहिए। |
| 4 | Guest अनुमति सेट | साइट के guest यूज़र को MultiDatePick - Guest असाइन करें। इसमें वह Apex class access है जिससे कैलेंडर अपना डेटा लोड करता है, और MultiDatePick ऑब्जेक्ट पर वे read और create अधिकार जो guest के पास हो सकते हैं। |
| 5 | Publish और activate करें | Publish और activate अलग-अलग चरण हैं। Guest को केवल activate की गई साइट दिखती है। |
guest के लिए दो और org सेटिंग्स
| सेटिंग | क्यों |
|---|---|
| डिफ़ॉल्ट record owner | Guest रिकॉर्ड के 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 Page | Booking | लाइव "3/10" उपलब्धता के लिए Capacity Field |
| ग्राहकों के लिए सेल्फ़-सर्विस शेड्यूलिंग | Experience Site | Booking या Date Time | जब हर ग्राहक का अपना Case या Order parent हो, तब एक Flow |
| निजी उपलब्धता / छुट्टी | Home Page | Dates | Status Colors: एक नज़र में Pending बनाम Approved |
| इवेंट और बैच रजिस्ट्रेशन | Experience Site या App Page | Date Time | Max Dates Allowed (अधिकतम चयन) हर व्यक्ति के सेशन सीमित करता है |
| वॉलंटियर और शिफ़्ट साइन-अप | Experience Site | Booking | "बची जगहें" के लिए Capacity Field, Open बनाम Full के लिए Status Colors |
| प्रोजेक्ट माइलस्टोन | App Page | Dates या Date Time | Status 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 इशारा करता है। |
कुछ और? समस्या निवारण में हर सेटअप संदेश स्क्रीनशॉट और समाधान के साथ है।
कोई और समस्या है जो यहाँ नहीं है?
अपने सवाल यहाँ ईमेल करें। मदद करके ख़ुशी होगी।