C# 商机实体的crm2011插件问题

C# 商机实体的crm2011插件问题,c#,dynamics-crm-2011,C#,Dynamics Crm 2011,我创建了crm2011插件,该插件在Opportunity上的更新消息(Pre_操作)时触发。在插件中,我使用电子邮件模板,并使用电子邮件模板发送电子邮件。当我运行时,插件无法使用电子邮件模板发送电子邮件,尽管模板id是正确的。我收到错误消息“对象引用未设置为对象的实例”。请帮助我…这是我的插件代码 namespace Ppp.CRM.Plugin.OpptBidOwnerChange { public class BidOwnerChange : IPlugin { #region

我创建了crm2011插件,该插件在Opportunity上的更新消息(Pre_操作)时触发。在插件中,我使用电子邮件模板,并使用电子邮件模板发送电子邮件。当我运行时,插件无法使用电子邮件模板发送电子邮件,尽管模板id是正确的。我收到错误消息“对象引用未设置为对象的实例”。请帮助我…这是我的插件代码

namespace Ppp.CRM.Plugin.OpptBidOwnerChange
{
 public class BidOwnerChange : IPlugin
 {
    #region Class Level Variables
    IServiceProvider _serviceProvider;
    IOrganizationServiceFactory _serviceFactory = null;
    IOrganizationService _service = null;
    IPluginExecutionContext _context = null;

    Entity _target = null;
    Entity _preImage = null;
    Entity _postImage = null;
    Guid _currentUser;
    Guid pre_bidownerid = Guid.Empty;
    Guid tag_bidownerid = Guid.Empty;
    Guid ownerid = Guid.Empty;
    Guid opportunityid = Guid.Empty;
    #endregion

    #region  IPlugin Members
    public void Execute(IServiceProvider serviceProvider)
    {
        try
        {
            string message = null;
            _serviceProvider = serviceProvider;
            _context = (IPluginExecutionContext)
                                         serviceProvider.GetService(typeof(IPluginExecutionContext));

            _serviceFactory = (IOrganizationServiceFactory)serviceProvider.GetService(typeof(IOrganizationServiceFactory));
            _currentUser = _context.UserId;
            message = _context.MessageName.ToLower();

            if (message == "update")//message == "create" || 
            {
                if (_context.InputParameters.Contains("Target") && _context.InputParameters["Target"] != null)
                    _target = (Entity)_context.InputParameters["Target"];

                if (_context.PreEntityImages.Contains("PreImage") && _context.PreEntityImages["PreImage"] != null)
                    _preImage = (Entity)_context.PreEntityImages["PreImage"];

                if (_context.PostEntityImages.Contains("PostImage") && _context.PostEntityImages["PostImage"] != null)
                    _postImage = (Entity)_context.PostEntityImages["PostImage"];


                if (_preImage.Attributes.Contains("hm_bidowner"))
                {
                    EntityReference owner = (EntityReference)_preImage.Attributes["hm_bidowner"];
                    pre_bidownerid = owner.Id;
                    _target.Attributes["hm_previousbidowner"] = new EntityReference("systemuser", owner.Id);
                }
                if (_target.Attributes.Contains("hm_bidowner"))
                {
                    EntityReference owner = (EntityReference)_target.Attributes["hm_bidowner"];
                    tag_bidownerid = owner.Id;
                }
                if (_preImage.Attributes.Contains("ownerid"))
                {
                    EntityReference owner = (EntityReference)_preImage.Attributes["ownerid"];
                    ownerid = owner.Id;
                }

                opportunityid = _target.Id;

                ActivityParty emailFrom = new ActivityParty { PartyId = new EntityReference("systemuser", _context.UserId) };
                List<ActivityParty> emailTo = new List<ActivityParty>();

                // alert user
                if (_preImage.Attributes.Contains("ownerid"))
                {
                    emailTo.Add(new ActivityParty { PartyId = new EntityReference("systemuser", ownerid) });
                }
                if (_preImage.Attributes.Contains("hm_bidowner"))
                {
                    emailTo.Add(new ActivityParty { PartyId = new EntityReference("systemuser", pre_bidownerid) });
                }
                if (_target.Attributes.Contains("hm_bidowner"))
                {
                    //emailTo.Add(new ActivityParty { PartyId = ((EntityReference)_target["hm_bidowner"]) });
                    emailTo.Add(new ActivityParty { PartyId = new EntityReference("systemuser", tag_bidownerid) });
                }

                Email email = new Email();
                email.From = new ActivityParty[] { emailFrom }; ;
                if (emailTo.Count() > 0)
                    email.To = emailTo;

                Guid templateId = Guid.Empty;
                templateId = new Guid("EC361CDE-6C9E-E111-BF90-D8D3855BE525");//ACE17A0C-279B-E111-9E28-080027332B48

                SendEmailFromTemplateRequest emailUsingTemplateReq = new SendEmailFromTemplateRequest
                {
                    Target = email,
                    TemplateId = templateId,
                    RegardingId = opportunityid,
                    RegardingType = Opportunity.EntityLogicalName
                };


                SendEmailFromTemplateResponse emailUsingTemplateResp = (SendEmailFromTemplateResponse)_service.Execute(emailUsingTemplateReq);

            }
        }
        catch (Exception ex)
        {
            throw new InvalidPluginExecutionException(ex.Message, ex);
        }
    }
    #endregion

    #region CRM Service
    private void CreateCRMService()
    {
        try
        {
            _service = _serviceFactory.CreateOrganizationService(_currentUser);
        }
        catch (Exception ex)
        {
            throw ex;
        }
    }
    #endregion

}
namespace Ppp.CRM.Plugin.OpptBidOwnerChange
{
公共类投标人变更:IPlugin
{
#区域级变量
IServiceProvider\u服务提供商;
IOOrganizationServiceFactory\u serviceFactory=null;
IOrganizationService _service=null;
IPluginExecutionContext_context=null;
实体_target=null;
实体_preImage=null;
实体_postImage=null;
Guid\u当前用户;
Guid pre_bidownerid=Guid.Empty;
Guid tag_bidownerid=Guid.Empty;
Guid ownerid=Guid.Empty;
Guid opportunityid=Guid.Empty;
#端区
#区域IPlugin成员
public void Execute(IServiceProvider服务提供程序)
{
尝试
{
字符串消息=null;
_服务提供者=服务提供者;
_上下文=(IPluginExecutionContext)
GetService(typeof(IPluginExecutionContext));
_serviceFactory=(IOOrganizationServiceFactory)serviceProvider.GetService(typeof(IOOrganizationServiceFactory));
_currentUser=\u context.UserId;
message=_context.MessageName.ToLower();
if(message==“update”)//message==“create”|
{
if(_context.InputParameters.Contains(“Target”)&&&_context.InputParameters[“Target”]!=null)
_target=(实体)_context.InputParameters[“target”];
if(_context.PreEntityImages.Contains(“PreImage”)&&&_context.PreEntityImages[“PreImage”]!=null)
_preImage=(实体)_context.PreEntityImages[“preImage”];
if(_context.PostEntityImages.Contains(“PostImage”)&&&_context.PostEntityImages[“PostImage”]!=null)
_postImage=(实体)_context.PostEntityImages[“postImage”];
if(_preImage.Attributes.Contains(“hm_bidowner”))
{
EntityReference所有者=(EntityReference)_preImage.Attributes[“hm_bidowner”];
pre_bidownerid=所有者Id;
_target.Attributes[“hm_previousbidowner”]=新的EntityReference(“systemuser”,owner.Id);
}
如果(_target.Attributes.Contains(“hm_bidowner”))
{
EntityReference所有者=(EntityReference)_target.Attributes[“hm_bidowner”];
tag_bidownerid=owner.Id;
}
if(_preImage.Attributes.Contains(“ownerid”))
{
EntityReference所有者=(EntityReference)_preImage.Attributes[“ownerid”];
ownerid=所有者Id;
}
opportunityid=_target.Id;
ActivityParty emailFrom=new ActivityParty{PartyId=new EntityReference(“systemuser”,\u context.UserId)};
List emailTo=新列表();
//提醒用户
if(_preImage.Attributes.Contains(“ownerid”))
{
emailTo.Add(新的ActivityParty{PartyId=new EntityReference(“systemuser”,ownerid)});
}
if(_preImage.Attributes.Contains(“hm_bidowner”))
{
emailTo.Add(新活动方{PartyId=new EntityReference(“systemuser”,pre_bidownerid)});
}
如果(_target.Attributes.Contains(“hm_bidowner”))
{
//emailTo.Add(新的ActivityParty{PartyId=((EntityReference)_target[“hm_bidowner”]));
emailTo.Add(新的ActivityParty{PartyId=newentityreference(“systemuser”,tag_bidownerid)});
}
电子邮件=新电子邮件();
email.From=new ActivityParty[]{emailFrom};
如果(emailTo.Count()>0)
email.To=emailTo;
Guid templateId=Guid.Empty;
templateId=新Guid(“EC361CDE-6C9E-E111-BF90-D8D3855BE525”);//ACE17A0C-279B-E111-9E28-080027332B48
SendEmailFromTemplateRequest emailUsingTemplateReq=新建SendEmailFromTemplateRequest
{
目标=电子邮件,
TemplateId=TemplateId,
RegardingId=机会主义ID,
RegardingType=Opportunity.EntityLogicalName
};
SendEmailFromTemplateResponse EmailUsingTemplateResponse=(SendEmailFromTemplateResponse)\ u service.Execute(emailUsingTemplateReq);
}
}
捕获(例外情况除外)
{
抛出新的InvalidPlugineExecutionException(例如消息,例如);
}
}
#端区
#区域客户关系管理服务
私有void CreateCRMService()
{
尝试
{
_服务=\u serviceFactory.CreateOrganizationService(\u currentUser);
}
捕获(例外情况除外)
{
掷骰子;
}
}
#端区
}
}

\u服务
代码中的值仍然为空
这意味着您尚未重新初始化该值

请参考这些链接

1.
2.

3.

正如弗兰克刚才提到的那样,服务仍然是空的。在执行方法中遵循此模板:

public void Execute(IServiceProvider serviceProvider){

// Obtain the execution context from the service provider.
Microsoft.Xrm.Sdk.IPluginExecutionContext context = (Microsoft.Xrm.Sdk.IPluginExecutionContext)
            serviceProvider.GetService(typeof(Microsoft.Xrm.Sdk.IPluginExecutionContext));

// Obtain the organization service reference.
IOrganizationServiceFactory serviceFactory = (IOrganizationServiceFactory   serviceProvider.GetService(typeof(IOrganizationServiceFactory));

IOrganizationService service = serviceFactory.CreateOrganizationService(context.UserId);

}

请告诉我哪一行代码给出了错误
对象引用未设置为对象的实例
,以便我可以给你建议?这一行代码给出了错误“对象引用未设置为对象的实例”SendEmailFromTemplateResponse emailUsingTemplateResp=(从TemplateResponse发送电子邮件)\u service.Exec
public void Execute(IServiceProvider serviceProvider){

// Obtain the execution context from the service provider.
Microsoft.Xrm.Sdk.IPluginExecutionContext context = (Microsoft.Xrm.Sdk.IPluginExecutionContext)
            serviceProvider.GetService(typeof(Microsoft.Xrm.Sdk.IPluginExecutionContext));

// Obtain the organization service reference.
IOrganizationServiceFactory serviceFactory = (IOrganizationServiceFactory   serviceProvider.GetService(typeof(IOrganizationServiceFactory));

IOrganizationService service = serviceFactory.CreateOrganizationService(context.UserId);

}