0

这是我多年来为我的问题寻找解决方案后的第一篇文章。我对 SharePoint 比较陌生,虽然不是一个完整的初学者。

这是我想要实现的目标:

  • 我想创建一个列表,由用户填写
  • 此列表将包含一个标识符文本字段,我们将其称为 strId
  • 此列表必须包含一个字段,该字段是使用 strId 作为参数从 oracle 数据库中检索的值

我已经做了一些 BDC 模型,但这似乎有所不同,因为列表元素不是来自数据库,只有一列。

我考虑过创建一个包含 2 个站点列的内容类型,一个带有 strId,另一个将进行计算,但我似乎无法做到。

任何人都可以帮助解决这个问题吗?

4

1 回答 1

0

我建议如下:

  • 创建外部内容列表:(例如:T_Investigator)
  • 创建新的自定义列表(例如:ExternalDisplay)
  • 将您的 strid 添加为单行文本
  • 添加外部内容列表作为查找(例如:external_id),并添加您希望查看的字段(例如:名字,姓氏)
  • 使用带有 onAdding/onUpdating 的事件接收器为 ExternalDisplay 列表创建共享点解决方案。添加/更新时,您可以使用 strid 中的新值覆盖“external_id”字段

代码:

using Microsoft.SharePoint;

namespace SOEventReceiver.ExternalTest
{
    public class ExternalTest : SPItemEventReceiver
    {
        public override void ItemAdding(SPItemEventProperties properties)
        {
            string strid = (properties.AfterProperties["strid"] ?? string.Empty).ToString();
            if (!string.IsNullOrWhiteSpace(strid))
            {
                properties.AfterProperties["external_id"] = strid + ";#" + strid;
            }
            base.ItemAdding(properties);
        }

        public override void ItemUpdating(SPItemEventProperties properties)
        {
            string strid = (properties.AfterProperties["strid"] ?? string.Empty).ToString();
            if (!string.Equals(strid, properties.ListItem["strid"] ?? string.Empty))
            {
                properties.AfterProperties["external_id"] = strid + ";#" + strid;
            }
            base.ItemUpdating(properties);
        }
    }
} 

与 elements.xml 指向您的列表的 url

<?xml version="1.0" encoding="utf-8"?>
<Elements xmlns="http://schemas.microsoft.com/sharepoint/">
  <Receivers ListUrl="Lists/ExternalDisplay">
      <Receiver>
        <Name>ExternalTestItemAdding</Name>
        <Type>ItemAdding</Type>
        <Assembly>$SharePoint.Project.AssemblyFullName$</Assembly>
        <Class>SOEventReceiver.ExternalTest.ExternalTest</Class>
        <SequenceNumber>10000</SequenceNumber>
      </Receiver>
      <Receiver>
        <Name>ExternalTestItemUpdating</Name>
        <Type>ItemUpdating</Type>
        <Assembly>$SharePoint.Project.AssemblyFullName$</Assembly>
        <Class>SOEventReceiver.ExternalTest.ExternalTest</Class>
        <SequenceNumber>10000</SequenceNumber>
      </Receiver>
  </Receivers>
</Elements>

由于 Lookupfield 值已更改,Sharepoint 会自动进行更改,并显示外部列。

这里的优点是 sharepoint 具有主要的魔力,它背后的查找列表(外部/sharepoint)也无关紧要。

一个缺点是 external_id 字段也可以更改,这不会更新 strid 字段,并且您会得到不一致的数据。但是,您也可以在更新语句中阻塞

于 2014-05-21T15:39:09.777 回答