2017-06-21 14 views
2

オンラインでCRM 2016を使用してカスタムワークフローアクティビティをデバッグするために、プラグイン登録ツール(PRTとして参照)を使用したかったのです。私の問題は、「プロファイルワークフロー」ボタンをクリックするたびにPRTがクラッシュすることです。CRM 2016オンライン - カスタムワークフローアクティビティのデバッグでプラグイン登録ツールがクラッシュする

クラッシュに関する詳細はイベントログに記載されており、以下で説明します。

イベントログエントリ1:

フォールティングアプリケーション名:PluginRegistration.exe、バージョン:8.2.1.8676、タイムスタンプ:0x58d073d5 フォールティングモジュール名:KERNELBASE.dll、バージョン:10.0.15063.296、タイムスタンプ:0xa0527b0c 例外コード:0xe0434352 障害オフセット:0x0000000000069e08は 断層プロセスIDは:アプリケーション・パスをフォールティング0x01d2ea6794b7727a :0xb70 エラーアプリケーション開始時刻D:_temp \ SDK \ツール\ PluginRegistration \ PluginRegistration.exe フォールティングモジュールパス:C: \ WINDOWS \ System3 2 \ KERNELBASE.dll レポートイド:21f5bf85-22be-44ca-b884-ef43d9490886 断層パッケージフルネーム: 断層パッケージ相対アプリケーションID:

イベントログエントリ2:

アプリケーション:PluginRegistration.exe フレームワークのバージョン:v4.0.30319 説明:処理されなかった例外のため、プロセスが終了しました。 例外情報:System.Xml.XPath.XPathException MS.Internal.Xml.XPath.XPathParser.CheckToken(LexKind) MS.Internal.Xml.XPath.XPathParser.ParsePredicate(MS.Internal.Xml.XPath.AstNode) ) (MS.Internal.Xml.XPath.AccessNode) (MS.Internal.Xml.XPath.AstNode) MS.Internal.Xml.XPath.XPathParser.ParsePathExpr .Internal.Xml.XPath.XPathParser.ParseMultiplicativeExpr(MS.Internal.Xml.XPath.AstNode) (MS.Internal.Xml.XPath.XPathParser.ParseAdditiveExpr(MS.Internal.Xml.XPath.A)) (MS.Internal.Xml.XPath.AstNode) MS.Internal.Xml.XPath.XPathParser.ParseRequationalExpr(MS.Internal.Xml.XPath.AstNode) MS.Internal.Xml.XPath.XPathParser.ParseEqualityExpr(MS.Internal.Xml.XPath.AstNode) (MS.Internal.Xml.XPath.AccessNpr) MS.Internal.Xml.XPath.XPathParser.ParseExpresion(MS.Internal.Xml.XPath.AstNode)MS.Internal.Xml.XPath.XPathParser.ParseXPathExpresion(可能System.String)で するSystem.Xml.XPath.XPathExpressionで 。コンパイル(System.String、System.Xml.IXmlNamespaceResolver) at System.Xml.XPath.XPathNavigator.Compile(System.String) at System.Xml.XmlNode.SelectSingleNode(System PluginProfiler.Library.WorkflowXamlUtility.GetCustomActivityFullyQualifiedNamesでPluginProfiler.Library.WorkflowXamlUtility.GetCustomActivityFullyQualifiedName(可能System.String、System.Xml.XmlNode、System.Xml.XmlNamespaceManager) で.String、System.Xml.XmlNamespaceManager) (Microsoft.Xrm.Tooling .Connector.CrmServiceClient、System.Xml.XmlDocument、System.Xml.XmlNamespaceManager) (PluginProfiler.Library.WorkflowXamlUtility.GetWorkflowActivitySteps(Microsoft.Xrm.Tooling.Connector.CrmServiceClient、System。Microsoftの文字列)Microsoft.Crm.Tools.PluginRegistration.CommonControls.ProfilerSettingsViewModel.set_SelectedWorkFlow(Microsoft.Crm.Tools.PluginRegistration.CommonControls.ExistingWorkflowでMicrosoft.Crm.Tools.PluginRegistration.CommonControls.ExistingWorkflow.Refresh() で ) Microsoft.Crm.Tools.PluginRegistration.CommonControls.ProfilerSettingsViewModel..ctor(Microsoft.Crm.Tools.Libraries.CrmOrganization、PluginProfiler.OperationType、可能System.Guid、マイクロソフトで.Crm.Tools.PluginRegistration.CommonControls.ProfilerSettingsViewModel.RefreshWorkflows() Microsoft.Crm.Tools.PluginRegistration.OrganizationControlViewModel.MenuI tem_Clicked(System.Objectの)MS.Internal.Commands.CommandHelpers.CriticalExecuteCommandSource(System.Windows.Input.ICommandSource、ブール)System.Windows.Controls.MenuItem.InvokeClickAfterRender(System.Objectの)で System.Windowsで で 。 System.Windows.Threading.ExceptionWrapper.TryCatchWhen(System.Object、System.Delegate、System.Object、Int32、System.Delegate)の にあるThreading.ExceptionWrapper.InternalRealCall(System.Delegate、System.Object、Int32) at System。 Windows.Threading.DispatcherOperation.InvokeImpl()(System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext、System.Threading.ContextCallback、System.Object、Boolean) at System.Threading.ExecutionContext.Run .ExecutionContext、System.Threading.ContextCallback、Syst System.Web.UI.Controlから継承されます。Microsoft.Internal.CulturePreservingExecutionContext.Run(MS.Internal.CulturePreservingExecutionContext、System.ControlCallback、System.Object)、 System.Windows.Threading.DispatcherOperation.Invoke()の System.Windows.Threading.Dispatcher.WndProcHook(IntPtr、Int32、System.Object)で をSystem.Windows.Threading.Dispatcher.ProcessQueue()で に設定します。 (IntPtr、IntPtr、Boolean ByRef) MSWin32.HwndWrapper.WndProc(IntPtr、Int32、IntPtr、IntPtr、Boolean ByRef) at MS.Win32.HwndSubclass.DispatcherCallbackOperation(System.Object) at System.Windows.Threading。 ExceptionWrapper.InternalRealCall(System.Delegate、S (System.Object、System.Delegate、System.Object、Int32、System.Delegate) (System.Windows.Threading.Dispatcher.LegacyInvokeImpl(System.Object、System.Delegate、System.Delegate) )。 (IntPtr、Int32、IntPtr、IntPtr) MS.Win32.UnsafeNativeMethods.DispatchMessage(System.Threading.DispatcherPriority、System.TimeSpan、System.Delegate、System.Object、Int32) MS.Win32.HwndSubclass.SubclassWndProc System.Windows.Threading.Dispatcher.PushFrameImpl(System.Windows.Threading.DispatcherFrame)の System.Windows.Application.RunDispatcher(System.Object)の にSystem.Windows.Application.RunInternalに を追加しました。 (System.Windows.Window) (Microsoft.Crm.Tools.PluginRegistration.App.Ma) ()

イベントログエントリは、プラグインがクラッシュしたときに同時に作成されます。

私は、少なくとも同様の問題を持つ人を見つけようと、最後の私たちのグーグルを費やしてきたが、私はこのためのすべてのソリューションがあります:)

を失敗しましたか?

答えて

0

私はMSと一緒にサポートチケットを開きます。 SDKツールもサポートしています。

1

プラグインやカスタムワークフローアクティビティでは、コード内で行われた操作に応じて、これまでのような動作が見られました。たとえば、私のプラグインがhttpリクエストを実行した場合、PRTをクラッシュさせたことがわかりましたが、わかりませんが、サンドボックス環境でデバッグしている場合、PRTはそのタイプのものを許可しない可能性があります。

カスタムワークフローアクティビティまたはプラグインを直接デバッグする代わりに、コードが実行されているユーザーID、プラグインまたはワークフローアクティビティの名前、例外メッセージなどの情報を格納するいくつかのフィールドを持つ新しいカスタムエンティティを作成することもできますなどのコードを記述し、次にコードと同様にStringBuilderオブジェクトに書き込むことで、有用な情報をトレースオブジェクトに書き出すことができます。 catchブロックまたは常にコードの最後に、カスタムエンティティの新しいレコードを作成し、StringBuilderやプラグインコンテキストなどから情報を格納することができます。これは、出力するたくさんの状況でこれを使用していますプラグインがトランザクションをロールバックする例外をスローする必要がないかぎり、デバッグやテストのためのカスタム詳細情報。あなたが望むものを出力するために余分なコードを追加するのは面倒かもしれませんが、デバッグがオプションでない場合、これはうまくいくでしょう。私は、MSのサポートに連絡夫婦OD日間彼らとメールを交換し、その後も、彼らのサポートとリモートセッションを持っていた

私が何を意味するか説明するための例のコード...

Dim tracer As New StringBuilder 
Try 
    tracer.Append("running code ...") 
    '// do some code here 
    tracer.AppendLine("done") 

    tracer.Append("running more code ...") 
    '// do some code here 
    tracer.AppendLine("done") 

    '// Write out some info useful for debugging 
    tracer.AppendLine(String.Format("value of variable 1 {0}", SomeVariable1)) 
Catch ex As Exception 
    tracer.AppendLine(ex.ToString) 
End Try 

'// Create a new instance of the new custom error entity and save it 
'// Where CustomError is the name of your new entity, assuming you're using strongly-typed entity classes 
Dim ErrorObj As New CustomError With { 
    .UserName = "", 
    .Message = tracer.ToString 
    } 

pluginOrgService.Create(ErrorObj) 
1

はカップルより多くのを待っていました問題を分析するためのサポートの日、MSのサポートから決して解決策を得られなかった日々、そして私はこれを自分で克服しました。

問題はMSに報告したいのですが、何らかの理由で問題が私のカスタムコードにあると確信しています。私はこれを特定のカスタムワークフローに絞り込みました。Workflow_Aと呼ぶことができます。プラグイン登録ツール(PRT)がCRMからワークフローのリストを取得しようとしたとき(私はFiddlerを使用しましたが、その要求では順序はありません)、Workflow_Aはそのリストの最初のものでした。私はその後、そのワークフローを削除し、再び同じ手順と条件を作り直して、ワークフローリストの最後に終了し、PRTがクラッシュするのをやめました。

AK3800は私のプラグインは、私はそのクラッシュPRTを見てきましたhttpリクエストをした場合、私は確かに知っていないが、それはPRTは、そのタイプを許可していないのかもしれ

を述べましたサンドボックス環境でデバッグしている場合それは、(デバッグを)解決PRTは、より多くの問題を作っているので、最後に、私はトレースどこでもログなしデバッグに私のコードを埋めることになった、ただのトレースに基づいてコードの変更を行う -

は、私は彼に同意しなければなりませんでしたログ。

+1

これはまさに私が見てきた問題です。「httpリクエストを試みると、プラグイン登録ツールがクラッシュします」私の回避策はあなたのものと同じでした。また、ロジック(http呼び出しを含む)を別々のクラスに分けて、別々のデバッグを試みることもできます – jasonscript

関連する問題