using Microsoft.Xrm.Sdk;
using Microsoft.Xrm.Sdk.Query;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using ZLCRM.Plugin.RetrieveMultiple.Common;
namespace ZLCRM.Plugin.RetrieveMultiple
{
public class Product : IPlugin
{
public void Execute(IServiceProvider serviceProvider)
{
IPluginExecutionContext context = (IPluginExecutionContext)serviceProvider.GetService(typeof(IPluginExecutionContext));
IOrganizationServiceFactory factory = (IOrganizationServiceFactory)serviceProvider.GetService(typeof(IOrganizationServiceFactory));
IOrganizationService adminOrgService = factory.CreateOrganizationService(null);//管理员服务
IOrganizationService curUserOrgService = factory.CreateOrganizationService(context.InitiatingUserId);//当前用户服务
int contextId=0;
if (context.MessageName == "RetrieveMultiple")
{
if (context.Stage != 20)
{
return;
}
if (context.PrimaryEntityName != "product")
{
return;
}
List<string> roleList = GetUserRoleCode(context.InitiatingUserId, adminOrgService);
QueryExpression query = (QueryExpression)context.InputParameters["Query"];
//判断是否是套餐(产品\套餐 公用同一个产品及套餐 )
var product_kit = query.Criteria.Conditions.ToList().Where(q => q.AttributeName == "zhaopin_is_product_kit").ToList();
var iskit = product_kit.Count > 0 ? Convert .ToInt32( product_kit[0].Values[0]).ToString() : "string.Empty";
if (iskit == "1")
{
//throw new InvalidPluginExecutionException(product_kit[0].Values[0].ToString());
if (roleList.Contains(((int)RoleCode.CityManager).ToString())) //城市经理
{
Guid branchId = Guid.Empty;
Guid businessLineId = Guid.Empty;
GetUserInfo(context.InitiatingUserId, adminOrgService, out branchId, out businessLineId);
if (context.InputParameters["Query"].GetType().Name == "QueryExpression")
{
if (query.EntityName == "product")
{
if (branchId != Guid.Empty)
{
LinkEntity Likbranch = new LinkEntity("zhaopin_product_zhaopin_branch", "zhaopin_branch", "zhaopin_branchid", "zhaopin_branchid", JoinOperator.Inner);//套餐
Likbranch.EntityAlias = "bu";
LinkEntity Likproduct = new LinkEntity("product", "zhaopin_product_zhaopin_branch", "productid", "productid", JoinOperator.Inner);//套餐
Likproduct.EntityAlias = "po";
Likbranch.LinkCriteria.AddCondition("zhaopin_branchid", ConditionOperator.Equal, branchId);
Likproduct.LinkEntities.Add(Likbranch);
query.LinkEntities.Add(Likproduct);
}
}
}
}
else if (roleList.Contains(((int)RoleCode.CityOperation).ToString())) //分公司运营
{
Guid branchId = Guid.Empty;
Guid businessLineId = Guid.Empty;
GetUserInfo(context.InitiatingUserId, adminOrgService, out branchId, out businessLineId);
if (context.InputParameters["Query"].GetType().Name == "QueryExpression")
{
if (query.EntityName == "product")
{
if (branchId != Guid.Empty)
{
LinkEntity Likbranch = new LinkEntity("zhaopin_product_zhaopin_branch", "zhaopin_branch", "zhaopin_branchid", "zhaopin_branchid", JoinOperator.Inner);//套餐
Likbranch.EntityAlias = "bu";
LinkEntity Likproduct = new LinkEntity("product", "zhaopin_product_zhaopin_branch", "productid", "productid", JoinOperator.Inner);//套餐
Likproduct.EntityAlias = "po";
Likbranch.LinkCriteria.AddCondition("zhaopin_branchid", ConditionOperator.Equal, branchId);
Likproduct.LinkEntities.Add(Likbranch);
query.LinkEntities.Add(Likproduct);
}
context.InputParameters["Query"] = query;
}
}
}
else if (roleList.Contains(((int)RoleCode.KA).ToString()))
{
Guid branchId = Guid.Empty;
Guid businessLineId = Guid.Empty;
GetUserInfo(context.InitiatingUserId, adminOrgService, out branchId, out businessLineId);
if (context.InputParameters["Query"].GetType().Name == "QueryExpression")
{
if (query.EntityName == "product")
{
if (branchId != Guid.Empty)
{
LinkEntity Likbranch = new LinkEntity("zhaopin_product_zhaopin_branch", "zhaopin_branch", "zhaopin_branchid", "zhaopin_branchid", JoinOperator.Inner);//套餐
Likbranch.EntityAlias = "bu";
LinkEntity Likproduct = new LinkEntity("product", "zhaopin_product_zhaopin_branch", "productid", "productid", JoinOperator.Inner);//套餐
Likproduct.EntityAlias = "po";
Likbranch.LinkCriteria.AddCondition("zhaopin_branchid", ConditionOperator.Equal, branchId);
Likproduct.LinkEntities.Add(Likbranch);
query.LinkEntities.Add(Likproduct);
}
}
}
}
}
}
}
/// <summary>
/// 查询用户信息
/// </summary>
/// <param name="sysUserId"></param>
/// <param name="adminOrgService"></param>
private static void GetUserInfo(Guid sysUserId, IOrganizationService adminOrgService, out Guid branchId, out Guid businessLineId)
{
//查询用户所在分公司业务线
QueryExpression queryUser = new QueryExpression("systemuser");
queryUser.Criteria = new FilterExpression();
queryUser.Criteria.AddCondition("systemuserid", ConditionOperator.Equal, sysUserId);
//关联业务部门
LinkEntity linkBu = new LinkEntity("systemuser", "businessunit", "businessunitid", "businessunitid", JoinOperator.Inner);
linkBu.Columns.AddColumns("zhaopin_branch", "zhaopin_business_line");
linkBu.EntityAlias = "bu";
queryUser.LinkEntities.Add(linkBu);
EntityCollection buList = adminOrgService.RetrieveMultiple(queryUser);
Entity buEntity = buList[0];
branchId = buEntity.Attributes.Contains("bu.zhaopin_branch") ? (buEntity.GetAttributeValue<AliasedValue>("bu.zhaopin_branch").Value as EntityReference).Id : Guid.Empty;
businessLineId = buEntity.Attributes.Contains("bu.zhaopin_business_line") ? (buEntity.GetAttributeValue<AliasedValue>("bu.zhaopin_business_line").Value as EntityReference).Id : Guid.Empty;
}
/// <summary>
/// 查询角色编码
/// </summary>
/// <param name="context"></param>
/// <param name="adminOrgService"></param>
/// <returns></returns>
private static List<string> GetUserRoleCode(Guid sysUserId, IOrganizationService adminOrgService)
{
List<string> lsRole = new List<string>();
//查询当前用户角色
QueryExpression queryUserRole = new QueryExpression("zhaopin_systemuser_zhaopin_role");
queryUserRole.Criteria = new FilterExpression();
queryUserRole.Criteria.AddCondition("systemuserid", ConditionOperator.Equal, sysUserId);
//关联角色
LinkEntity linkRole = new LinkEntity("zhaopin_systemuser_zhaopin_role", "zhaopin_role", "zhaopin_roleid", "zhaopin_roleid", JoinOperator.Inner);
linkRole.Columns.AddColumn("zhaopin_role_code");
linkRole.EntityAlias = "role";
queryUserRole.LinkEntities.Add(linkRole);
EntityCollection roleList = adminOrgService.RetrieveMultiple(queryUserRole);
foreach (Entity role in roleList.Entities)
{
if (role.Attributes.Contains("role.zhaopin_role_code"))
{
string roleCode = role.GetAttributeValue<AliasedValue>("role.zhaopin_role_code").Value.ToString();
lsRole.Add(roleCode);
}
}
return lsRole;
}
}
}
-------------------------------------------------------------------------------设置一个枚举值-------------------------------------------------------------
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace CRM.Plugin.RetrieveMultiple.Common
{
class EnumTypeValues
{
}
/// <summary>
/// 角色代码枚举
/// </summary>
public enum RoleCode
{
/// <summary>
/// KA 销售
/// </summary>
KA = 1002,
/// <summary>
/// KA 销售经理
/// </summary>
KAM = 1004,
/// <summary>
/// 大区KA总监
/// </summary>
KAD = 1011,
/// <summary>
/// 大区总监
/// </summary>
TerritoryDirector = 1012,
/// <summary>
/// 销售TL
/// </summary>
SalesTL = 1018,
/// <summary>
/// 城市经理
/// </summary>
CityManager = 1005,
/// <summary>
/// 城市运营
/// </summary>
CityOperation = 1007,
/// <summary>
/// 总部客服负责人
/// </summary>
HeadQuartersServiceLeader = 1021,
/// <summary>
/// 总部客服预订
/// </summary>
HeadQuartersReservationServices = 1022,
/// <summary>
/// 总部客服预订负责人
/// </summary>
HeadQuartersReservationServicesLeader = 1023,
/// <summary>
/// 分公司客服
/// </summary>
BranchService = 1014,
/// <summary>
/// 分公司客服负责人
/// </summary>
BranchServiceLeader = 1015,
/// <summary>
/// 合同管理员
/// </summary>
ContractAdmin = 1036,
/// <summary>
/// SMA 总部运营
/// </summary>
SMA_HeadQuartersOperation = 1003,
/// <summary>
/// 财务
/// </summary>
Financial = 1038,
/// <summary>
/// 会计
/// </summary>
Accountant = 1040,
/// <summary>
/// 事业部项目经理
/// </summary>
BU_PM = 1039,
/// <summary>
/// 大客户运营中心
/// </summary>
KA_Operation = 1009,
/// <summary>
/// 大客户运营中心及全国KA负责人
/// </summary>
KA_OperationLeader = 1010,
/// <summary>
/// 总部事业部项目经理
/// </summary>
HeadQuarter_PM = 1042,
/// <summary>
/// SMA销售
/// </summary>
SMA = 1043
}
}