Dynamics crm 未执行报价产品的动态CRM 2013预操作插件
编辑Dynamics crm 未执行报价产品的动态CRM 2013预操作插件,dynamics-crm,dynamics-crm-2013,Dynamics Crm,Dynamics Crm 2013,编辑 问题解决了。我创建了一个名称中没有下划线的新项目。所以,在注销旧程序集和注册新程序集之后,插件被执行。同样在新的项目中,我用没有密码的密钥签署了dll。有益的神秘消失了。谢谢大家抽出时间 ================================================================================================================================= 插件的上下文是:销售部门正在创建报价并向报价中
问题解决了。我创建了一个名称中没有下划线的新项目。所以,在注销旧程序集和注册新程序集之后,插件被执行。同样在新的项目中,我用没有密码的密钥签署了dll。有益的神秘消失了。谢谢大家抽出时间 ================================================================================================================================= 插件的上下文是:销售部门正在创建报价并向报价中添加产品。引号中有一列LineItemNumber。所以,当用户想要将产品移动到3个位置时,它只需将LineItemNumber更改为3(例如8)。所以,插件正在重写LineItemNumber。所以,3变为4,4=>5,依此类推。 以下是插件代码:
using System;
using Microsoft.Xrm.Sdk;
using Microsoft.Xrm.Sdk.Query;
namespace plugin_fix_line_item_number
{
public class FixLineItemNumbers : IPlugin
{
public void Execute(IServiceProvider serviceProvider)
{
// Obtain the execution context from the service provider.
IPluginExecutionContext context = (IPluginExecutionContext)serviceProvider.GetService(typeof(IPluginExecutionContext));
// Get a reference to the Organization service.
IOrganizationServiceFactory factory = (IOrganizationServiceFactory)serviceProvider.GetService(typeof(IOrganizationServiceFactory));
IOrganizationService service = factory.CreateOrganizationService(context.UserId);
if (context.InputParameters != null)
{
//Get Target - includes everything changed
Entity entity = (Entity)context.InputParameters["Target"];
//Get Pre Image
Entity image = context.PreEntityImages["PreImage"];
// post image
//Entity imagePost = context.PostEntityImages["PostImage"];
int? new_lin = null; //lineitemnumber
int? old_lin = null;
if (entity.Attributes.Contains("lineitemnumber"))
{
new_lin = (int)entity.Attributes["lineitemnumber"];
old_lin = (int)image.Attributes["lineitemnumber"];
if (new_lin < 1) return;
if (new_lin != null && old_lin != null)
{
if (new_lin != old_lin)
{
bool pieskaitiit = true; //by default, count lineItemNumber up
EntityCollection products = new EntityCollection();
QueryExpression q = new QueryExpression("quotedetail");
q.ColumnSet = new ColumnSet(new string[] { "lineitemnumber" });
q.Criteria.FilterOperator = LogicalOperator.And;
Guid quote_id = ((EntityReference)image.Attributes["quoteid"]).Id;
q.Criteria.AddCondition("quoteid", ConditionOperator.Equal, quote_id);
if (new_lin > old_lin) // 2 pozīcija pārtop par 5 2 => 5
{
q.Criteria.AddCondition("lineitemnumber", ConditionOperator.LessEqual, new_lin);
q.Criteria.AddCondition("lineitemnumber", ConditionOperator.GreaterThan, old_lin);
pieskaitiit = false; // here must count down
}
else{ // 5 pozīcija pārvietojas uz otro 5 => 2
q.Criteria.AddCondition("lineitemnumber",ConditionOperator.LessThan, old_lin);
q.Criteria.AddCondition("lineitemnumber",ConditionOperator.LessThan, old_lin);
}
products = service.RetrieveMultiple(q);
foreach(Entity e in products.Entities)
{
int lin = e.GetAttributeValue<int>("lineitemnumber");
if (pieskaitiit) lin++; else lin--;
e.Attributes["lineitemnumber"] = 9;
service.Update(e);
}
}
}
}
}
}//
}
}
我在谷歌上搜索发现:
所以,如果我禁用了ActivityFeeds.Plugins.ActivityClose
步骤,则在保存表单时,不会(通过插件)更改数据库。即使我添加行抛出新异常(“大错误”)
在第一个if之前,也就是说什么都没有发生,表单正在保存数据,但插件没有执行
我也尝试过插件分析器()。我跑得很好。如果禁用了ActivityFeeds.Plugins.ActivityClose
步骤,然后运行探查器,然后进行调试,则会引发异常
这个插件只有一个,是在操作前执行的
我还能调查什么?一些系统配置问题?也许有人有一些想法,我还可以试试。谢谢。问题解决了。我创建了一个新的C#项目,名称中没有下划线。所以,在crm中注销旧程序集并注册新程序集之后,插件被执行。同样在新的项目中,我用没有密码的密钥签署了dll。有益的神秘消失了。另外
ActivityFeeds.Plugins.ActivityClose:任何实体的更新
步骤一禁用。
感谢大家抽出时间。最终目标是以特定方式订购报价行项目吗?@JasonFaulkner,是的。
Unhandled Exception: System.ServiceModel.FaultException`1[[Microsoft.Xrm.Sdk.OrganizationServiceFault, Microsoft.Xrm.Sdk, Version=6.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35]]: An error occurred. Contact a system administrator or refer to the Microsoft Dynamics CRM SDK troubleshooting guide.Detail:
<OrganizationServiceFault xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.microsoft.com/xrm/2011/Contracts">
<ErrorCode>-2147220891</ErrorCode>
<ErrorDetails xmlns:d2p1="http://schemas.datacontract.org/2004/07/System.Collections.Generic">
<KeyValuePairOfstringanyType>
<d2p1:key>OperationStatus</d2p1:key>
<d2p1:value xmlns:d4p1="http://www.w3.org/2001/XMLSchema" i:type="d4p1:string">0</d2p1:value>
</KeyValuePairOfstringanyType>
<KeyValuePairOfstringanyType>
<d2p1:key>SubErrorCode</d2p1:key>
<d2p1:value xmlns:d4p1="http://www.w3.org/2001/XMLSchema" i:type="d4p1:string">-2146233088</d2p1:value>
</KeyValuePairOfstringanyType>
</ErrorDetails>
<Message>An error occurred. Contact a system administrator or refer to the Microsoft Dynamics CRM SDK troubleshooting guide.</Message>
<Timestamp>2014-12-11T15:38:01.0167124Z</Timestamp>
<InnerFault i:nil="true" />
<TraceText>
[ActivityFeeds.Plugins: ActivityFeeds.Plugins.ActivityClose]
[6213e0c9-2881-e411-9ac4-0050569aa6cf: ActivityFeeds.Plugins.ActivityClose: Update of any Entity]
</TraceText>
</OrganizationServiceFault>