如何:在实体上执行方法
实体包含方法。为了执行实体上提供的方法,Entity 对象提供了 Execute 方法。
本主题中的两个代码示例演示如何使用 Execute 方法完成原始方法执行操作。该示例 ExecuteEntityOverrideArgs 方法会在执行方法调用之前用不同的值替代参数的默认值。
示例
本示例演示如何使用 Execute 方法完成原始方法执行操作。此示例中的 ExecuteEntityOverrideArgs 方法还演示如何在执行前使用不同的值替代参数的默认值。
备注
尽管此示例执行一个 Finder 方法,但通常不会使用 Entity.Execute 执行 Finder。若要执行 Finder 和 Filter 类型的方法,您应该使用 FindFiltered 和 FindSpecific 方法。
先决条件
确保已创建了一个共享服务提供程序。
用共享资源提供程序的名称替换代码中的常数值 EnterYourSSPNameHere。
确保业务数据目录中存在示例中引用的 LobSystem 和实体名称。使用有效的名称。
项目引用
运行此示例之前,在控制台应用程序代码项目中添加下面的项目引用:
Microsoft.SharePoint
Microsoft.SharePoint.Portal
Microsoft.Office.Server
using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using Microsoft.Office.Server.ApplicationRegistry.MetadataModel;
using Microsoft.Office.Server.ApplicationRegistry.Runtime;
using Microsoft.Office.Server.ApplicationRegistry.SystemSpecific;
using Microsoft.Office.Server.ApplicationRegistry.Infrastructure;
using WSSAdmin = Microsoft.SharePoint.Administration;
using OSSAdmin = Microsoft.Office.Server.Administration;
namespace Microsoft.SDK.SharePointServer.Samples
{
class ExecuteEntity
{
const string yourSSPName ="EnterYourSSPNameHere";
static void Main(string[] args)
{
SetupBDC();
ExecuteEntity();
ExecuteEntityOverrideArgs();
Console.WriteLine("Press any key to exit...");
Console.Read();
}
static void SetupBDC()
{
SqlSessionProvider.Instance().SetSharedResourceProviderToUse(yourSSPName);
}
static void ExecuteEntity()
{
NamedLobSystemInstanceDictionary sysInstances = ApplicationRegistry.GetLobSystemInstances();
LobSystemInstance AdvWorksIns = sysInstances["AdventureWorksSampleInstance"];
Entity prodEntity = AdvWorksIns.GetEntities()["Product"];
MethodInstance methInst = prodEntity.GetFinderMethodInstance();
IEntityInstanceEnumerator prodEntityInstanceEnumerator =
(IEntityInstanceEnumerator)prodEntity.Execute(methInst,
AdvWorksIns);
while (prodEntityInstanceEnumerator.MoveNext())
{
IEntityInstance IE = prodEntityInstanceEnumerator.Current;
foreach (Field f in prodEntity.GetFinderView().Fields)
Console.Write(IE[f]);
Console.WriteLine("");
}
}
static void ExecuteEntityOverrideArgs()
{
NamedLobSystemInstanceDictionary sysInstances = ApplicationRegistry.GetLobSystemInstances();
LobSystemInstance AdvWorksIns = sysInstances["AdventureWorksSampleInstance"];
Entity prodEntity = AdvWorksIns.GetEntities()["Product"];
MethodInstance methInst = prodEntity.GetFinderMethodInstance();
Object[] args = methInst.GetMethod().CreateDefaultParameterInstances(methInst);
//Min ProductID
args[0] = 1;
//Max Product ID
args[1] = 10;
IEntityInstanceEnumerator prodEntityInstanceEnumerator =
(IEntityInstanceEnumerator)
prodEntity.Execute(methInst, AdvWorksIns, ref args);
while (prodEntityInstanceEnumerator.MoveNext())
{
IEntityInstance IE = prodEntityInstanceEnumerator.Current;
foreach (Field f in prodEntity.GetFinderView().Fields)
Console.Write(IE[f]);
Console.WriteLine("");
}
}
}
}