Microsoft CRM 2011插件-简单问题 [英] Microsoft CRM 2011 Plugins - Simple Issue

查看:80
本文介绍了Microsoft CRM 2011插件-简单问题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试编写一个插件来在Microsoft CRM 2011中创建一个新的联系人实体.我还没有在网上找到任何有用的信息,我觉得我整天都在撞墙.我在下面发布的代码给我一个错误,提示名称'服务'在当前上下文中不存在".谁能告诉我发生了什么事?

I am trying to write a plugin to create a new contact entity in Microsoft CRM 2011. I'm yet to find any useful information online and I feel like I've been banging my head against a brick wall all day. The code I have posted below is giving me an error saying "The name 'service' does not exist in the current context". Can anyone tell me what's going on, please?

// <copyright file="PreValidateContactCreate.cs" company="">
// Copyright (c) 2013 All Rights Reserved
// </copyright>
// <author></author>
// <date>8/6/2013 4:22:10 PM</date>
// <summary>Implements the PreValidateContactCreate Plugin.</summary>
// <auto-generated>
//     This code was generated by a tool.
//     Runtime Version:4.0.30319.1
// </auto-generated>
namespace Plugins1
{
    using System;
    using System.ServiceModel;
    using System.Collections.Generic;
    using Microsoft.Xrm.Sdk;
    using Microsoft.Crm.Sdk.Messages;
    using Microsoft.Xrm.Sdk.Client;
    using Microsoft.Xrm.Sdk.Discovery;
    using Microsoft.Xrm.Sdk.Metadata;
    using Microsoft.Xrm.Sdk.Query;


    /// <summary>
    /// PreValidateContactCreate Plugin.
    /// </summary>    
    public class PreValidateContactCreate: Plugin
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="PreValidateContactCreate"/> class.
        /// </summary>
        public PreValidateContactCreate()
            : base(typeof(PreValidateContactCreate))
        {
            base.RegisteredEvents.Add(new Tuple<int, string, string, Action<LocalPluginContext>>(10, "Create", "contact", new Action<LocalPluginContext>(ExecutePreValidateContactCreate)));

            // Note : you can register for more events here if this plugin is not specific to an individual entity and message combination.
            // You may also need to update your RegisterFile.crmregister plug-in registration file to reflect any change.
        }

        /// <summary>
        /// Executes the plug-in.
        /// </summary>
        /// <param name="localContext">The <see cref="LocalPluginContext"/> which contains the
        /// <see cref="IPluginExecutionContext"/>,
        /// <see cref="IOrganizationService"/>
        /// and <see cref="ITracingService"/>
        /// </param>
        /// <remarks>
        /// For improved performance, Microsoft Dynamics CRM caches plug-in instances.
        /// The plug-in's Execute method should be written to be stateless as the constructor
        /// is not called for every invocation of the plug-in. Also, multiple system threads
        /// could execute the plug-in at the same time. All per invocation state information
        /// is stored in the context. This means that you should not use global variables in plug-ins.
        /// </remarks>
        protected void ExecutePreValidateContactCreate(LocalPluginContext localContext)
        {
            if (localContext == null)
            {
                throw new ArgumentNullException("localContext");
            }

            // TODO: Implement your custom Plug-in business logic.


            Entity Contact = new Entity("contact");
            Contact.Attributes["firstname"] = "SomeName";
            Contact.Attributes["lastname"] = "SomeSurname";

            service.Create(Contact);
        }
    }
}

推荐答案

由于尚未定义服务而引发了错误.需要先定义它,然后才能调用service.Create.

An error is being thrown because service is not yet defined. It needs to be defined before you can call service.Create.

以下是一些我对可能有用的插件使用的代码.似乎比您的示例简单一些.

The following is some code that I use for plugins that you might find useful. Seems a bit simpler than your example.

我已经修改了代码以显示创建和更新

I have modified the code to show a Create and an Update

using Microsoft.Xrm.Sdk;
using Microsoft.Xrm.Sdk.Messages;
using Microsoft.Xrm.Sdk.Query;
using System;
using System.Collections.Generic;
using System.Linq;
using System.ServiceModel;

namespace PluginSample
{
    public class ContactSample : IPlugin
    {
        public void Execute(IServiceProvider serviceProvider)
        {
            // Get the context
            IPluginExecutionContext context = (IPluginExecutionContext)serviceProvider.GetService(typeof(IPluginExecutionContext));

            try
            {
                IOrganizationServiceFactory factory = (IOrganizationServiceFactory)serviceProvider.GetService(typeof(IOrganizationServiceFactory));
                IOrganizationService service = factory.CreateOrganizationService(context.UserId);

                if (context.MessageName == "Create")
                {
                    // Creates a contact
                    Entity contact = new Entity("contact");
                    contact.Attributes.Add("firstname", "SomeName");
                    contact.Attributes.Add("lastname", "SomeSurname");
                    service.Create(contact);
                }
                else if (context.MessageName == "Update")
                {
                    if (context.InputParameters.Contains("Target") && context.InputParameters["Target"] is Entity)
                    {
                        // Update contact
                        Entity contact = new Entity("contact");
                        contact.Id = new Guid("EBFB262C-5EFF-E211-8BEB-1CC1DEEAE7EC");
                        contact.Attributes.Add("firstname", "Name Changed");
                        service.Update(contact);
                    }
                }

            }
            catch (Exception generalException)
            {
                throw new InvalidPluginExecutionException("Plugin Failed - Execute :-(", generalException);
            }
        }
    }
}

这篇关于Microsoft CRM 2011插件-简单问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆