日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > C# >内容正文

C#

在C#代码中执行BCS外部内容类型方法

發布時間:2023/12/20 C# 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 在C#代码中执行BCS外部内容类型方法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在前面的博文中我們討論了如何使用Business Connectivity Services對象模型欄獲取已部署在SharePoint BCS中的外部內容類型。?

本文中我們將學習如何獲取一個ECT的BCS方法集合。并且還要通過Business Connectivity Services對象模型執行其中的Finder方法和SpecificFinder方法。

請先按照上一次文章中的步驟1到5創建一個簡單的Visual WebPart。并添加所需的引用和命名空間。

創建好后,按照下列步驟調用Business Connectivity Services對象模型來得到外部內容類型的方法。

?

1) 在你的可視化webpart的代碼視圖中添加下列using語句。該命名空間允許我們使用KeyValuePair類。

  using?System.Collections.Generic;

2)修改Page_Load方法,調用一個方法來執行外部內容類型的某個方法。

protected?void?Page_Load(object?sender,?EventArgs?e)
{
????EnumrateAndExecuteECTMethods();
}

3)接下來,我們來定義該方法。需要做兩件事:列出給定外部內容類型的所有方法;執行其中的finder方法和specific finder方法。

該方法的代碼如下:

private?void?EnumrateAndExecuteECTMethods()
{
????
//獲取BDC服務引用
????BdcService?service?=?SPFarm.Local.Servers.GetValue<BdcService>();
????
//獲取元數據目錄
????IMetadataCatalog?catalog?=?service.GetDatabaseBackedMetadataCatalog(SPServiceContext.Current);
????
//通過相應的命名空間和名稱獲取實體
????IEntity?entity?=?catalog.GetEntity("http://sp2010u",?"產品");

????Literal1.Text?
=?"<h1>"?+?entity.Name?+?"?的方法</h1>?"?+?"<br/>";
????
//為Finder和SpecificFinder方法的調用準備些變量
????int?finderMethodRecordsCount?=?0;
????
string?strName?=?"";

????
//獲取方法集合
????foreach?(KeyValuePair<string,IMethod>?method?in?entity.GetMethods())????????
????{
????????
//顯示方法名
????????Literal1.Text?+=?method.Key?+?",";
????????
//顯示當前方法的實例
????????IMethodInstance?methodInstance?=?method.Value.GetMethodInstances()[method.Key];
????????
if?(methodInstance.MethodInstanceType?==?MethodInstanceType.Finder)
????????{?
????????????
//調用Finder方法
????????????IEntityInstanceEnumerator?ieie?=?entity.FindFiltered(method
.Value.GetFilters(methodInstance),?entity.GetLobSystem().GetLobSystemInstances()[
0].Value);
????????????
//返回結果計數
????????????while?(ieie.MoveNext())
????????????{
????????????????finderMethodRecordsCount
++;
????????????}
????????}

????????
//調用SpecificFinder方法
????????if?(methodInstance.MethodInstanceType?==?MethodInstanceType.SpecificFinder)
????????{?
????????????
//標識符的值
????????????int?i?=?1;
????????????
//創建一個標識符
????????????Identity?identity?=?new?Identity(i);
????????????
//調用SpecificFinder方法,獲取該實體的實例
????????????IEntityInstance?entInstance?=?entity.FindSpecific(identity,?entity.GetLobSystem()
.GetLobSystemInstances()[
0].Value);
????????????
//顯示SpecificFinder所返回的實體實例的Name字段值
????????????strName?=?entInstance["Name"].ToString();
????????}
????}
????Literal1.Text?
+=?"<br/>Finder?方法獲取的記錄數?=?"?+?finderMethodRecordsCount.ToString();
????Literal1.Text?
+=?"<br/>Specific?Finder方法返回的實例的Name為?"?+?strName;
}

接下來,我們對其中重點的行進行單獨解釋,以便了解更多細節。

4)通過Business Connectivity Services對象模型,我們首先需要獲得BdcService以及元數據目錄 ,然后才是外部內容類型。

在本例中我們使用產品ECT,其命名空間為http://sp2010u。

?????//獲取BDC服務引用

????BdcService?service?=?SPFarm.Local.Servers.GetValue<BdcService>();
????
//獲取元數據目錄
????IMetadataCatalog?catalog?=?service.GetDatabaseBackedMetadataCatalog(SPServiceContext.Current);
????
//通過相應的命名空間和名稱獲取實體?
????IEntity?entity?=?catalog.GetEntity("http://sp2010u",?"產品");

5)有了產品外部內容類型后,就可以遍歷該ECT所有可用的方法了。

IEntity的GetMethods方法返回一個KeyValuePare<string,IMethod>集合,其中Key為方法的名稱,IMethod為方法本身。

?? ?//獲取方法集合
????foreach?(KeyValuePair<string,IMethod>?method?in?entity.GetMethods())????????
????{
????????
//顯示方法名

?? ? ? ?Literal1.Text?+=?method.Key?+?",";?

6)在得到可用的方法后,我們需要檢查MethodInstanceType的值,判斷方法的類型:

?? ? ? ?//顯示當前方法的實例
????????IMethodInstance?methodInstance?=?method.Value.GetMethodInstances()[method.Key];
????????
if?(methodInstance.MethodInstanceType?==?MethodInstanceType.Finder)
????????{?

7)如果是Finder方法的話我們要執行它,然后簡單的遍歷一下返回的記錄并得到記錄的數量。

可以調用IEntity的FindFiltered方法來執行finder方法。

FindFiltered方法的第一個參數是篩選器的集合,可以通過調用IMethod的GetFilters方法獲得,然后作為參數傳給該方法實例。

FindFiltered方法的第二個參數是相應的LOB(Line Of Business,企業核心業務系統)系統的實例,可以通過IEntity的GetLobSystem方法,然后再調用 GetLobSystemInstance就可以獲得。所有這些調用完成后,我們就可以循環遍歷所返回的enumerator,并使記錄計數器自增。

?//調用Finder方法
?IEntityInstanceEnumerator?ieie?=?entity.FindFiltered(method
.Value.GetFilters(methodInstance),?entity.GetLobSystem().GetLobSystemInstances()[
0].Value);
?
//返回結果計數
?while?(ieie.MoveNext())
?{
?? ? finderMethodRecordsCount
++;

?}?

?8)對于得到的SpecificFinder方法,調用它的方法有一點不同。因為SpecificFinder方法總是要求傳遞至少一個參數(該參數映射到標識符)。

我們需要創建一個Identity類的實例,并作為參數傳給IEntity的FindSpecific方法。FindSpecifice方法的第一個參數是標識符,第二個參數是LOB系統的實例。

當FindSpecific方法執行完成后,會返回一個IEntityInstance實例。

在本例中我們硬編碼了一個標識符的值(int i=1),然后只是簡單的從EntityInstance中返回Name字段的值。

?//標識符的值
?int?i?=?1;
?
//創建一個標識符
?Identity?identity?=?new?Identity(i);
?
//調用SpecificFinder方法,獲取該實體的實例
?IEntityInstance?entInstance?=?entity.FindSpecific(identity,?entity.GetLobSystem()
?? .GetLobSystemInstances()[
0].Value);
?
//顯示SpecificFinder所返回的實體實例的Name字段值
?strName?=?entInstance["Name"].ToString();

9)代碼編寫好后,按CTRL+F5部署到你的SharePoint站點。

10)在你的SharePoint站點中編輯頁面,并添加我們剛剛部署的Visual WebPart 。

該WebPart位于Custom分類下。

它會顯示產品外部內容類型的方法名,調用Finder方法后返回的記錄個數,以及調用SpecificFinder方法返回的產品的名稱。?

參考資料

executing bcs external content type methods in c#?

轉載于:https://www.cnblogs.com/Sunmoonfire/archive/2010/07/06/1771420.html

總結

以上是生活随笔為你收集整理的在C#代码中执行BCS外部内容类型方法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。