有时CRM 2013在打开订单时决定给我以下错误(并向我显示一个空页面,但顶部导航栏保持不变):
<CrmScriptErrorReport>
<ReportVersion>1.0</ReportVersion>
<ScriptErrorDetails>
<Message>Unable to get property 'ClientVariables' of undefined or null reference</Message>
<Line>2</Line>
<URL>/_common/JsProvider.ashx?ids=1959345455-451858892-1713948411-1279630416-1250882489-367493978-19173614-574022791-696891199-2007586035-1552783829&ver=-976933632</URL>
<PageURL>/main.aspx?etc=1088&extraqs=%3f_gridType%3d1088%26etc%3d1088%26id%3d%257b76EB6220-FB46-E311-93F3-00155D5752A9%257d%26rskey%3d674031362&pagemode=iframe&pagetype=entityrecord&rskey=674031362 </PageURL>
<Function>anonymous(){returnthis.get_$L_0().ClientVariables}</Function>
<CallStack>
<Function>anonymous(){returnthis.get_$L_0().ClientVariables}</Function>
</CallStack>
</ScriptErrorDetails>
<ClientInformation>
<BrowserUserAgent>Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; WOW64; Trident/6.0; .NET4.0E; .NET4.0C)</BrowserUserAgent>
<BrowserLanguage>en-US</BrowserLanguage>
<SystemLanguage>en-US</SystemLanguage>
<UserLanguage>en-US</UserLanguage>
<ScreenResolution>1920x1080</ScreenResolution>
<ClientName>Web</ClientName>
<ClientTime>2013-11-11T17:32:05</ClientTime>
</ClientInformation>
<ServerInformation>
<OrgLanguage>1033</OrgLanguage>
<OrgCulture>1043</OrgCulture>
<UserLanguage>1033</UserLanguage>
<UserCulture>1043</UserCulture>
<OrgID>{54131DE3-6D18-44FD-B4D0-0A9E87DA3E9D}</OrgID>
<UserID>{E369A31E-3446-E311-93F2-00155D5752A9}</UserID>
<CRMVersion>6.0.0.809</CRMVersion>
</ServerInformation>
</CrmScriptErrorReport>
Run Code Online (Sandbox Code Playgroud)
这将继续发生,直到我摆弄缓存或打开另一个组织.我仍然不确定究竟是什么解决了它.我在订单表单上有自定义代码,但我经常会在几天内没有收到错误.知道我怎么能找到这个错误的原因,以及它是否与我的自定义代码或CRM 2013中的错误有关?
谢谢.
我在Sandbox中执行了一个Dynamics CRM 2013插件.
此代码具有以下自定义异常类:
[Serializable]
public class PluginValidationException : Exception
{
public PluginValidationException()
{
}
protected PluginValidationException(SerializationInfo info, StreamingContext context)
: base(info, context)
{
}
public PluginValidationException(string message)
: base(message)
{
}
public PluginValidationException(string message, Exception inner)
: base(message, inner)
{
}
}
Run Code Online (Sandbox Code Playgroud)
当插件中抛出此异常时,它会生成一个通用错误窗口,日志文件中没有详细信息:
未处理的异常:System.ServiceModel.FaultException`1 [[Microsoft.Xrm.Sdk.OrganizationServiceFault,Microsoft.Xrm.Sdk,版本= 6.0.0.0,文化=中性公钥= 31bf3856ad364e35]]:System.Runtime.Serialization.SerializationException: Microsoft Dynamics CRM遇到错误.为管理员或支持参考号:#1355B4E4Detail:-2147220970调用堆栈在Microsoft.Crm.Application.Platform.ServiceCommands.PlatformCommand.XrmExecuteInternal()在Microsoft.Crm.Application.Platform.ServiceCommands.CreateCommand.Execute()在Microsoft.Crm.在Microsoft.Crm.Application.Platform.EntityProxy.CreateAndRetrieve(String [] columnSet,Boolean performDuplicateCheck上的Microsoft.Crm.Application.Platform.EntityProxy.Create(Boolean performDuplicateCheck)中的Application.Platform.EntityProxy.Create(Boolean performDuplicateCheck,Guid auditingTransactionId) )维持在Microsoft.Crm.Application.WebServices.InlineEdit在Microsoft.Crm.Application.WebServices.InlineEdit.SaveCommand.ExecuteCommand(字符串commandXml Microsoft.Crm.Application.WebServices.InlineEdit.CommandBase.UpdateEntity(实体的实体,布尔检索)) .CommandBase.Execute(String commandXml)System.Runtime.Serialization.SerializationException:Microsoft Dynamics CRM遇到错误.为管理员或支持参考号:#1355B4E4 2014-04-06T02:04:30.0972001Z [Demo.DemoPlugin:Demo.DemoPlugin.BasicCrmPlugin] [d86b89ab-F1BC-e311-9408-000c29254b18:Demo.DemoPlugin.BasicCrmPlugin:创建接触的]
查看CRM跟踪日志显示以下内容:
System.Runtime.Serialization.SerializationException:在组件类型 'Demo.Helpers.PluginValidationException' 'Demo.DemoPlugin,版本= 1.0.0.0,文化=中性公钥= fbb51ba1e588d276' 未标记为可序列.at Microsoft.Crm.Sandbox.SandboxAppDomainHelper.Execute(IServiceEndpointNotificationService serviceBusService,IOrganizationServiceFactory organizationServiceFactory,String pluginTypeName,String pluginConfiguration,String pluginSecureConfig,IPluginExecutionContext requestContext)at …
我正在构建一个角度应用程序,它在Dynamics 2013上作为Web资源运行.
应用程序使用一个按钮运行,该按钮使用Ribbon工作台添加到commandContainer,然后该按钮调用 Xrm.Internal.openDialog
所有这一切都正常,直到我想开始使用暴露的实体 Xrm.Page.Data
基本上我的按钮在动态主页面的上下文中运行,但是实体在iframe内,基于我所在的页面具有不同的Id和名称.
因此,使用简单的选择器我无法获取其contentWindow并开始使用实体.
该#crmContentPanel总是有它几个I帧开始从#contentIFrame0到#contentIFrame(n)和我永远无法知道哪个iframe是一个与它的实体.
在此环境中开发应用程序的最佳实践和相关工作流程是什么?如何轻松可靠地访问保存主页面实体并使用它们的正确框架.
也许脚本位于错误的位置,需要注入主内容区域,以便直接访问正确的Xrm?我怎样才能做到这一点?
此外,一旦我最终设法访问这些数据,我怎么能轻松地将这些数据传递给我在对话框中运行的角度应用程序,从我阅读的文档中可以看到对话框只允许1个查询字符串参数,并且必须将其称为数据.这对我的应用程序开始使用来说还不够$routeParams
.我不认为使用本地或会话存储是很好的做法.在这种情况下,正确的方法是什么.
我的按钮脚本的示例代码:
function runSendSender() {
// Content Iframe Entity data:
var contentFrameXrm = $('#crmContentPanel')
.find("iframe#contentIFrame0...n")[0]
.contentWindow['Xrm'];
// even if above selector was consistent across pages
// I need to send over much more than this one Id :(
var data = contentFrameXrm.Page.data.entity.getId();
var src = "/WebResources/concep_/ConcepDynamicsApp/ConcepDynamicsApp.html?data=" + data;
var DialogOptions = new Xrm.DialogOptions();
DialogOptions.width = 800;
DialogOptions.height = 500;
Xrm.Internal.openDialog(src, DialogOptions, null, null, CallbackFunction);
function CallbackFunction(returnValue) { …
Run Code Online (Sandbox Code Playgroud) 我刚刚加载了高级查找,我无法点击一半的图标/下拉,因为它们都在错误的位置.它在其他服务器和其他机器上运行良好.它似乎是一个CSS问题.有任何想法吗
我正在使用CRM2016
我创建了一个测试实体来复制问题
我没有对它进行任何定制.我用默认字段和表单创建了一个新记录.然后我尝试访问webapi
http://localhost/CRMDataBase/api/data/v8.0/new_test(bgcs0249-0a06-e611-941a-003002djlnc)
Run Code Online (Sandbox Code Playgroud)
它运作良好并带来了记录.然后我删除了记录并为它创建了一个业务流程,只需一个阶段和一个步骤
我激活它并添加了一个新的测试记录,并试图访问webapi网址,它抛出了以下错误
{"error":{"code":"","message":"属性'stageid'属于无法识别的EdmPropertyKind.实体new_test具有重复的导航属性名称.所有属性名称(Navigation和Structural属性)必须是唯一的实体","innererror":{"message":"属性'stageid'属于无法识别的EdmPropertyKind.实体new_test具有重复的导航属性名称.所有属性名称(Navigation和Structural属性)在实体","类型中必须是唯一的":" Microsoft.Crm.CrmHttpException " "堆栈跟踪":"在Microsoft.Crm.Extensibility.OData.CrmODataEntityTypeSerializer.CreateSelectExpandNode(entityInstanceContext entityInstanceContext个)\ r \n在System.Web.OData.Formatter.Serialization.ODataEntityTypeSerializer.WriteEntry(对象图,ODataWriter作家,ODataSerializerContext writeContext个)\ r \n
在System.Web.OData.Formatter.Serialization.ODataFeedSerializer.WriteFeed(IEnumerable的枚举,IEdmTypeReference的FeedType,ODataWriter作家,ODataSerializerContext writeContext个)\ r \n在 Microsoft.Crm.Extensibility.OData.CrmODataFeedSerializer.WriteObject(对象图,类型类型,ODataMessageWriter messageWriter,ODataSerializerContext writeContext个)\ r \n在System.Web.OData.Formatter.ODataMediaTypeFormatter.WriteToStream(类型类型,对象的值,流writeStream, HttpContent内容,HttpContentHeaders contentHeaders)\ r \n在System.Web.OData.Formatter.ODataMediaTypeFormatter.WriteToStreamAsync(Type type,Object value,Stream writeStream,HttpContent content,TransportContext transportContext,CancellationToken cancellationToken)\ r \n ---结束抛出异常的前一个位置的堆栈跟踪---\r \n在System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务任务)\ r \n在System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务)\ r \n \n在System.Web.Http.WebHost.HttpControllerHandler.d__1b.MoveNext()","internalexception":{"message":"属性'stageid'是一个无法识别的EdmPropertyKind.","type":"Microsoft.ODa ta.Core.ODataException " "堆栈跟踪":"在Microsoft.OData.Core.UriParser.Parsers.SelectPathSegmentTokenBinder.ConvertNonTypeTokenToSegment(PathSegmentToken tokenIn,IEdmModel模型,IEdmStructuredType edmType,ODataUriResolver分解器)\ r \在Microsoft.OData.Coreñ. UriParser.Visitors.SelectPropertyVisitor.ProcessTokenAsPath(NonSystemToken tokenIn个)\ r \n在Microsoft.OData.Core.UriParser.Visitors.SelectPropertyVisitor.Visit(NonSystemToken tokenIn个)\ r \n在Microsoft.OData.Core.UriParser.Parsers.SelectBinder.绑定(SelectToken tokenIn个)\ r \n在Microsoft.OData.Core.UriParser.Parsers.SelectExpandBinder.Bind(ExpandToken tokenIn个)\ r \n在Microsoft.OData.Core.UriParser.Parsers.SelectExpandSemanticBinder.Bind(IEdmStructuredType的ElementType,IEdmNavigationSource在Microsoft.Crm.Extensibility.OData.CrmODataE的Microsoft.OData.Core.UriParser.ODataQueryOptionParser.ParseSelectAndExpand()\ r \n中的navigationSource,ExpandToken expandToken,SelectToken selectToken,ODataUriParserConfiguration配置)\ r \n ntityTypeSerializer.CreateSelectExpandNode(EntityInstanceContext entityInstanceContext)"}}}}
如果我删除所有记录 - >停用业务流程 - >添加新数据然后检查webapi,它运行正常.但是,当我激活业务流程并添加新数据时,我收到上述错误PS:我没有对业务流程和实体进行任何编码/定制.但我仍然得到这个错误
可以做些什么来解决这个问题?
dynamics-crm dynamics-crm-2011 dynamics-crm-2013 dynamics-crm-2015 dynamics-crm-2016
我已经针对 CRM 2013 编写了一个自定义工作流程活动。您不需要了解它的作用。我遇到的问题是,尽管实例化了ITracingService
,但我使用该Trace(...)
方法生成的任何跟踪内容都会在运行时仅针对实时工作流程进行混淆。换句话说,如果我异步运行工作流程并(故意)抛出异常,我可以在相应的系统作业记录中看到跟踪日志。如果我只是将工作流程切换为“实时”(同步),那么我仍然会收到异常,并且仍然会收到任何自定义异常文本,但是当然没有systemjob
为实时工作流程生成相应的内容,因此,就像插件一样,我正在在发生异常时显示的可下载日志文件中查找跟踪输出。在这种情况下,我的跟踪不可见,但我从(可能)托管工作流的父上下文中获取了似乎是 Microsoft 的跟踪日志 - 您可以看到它引用了我的工作流过程定义中的步骤:
[Microsoft.Crm.ObjectModel: Microsoft.Crm.Extensibility.InternalOperationPlugin]
[46f6cf4c-14ae-4f1e-98a1-eae99a37e95c: ExecuteWorkflow]
Starting sync workflow 'MyTestWorkflow', Id: ca8782b1-7ca4-e311-a055-6c3be5be5f78
Entering CreateStep1_step:
Entering CustomActivityStep2_step:
Sync workflow '__Test' terminated with error 'Unexpected exception from plug-in (Execute): My.Test.WF.DoSomething: System.NullReferenceException: Object reference not set to an instance of an object.'
Run Code Online (Sandbox Code Playgroud)
在我的程序集中,My.Test.WF.DoSomething
我在调用时访问跟踪服务并立即开始通过该Trace()
方法进行写入,例如
_trace.Trace("Starting Greg's custom code...");
Run Code Online (Sandbox Code Playgroud)
这只是一个示例,但要点是,我的跟踪在异步时有效,但在同步时“丢失”。
有任何想法吗?
在Dynamics CRM 2013中,我使用标准活动和自定义活动.对于所有这些我有自定义字段Account
,我自动用Regarding
对象填写帐户(如果可能).有没有办法在常规活动视图上显示此字段(不是针对特定活动)?可能有一种方法可以直接向Activity实体添加自定义字段吗?
microsoft-dynamics dynamics-crm dynamics-crm-2011 dynamics-crm-2013
我想知道如何在我正在制作的CRM插件中获取OptionSet的字符串值.我认为我所要做的就是将int值传递给OptionSetValue,但这似乎不起作用.这是我的代码:
aBillingFrequencyCode = new OptionSetValue(myContract.BillingFrequencyCode.Value).ToString();
Run Code Online (Sandbox Code Playgroud)
但输出只是
Microsoft.Xrm.Sdk.OptionSetValue
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
在过去的一周左右的时间里,我一直在使用FakeXrmEasy编写单元测试,我通常对它的工作方式感到满意。但是有一个地方我无法按照我的意愿使模拟工作。
在Dynamics CRM安装中,有一个正在运行的插件,可以在销售订单上设置订单号。如果没有此选项,则返回的订单号值始终为null。
我怎样才能告诉FakeXrmEasy模拟设置订单号值?理想情况下,我希望大致像这样进入请求管道:
var context = new FakeXrmEasy.XrmFakedContext();
context.Initialize(TestEntities);
context.TamperWithResults<RetrieveRequest>( x => {
return SetOrderNumber(x);
});
context.GetFakedOrganizationService();
var result = context.Retrieve(...);
Run Code Online (Sandbox Code Playgroud)
我可以尝试使用.AddExecutionMock模拟整个结果,但是有问题的响应用于验证销售订单确实以正确的值保存。
更新-更详细的信息 也许我在问问题时应该更详细一些。我刚刚加入了一个现有项目,并且正在为现有代码编写测试。失败的测试正在运行执行此操作的功能:
现在,由于该函数尝试保存订单,因此除非我可以指定将由Create()调用返回的Guid,否则无法将其添加到安装程序的上下文中。
我已经编写了代码来检查 CRM 中的记录是否存在。问题是当没有找到记录时 IOrganisationService.Retrieve 返回错误而不是空值。我希望找不到多条记录,我不想使用 try catch 然后使用 catch 中的错误。
using (OrganizationServiceProxy serviceProxy = new OrganizationServiceProxy(OrganizationUri, HomeRealmUri, credentials, null))
{
IOrganizationService service = (IOrganizationService)serviceProxy;
//Get record
var record = service.Retrieve(entryId, guid, new ColumnSet(true)); //switch to var if no work
//Check if record is not null/empty
recordExists = !String.IsNullOrWhiteSpace(record.Id.ToString()); //<- does the record exist
}
Run Code Online (Sandbox Code Playgroud)
建议?