2014-04-30 4 views
7

एक आवश्यकता के रूप में मैं "CrmSvcUtil" के साथ बनाए गए प्रारंभिक बाध्य संदर्भ का उपयोग नहीं कर सकता। समस्या यह है कि एक नई फोनकॉल गतिविधि दो क्षेत्रों ('से' और 'से') की अपेक्षा करती है जो प्रकार activityparty हैं। मानक एक्सआरएम/सीआरएम नेमस्पेस में उपयोगिता के साथ बनाए गए ActivityParty जैसी कक्षा नहीं है।प्रारंभिक बाध्य संस्थाओं के बिना सीआरएम में गतिविधिपार्टी बनाएं

मैंने इसे एंटिटी कोलेक्शन के साथ भरने की कोशिश की लेकिन फिर क्षेत्र खाली हो जाएगा। इसके बाद मैंने एक कामकाजी फोनकॉल गतिविधि की संरचना को फिर से बनाने की कोशिश की। EntityCollection "activityparty" -> एक Entity "activityparty" के साथ ->EntityReference विशेषता के साथ "partyid" -> इकाई रेफरी (जैसे, "संपर्क" और उस संपर्क के आईडी)। लेकिन यह बस काम नहीं करता है।

मैं "सामान्य" Entitiy कक्षाओं के साथ एक गतिविधिपार्टी (या बेहतर फोनकॉल गतिविधि) कैसे बना सकता हूं?

उत्तर

16

अगर मैं सही हूँ तुम हो जाएगा एक EntityCollection लेकिन Entity

की एक सरणी का उपयोग करने के देर से बाध्य वाक्य रचना के साथ एक फोन कॉल बनाने के लिए की जरूरत नहीं है: भले ही मैं upvoted

Entity from1 = new Entity("activityparty"); 
Entity to1 = new Entity("activityparty"); 
Entity to2 = new Entity("activityparty"); // two contacts inside the to field 

from1["partyid"]= new EntityReference("systemuser", userId); 
to1["partyid"]= new EntityReference("contact", contact1Id); 
to2["partyid"]= new EntityReference("contact", contact2Id); 

Entity phonecall = new Entity("phonecall"); 

phonecall["from"] = new Entity[] { from1 }; 
phonecall["to"] = new Entity[] { to1, to2 }; 
// other phonecall fields 

Guid phonecallId = service.Create(phonecall); 
+0

यह ठीक काम करता है, धन्यवाद – Kirschi

1

जवाब लेकिन मुझे गतिविधिपार्टी के क्रमिकरण के साथ एक समान समस्या थी। मैं समाधान के लिए आया था कि आपको प्रारंभिक बाध्य संस्थाओं को छोड़ने की आवश्यकता नहीं है।

IEnumerable<ActivityParty> party = new [] { new ActivityParty { PartyId="", EntityLogicalName="..." } }; 
phonecall["to"] = new EntityCollection(party.Select(x => x.ToEntity<Entity>).ToList()); 

(मैं कोड का परीक्षण नहीं किया था और हवा से लिखा था, लेकिन आप विचार महसूस करना चाहिए)

+0

अपवॉट के लिए धन्यवाद :) आपके कोड में आपके पास जल्दी और देर से बाध्य है। मिश्रित दोनों शैलियों का एक पूर्ण उदाहरण के लिए आप मेरे ब्लॉग की जांच कर सकते हैं: http://www.crmanswers.net/2014/08/dynamics-crm-special-data-types.html –

+0

हां मैंने किया, क्योंकि फोनकॉल।एक प्रकार की है Inumerable जो क्रमबद्धता के साथ समस्या का कारण बनती है (मुझे कुछ त्रुटि थी: आंतरिक अपवाद: सिस्टम। रनटाइम। क्रमबद्धता। क्रमबद्धता: डेटा अनुबंध नाम के साथ 'MyNamespace.ActivityParty' टाइप करें 'ActivityParty: http: // schemas .datacontract.org/2004/07/MyNameSpace 'की उम्मीद नहीं है) और इससे मुझे सिरदर्द हुआ। मजेदार बात यह है कि यह मेरी देव मशीन पर काम करता है जहां मेरे पास .NET 4.5 है और त्रुटि केवल परीक्षण सर्वर पर होती है जहां उनके पास अभी भी .NET 4.0 है)। जिस तरह से मैंने यह समस्या तय की। लेकिन मुझे पता है कि यह थोड़ा बदसूरत लग रहा है। – TrN

+1

फोनकॉल। गतिविधि गतिविधि (या यदि आप चाहें तो इकाई की सरणी) की एक सरणी है –

-1

यहाँ कूट चल रहा है:

आप क्या करने की जरूरत कुछ इस तरह है समान हेतु। अगर किसी को किसी भी मुद्दे का सामना करना पड़ता है तो पहुंचने के लिए स्वतंत्र महसूस करें।

private static void fetchRelatedPhoneCalls(IPluginExecutionContext context, IOrganizationService service, Guid yourGuid, Entity opp) 
{ 
    string strFetchPhoneCalls = string.Format(FetchQuery.bringFetchQueryForPhoneCalls(),yourGuid); 
    EntityCollection entPhoneCalls = (EntityCollection)service.RetrieveMultiple(new FetchExpression(strFetchPhoneCalls)); 

    if (entPhoneCalls != null && entPhoneCalls.Entities.Count > 0) 
    { 
     for (int i = 0; i < entPhoneCalls.Entities.Count; i++) 
     { 
      Entity entPhoneCall = (Entity)entPhoneCalls.Entities[i]; 

      string[] strAttributesPCtoRemove = new string[] { "createdon", "createdbyname", "createdby" 
          ,"modifiedon", "modifiedby" ,"regardingobjectid","owninguser" 
          ,"activityid", "instancetypecode", "activitytypecode" // PhoneCall Skip 
      }; 

      Entity entNewPhoneCall = this.CloneRecordForEntity("phonecall", entPhoneCall, strAttributesPCtoRemove); 
      entNewPhoneCall["regardingobjectid"] = new EntityReference(context.PrimaryEntityName, context.PrimaryEntityId); 
      entNewPhoneCall["to"] = this.getActivityObject(entNewPhoneCall, "to"); 
      entNewPhoneCall["from"] = this.getActivityObject(entNewPhoneCall, "from"); 

      service.Create(entNewPhoneCall); 
     } 
    } 
} 

private static Entity CloneRecordForEntity(string targetEntityName, Entity sourceEntity, string[] strAttributestoRemove) 
{ 
    Entity clonedEntity = new Entity(targetEntityName); 
    AttributeCollection attributeKeys = sourceEntity.Attributes; 
    foreach (string key in attributeKeys.Keys) 
    { 
     if (Array.IndexOf(strAttributestoRemove, key) == -1) 
     { 
      if (!clonedEntity.Contains(key)) 
      { 
       clonedEntity[key] = sourceEntity[key]; 
      } 
     } 
    } 
    return clonedEntity; 
} 

private static EntityCollection getActivityObject(Entity entNewActivity, string activityFieldName) 
{ 
    Entity partyToFrom = new Entity("activityparty"); 
    partyToFrom["partyid"] = ((EntityReference)((EntityCollection)entNewActivity[activityFieldName]).Entities[0].Attributes["partyid"]); 

    EntityCollection toFrom = new EntityCollection(); 
    toFrom.Entities.Add(partyToFrom); 

    return toFrom; 
} 
0

मैं TRN के लिए वोट क्योंकि मैं उदाहरण के किसी भी प्रकार के लिए देख रहा था, और यह केवल जल्दी बाध्य उदाहरण है कि मैं मिल सकता है।

उनके उदाहरण ने वास्तव में मुझे फोनकॉल इकाई बनाने में मदद की, जिसमें वास्तव में कॉल करने वाले लीड को इंगित करने से "से" विशेषता थी। मैंने IEnumerable<ActivityParty> गणक को पूरी तरह से समझ नहीं लिया। टीआरएन के लिए धन्यवाद मैं इसे उपयोग करने के लिए पर्याप्त समझता हूं।

यहां फोनकॉल गतिविधि के बारे में मेरा कोड है जो मैंने परीक्षण किया है और यह काम करता है। हर बार एक मौजूदा लीड कॉल। फोनकॉल गतिविधि सही लीड से जुड़े सही गुण मानों से सहेजी जाती है।

IEnumerable<ActivityParty> party = new[] { new ActivityParty { LogicalName = ActivityParty.EntityLogicalName , PartyId = eref2 } }; 


        Console.WriteLine("Logging activity to {0}", firstName); 
        Console.WriteLine("... \n"); 
        PhoneCall newCall = new PhoneCall { Description = "Missed phone call from this lead", DirectionCode = true, RegardingObjectId = eref2, 
         Subject = "Missed Call", PhoneNumber = MissedCall, OwnerId = User, From = party }; 



        Guid newCallId = service.Create(newCall); 

       Console.WriteLine("Log successfully created \n \n "); 

जैसा कि मैंने कहा, किर्सी के लिए यह कोई वास्तविक संदर्भ नहीं है, जिसके संदर्भ में कोई संदर्भ नहीं है। लेकिन कोई भी जो उपलब्ध संदर्भ का उपयोग/उपयोग कर सकता है और उत्सुक है कि IEnumerable<ActivityParty> कैसे काम करता है, इससे उन्हें उचित फोनकॉल गतिविधि बनाने में मदद मिल सकती है।

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