计算一个新的内容类型字段

本文关键字:类型 字段 一个 计算 | 更新日期: 2023-09-27 18:03:35

这是我多年来为自己的问题寻找解决方案后的第一个帖子。我是SharePoint的新手,虽然不是完全的初学者。

这是我想要达到的目标:

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

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

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

有谁能帮帮我吗?

计算一个新的内容类型字段

我的建议如下:

  • 创建外部内容列表:(例如:T_Investigator)
  • 创建新的自定义列表(例如:ExternalDisplay)
  • 添加你的跨栏作为单行文本
  • 添加外部内容列表作为查找(例如:external_id),并添加您希望看到的字段(例如:firstname, lastname)
  • 为ExternalDisplay列表创建一个带有onAdding/onUpdating事件接收器的sharepoint解决方案。在添加/更新时,您可以用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字段,并且您将获得不一致的数据。但是,你也可以在更新语句

中阻止它