在开发过程中,经常会将自定义的数据保存到list的RootFolder的属性Propertis中,这个属性是一个字典,例如使用如下PowerShell,可以将一个自定义的key “MyTestPropertyKey”,添加到Properties字典中:
$myweb = Get-SPWeb http://sp2013 //获取站点 $mylist = $myweb.Lists["Composed Looks"] //获取列表 $myList.RootFolder.Properties["MyTestPropertyKey"] = "MyTestPropertieyValue" //添加key-value $myList.RootFolder.Update() //更新RootFolder
使用SharePoint Manager (SharePoint 2013版本),就可以看到刚刚添加的这个属性:
Properties属性只允许保存字符串,整数和日期类型的数据,如果是其他类型,在执行RootFolder.Update()方法的时候,就会报如下错误:
“Exception calling "Update" with "0" argument(s): "Only String,INT,and DateTime datetypes can be used as the value in Properties.”
我今天就遇到这个错误了,本打算把本地的一个xml文件中的xml数据保存在Properties中,结果保存的时候出错。
我是使用Get-Content这个powershell命令读取xml文件的:
$xmlValue = Get-Content C:\users\user1\desktop\xmlfile.xml结果发现Get-Content的返回值$xmlValue的类型是一个Array数组,所以Get-Content这个命令默认是一行一行来读文件的。
查看Get-Content的帮助之后发现,如果需要返回字符串,还需要指定 -raw :
$xmlValue = Get-Content -raw C:\users\user1\desktop\xmlfile.xml这样读取出来的值是字符串类型的:
虽然数据的类型正确了,但是在执行RootFolder.Update()的时候还是会报错:
经过研究发现,虽然返回值是字符串,但是在赋值的时候,还是需要显示转换才行,所以正确的赋值方法应该是:
$xmlValue = Get-Content -raw c:\users\user1\desktop\xmlfile.xml $myList.RootFolder.Properties["MyTestPropertyKey"] = [System.String]$xmlValue $myList.RootFolder.Update()