2011-05-31 13 views
7

मैं शुरुआती बाध्य प्रकार उत्पन्न करने के लिए crmsvcutil का उपयोग कर रहा हूं। सीआरएम 4.0 दिनों में केवल इकाई को मारकर संबंधित इकाइयों को लोड करने में सक्षम था। चाइल्डइन्टिटीज संपत्ति।सीआरएम2011 - एसडीके 5.0.3 - लिंक से सीआरएम इकाइयों की समस्या

//Winvs.Next.Entities.CrmDataContext dc = new Entities.CrmDataContext(new Microsoft.Xrm.Sdk.Client.OrganizationServiceContext(
    var cred = new System.ServiceModel.Description.ClientCredentials(); 
    cred.Windows.ClientCredential = System.Net.CredentialCache.DefaultNetworkCredentials; 
    //  
    using (var organizationServiceProxy = new Microsoft.Xrm.Sdk.Client.OrganizationServiceProxy(new Uri(System.Configuration.ConfigurationManager.ConnectionStrings["CrmConnection"].ConnectionString), null, cred, null)) 
    using (Winvs.Next.Entities.CrmDataContext dc = new Entities.CrmDataContext(organizationServiceProxy)) 
    { 
    // This statement is required to enable early-bound type support. 
    organizationServiceProxy.ServiceConfiguration.CurrentServiceEndpoint.Behaviors.Add(new Microsoft.Xrm.Sdk.Client.ProxyTypesBehavior()); 
    // 
    foreach (var a in dc.AccountSet) 
    { 
     foreach (var c in a.contact_customer_accounts) 
     { 
     c.FullName.ToString(); 
     } 
    }  
    } 

जब मैं नवीनतम CRM 2011 SDK संस्करण के बजाय लोड हो रहा है realted संस्थाओं मैं एक NullReferenceException जो मुझे इस मुद्दे के बारे में आगे कोई जानकारी देता हो रही है के साथ ऐसा कर।

foreach (var c in a.contact_customer_accounts) 

मुझे क्या याद आती है? मैं सीआरएम2011 लिंक के साथ संबंधित इकाइयों को कैसे लोड कर सकता हूं?

उत्तर

2

मुझे वास्तव में कोई संकेत नहीं है कि यह ऐसा क्यों है, लेकिन यह कुछ शोध सत्रों के बाद निकला कि किसी को इकाई ऑब्जेक्ट मॉडल कक्षाएं उत्पन्न करने के लिए xrm प्रदत्त कोड अनुकूलन असेंबली का उपयोग करना है।

एक एसडीके संस्करण 5.0.4 नमूना प्रदान किया गया है जो एक नमूना कंसोल बनाता है जो इकाई कक्षाओं को उत्पन्न करने और उपभोग करने के तरीके को दिखाता है, जिस तरह से हम सभी सीआरएम 4.0 xrm दिनों से उपयोग किए जाते हैं। एक कंसोल अनुप्रयोग है कि माइक्रोसॉफ्ट डायनेमिक्स सीआरएम 2011 तक जोड़ता है डेवलपर एक्सटेंशन http://technet.microsoft.com/en-us/library/gg695803.aspx

CrmSvcUtil.exe /codeCustomization:"Microsoft.Xrm.Client.CodeGeneration.CodeCustomization, Microsoft.Xrm.Client.CodeGeneration" /out:Xrm\Xrm.cs /url:http://Crm/Contoso/XRMServices/2011/Organization.svc /domain:CONTOSO /username:administrator /password:[email protected] /namespace:Xrm /serviceContextName:XrmServiceContext 
का उपयोग बिल्ड:

एक लम्बी कहानी कम मैं यहाँ पोस्ट crmsvcutil कॉल, अधिक जानकारी के लिए आप एसडीके नमूना पूर्वाभ्यास से परामर्श करना चाहिए बनाने के लिए

10

मुझे आपके जैसा ही समस्या थी। मैंने उन गुणों को देखा और परेशान था कि वे हमेशा null क्यों लौट आए। वे स्पष्ट रूप से थे एक विशेष रिश्ते के लिए संस्थाओं को पुनः प्राप्त करने के लिए, फिर भी वे "निष्क्रिय" लगते थे।

यह मेरे लिए हुआ कि शायद संदर्भ वस्तु को इन "नेविगेशन" गुणों को आलसी लोड करने के लिए ठीक से कॉन्फ़िगर नहीं किया गया था (इकाई फ्रेमवर्क से एक शब्द उधार लेने के लिए)। इसलिए मैं शोध के बारे में OrganizationServiceContext मैं क्या कर सकता है शुरू कर दिया है, और अपने LoadProperty विधि के बारे में इस बिट पाया: संपत्ति एक संघ, लिंक या आस्थगित संपत्ति का प्रतिनिधित्व करता है

हैं, तो इस विधि बुला ग्राहक एक तरह से lazily संबंधित संसाधन लोड करने के लिए प्रदान करता है ।

यही तो मैं जरूरत तरह लग रहा था, और भार के में से एक एक Entity और एक Relationship इनपुट के रूप में लेता है। इसलिए, एक बार जब आपके पास एक या अधिक रिश्ते वाले किसी इकाई का उदाहरण हो, तो आपको संबंधित गुणों को लोड करने के लिए संदर्भ से पूछना होगा। ध्यान रखें, इकाई को संदर्भ से जोड़ा जाना चाहिए, या तो स्वचालित रूप से (क्योंकि आपने context query के माध्यम से इकाई को पुनर्प्राप्त किया है), या मैन्युअल रूप से Attach विधि का उपयोग कर।

मैं आपके कोड से थोड़ा उलझन में हूं क्योंकि आप OrganizationServiceContext ऑब्जेक्ट की बजाय CrmDataContext ऑब्जेक्ट का उपयोग कर रहे हैं। 2011 एसडीके में कोड नमूने बाद वाले का उपयोग करते हैं, और crmsvcutil "[ENTITY_NAME] सेट" (यानी AccountSet "के रूप में विधियों के साथ OrganizationServiceContext का एक कस्टम उदाहरण भी उत्पन्न करेगा)। आपको नए संदर्भ प्रकार पर स्विच करने की आवश्यकता हो सकती है।

तो, अपने उदाहरण का उपयोग करते हुए और dc संभालने अब OrganizationServiceContext का एक उदाहरण है, यह विचार करेंगे की तरह:

Relationship contactRel = new Relationship("contact_customer_accounts"); 
foreach (var a in dc.AccountSet) { 

    dc.LoadProperty(a, contactRel); // Tell context to load entities from this relationship 

    foreach (var c in a.contact_customer_accounts) { 
     c.FullName.ToString(); 
    } 

} 

यह मैन्युअल रूप से प्रत्येक संबंध लोड करने के लिए एक दर्द है, लेकिन मैं कोई दूसरा रास्ता नहीं मिल सकता है उन गुणों को सक्रिय करने के लिए।


नोट:

crmsvcutil.exe /url:<your_crm_url> /out:Xrm.cs /serviceContextName:XrmServiceContext 

यह अलग इकाई के सभी के लिए accessors साथ XrmServiceContext नाम के एक व्युत्पन्न वर्ग बनाना होगा: एक कस्टम OrganizationServiceContext उत्पन्न करने के लिए crmsvcutil पाने के लिए, serviceContextName स्विच निर्दिष्ट आपके संगठन में प्रकार।

+0

आपके उत्तर के लिए धन्यवाद। मुझे लगता है कि मुझे नवीनतम एसडीके 5.0.4 संस्करण का उपयोग करके हमारी समस्या का उत्तर मिला है जो xrm इकाई वर्ग विषय के बारे में अधिक सहायता और एक कामकाजी नमूना लाता है। ऐसा लगता है कि पहली एसडीके रिलीज तैयार नहीं थीं और एक्सआरएम संबंधित चीजों जैसे इकाई वर्गों के लिए तैयार थीं। –