Поделиться через


Модель программирования для подключения к бизнес-данным

Дата последнего изменения: 15 апреля 2010 г.

Применимо к: SharePoint Server 2010

В разделе Пример модели BDC был описан внешний тип контента Customer. Предположим, что внешний тип контента Customer обладает структурой Customer (Name, ID, Phone no., Address); при этом адрес Address — это другой сложный тип.

После того как модель внешнего типа контента Customer для данного источника внешних данных будет определена и сохранена в хранилище метаданных BDC, код BDC, используемый для взаимодействия с внешним типом контента Customer (операции создания, чтения, изменения и удаления), будет выглядеть одинаково, независимо от того, является ли тыловой объект базой данных, веб-службой или сборкой подключения .NET. Именно в этом и заключается основное преимущество данного подхода к программированию: независимо от типа внешнего источника данных, с которым взаимодействует приложение, код будет выглядеть совершенно одинаково.

Пример. Код подключения к бизнес-данным, создающий экземпляр Customer во внешнем источнике данных

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.SharePoint.BusinessData.SharedService;
using Microsoft.BusinessData.MetadataModel;
using Microsoft.BusinessData.Runtime;
using Microsoft.SharePoint.Administration;
using Microsoft.SharePoint;
using System.Web;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            using (SPSite site = new SPSite("http://ssdk-server/Pages/Default.aspx"))
                {
                    using (new Microsoft.SharePoint.SPServiceContextScope(SPServiceContext.GetContext(site)))
                    {
                        BdcService service = SPFarm.Local.Services.GetValue<BdcService>(String.Empty);
                        IMetadataCatalog catalog = service.GetDatabaseBackedMetadataCatalog(SPServiceContext.Current);

                        IEntity entity = catalog.GetEntity("http://ssdk-server/sdksamples", "Customer");
                        ILobSystemInstance LobSysteminstance = entity.GetLobSystem().GetLobSystemInstances()[0].Value;


                        IView createView = entity.GetCreatorView("Create");
                        IFieldValueDictionary valueDictionary = createView.GetDefaultValues();
                        valueDictionary["Name"] = "some name";
                        Identity id = entity.Create(valueDictionary, LobSysteminstance);
                    }
                }
            }
        }
 }

Пример. Код подключения к бизнес-данным, перечисляющий экземпляры Customer в клиентском кэше службы BCS на клиенте

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.BusinessData.MetadataModel;
using Microsoft.BusinessData.Runtime;
using Microsoft.Office.BusinessData.MetadataModel;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            RemoteSharedFileBackedMetadataCatalog RemoteCatalog = new RemoteSharedFileBackedMetadataCatalog();
            IEntity remoteEntity = RemoteCatalog.GetEntity("http://ssdk-server/sdksamples", "Customer");
            ILobSystemInstance LobSysteminstance = remoteEntity.GetLobSystem().GetLobSystemInstances()[0].Value;
 
            IMethodInstance method = remoteEntity.GetMethodInstance("Read List", MethodInstanceType.Finder);
            IEntityInstanceEnumerator ieie = remoteEntity.FindFiltered(method.GetFilters(), LobSysteminstance);
            IView view = remoteEntity.GetFinderView(method.Name);
            while (ieie.MoveNext())
            {
                foreach (IField field in view.Fields)
                {
                    if (ieie.Current[field] != null)
                    {
                        Console.WriteLine(ieie.Current[field].ToString());
                    }
                }
            }
       }
   }
}