Я пытаюсь Обновлять/Редактировать Свойства Загруженного Документа о Sharepoint 2007.
Мой код:
Lists listService = new Lists();
listService.PreAuthenticate = true;
listService.Credentials = new NetworkCredential(username,password);
listService.Url = "http://myserver/SiteName/_vti_bin/lists.asmx";
string strBatch =
" "
+ " 3 "
+ " Preeti "
+ " ";
XmlDocument xmlDoc = new System.Xml.XmlDocument();
System.Xml.XmlElement elBatch = xmlDoc.CreateElement("Batch");
elBatch.SetAttribute("OnError", "Continue");
elBatch.SetAttributeNode("UserName", "Preeti");
elBatch.InnerXml = strBatch;
XmlNode ndReturn = listService.UpdateListItems(ListName, elBatch);
MessageBox.Show(ndReturn.OuterXml);
Обращение ссылки.
Получение Ошибки: "Один или несколько типов поля не установлены правильно. Перейдите к странице настроек списка для удаления этих полей".
Следующее решение взято из: http://www.codeproject.com/KB/sharepoint/File_Shunter.aspx
Обратите внимание, однако, как упоминалось в другом ответе, требуется ВНУТРЕННЕЕ имя поля.
Ключи Web.Config
Если вы решите, добавив следующее в Web.config для вашего приложения (только для этого примера, в качестве альтернативы вы можете просто включить необходимые значения [Server, Document Library, User, Domain, Password, etc.] в ваш код):
<configuration>
<appSettings>
<add key="SharePointServer" value=http://SP Portal/Site/>
<add key="DocLibrary" value="Doclib"/>
<add key="User" value="User"/>
<add key="Domain" value="Domain"/>
<add key="Pwd" value="Pwd"/>
<add key="GlobalSharedPath" value="D:\"/>
</appSettings>
Код:
Public Function WSSUpdateFile(ByVal sFileName As String, ByVal sSiteDoc As String, ByVal sTestCol As String) As String
Dim sUser As String = ConfigurationManager.AppSettings("User")
Dim sPwd As String = ConfigurationManager.AppSettings("Pwd")
Dim sDomain As String = ConfigurationManager.AppSettings("Domain")
Dim sFileIDinList As String
Dim strBatch As String = ""
sSiteDoc = Replace(sSiteDoc, "%20", " ")
sSiteDoc = Replace(sSiteDoc, "\", "/")
Dim sFinalFilePath As String
Dim sSPURL As String = ConfigurationManager.AppSettings("SharePointServer")
Dim sDocLib As String = ConfigurationManager.AppSettings("DocLibrary")
Try
Dim netAccess As System.Net.NetworkCredential = New System.Net.NetworkCredential(sUser, sPwd, sDomain)
Dim listService As New SPLists.Lists
listService.Url = sSPURL & "/_vti_bin/lists.asmx"
listService.Credentials = netAccess
sFileIDinList = sGetID(listService.Url, sDocLib, sFileName)
If sFileIDinList <> "" Then
sFinalFilePath = sSPURL & "/" & sDocLib & "/" & sFileName
'Now we have FileID so update the list
strBatch = "<Method ID='1' Cmd='Update'>" + _
"<Field Name = 'ID'>" & sFileIDinList & "</Field>" + _
"<Field Name = 'FileRef'>" & sFinalFilePath & "</Field>" + _
"<Field Name = 'TestCol'>" & sTestCol & "</Field>" + _
"</Method>"
Dim xmlDoc = New System.Xml.XmlDocument
Dim elBatch As System.Xml.XmlElement = xmlDoc.createelement("Batch")
elBatch.InnerXml = strBatch
Dim ndreturn As System.Xml.XmlNode = listService.UpdateListItems(sDocLib, elBatch)
End If
Return "TRUE"
Catch ex As Exception
Return ex.Message
End Try
End Function
Private Function sGetID(ByVal sURL As String, ByVal sListGUID As String, ByVal sFileName As String) As String
Dim sUser As String = ConfigurationManager.AppSettings("User")
Dim sPwd As String = ConfigurationManager.AppSettings("Pwd")
Dim sDomain As String = ConfigurationManager.AppSettings("Domain")
Dim netAccess As System.Net.NetworkCredential = New System.Net.NetworkCredential(sUser, sPwd, sDomain)
Dim L As New SPLists.Lists
L.Credentials = netAccess
L.Url = sURL
Dim xmldoc As XmlDocument = New XmlDocument
Dim query As XmlNode = xmldoc.CreateNode(XmlNodeType.Element, "Query", "")
query.InnerXml = "<OrderBy><FieldRef Name='Modified' Ascending='False'></FieldRef></OrderBy>"""
Try
Dim caml As XmlNode = L.GetListItems(sListGUID, Nothing, query, Nothing, "1", Nothing)
Dim id As String = caml.ChildNodes(1).ChildNodes(1).Attributes("ows_ID").Value
Return id
Catch ex As Exception
Return ex.Message
End Try
End Function
Убедитесь, что вы используете внутренние имена полей.
Чтобы получить внутреннее имя поля, откройте форму "New" и нажмите "View Source" из контекстного меню (щелкните правой кнопкой мыши в любом месте страницы формы "New", чтобы открыть контекстное меню). Вы увидите поля вместе с их внутренними именами в конце исходного файла.
глядя на код:
string strBatch =
"<Method ID='1' Cmd='Update'> "
+ " <Field Name='ID'>3</Field> "
+ " <Field Name='Name'>Preeti</Field> "
+ " </Method> ";
...
elBatch.SetAttributeNode("UserName", "Preeti");
это на самом деле два отдельных свойства в sharepoint?
Попробуйте использовать инструмент U2UCamlCreator , чтобы проверить свои запросы sharepoint.
Этот инструмент поможет вам создавать пакеты для обновления полей sharepoint и многих других функций.