2013-05-04 15 views
5

Bir CRM Online deneme kiracısı üzerinde bir istemci için bir eklenti yazıyorum (böylece en son yamaları olduğunu varsayalım) ve daha önce görmediğim bir hatayla karşılaştım. Genellikle gerçekten sadece kod netlik için, hep aşağıdakilerden çizgisinde bir uzantısı yöntemi kullanmak konuşma: Bence orada derece tartışmalıCRM 2011 Online Örnekleri için Extension Yöntemleri TypeLoad İstisnalarına Neden Oluyor

public static void AddOrUpdate(this Entity e, string propertyName, object value) 
{ 
    if (e.Attributes.Contains(propertyName)) 
    { 
     e.Attributes[propertyName] = value; 
    } 
    else 
    { 
     e.Attributes.Add(propertyName, value); 
    } 
} 

Hiçbir şey? Bu müşteri için bir eklenti parçası olarak sınıf dosyası içerir Neyse Sebebi ne olursa olsun, aşağıdaki hata atılmış olsun: hiçbir iz bile (eklenti bile yürütülmez gösteren dahil

Unhandled Exception: System.ServiceModel.FaultException`1 
System.TypeLoadException: Microsoft Dynamics CRM has experienced an error. Reference number for administrators or support: #9A0442A7 

[foo.bar.Plugins: foo.bar.Plugins.TrackActivity] 
[6ed535ec-c7a8-e211-858f-3c4a92dbdc37: foo.bar.Plugins.TrackActivity: Create of task] 

yoktur İlk kod satırı bir istisna atarsa!).

Ben kazma biraz yaptım ve bu istemci/Mesela en azından için görünüyor: - Hiç yöntemi ile statik sınıf dosyası (public static class Foo) eklerseniz sınıf aslında tarafından kullanılıp kullanılmayacağını, Ben, bu hatayı alıyorum kod veya olmasın - hata oluşturulur, eklenti kendisi

herkes önce böyle bir şey görmüş ya da System.TypeLoadException istisnalarıyla herhangi bir fikir var (istisna herhangi kodundan önce ortaya çıkar) yürütülmez?

cevap

5

Bu eklentiyi bir CRM Online deneme örneği (5.0.9690.3358) ile denedim ve çalışıyor.

Eklenti, Mesaj oluştur, Görev öğesi, İşlem öncesi, Senkronize üzerine kaydedilir.

using System; 
using Microsoft.Xrm.Sdk; 

namespace TestPlugin 
{ 
    public class MyPlugin : IPlugin 
    { 
     public void Execute(IServiceProvider serviceProvider) 
     { 
      IPluginExecutionContext context = (IPluginExecutionContext)serviceProvider.GetService(typeof(IPluginExecutionContext)); 
      if (context.InputParameters.Contains("Target") && context.InputParameters["Target"] is Entity) 
      { 
       Entity entity = (Entity)context.InputParameters["Target"]; 
       if (entity.LogicalName != "task") 
        return; 

       try 
       { 
        entity.AddOrUpdate("description", "updated by plugin"); 
       } 
       catch (Exception ex) 
       { 
        throw new InvalidPluginExecutionException(ex.Message); 
       } 
      } 
     } 
    } 

    public static class ExtensionMethods 
    { 
     public static void AddOrUpdate(this Entity e, string propertyName, object value) 
     { 
      if (e.Attributes.Contains(propertyName)) 
      { 
       e.Attributes[propertyName] = value; 
      } 
      else 
      { 
       e.Attributes.Add(propertyName, value); 
      } 
     } 

    } 
} 

Sorunun uzantı yöntemi olmadığından emin olmak için. (Sırayla)

En iyi tahminle: çözümünüzdeki

  • Bir proje .NET Framework Aracı
  • Eski Eklenti Kaydı kullanan eski bir SDK sürümü
  • kullanıyorsunuz 4.5
  • derlendi
+1

Bu, çivilenmiş. .Net 4 (4.5 yerine) derlenmiş ve iyi çalıştı. Teşekkürler! – glosrob

0

Müşterinin sunucusunda (2011 R2) CRM 2011 Şirket içi ile aynı sorunla karşılaştık. Neyse ki, .NET 4.0'a geri dönmek zorunda kalmadık - sunucuda 4.5'i elle yüklemek sorunu çözdü. Umarım CRM online yakında güncellenecektir.