在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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/475926.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java ndc_通过slf4j/log4j的MDC/NDC 实现日志追踪

在分布式系统或者较为复杂的系统中&#xff0c;我们希望可以看到一个客户请求的处理过程所涉及到的所有子系统\模块的处理日志。由于slf4j/log4j基本是日志记录的标准组件&#xff0c;所以slf4j/log4j成为了我的重点研究对象。slf4j/log4j支持MDC&#xff0c;可以实现同一请求的…

java 反射的弊端_java反射机制的一些学习心得小结

概述之前在了解Spring的类加载机制的时候&#xff0c;了解了java的反射机制。但是&#xff0c;我对反射理解一直不深。也一直有点疑惑&#xff1a;Spring为什么利用反射创建对象&#xff1f;直接new对象和依靠反射创建对象有什么区别&#xff1f;什么是动态加载类&#xff1f;什…

LeetCode 1443. 收集树上所有苹果的最少时间(自底向上DFS)

1. 题目 给你一棵有 n 个节点的无向树&#xff0c;节点编号为 0 到 n-1 &#xff0c;它们中有一些节点有苹果。 通过树上的一条边&#xff0c;需要花费 1 秒钟。 你从 节点 0 出发&#xff0c;请你返回最少需要多少秒&#xff0c;可以收集到所有苹果&#xff0c;并回到节点 0 …

java怎吗从磁盘读文件_编写一个Java应用程序,该程序使用FileInputStream类,实现从磁盘读取本应用程序源代码文件,并将文件内容显示在屏幕上。...

满意答案x786741812013.05.10采纳率&#xff1a;42% 等级&#xff1a;12已帮助&#xff1a;14476人import java.io.FileInputStream;import java.io.InputStreamReader;import java.io.BufferedReader;import java.io.IOException;import java.io.FileNotFoundException;pub…

漂亮的博客搜索框

看到漂亮的搜索框&#xff0c;收藏... 主要用背景图片和输入框和链接隐藏完成。 可以在IE6,ff&#xff0c;chorme下兼容... <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&quo…

LeetCode 863. 二叉树中所有距离为 K 的结点(公共祖先/ DFS+BFS)

文章目录1. 题目2. 解题2.1 公共祖先2.2 建图BFS1. 题目 给定一个二叉树&#xff08;具有根结点 root&#xff09;&#xff0c; 一个目标结点 target &#xff0c;和一个整数值 K 。 返回到目标结点 target 距离为 K 的所有结点的值的列表。 答案可以以任何顺序返回。 示例 …

多线程 流水线 java_Java Lock锁多线程中实现流水线任务

下面程序代码通过使用Lock锁执行简单的流水线任务&#xff1a;import java.util.concurrent.locks.Condition;import java.util.concurrent.locks.Lock;import java.util.concurrent.locks.ReentrantLock;/*** author lzq* data 2020/4/29 0029 - 下午 9:48*/public class Test…

LeetCode 962. 最大宽度坡(单调栈)

1. 题目 给定一个整数数组 A&#xff0c;坡是元组 (i, j)&#xff0c;其中 i < j 且 A[i] < A[j]。这样的坡的宽度为 j - i。 找出 A 中的坡的最大宽度&#xff0c;如果不存在&#xff0c;返回 0 。 示例 1&#xff1a; 输入&#xff1a;[6,0,8,2,1,5] 输出&#xff1…

python 保存文件 吃内存_孤荷凌寒自学python第三十七天python的文件与内存变量之间的序列化与反序列化...

孤荷凌寒自学python第三十七天python的文件与内存变量之间的序列化与反序列化(完整学习过程屏幕记录视频地址在文末&#xff0c;手写笔记在文末)一、什么是序列化与反序列化序列化是指将内存中的数据进行指定规则的格式梳理&#xff0c;使之方便按一定格式保存到文件中。我的理…

【Kaggle】Intermediate Machine Learning(管道+交叉验证)

文章目录4. Pipelines 管道5. Cross-Validation 交叉验证上一篇&#xff1a;【Kaggle】Intermediate Machine Learning&#xff08;缺失值文字特征处理&#xff09; 下一篇&#xff1a;【Kaggle】Intermediate Machine Learning&#xff08;XGBoost Data Leakage&#xff09; …

LeetCode 201. 数字范围按位与(位运算)

文章目录1. 题目2. 解题2.1 按位查找02.2 两数直接都往右移动&#xff0c;直到相等1. 题目 给定范围 [m, n]&#xff0c;其中 0 < m < n < 2147483647&#xff0c;返回此范围内所有数字的按位与&#xff08;包含 m, n 两端点&#xff09;。 示例 1: 输入: [5,7] 输…

编php矩阵求和,PHP二维数组如何求和?

PHP二维数组求和的方法&#xff1a;1、使用array_sum和array_map函数求和1)、PHP7.2以下可用<?php $arr array(0>array(id>1,tol>10),1>array(id>3,tol>12),2>array(id>8,tol>5));//输出tol值的和echo array_sum(array_map(create_function($v…

LeetCode 1311. 获取你好友已观看的视频(BFS+哈希map+vector排序)

1. 题目 有 n 个人&#xff0c;每个人都有一个 0 到 n-1 的唯一 id 。 给你数组 watchedVideos 和 friends &#xff0c;其中 watchedVideos[i] 和 friends[i] 分别表示 id i 的人观看过的视频列表和他的好友列表。 Level 1 的视频包含所有你好友观看过的视频&#xff0c; …

发布ASP.NET程序至IIS7

以前一直和IIS5打交道&#xff0c;后来系统升级到WIN7,自然的就用上了IIS7了&#xff0c;不过因为对IIS7服务器没有系统的了解&#xff0c;所以在自己机子上测试发布网站时&#xff0c;总是遇到各种各样的问题&#xff0c;当时就放弃了&#xff0c;准备有时间再研究的&#xff…

LeetCode 1319. 连通网络的操作次数(BFS/DFS/并查集)

文章目录1. 题目2. 解题2.1 BFS2.2 DFS2.3 并查集1. 题目 用以太网线缆将 n 台计算机连接成一个网络&#xff0c;计算机的编号从 0 到 n-1。 线缆用 connections 表示&#xff0c;其中 connections[i] [a, b] 连接了计算机 a 和 b。 网络中的任何一台计算机都可以通过网络直…

1D機身調焦方法

原文作者&#xff1a;Kent 原文地址&#xff1a;http://www.ldsclub.net/forum/viewthread.php?tid21513&extrapage%3D1&page1另附大兔子調焦心得&#xff1a;http://www.ldsclub.net/forum/viewthread.php?tid28268&extrapage%3D1 需要1.27規格的6角手柄本次轉文…

kdevelop php,KDevelop 5.2开放源代码IDE发布,改进了C ++,PHP和Python支持

KDevelop 5.2近半年的发布&#xff0c;是一个主要的发行版&#xff0c;它在前面版本KDevelop 5.1中实现的Analyzer菜单条目中引入了更多的分析器插件。这些包括Heaprack&#xff0c;一个用C / C 编写的Linux应用程序的堆内存分析器和Cppcheck(一种流行的C 编程语言静态分析器)&…

LeetCode 223. 矩形面积

1. 题目 在二维平面上计算出两个由直线构成的矩形重叠后形成的总面积。 每个矩形由其左下顶点和右上顶点坐标表示&#xff0c;如图所示。 示例: 输入: -3, 0, 3, 4, 0, -1, 9, 2 输出: 45 说明: 假设矩形面积不会超出 int 的范围。来源&#xff1a;力扣&#xff08;LeetCode&…

【Kaggle】Intermediate Machine Learning(XGBoost + Data Leakage)

文章目录6. XGBoost7. Data Leakage 数据泄露上一篇&#xff1a;【Kaggle】Intermediate Machine Learning&#xff08;管道交叉验证&#xff09; 6. XGBoost 参考&#xff1a;《统计学习方法》提升方法&#xff08;Boosting&#xff09; extreme gradient boosting “梯度提…

silverlight(一.安装和新建项目)

1.下载安装silverlight&#xff1a;Microsoft Silverlight™ 3 Tools &#xff08;安装之前需要升级VS2008到SP1&#xff09; 2.和多数人一样我的程序新建好运行调试报错&#xff0c;提示“未安装silverlight托管调试包”&#xff0c;后来我使用VS2010新建的时候提示安装silver…