5

CRM Online の試用版テナントでクライアント用のプラグインを作成しています (最新のパッチなどがあると仮定します) が、これまでに見たことのないエラーに遭遇しました。一般的に言えば、コードを明確にするために、次の行に沿って拡張メソッドを常に使用します。

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);
    }
}

そこに非常に物議を醸すものは何もないと思いますか?とにかく、何らかの理由でこのクライアントのプラグインの一部としてクラス ファイルを含めると、次のエラーがスローされます。

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]

プラグインが実行されていないことを示すトレースは含まれていません (コードの最初の行が例外をスローしている場合でも!)。

少し掘り下げてみたところ、少なくともこのクライアント/インスタンスについては次のように思われますpublic static class Foo。エラーが生成され、プラグイン自体は実行されません (コードの前に例外が発生します)

System.TypeLoadException以前にこのようなことを見た人や、例外についての洞察を持っている人はいますか?

4

2 に答える 2

5

CRM Online トライアル インスタンス (5.0.9690.3358) でこのプラグインを試したところ、動作しています。

プラグインは、Create message、Task entity、Pre-operation、Synchronous に登録されます。

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);
            }
        }

    }
}

これは、問題が拡張メソッドではないことを確認するためです。

私の最善の推測(順番):

  • ソリューション内の 1 つのプロジェクトが .NET Framework 4.5 でコンパイルされている
  • 古いバージョンの SDK を使用しています
  • 古いプラグイン登録ツールを使用しています
于 2013-05-04T09:01:52.540 に答える
0

お客様のサーバー (2008 R2) 上の CRM 2011 オンプレミスでも同じ問題が発生しました。幸いなことに、.NET 4.0 に戻る必要はありませんでした。サーバーに 4.5 を手動でインストールすることで問題が解決しました。うまくいけば、CRM オンラインはすぐに更新されます。

于 2013-05-15T11:23:48.767 に答える