सीआरएम 2011 एसडीके (v5.0.10) का उपयोग करके मैं एक मुट्ठी भर लुकअप फ़ील्ड के साथ एक समस्या में भाग रहा हूं जहां लक्ष्य आबादी नहीं है और उम्मीद है कि कोई मुझे इन मामलों में संदर्भित इकाई निर्धारित करने का सबसे अच्छा तरीका निर्धारित करने में मदद कर सकता है ।डायनेमिक्स 2011 एसडीके में, LookupAttributeMetadata.Targets खाली होने पर लक्ष्य इकाई को कैसे निर्धारित करें?
विशेष रूप से, मैं इस कॉल के साथ इकाई, विशेषता और रिश्ता मेटाडाटा को पुन: प्राप्त कर रहा हूँ:
var entityRequest = new RetrieveAllEntitiesRequest
{
RetrieveAsIfPublished = true,
EntityFilters = EntityFilters.Entity | EntityFilters.Attributes | EntityFilters.Relationships
};
var entityResponse = (RetrieveAllEntitiesResponse)_organizationService.Execute(entityRequest);
return entityResponse.EntityMetadata.ToList();
बाद में, जब एक EntityMetadata वस्तु के साथ काम है कि कॉल से लौटे, मैं गुण संग्रह और LookupAttributeMetadata वस्तुओं के लिए निरीक्षण किया , मैं LookupAttributeMetadata ऑब्जेक्ट की लक्ष्य संपत्ति का उपयोग करके लुकअप द्वारा संदर्भित इकाई को निर्धारित करने का प्रयास करता हूं।
हालांकि, कुछ ऐसे मामले हैं जहां एक LookupAttributeMetadata ऑब्जेक्ट में एक खाली लक्ष्य संग्रह है। उदाहरण के लिए, अभियान गतिविधि (तार्किक नाम: अभियान सक्रियता) इकाई में सेवा क्षेत्र (लॉजिकल नाम: सर्विस्ड) एक लुकअप फ़ील्ड के रूप में परिभाषित किया गया है, लेकिन LookupAttributeMetadata ऑब्जेक्ट पर लक्ष्य गुण खाली है।
जब मैं प्रकार धारा के तहत इकाई के लिए वेब UI अनुकूलन स्क्रीन को देखो और सेवा क्षेत्र खोलते हैं, तो पता चलता है प्रकार है: लुक, लक्ष्य रिकॉर्ड प्रकार: खाता, रिश्ता नाम: campaignactivity_account।
यह जानकारी कहां से आता है?
यह भी ध्यान दें: अभियान गतिविधि या खाता इकाइयों पर "campaignactivity_account" नामक कोई रिश्ते नहीं हैं।
अद्यतन: मैं डायनेमिक्स सीआरएम 2011 रोलअप 8 का स्टॉक इंस्टॉल चला रहा हूं (हालांकि मैंने इसे रोलअप 7 पर भी देखा)। जबकि अभियान गतिविधि वह क्षेत्र है जिसका मैंने अपने उदाहरण में उपयोग किया था, नीचे सूचीबद्ध इस मुद्दे के साथ 14 कुल हैं। मैं अपने कोड में if (entityName=="rollupfield" && fieldName=="organizationid")...
तर्क का एक गुच्छा रखने के लिए एक सामान्य समाधान (प्रत्येक के लिए एक-एक बंद समाधान बना रहा हूं), क्योंकि जिन संस्थाओं और क्षेत्रों के साथ मैं काम कर रहा हूं उन्हें उपयोगकर्ता द्वारा रनटाइम पर चुना जाता है और मैं नहीं करता जरूरी समय से पहले मुझे पता नहीं चलेगा कि मुझे क्या सौंपा जाएगा।
- निकाय: रोलअप फील्ड (rollupfield) फील्ड: संगठन आईडी (organizationid)
- निकाय: रोलअप क्वेरी (goalrollupquery) फील्ड: मालिक उपयोगकर्ता (owninguser)
- इकाई: प्रक्रिया के लिए लॉग (workflowlog) क्षेत्र: के बारे में (regardingobjectid)
- निकाय: सहेजी गयी देखें (userquery) फील्ड: अभिभावक क्वेरी (parentqueryid)
- इकाई: अभियान गतिविधि (campaignactivity) फील्ड: सेवा (serviceid)
- इकाई: ई-मेल खोज (emailsearch) एफ ield: जनक (parentobjectid)
- निकाय: समय क्षेत्र परिभाषा (timezonedefinition) फील्ड: संगठन (organizationid)
- इकाई: अभियान रिस्पांस (campaignresponse) फील्ड: सेवा (serviceid)
- इकाई: त्वरित अभियान (bulkoperation) फील्ड : सेवा (serviceid)
- निकाय: फील्ड अनुमति (fieldpermission) फील्ड: संगठन आईडी (organizationid)
- निकाय: समय क्षेत्र स्थानीयकृत नाम (timezonelocalizedname) फील्ड: संगठन (organizationid)
- निकाय: समय क्षेत्र नियम (timezonerule) क्षेत्र: संगठन (अंग izationid)
- निकाय: लेखा परीक्षा (ऑडिट) फील्ड: रिकॉर्ड (ObjectId)
- निकाय: पोस्ट (पोस्ट) फील्ड: RegardingObjectId (regardingobjectid)
अद्यतन: निम्नलिखित कंसोल अनुप्रयोग इस्तेमाल किया जा सकता पुन: पेश करने समस्या।
//Requires the following Referenses:
// Microsoft.CSharp
// Microsoft.IdentityModel
// Microsoft.xrm.sdk
// System
// System.Core
// System.Data
// System.Runtime.Serialization
// System.ServiceModel
using System;
using System.Linq;
using System.Net;
using Microsoft.Xrm.Sdk;
using Microsoft.Xrm.Sdk.Client;
using Microsoft.Xrm.Sdk.Messages;
using Microsoft.Xrm.Sdk.Metadata;
namespace TargetlessLookupsPOC
{
internal static class Program
{
private const string OrganizationServiceURL =
"http://dynamicscrm1/DynamicsCRM1/XRMServices/2011/Organization.svc";
private static void Main(string[] args)
{
Console.WriteLine("====== Authenticating ");
var organizationServiceMngt =
ServiceConfigurationFactory.CreateManagement<IOrganizationService>(new Uri(OrganizationServiceURL));
var authCred = new AuthenticationCredentials();
authCred.ClientCredentials.Windows.ClientCredential = new NetworkCredential();
IOrganizationService orgProxy = new OrganizationServiceProxy(organizationServiceMngt,
authCred.ClientCredentials);
Console.WriteLine("====== Fetching All Entity Metadata ");
var entityRequest = new RetrieveAllEntitiesRequest
{
RetrieveAsIfPublished = true,
EntityFilters = EntityFilters.Entity | EntityFilters.Attributes | EntityFilters.Relationships
};
var entityResponse = (RetrieveAllEntitiesResponse) orgProxy.Execute(entityRequest);
Console.WriteLine("====== Searching For Targetless Lookups ");
foreach (var ent in entityResponse.EntityMetadata)
{
foreach (var field in ent.Attributes
.OfType<LookupAttributeMetadata>()
.Where(lookup => !lookup.Targets.Any()))
{
Console.WriteLine("Entity: {0} ({1}), Field: {2} ({3}) (type: {4}) is targetless",
ent.DisplayName.LabelText(), ent.LogicalName,
field.DisplayName.LabelText(), field.LogicalName,
field.AttributeType);
}
}
Console.WriteLine("=========================== Done");
Console.WriteLine("** Press any key to continue **");
Console.ReadKey();
}
public static string LabelText(this Label label)
{
return (label != null && label.UserLocalizedLabel != null)
? label.UserLocalizedLabel.Label
: "<no label>";
}
}
}
अच्छा सवाल जॉन। आपके लिए कोई जवाब नहीं है (अभी तक?) लेकिन मुझे लगता है कि मेरे एमएससीआरएम 2011 परिनियोजन में, campaignactivity.serviceid 'नियुक्ति' के लिए एक लुकअप है और 'campaignactivity_appointment' का रिश्ते का नाम है (जो ** ** मौजूद नहीं है)।संपादित किया गया: मैंने अपने सिस्टम 'अभियान एक्टिविटी_एपॉइंटमेंट्स' में मौजूद चीज़ों को गलत तरीके से पढ़ा है, लेकिन यह बिल्कुल भी नहीं है) –
यह भी ध्यान दें: मैं एक्सेस मोड = रीड-राइट, लाइसेंस टाइप = पूर्ण और एक सदस्य के साथ खाते का उपयोग कर सर्वर से कनेक्ट कर रहा हूं सिस्टम प्रशासक भूमिका के। –