计算一个新的内容类型字段
本文关键字:类型 字段 一个 计算 | 更新日期: 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字段,并且您将获得不一致的数据。但是,你也可以在更新语句