使用 PowerShell 更新 SPList 上的"external content type"字段



我有一个简单的文档库,链接到一个名为"Events"的外部内容类型(查找)。下面是我的PS脚本,循环遍历列表:

$spListItems = $spList.GetItems($spQuery)
foreach ($item in $spListItems)
{
      $item["Title"] = "New Title" 
      $item["Events"] ="Event Name"
      $item.Update()      
} 

所以…"Title"列更新得很好,但我不知道我需要做些什么来正确更新"Events"列,因为它是ext内容类型。奇怪的是,这甚至不会引发错误,但在编辑模式下该列是空白的。对如何处理这个问题有什么想法吗?Thx .

外部内容类型表示来自外部系统的数据。并非所有外部内容类型都是可写的(更新、删除、创建)——这取决于它们是如何定义的。这个CT代表什么?您是否验证了它是如何在BCS(业务连接服务)层中定义的?

作为示例,请阅读如何配置外部内容类型以表示SQL表。它显示了"回写"外部系统的能力如何成为外部ct设计中的一个明确步骤。

如何基于SQL Server表创建外部内容类型

http://msdn.microsoft.com/en-us/library/ee557243.aspx

UDPATE

实际上再次阅读您的问题,您实际上并没有试图更新外部数据,您只是试图修改查找中选择的值。嗯,这有点不同。查找由实际值和显示字符串组成。您需要设置的值不是显示字符串,而是一个形式为

的值。
ID;#VALUE

其中ID是查找表中的外键,通常是一个数字,VALUE是显示值,例如:"Event Name"在你的例子中,你应该是这样的:

$item["Events"] = "45;#Event Name"

你应该先读取当前值来验证格式。

经过一些灵魂搜索,看起来我只需要更新列["Events2_ID"],我通过循环$splist.Fields发现。然后,我必须用外部列表中的["BDC身份"]值更新此字段。解决了!

对于我的场景,我能够通过简单的Powershell $item["BCSCol"] =" NewValue"设置可见的BCS外部数据列,但也必须设置隐藏字段以使更改可见。有趣的是,该值不必是任何特定的,因为在隐藏值更改后,SP似乎将验证通过$item["BCSCol"]设置的文本值。

不确定是否支持这种方法,但它确实有效。

这是一个有帮助的链接此处输入链接描述

最新更新