2011-12-13 12 views
6

के साथ एक कस्टमफोर्स पेज पर कस्टम बटन या लिंक मेरे पास कस्टम नियंत्रक का उपयोग कर विजुअलफोर्स पेज है जिसका उपयोग अवसर के तहत एकाधिक रिकॉर्ड संपादित करने के लिए किया जाता है।एक कस्टम कंट्रोलर

मैं इस दृश्य पृष्ठ पर अवसरों से एक कस्टम बटन या लिंक बनाना चाहता हूं।

/apex/ExamplePage?oppId={!Opportunity.Id} 

इस विकास खिलौने के डिब्बे में ठीक काम करता है, लेकिन जब यह एक प्रबंधित पैकेज के भाग के रूप में तैनात किया जाता है पृष्ठ संदर्भ के रूप में लिंक टूट जाता है नामस्थान उपसर्ग नहीं है:

वर्तमान में लिंक की तरह दिखता है ।

मुझे फोर्स डॉट कॉम बोर्ड बोर्ड पर Managed Package Redirecting Problem पोस्ट मिला, जिसका अर्थ यह है कि यूआरएल में विजुअलफोर्स पेज का संदर्भ देने के लिए $ पेज का उपयोग करना संभव होना चाहिए। जैसे

{!URLFOR($Page.MyExamplePage,'',[objectId = campaign.id])} 

लेकिन ऐसा सिर्फ मेरे सिंटेक्स त्रुटि देता है:

Error: Field $Page.MyExamplePage does not exist. Check spelling.

वहाँ पोस्ट करने के लिए एक और बात यह है कि एक शीर्ष वर्ग का उपयोग कर और जावास्क्रिप्ट निष्पादित करने का सुझाव यह आस-पास काम करने के लिए है। लेकिन मुझे ऐसा लगता है कि इसने नामस्थान मुद्दे को जावास्क्रिप्ट में अभी स्थानांतरित कर दिया है।

मैं एक प्रबंधित पैकेज के अंदर और बाहर दोनों काम करने के लिए विजुअलफोर्स पेज को सुरक्षित रूप से कैसे संदर्भित कर सकता हूं?

+1

मैंने पाया [कस्टम बटन: URL सामग्री प्रकार में $ पृष्ठ का खुलासा करें] (https://sites.secure.force.com/success/ideaView?id=08730000000aVIfAAM) IdeaExchange पर जो प्रचार करना अच्छा होगा। –

उत्तर

7

एपेक्स पेज रिफरेंस रिटर्न वैल्यू से ऐसा करने के लिए सर्वश्रेष्ठ। कुछ इस तरह काम करेगा:

public PageReference returnPage() 
{ 
    return Page.MyExamplePage; 
} 

फिर Visualforce से इस फोन:

<apex:commandButton value="Go To New Page" action="{!returnPage}"/> 

एपेक्स पृष्ठ कॉल आप के लिए अनुवाद को संभाल लेंगे।

[संपादित करें]

एक नंगे हड्डियों बनाएं Visualforce इस तरह पेज:

<apex:page standardController="Opportunity" extensions="TheController" action="{!returnPage}"/> 

एक नया TheController (या जो भी) वर्ग के लिए ऊपर returnPage() विधि जोड़ें। इसे एक कन्स्ट्रक्टर की भी आवश्यकता नहीं है। वर्ग इस तरह दिख सकता:

public TheController 
{ 
    public PageReference returnPage() 
    { 
     return Page.MyExamplePage; 
    } 
} 

फिर अवसर सेटिंग पृष्ठ से बटन और लिंक करने के लिए जाने के लिए और आपने अभी बनाया नया पृष्ठ का चयन एक नए कस्टम Visualforce बटन बनाएं।

ऐसा करना चाहिए।

+0

मुझे मानक अवसर विवरण पृष्ठ से विजुअलफोर्स पेज पर लिंक प्रदर्शित करने की आवश्यकता है। कस्टम विवरण पृष्ठ बटन के साथ उपयोगकर्ता पृष्ठ लेआउट संपादक का उपयोग करके इस बटन को स्थान देने के लिए स्वतंत्र है। क्या आपका सुझाव इस तरह काम करेगा? अगर मेरी समझ सही है तो मुझे वापसी पृष्ठ() विधि के लिए एक कस्टम नियंत्रक और अवसर विवरण पृष्ठ पर कमांड बटन डालने की आवश्यकता होगी। –

+0

एक कस्टम शीर्ष नियंत्रक की आवश्यकता होगी। जब तक यह मानक नियंत्रक = "मौका" और एक्सटेंशन = "नया कस्टम कंट्रोलर" शीर्ष पर संदर्भित करता है: पृष्ठ परिभाषा आप ठीक होंगे। मैं आपकी स्थिति को फिट करने के लिए अपना उत्तर संशोधित करूंगा। अवसर अवसर पृष्ठ से सीधे लॉन्च करते समय इसमें थोड़ी सी चाल शामिल होती है। – Adam

+0

धन्यवाद, यह काम करता है। यह थोड़ी उछाल पैदा करता है क्योंकि उपयोगकर्ता इंटरमीडिएट पेज से गुजरता है लेकिन यह पेजरफेरेंस इश्यू को संबोधित करता है। मैं एक रेजिस्ट्रेटर का उपयोग कर पेज रेफरेंस में अतिरिक्त पैरामीटर जोड़ने में सक्षम था जो ApexPages.StandardController को तर्क के रूप में लिया गया था। मेरी एकमात्र चिंता अब है कि मैंने प्रत्येक कस्टम बटन के लिए एक अतिरिक्त पृष्ठ और शीर्ष श्रेणी जोड़ा है। –

0

डेवलपर बोर्डों कि आप जुड़े हैं पर पोस्ट निम्नलिखित जावास्क्रिप्ट बटन के लिए इस्तेमाल किया जा रहा से पता चलता:

{!REQUIRESCRIPT("/soap/ajax/15.0/connection.js")} 
{!REQUIRESCRIPT("/soap/ajax/15.0/apex.js")} 
var pageUrl = sforce.apex.execute("mynamespace.PageUrl", "getPageUrl", {objectId:"{!Campaign.Id}"}); 
window.location.href = pageUrl; 

यानी वे जावास्क्रिप्ट का उपयोग कर रहे क्लास में उन्हें है में एक वेब सेवा विधि कॉल करने के पृष्ठ संदर्भ प्राप्त करने के लिए परिभाषित किया गया है। ऐसा करने से आप शीर्ष पर पृष्ठ का यूआरएल प्राप्त कर सकते हैं, जहां प्रबंधित पैकेज एक प्रभावशाली हिस्सा नहीं खेलेंगे।

यह कहा गया है कि पहला पैरामीटर पूरी तरह से योग्य श्रेणी का नाम है, इसलिए आप शायद किसी त्रुटि के लिए वापसी मूल्य की जांच कर सकते हैं (मुझे त्रुटि वापसी मान नहीं पता है, इसलिए मुझे लगता है कि यह null है):

// try the namespace first 
var pageUrl = sforce.apex.execute("mynamespace.myClass", "getPageUrl", {objectId:"{!Campaign.Id}"}); 
if (pageUrl == null) 
{ 
    pageUrl = sforce.apex.execute("myClass", "getPageUrl", {objectId:"{!Campaign.Id}"}); 
} 

window.location.href = pageUrl; 

जाहिर है आप क्या होता है जब sforce.apex.execute() विफल रहता है जांच करने की जरूरत है, और आप की संभावना कुछ और त्रुटि हैंडलिंग चाहता हूँ।

+0

धन्यवाद, यही वह है जो मैं सोच रहा था। प्रबंधित पैकेज नामस्थान के साथ समस्या जावास्क्रिप्ट में स्थानांतरित कर दी गई है और इसके बजाय वहां संभालने की आवश्यकता है। मुझे लगता है कि मैं इसे आज़मा दूंगा और देख सकता हूं कि यह कैसा चल रहा है। –

0

यह मेरे लिए हुआ कि आदर्श विकल्प से कम एक प्रत्येक मामले में दो कस्टम बटन बनाना होगा। एक प्रबंधित पैकेज नेमस्पेस और बिना किसी के।

पैकेज का निर्माण करते समय सही कस्टम बटन का चयन किया जा सकता था।

इस दृष्टिकोण के साथ एक मुद्दा दो कस्टम बटन बनाए रखने की आवश्यकता है।

+0

प्रबंधित बटन यूआरएल फॉर्मूला को कोड किया जाएगा? हम देख रहे हैं कि हमारे पैक किए गए पृष्ठों के लिए पूरा मेजबान एक बार स्थापित हो गया है। हम 'ourpackage.cs8.visual.force.com' जैसे कुछ देखते हैं! – Marc

+0

@Marc, मैं शीर्ष आधारित समाधान के साथ गया था इसलिए मुझे डोमेन या प्रबंधित पैकेज नामस्थान के बारे में सोचने की आवश्यकता नहीं थी। –

0

ऐसा लगता है कि उत्तर /apex/package__Page है जैसा कि here @zachelrath द्वारा प्रदान किया गया है। मैं उत्पादन कार्यों के साथ-साथ विकास में प्रबंधित पैकेजों में इस काम की पुष्टि कर सकता हूं।

संबंधित मुद्दे