2012-01-20 3 views
8

मैं ICodeWriterFilterService के एरिक पूल के कार्यान्वयन और CRMSvcUtil फ़ाइल में अवांछित इकाइयों को फ़िल्टर करने के लिए मॉडल के रूप में मैनी ग्वेल के GenerateOption फ़ंक्शन का उपयोग करता हूं। एरिक GenerateOptionSet विधि के लिए true लौटने विकल्प सेट के लिए enums उत्पन्न करने के लिए, कर की सिफारिश की गई जबकि इतने वैश्विक विकल्प सेट है कि (जैसा कि उस पोस्ट पर one of the comments में उल्लेख किया है) किसी विशेष इकाई द्वारा किया जाता है से कुछ डुप्लीकेट।मैं कैसे CRMSvcUtil.exe unduplicated, त्रुटि मुक्त जल्दी ही सीमित विकल्प सेट उत्पन्न कर सकते हैं?

इसे हल करने के लिए, मैं यह देखने के लिए जांचता हूं कि विकल्प सेट पहले ही जेनरेट किया गया है या नहीं, और यदि ऐसा है, तो मैं नीचे दिए गए अनुसार डिफ़ॉल्ट विकल्प (संभावित रूप से false अधिकांश मामलों के लिए) वापस कर देता हूं।

//list of generated option sets, instantiated in the constructor 
private List<string> GeneratedOptionSets; 

public bool GenerateOptionSet 
    (OptionSetMetadataBase optionSetMetadata, IServiceProvider services) 
{ 
    if (!GeneratedOptionSets.Contains(optionSetMetadata.Name)) 
    { 
     GeneratedOptionSets.Add(optionSetMetadata.Name); 
     return true; 
    } 

    return _defaultService.GenerateOptionSet(optionSetMetadata, services); 
} 

लेकिन जब मेरी सीआरएम परियोजनाओं में उत्पन्न फ़ाइल, संकलन त्रुटि को शामिल

Cannot convert type 'Microsoft.Xrm.Sdk.OptionSetValue' to 'int' 

हमेशा कि

तरह
this.SetAttributeValue 
    ("address1_shippingmethodcode", new Microsoft.Xrm.Sdk.OptionSetValue(((int)(value)))); 

लग रहा है कोड के प्रत्येक पंक्ति से फेंक दिया जाता है ।

समाधान के लिए, मैं एक अलग परियोजना का उपयोग जहाँ मैं value.Value साथ संस्थाओं मैं की जरूरत है, तर्क एरिक पता चलता है के साथ CRMSvcUtil चलाने को फिल्टर, की जगह कोड (int)(value) (जहां value एक OptionSetValue है) की परेशानी भाग के बाद फ़ाइल है उत्पन्न, और फिर फ़ाइल को दोबारा बचाओ, और सभी मुद्दों को दूर जाना।

मेरा प्रश्न यह है: क्या मुझे कुछ अलग करने की ज़रूरत है जो इस संकलन त्रुटि को डिफ़ॉल्ट CRMSvcUtil जेनरेट की गई फ़ाइल के साथ जेनरेट की गई फ़ाइल को बदलने के रूप में कुछ हैकिश किए बिना उत्पन्न करेगा?

+0

जेएफवाईआई। इसी तरह के सवाल से पूछा गया था [यहां] (http://stackoverflow.com/questions/8443981/crm-2011- उत्पन्न-code-using-icodewriterfilterservice-fails-to-build)। – paramosh

+0

@paramosh: हाँ, किसी कारण से अभी यह प्रश्न देख रहा है। मुझे लगता है कि मैं वैसे भी पोस्ट करूँगा क्योंकि मैं 'जेनरेटऑप्शनसेट' विधि को अनुकूलित करने से संबंधित किसी भी परिणाम का अस्पष्ट था, लेकिन उम्मीद है कि गुआराव का जवाब जवाब देगा। –

उत्तर

2

मैं दांव लगा रहा है कि Guarav के जवाब जाने के लिए वास्तविक तरीका है, लेकिन CRMSvcUtil आसपास के प्रलेखन के अभाव में, मैं अपने तरीके का उपयोग करने के लिए मजबूर कर रहा हूँ। के बाद फ़ाइल उत्पन्न होता है (मैं एक अलग परियोजना है, जहां मैं संस्थाओं मैं की जरूरत है, तर्क एरिक पता चलता है के साथ CRMSvcUtil चलाने को फिल्टर का उपयोग करें, value.Value साथ कोड (int)(value) (जहां value एक OptionSetValue है) की परेशानी भाग की जगह है, और फिर फ़ाइल सहेज ।)

एक सही समाधान नहीं है, लेकिन यह उन कुछ नमूनों पर काम कर रहा है जिनके साथ मैंने अभी तक काम किया है।

+0

चूंकि इसे समाधान के रूप में चिह्नित किया गया है, इसलिए यह इंगित करने योग्य है कि जेनरेट कोड लागू करने की कोशिश कर रहा है http://stackoverflow.com/a/21771992/1465593 –

4

आप विकल्प सेट्स के लिए SetAttributeValue विधि को फिर से लिखने के लिए ICustomizeCodeDomService इंटरफ़ेस का उपयोग कर सकते हैं। नीचे स्निपेट:

namespace The.NameSpace 
{ 
using System; 
using System.CodeDom; 
using System.Diagnostics; 
using System.Linq; 

using Microsoft.Crm.Services.Utility; 
using Microsoft.Xrm.Sdk.Metadata; 

/// <summary> 
/// The customize code dom service. 
/// </summary> 
public sealed class CustomizeCodeDomService : ICustomizeCodeDomService 
{ 
    #region Constants and Fields 

    /// <summary> 
    /// The metadata. 
    /// </summary> 
    private IOrganizationMetadata metadata; 

    #endregion 

    #region Properties 



    #endregion 

    #region Public Methods 

    /// <summary> 
    /// The customize code dom. 
    /// </summary> 
    /// <param name="codeCompileUnit"> 
    /// The code compile unit. 
    /// </param> 
    /// <param name="services"> 
    /// The services. 
    /// </param> 
    public void CustomizeCodeDom(CodeCompileUnit codeCompileUnit, IServiceProvider services) 
    { 
     // Locate the namespace to use 
     CodeNamespace codeNamespace = codeCompileUnit.Namespaces[0]; 

     var metadataProviderService = (IMetadataProviderService)services.GetService(typeof(IMetadataProviderService)); 
     var filterService = (ICodeWriterFilterService)services.GetService(typeof(ICodeWriterFilterService)); 

     this.metadata = metadataProviderService.LoadMetadata(); 

     foreach (EntityMetadata entityMetadata in this.metadata.Entities) 
     { 
      if (filterService.GenerateEntity(entityMetadata, services)) 
      { 
       CodeTypeDeclaration entityClass = 
        codeNamespace.Types.Cast<CodeTypeDeclaration>().First(codeType => codeType.Name.ToUpper() == entityMetadata.SchemaName.ToUpper()); 

       UpdateEnumSetter(entityClass, entityMetadata); 

      } 
     } 
    } 

    #endregion 

    #region Private Methods 
    private static void UpdateEnumSetter(
    CodeTypeDeclaration entityClass, EntityMetadata entity) 
    { 
     foreach (var attributeMetadata in entity.Attributes.Where(attributeMetadata => String.IsNullOrWhiteSpace(attributeMetadata.AttributeOf))) 
     { 
      //Match the respective field Name. 
      AttributeMetadata metadata1 = attributeMetadata; 
      foreach (
       CodeTypeMember codeMembers in 
        entityClass.Members.Cast<CodeTypeMember>().Where(
         codeMembers => codeMembers.Name == metadata1.SchemaName)) 
      { 
       var codeProperty = (CodeMemberProperty)codeMembers; 

       if (codeProperty.HasSet) 
       { 
        if (attributeMetadata.AttributeType != null && attributeMetadata.AttributeType.Value == AttributeTypeCode.Picklist) 
        { 
         ((CodeConditionStatement)codeProperty.SetStatements[1]).FalseStatements[0] = 
          new CodeSnippetStatement 
          { 
           Value = 
            String.Format(
             "this.SetAttributeValue(\"{0}\", new Microsoft.Xrm.Sdk.OptionSetValue(value.Value));", 
             attributeMetadata.LogicalName) 
          }; 
         Debug.WriteLine(String.Format("{0}.{1}", entity.LogicalName, attributeMetadata.LogicalName)); 
        } 
       } 
      } 
     } 
    } 
    #endregion 

} 

}

+0

मुझे प्रलेखन पर एक नज़र डालेंगे, लेकिन उदाहरण कम आपूर्ति में प्रतीत होते हैं। क्या आपके पास नमूना कोड है जो इस इंटरफ़ेस को लागू करता है? नमूना के लिए –

+0

धन्यवाद। इस कोड के विरुद्ध crmsvcutil चलाते समय, अपवाद 'प्रकार की ऑब्जेक्ट को कास्ट करने में असमर्थ' सिस्टम। कोडडॉम.को 'EExpressionStatement 'टाइप करने के लिए' System.CodeDom.CodeConditionStatement''' को कोड की रेखा से संभवतः फेंक दिया गया है ((CodeConditionStatement) codeProperty.SetStatements [1])। FalseStatements [0] = ... '। सही कास्ट के रूप में कोई विचार यहाँ? –

+0

+1। संदर्भ के लिए, मुझे यह काम करने के लिए उपयोगकर्ता 158 9970 के उत्तर के साथ इस उत्तर को जोड़ना पड़ा। – Polshgiant

4

UpdateEnumSetter विधि में कुछ परिवर्तन:

private static void UpdateEnumSetter(CodeTypeDeclaration entityClass, EntityMetadata entity) 
    { 
     foreach (var attributeMetadata in entity.Attributes.Where(attributeMetadata => String.IsNullOrWhiteSpace(attributeMetadata.AttributeOf))) 
     { 
      AttributeMetadata currentMetadata = attributeMetadata; 
      foreach (CodeTypeMember codeMembers in entityClass.Members.Cast<CodeTypeMember>().Where(codeMembers => codeMembers.Name == currentMetadata.SchemaName)) 
      { 
       CodeMemberProperty codeProperty = (CodeMemberProperty)codeMembers; 
       if (codeProperty.HasSet) 
       { 
        if (attributeMetadata.AttributeType != null && (attributeMetadata.AttributeType.Value == AttributeTypeCode.Picklist || attributeMetadata.AttributeType.Value == AttributeTypeCode.Status)) 
        { 
         if (codeProperty.SetStatements[1].GetType() == typeof(CodeConditionStatement)) 
         { 
          ((CodeConditionStatement)codeProperty.SetStatements[1]).FalseStatements[0] = new CodeSnippetStatement 
          { 
           Value = String.Format("this.SetAttributeValue(\"{0}\", new Microsoft.Xrm.Sdk.OptionSetValue(value.Value));", attributeMetadata.LogicalName) 
          }; 
         } 
         else 
         { 
          codeProperty.SetStatements[1] = new CodeSnippetStatement(String.Format("this.SetAttributeValue(\"{0}\", new Microsoft.Xrm.Sdk.OptionSetValue(value.Value));", attributeMetadata.LogicalName)); 
         } 
        } 
       } 
      } 
     } 
    } 
+0

+1 धन्यवाद। गुआराव की प्रतिक्रिया के साथ इसे जोड़कर मेरे लिए काम किया। – Polshgiant

0

ऐसा लगता है कि crmsrvcutil कि जब तय किया गया है में एक बग नहीं था। OptionSet संपत्तियों के लिए मेरे कोड अब इस तरह दिखता है:

[Microsoft.Xrm.Sdk.AttributeLogicalNameAttribute("prioritycode")] 
public Microsoft.Xrm.Sdk.OptionSetValue PriorityCode 
{ 
    get 
    { 
     return this.GetAttributeValue<Microsoft.Xrm.Sdk.OptionSetValue>("prioritycode"); 
    } 
    set 
    { 
     this.OnPropertyChanging("PriorityCode"); 
     this.SetAttributeValue("prioritycode", value); 
     this.OnPropertyChanged("PriorityCode"); 
    } 
} 

और मैं कोई OptionSetValue की स्थापना त्रुटि मिलती है ...

+2

मैं नवीनतम संस्करण crmsvcutil (5.0.9690.3218) का उपयोग कर रहा हूं और मेरे OptionSet गुणों के लिए जेनरेट किया गया कोड अभी भी मूल पोस्ट से समस्याग्रस्त रूप में आउटपुट कर रहा है। :/ – Polshgiant

+0

@Polshgiant इसे आजमाएं: https://xrmearlyboundgenerator.codeplex.com/ – Daryl

2

यह पता चला है कि यह गलती उन विकल्पों को बनाने का प्रयास करने वाले कोड के साथ करना है जो उपयोग के लिए उपलब्ध होने पर नीचे दिए गए कोड की तरह दिखते हैं। ध्यान दें कि रिटर्न प्रकार और कास्ट के लिए सही प्रकार का चयन किया जा रहा है।

यह codegen सामान अद्यतन करने के लिए इस बग को ठीक करने के लिए संभव होना चाहिए, लेकिन यह बेहतर हो ठीक से लानत बात ठीक करने के लिए माइक्रोसॉफ्ट प्राप्त करने के लिए हो सकता है, मैं एक समाधान हो जाएगा, लेकिन मैं वास्तव में लागू करने के लिए समय नहीं है यह अभी इसलिए है क्योंकि हमारे पास अधिकतर समाधान समाधान है, भले ही हमें विकल्प विकल्प श्रेणी से निपटना पड़े।

public enum entityname_optionsetname 
{ 
    Value = 200 
} 

[Microsoft.Xrm.Sdk.AttributeLogicalNameAttribute("myprefix_fieldname")] 
public entityname_optionsetname myprefix_FieldName 
{ 
    get 
    { 
     Microsoft.Xrm.Sdk.OptionSetValue optionSet = this.GetAttributeValue<Microsoft.Xrm.Sdk.OptionSetValue>("myprefix_fieldname"); 
     if ((optionSet != null)) 
     { 
      return ((entityname_optionsetname)(System.Enum.ToObject(typeof(Microsoft.Xrm.Sdk.OptionSetValue), optionSet.Value))); 
     } 
     else 
     { 
      return null; 
     } 
    } 
    set 
    { 
     this.OnPropertyChanging("myprefix_FieldName"); 
     if ((value == null)) 
     { 
      this.SetAttributeValue("myprefix_fieldname", null); 
     } 
     else 
     { 
      this.SetAttributeValue("myprefix_fieldname", new Microsoft.Xrm.Sdk.OptionSetValue(((int)(value)))); 
     } 
     this.OnPropertyChanged("myprefix_FieldName"); 
    } 
} 
1

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

मैं इस्तेमाल किया एरिक पूल के, मैनी ग्रेवाल की, और उचित मूल्यों के साथ ही अलग enums outputting के लिए पीटर मजीद का समाधान है, तो संयुक्त कि गौरव दलाल समाधान के साथ (JFK007 द्वारा अद्यतन डाली त्रुटि को ठीक करने के लिए) को फिर से लिखना SetAttributeValue कि वजह से (int)(value) त्रुटि। और एक अतिरिक्त बोनस के रूप में, मैंने अलग-अलग विकल्प सेट को फ़िल्टर करने के लिए एक ही समाधान का उपयोग किया ताकि अलग-अलग विकल्प सेट मानों के लिए भी फ़िल्टर किया जा सके (जो कि मेरे संगठन में कोई समस्या थी)।

परिणाम CrmSvcUtil.exe चलाने के लिए CodeWriterFilter और CustomizeCodeDomService, cmd बैच फ़ाइल युक्त एक वर्ग पुस्तकालय है, और filter.xml संस्थाओं फिल्टर करने के लिए।

अपने वर्ग पुस्तकालय में CrmSvcUtil.exe, Microsoft.Xrm.Sdk के लिए संदर्भ जोड़ने के लिए, और System.Runtime.Serialization तो dll संकलित करके उसे अपने CrmSvcUtil.exe के रूप में फ़ोल्डर में एक ही करने के लिए इसे कॉपी। मैंने अपनी नई असेंबली को संदर्भित करने और प्रारंभिक बाध्य वर्ग फ़ाइल बनाने के लिए शामिल किया गया आदेश का उपयोग करें।

CodeWriterFilter:

using System; 
using System.Collections.Generic; 
using System.Xml.Linq; 
using Microsoft.Crm.Services.Utility; 
using Microsoft.Xrm.Sdk.Metadata; 
using System.Text.RegularExpressions; 
using Microsoft.Xrm.Sdk; 

namespace SvcUtilFilter 
{ 
    /// <summary> 
    /// CodeWriterFilter for CrmSvcUtil that reads list of entities from an xml file to 
    /// determine whether or not the entity class should be generated. 
    /// </summary> 
    public class CodeWriterFilter : ICodeWriterFilterService 
    { 
     //list of entity names to generate classes for. 
     private HashSet<string> _validEntities = new HashSet<string>(); 

     //reference to the default service. 
     private ICodeWriterFilterService _defaultService = null; 

     //list of generated option sets, instantiated in the constructor 
     private List<string> GeneratedOptionSets; 

     //list of generated options, instantiated in the constructor 
     private List<string> GeneratedOptions; 

     /// <summary> 
     /// constructor 
     /// </summary> 
     /// <param name="defaultService">default implementation</param> 
     public CodeWriterFilter(ICodeWriterFilterService defaultService) 
     { 
      this._defaultService = defaultService; 
      this.GeneratedOptionSets = new List<string>(); 
      this.GeneratedOptions = new List<string>(); 
      LoadFilterData(); 
     } 

     /// <summary> 
     /// loads the entity filter data from the filter.xml file 
     /// </summary> 
     private void LoadFilterData() 
     { 
      XElement xml = XElement.Load("filter.xml"); 
      XElement entitiesElement = xml.Element("entities"); 
      foreach (XElement entityElement in entitiesElement.Elements("entity")) { 
       _validEntities.Add(entityElement.Value.ToLowerInvariant()); 
      } 
     } 

     /// <summary> 
     /// /Use filter entity list to determine if the entity class should be generated. 
     /// </summary> 
     public bool GenerateEntity(EntityMetadata entityMetadata, IServiceProvider services) 
     { 
      return (_validEntities.Contains(entityMetadata.LogicalName.ToLowerInvariant())); 
     } 

     //All other methods just use default implementation: 

     public bool GenerateAttribute(AttributeMetadata attributeMetadata, IServiceProvider services) 
     { 
      return _defaultService.GenerateAttribute(attributeMetadata, services); 
     } 

     public bool GenerateOption(OptionMetadata optionMetadata, IServiceProvider services) 
     { 
      //return _defaultService.GenerateOption(optionMetadata, services); 
      string label = optionMetadata.Label.UserLocalizedLabel.Label; 

      //remove spaces and special characters 
      label = Regex.Replace(label, @"[^a-zA-Z0-9]", string.Empty); 
      if (label.Length > 0 && !char.IsLetter(label, 0)) { 
       label = "Number_" + label; 
      } 
      else if (label.Length == 0) { 
       label = "empty"; 
      } 

      if (!GeneratedOptions.Exists(l=>l.Equals(label))) { 
       GeneratedOptions.Add(label); 
       optionMetadata.Label = new Label(label, 1033); 
       return _defaultService.GenerateOption(optionMetadata, services); 
      } 
      else { return false; } 
     } 

     public bool GenerateOptionSet(OptionSetMetadataBase optionSetMetadata, IServiceProvider services) 
     { 
      //return _defaultService.GenerateOptionSet(optionSetMetadata, services); 
      if (!GeneratedOptionSets.Contains(optionSetMetadata.Name)) { 
       GeneratedOptionSets.Add(optionSetMetadata.Name); 
       return true; 
      } 

      return _defaultService.GenerateOptionSet(optionSetMetadata, services); 
     } 

     public bool GenerateRelationship(RelationshipMetadataBase relationshipMetadata, EntityMetadata otherEntityMetadata, IServiceProvider services) 
     { 
      return _defaultService.GenerateRelationship(relationshipMetadata, otherEntityMetadata, services); 
     } 

     public bool GenerateServiceContext(IServiceProvider services) 
     { 
      return _defaultService.GenerateServiceContext(services); 
     } 
    } 
} 

CustomizeCodeDomService:

using System; 
using System.CodeDom; 
using System.Diagnostics; 
using System.Linq; 

using Microsoft.Crm.Services.Utility; 
using Microsoft.Xrm.Sdk.Metadata; 

namespace SvcUtilFilter 
{ 
    /// <summary> 
    /// The customize code dom service. 
    /// </summary> 
    public sealed class CustomizeCodeDomService : ICustomizeCodeDomService 
    { 
     #region Constants and Fields 

     /// <summary> 
     /// The metadata. 
     /// </summary> 
     private IOrganizationMetadata metadata; 

     #endregion 

     #region Properties 



     #endregion 

     #region Public Methods 

     /// <summary> 
     /// The customize code dom. 
     /// </summary> 
     /// <param name="codeCompileUnit"> 
     /// The code compile unit. 
     /// </param> 
     /// <param name="services"> 
     /// The services. 
     /// </param> 
     public void CustomizeCodeDom(CodeCompileUnit codeCompileUnit, IServiceProvider services) 
     { 
      // Locate the namespace to use 
      CodeNamespace codeNamespace = codeCompileUnit.Namespaces[0]; 

      var metadataProviderService = (IMetadataProviderService)services.GetService(typeof(IMetadataProviderService)); 
      var filterService = (ICodeWriterFilterService)services.GetService(typeof(ICodeWriterFilterService)); 

      this.metadata = metadataProviderService.LoadMetadata(); 

      foreach (EntityMetadata entityMetadata in this.metadata.Entities) { 
       if (filterService.GenerateEntity(entityMetadata, services)) { 
        CodeTypeDeclaration entityClass = 
         codeNamespace.Types.Cast<CodeTypeDeclaration>().First(codeType => codeType.Name.ToUpper() == entityMetadata.SchemaName.ToUpper()); 

        UpdateEnumSetter(entityClass, entityMetadata); 

       } 
      } 
     } 

     #endregion 

     #region Private Methods 
     private static void UpdateEnumSetter(CodeTypeDeclaration entityClass, EntityMetadata entity) 
     { 
      foreach (var attributeMetadata in entity.Attributes.Where(attributeMetadata => String.IsNullOrWhiteSpace(attributeMetadata.AttributeOf))) { 
       AttributeMetadata currentMetadata = attributeMetadata; 
       foreach (CodeTypeMember codeMembers in entityClass.Members.Cast<CodeTypeMember>().Where(codeMembers => codeMembers.Name == currentMetadata.SchemaName)) { 
        CodeMemberProperty codeProperty = (CodeMemberProperty)codeMembers; 
        if (codeProperty.HasSet) { 
         if (attributeMetadata.AttributeType != null && (attributeMetadata.AttributeType.Value == AttributeTypeCode.Picklist || attributeMetadata.AttributeType.Value == AttributeTypeCode.Status)) { 
          if (codeProperty.SetStatements[1].GetType() == typeof(CodeConditionStatement)) { 
           ((CodeConditionStatement)codeProperty.SetStatements[1]).FalseStatements[0] = new CodeSnippetStatement { 
            Value = String.Format("this.SetAttributeValue(\"{0}\", new Microsoft.Xrm.Sdk.OptionSetValue(value.Value));", attributeMetadata.LogicalName) 
           }; 
          } 
          else { 
           codeProperty.SetStatements[1] = new CodeSnippetStatement(String.Format("this.SetAttributeValue(\"{0}\", new Microsoft.Xrm.Sdk.OptionSetValue(value.Value));", attributeMetadata.LogicalName)); 
          } 
         } 
        } 
       } 
      } 
     } 
     #endregion 
    } 
} 

CrmSvcUtil_run.cmd कमान बैच फ़ाइल:

@echo off 

set url=https://[organization].api.crm.dynamics.com/XRMServices/2011/Organization.svc 

echo. 
echo Generating CrmSvcUtil Proxy class in output folder 
echo. 

CrmSvcUtil.exe /metadataproviderservice:"MetadataProvider.IfdMetadataProviderService, 
MetadataProvider" 
/url:https://[organization].api.crm.dynamics.com/XRMServices/2011/Organization.svc /out:Xrm.cs 
/namespace:Xrm /serviceContextName:XrmServiceContext /serviceContextPrefix:Xrm 
/u:[username] /p:[password] 
/codewriterfilter:SvcUtilFilter.CodeWriterFilter,SvcUtilFilter 
/codecustomization:SvcUtilFilter.CustomizeCodeDomService,SvcUtilFilter 

echo. 
pause 

filter.xml

<filter> 
    <entities> 
    <entity>systemuser</entity> 
    <entity>team</entity> 
    <entity>role</entity> 
    <entity>businessunit</entity> 
    <entity>account</entity> 
    <entity>product</entity> 
    <entity>transactioncurrency</entity> 
    </entities> 
</filter> 
संबंधित मुद्दे