1. 程式人生 > >伺服器端程式碼-plugin--建立

伺服器端程式碼-plugin--建立

using Microsoft.Xrm.Sdk;
using Microsoft.Xrm.Sdk.Client;
using Microsoft.Xrm.Sdk.Query;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace RekTec.Crm.Plugin.Training
{
    public class salesorder_Create_pre : IPlugin
    {
        public void Execute(IServiceProvider serviceProvider)
        {
            // 獲取執行上下文
            IPluginExecutionContext context = (IPluginExecutionContext)serviceProvider.GetService(typeof(IPluginExecutionContext));
            // 獲取服務工廠
            IOrganizationServiceFactory factory = (IOrganizationServiceFactory)serviceProvider.GetService(typeof(IOrganizationServiceFactory));
            // 獲取服務
            IOrganizationService service = factory.CreateOrganizationService(context.UserId);
            // 獲取除錯服務
            ITracingService tracing = (ITracingService)serviceProvider.GetService(typeof(ITracingService));
            // 獲取組織服務上下文
            OrganizationServiceContext orgContext = new OrganizationServiceContext(service);
            //  建立銷售訂單資料時,訂單單號不能重複,客戶電話不能為空
            if (context.MessageName.ToLower() == "create"
                && context.PrimaryEntityName.ToLower() == "new_salesorder"
                && context.InputParameters["Target"] is Entity)
            {
                Entity entity = context.InputParameters["Target"] as Entity;
                if (entity != null)
                {
                    // 必須輸入主要電話
                    if (!entity.Contains("new_customercalls"))
                    {
                        throw new InvalidPluginExecutionException("請輸入客戶電話!");
                    }
                    string new_name = entity["new_name"].ToString();
                    //expression查詢
                    QueryExpression expression = new QueryExpression("new_salesorder");//實體名稱
                    expression.ColumnSet.AddColumn("new_name");//要查詢的列
                    expression.Criteria.AddCondition(new ConditionExpression("new_name", ConditionOperator.Equal, new_name));//查詢條件:欄位名稱,值
                    if (service.RetrieveMultiple(expression).Entities.Count > 0)
                    {
                        throw new InvalidPluginExecutionException("客戶名稱已經存在,不允許重複!");
                    }
                }
            }
        }
    }
}