我应该从一开始就添加 - 这是在Microsoft Dynamics CRM 2011中
我很了解CRM,但我无法解释当前部署的行为.
请阅读我的场景概要,以帮助我理解我的哪些假设/理解是错误的(因此导致此错误的原因).这与我的期望不符.
此工作流作业已取消,因为启动它的工作流包含无限循环.更正工作流逻辑,然后重试.有关工作流逻辑的信息,请参阅帮助.
首先,我认为在这种情况下忽略插件代码的内容是非常安全的.它工作正常,它是原子的,几乎不接触CRM(很明显,它是一个运行远程Web服务的事件前插件,等待响应,然后在我的Trigger记录上设置"完成日期"日期/时间属性,然后通过目标实体回到管道中).只要创建了一个Trigger记录,该代码就会运行并执行它应有的操作.
打了插件的内容后,可能会有一个问题,我不喜欢在实体的预创建步骤中注册插件...
这就离开了工作流程本身.这是一个简单的.它如此运行:
通过这种设置,我手动创建一个新的Trigger记录,并且该过程很好地实现了动作.向前滚动1小时58分钟(基于我运行的最后一个循环 - 记住我的插件代码可能需要一分钟才能完成运行),经过7个成功的执行周期(即创建并完成新的工作流程作业)后,第8个失败了上述错误.
默认情况下,递归深度设置为8.如果工作流/插件自身调用8次,则会检测到无限循环.
递归深度每隔一小时重置一次(或10分钟 - 请参阅链接博客中的"警告"?)
可以在内部部署中使用部署Web服务 通过PowerShell或SDK代码设置递归深度设置(通过Set-CrmSetting Cmdlet)
"更改递归深度设置"
我无法更改部署递归深度设置,因为这不是在线方案中的选项 - 最终我也将部署到CRM Online.
" 延长工作流程的超时时间 "
这也不是一个选项 - 重新索引需要每15分钟发生一次,理想情况下更快.
@Boone在下面建议递归深度超时在60分钟不活动后重置,而不是每60分钟重置一次.这是第一个误解.
在与@alex讨论时,我建议在通过工作流创建实体和产生最终产生的工作流之间可能存在一些持久性的CorrelationId ......好吧.插件和工作流中的CorrelationId相同,并且该线程的任何记录都是相同的.我现在正在研究如何从实体和工作流中分离CorrelationId(或者可能是创建记录).
我需要在创建新约会时更改约会记录的所有者.我正在使用插件创建消息,我发现此代码将新的所有者分配给约会:
entity = context.PostEntityImages["PostImage"];
......
AssignRequest request = new AssignRequest();
//request.RequestName
request.Assignee = new EntityReference("systemuser", owners.ToList()[0].Id);
request.Target = new EntityReference(Appointment.EntityLogicalName, entity.Id);
service.Execute(request);
Run Code Online (Sandbox Code Playgroud)
但是当我测试这个时,我得到以下错误:无效的参数:活动应该只有一个所有者聚会
我想我必须首先删除当前所有者,然后分配新的所有者.但我怎么能这样做?
谢谢你的帮助!
我已经针对 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)
这只是一个示例,但要点是,我的跟踪在异步时有效,但在同步时“丢失”。
有任何想法吗?
我有一个子网格,它与当前记录的关系是n:n.
我想将过滤后的视图添加到此子网格的"添加现有"按钮.
任何的想法?
(我跟着这篇与我的要求完全相同的文章:http://danielcai.blogspot.com/2011/12/filtered-lookup-for-existing-button-of.html)
如何在CRM 2011 Javascript中获取记录中特定字段的模式名称?
客户端具有一个VM,其中安装了CRM 2011的暂存版本,以用于开发目的.到目前为止,它已在客户端使用,因此所有内容都根据客户端自己的Active Directory设置进行身份验证.
我现在需要在他们的网络之外使用这个VM,但当然CRM不会与AD网络分离.
如果我在VM中安装域控制器,Active Directory等,有没有办法告诉CRM使用本地AD进行身份验证而不是查找客户端的AD服务器?
基本上我想使这个VM成为一个完全独立的CRM 2011安装,而无需从头开始重新安装CRM.那可能吗?