none
Добавление элементов в лист SharePoint из .txt файла RRS feed

  • Вопрос

  • Есть текстовый файл, около 300 строк. Хочется в лист _departmentList добавить элементы, названия которых равны строке из текстового файла. Было бы удобно подгружать нужный файл с рабочей машины, поэтому разместил элемент FileUpload. Показывает большой лист ошибок.. Не могу понять что пропустил, прошу помочь.

    Код метода (stringItem объявлена до метода):

            protected void ProcessingList(object sender, EventArgs e)
            {
                SPSite site = new SPSite("http://server:port/myWeb/");
                SPWeb web = site.OpenWeb();
    
                SPList oList = web.Lists["_departmentList"];
    
                using (StreamReader reader = new StreamReader(FileUpload1.PostedFile.InputStream))
                {
                    while (reader.Peek() != -1)
                    {
                        stringItem = reader.ReadLine();
                        SPListItem oSPListItem = oList.Items.Add();
                        oSPListItem["Title"] = stringItem;
                        oSPListItem.Update();
                    }
                    reader.Close();
                }
            }

    Лист ошибок:

    Ошибка веб-части: Необработанное исключение в методе Execute объекта-оболочки изолированного кода в частично доверенном домене приложений: Возникла неожиданная ошибка. Идентификатор корреляции: dac7309d-097e-e0bb-8a1f-d460a72caec0.
    Скрыть сведения об ошибке 
    
    [SPUserCodeSolutionExecutionFailedException: Необработанное исключение в методе Execute объекта-оболочки изолированного кода в частично доверенном домене приложений: Возникла неожиданная ошибка.]
      
     Server stack trace: 
      at Microsoft.SharePoint.UserCode.SPUserCodeApplicationHostAppDomainRef.Execute(Type userCodeWrapperType, SPUserCodeCachedAssemblyGroup userAssemblyGroup, Guid siteCollectionId, Byte[] binaryUserCodeToken, Byte[] proxyOperationToken, SPUserCodeExecutionContext executionContext, Boolean shouldUsageLog, Int32 currentProcessId) 
      at Microsoft.SharePoint.UserCode.SPUserCodeApplicationHostAppDomainRef.Execute(Type userCodeWrapperType, SPUserCodeCachedAssemblyGroup userAssemblyGroup, Guid siteCollectionId, Byte[] binaryUserCodeToken, Byte[] proxyOperationToken, SPUserCodeExecutionContext executionContext, Boolean shouldUsageLog, Int32 currentProcessId) 
      at Microsoft.SharePoint.UserCode.SPUserCodeAppDomain.Execute(Type userCodeWrapperType, SPUserCodeCachedAssemblyGroup userAssemblyGroup, Guid siteCollectionId, Byte[] binaryUserCodeToken, Byte[] proxyOperationToken, SPUserCodeExecutionContext executionContext, Boolean shouldUsageLog, Int32 currentProcessId) 
      at Microsoft.SharePoint.UserCode.SPUserCodeWorkerProcessProxyForShim.ExecuteInternal(Type userCodeWrapperType, SPUserCodeCachedAssemblyGroup userAssemblyGroup, Guid siteCollectionId, Byte[] binaryUserCodeToken, Byte[] proxyOperationToken, SPUserCodeExecutionContext executionContext) 
      at Microsoft.SharePoint.UserCode.SPUserCodeWorkerProcessProxy.Execute(Type userCodeWrapperType, SPUserCodeCachedAssemblyGroup userAssemblyGroup, Guid siteCollectionId, Byte[] binaryUserCodeToken, Byte[] proxyOperationToken, SPUserCodeExecutionContext executionContext) 
      at System.Runtime.Remoting.Messaging.StackBuilderSink._PrivateProcessMessage(IntPtr md, Object[] args, Object server, Object[]& outArgs) 
      at System.Runtime.Remoting.Messaging.StackBuilderSink.SyncProcessMessage(IMessage msg) 
      
     Exception rethrown at [0]: 
      at System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg, IMessage retMsg) 
      at System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData, Int32 type) 
      at Microsoft.SharePoint.UserCode.SPUserCodeWorkerProcess.ExecuteDelegate.EndInvoke(IAsyncResult result) 
      at Microsoft.SharePoint.UserCode.SPUserCodeWorkerProcess.Execute(Type userCodeWrapperType, SPUserCodeCachedAssemblyGroup userAssemblyGroup, Guid siteCollectionId, SPUserToken userToken, String currentAffinity, SPUserCodeExecutionContext executionContext) 
      at Microsoft.SharePoint.UserCode.SPUserCodeExecutionHost.Execute(Type userCodeWrapperType, Guid siteCollectionId, SPUserToken userToken, String affinity, SPUserCodeExecutionContext executionContext) 
      at System.Runtime.Remoting.Messaging.StackBuilderSink._PrivateProcessMessage(IntPtr md, Object[] args, Object server, Object[]& outArgs) 
      at System.Runtime.Remoting.Messaging.StackBuilderSink.SyncProcessMessage(IMessage msg) 
      
     Exception rethrown at [1]: 
      at System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg, IMessage retMsg) 
      at System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData, Int32 type) 
      at Microsoft.SharePoint.Administration.ISPUserCodeExecutionHostProxy.Execute(Type userCodeWrapperType, Guid siteCollectionId, SPUserToken userToken, String affinityBucketName, SPUserCodeExecutionContext executionContext) 
      at Microsoft.SharePoint.UserCode.SPUserCodeExecutionManager.Execute(Type userCodeWrapperType, SPSite site, SPUserCodeExecutionContext executionContext) 
      at Microsoft.SharePoint.UserCode.SPUserCodeWebPartRemoteExecutionHelper.<>c__DisplayClassa.b__9() 
      at Microsoft.SharePoint.Utilities.SecurityContext.RunAsProcess(CodeToRunElevated secureCode) 
      at Microsoft.SharePoint.UserCode.SPUserCodeWebPartRemoteExecutionHelper.ExecuteRequestInSandBox(HttpContext context, SPWeb web, SPWebPartManager manager, SPUserCodeWebPart userCodeWebPart)
    
    [InvalidOperationException: Произошла утечка следующих объектов IDisposable из кода изолированного решения: Microsoft.SharePoint.SPSite ]
      
     Server stack trace: 
      at Microsoft.SharePoint.Subset.Shim.DisposableObjectsMonitor.CleanupRemoteDisposableObjects() 
      at Microsoft.SharePoint.UserCode.SPUserCodeApplicationHostAppDomainRef.ExecuteWrapper(SPUserCodeWrapper wrapper, SPUserCodeExecutionContext executionContext) 
      at System.Runtime.Remoting.Messaging.StackBuilderSink._PrivateProcessMessage(IntPtr md, Object[] args, Object server, Object[]& outArgs) 
      at System.Runtime.Remoting.Messaging.StackBuilderSink.AsyncProcessMessage(IMessage msg, IMessageSink replySink) 
      
     Exception rethrown at [0]: 
      at System.Runtime.Remoting.Proxies.RealProxy.EndInvokeHelper(Message reqMsg, Boolean bProxyCase) 
      at System.Runtime.Remoting.Proxies.RemotingProxy.Invoke(Object NotUsed, MessageData& msgData) 
      at Microsoft.SharePoint.UserCode.SPUserCodeApplicationHostAppDomainRef.CodeToExecuteWrapper.EndInvoke(IAsyncResult result) 
      at Microsoft.SharePoint.UserCode.SPUserCodeApplicationHostAppDomainRef.Execute(Type userCodeWrapperType, SPUserCodeCachedAssemblyGroup userAssemblyGroup, Guid siteCollectionId, Byte[] binaryUserCodeToken, Byte[] proxyOperationToken, SPUserCodeExecutionContext executionContext, Boolean shouldUsageLog, Int32 currentProcessId) 

    Вот такой код работает, айтемы добавляет:

    SPList oList = web.Lists["_departmentList"];
    SPListItem oSPListItem = oList.Items.Add();
    oSPListItem["Title"] = "Item name here";
    oSPListItem.Update();

    • Изменено Nikolay Iveback 23 сентября 2015 г. 13:39 Добавлен рабочий пример
    23 сентября 2015 г. 13:24

Ответы

  • Здравствуйте! приведу пример как делать более правильно)) вы под свой подстроите ....

    using (SPSite osite = new SPSite("http://site"))
                {
                    using (SPWeb oweb = osite.OpenWeb())
                    {
                       SPList olist= oweb.Lists.TryGetList("test");
                       if (olist != null)
                       {
                         SPListItem item=  olist.AddItem();
                         oweb.AllowUnsafeUpdates = true;
                         item["Title"] = "Item name here";
                         item.Update();
                         oweb.AllowUnsafeUpdates = false;
                       }
                    }
                }

    Так же если на список у пользака(который юзает ваш веб-парт) нету прав используйте

    SPSecurity.RunWithElevatedPrivileges.

    И сделайте решение фарм солюшн


    • Изменено Kadackiy Dmitriy 23 сентября 2015 г. 14:11
    • Предложено в качестве ответа Maxim Shusharin 24 сентября 2015 г. 2:07
    • Помечено в качестве ответа Nikolay Iveback 25 сентября 2015 г. 6:53
    23 сентября 2015 г. 14:09
  • С полноты картины и надо было начинать!!!

    Добавьте в код:

    <SharePoint:FormDigest runat="server" />

    Отправка файла из локальной папки на сайт SharePoint

    FormDigest Class

    • Помечено в качестве ответа Nikolay Iveback 25 сентября 2015 г. 9:51
    25 сентября 2015 г. 8:49

Все ответы

  • Здравствуйте! приведу пример как делать более правильно)) вы под свой подстроите ....

    using (SPSite osite = new SPSite("http://site"))
                {
                    using (SPWeb oweb = osite.OpenWeb())
                    {
                       SPList olist= oweb.Lists.TryGetList("test");
                       if (olist != null)
                       {
                         SPListItem item=  olist.AddItem();
                         oweb.AllowUnsafeUpdates = true;
                         item["Title"] = "Item name here";
                         item.Update();
                         oweb.AllowUnsafeUpdates = false;
                       }
                    }
                }

    Так же если на список у пользака(который юзает ваш веб-парт) нету прав используйте

    SPSecurity.RunWithElevatedPrivileges.

    И сделайте решение фарм солюшн


    • Изменено Kadackiy Dmitriy 23 сентября 2015 г. 14:11
    • Предложено в качестве ответа Maxim Shusharin 24 сентября 2015 г. 2:07
    • Помечено в качестве ответа Nikolay Iveback 25 сентября 2015 г. 6:53
    23 сентября 2015 г. 14:09
  • Здравствуйте! приведу пример как делать более правильно)) вы под свой подстроите ....

    using (SPSite osite = new SPSite("http://site"))
                {
                    using (SPWeb oweb = osite.OpenWeb())
                    {
                       SPList olist= oweb.Lists.TryGetList("test");
                       if (olist != null)
                       {
                         SPListItem item=  olist.AddItem();
                         oweb.AllowUnsafeUpdates = true;
                         item["Title"] = "Item name here";
                         item.Update();
                         oweb.AllowUnsafeUpdates = false;
                       }
                    }
                }

    Так же если на список у пользака(который юзает ваш веб-парт) нету прав используйте

    SPSecurity.RunWithElevatedPrivileges.

    И сделайте решение фарм солюшн



    Спасибо, Дмитрий! Идею Вашу понял, но реализовать пока не получается.

    Возможно моя ошибка в

    "protected void ProcessingList(object sender, EventArgs e)"?

    24 сентября 2015 г. 7:53
  • Спасибо, Дмитрий! Идею Вашу понял, но реализовать пока не получается.

    Возможно моя ошибка в

    "protected void ProcessingList(object sender, EventArgs e)"?

    Что именно не получается?
    24 сентября 2015 г. 8:18
  • Как и раньше, ошибки лезут. На текущий момент сделано так

            public string stringItem = "";
    
            protected void ProcessingList(object sender, EventArgs e)
            {
                using (SPSite osite = new SPSite("http://server:port/web/"))
                {
                    using (SPWeb oweb = osite.OpenWeb())
                    {
                        new FileIOPermission(PermissionState.Unrestricted).Assert(); //
    
                        using (StreamReader reader = new StreamReader(FileUpload1.PostedFile.InputStream))
                        {
                            while (reader.Peek() != -1)
                            {
                                SPList olist = oweb.Lists.TryGetList("_departmentList");
                                if (olist != null)
                                {
                                    stringItem = reader.ReadLine();
    
                                    SPListItem item = olist.Items.Add();
                                    //SPListItem item = olist.AddItem(); //error too
                                    oweb.AllowUnsafeUpdates = true;
                                    item["Title"] = String.Format("{0}", stringItem);
                                    //item["Title"] = stringItem; //error too
                                    item.Update();
                                    oweb.AllowUnsafeUpdates = false;
                                }
                            }
                        }
    
                        FileIOPermission.RevertAssert(); //
                    }
                }
            }


    Под namespaces добавлено

    [assembly: AllowPartiallyTrustedCallers]

    Забыл ошибки:

    [SPUserCodeSolutionExecutionFailedException: Необработанное исключение в методе Execute объекта-оболочки изолированного кода в частично доверенном домене приложений: Возникла неожиданная ошибка.]
      
     Server stack trace: 
      at Microsoft.SharePoint.UserCode.SPUserCodeApplicationHostAppDomainRef.Execute(Type userCodeWrapperType, SPUserCodeCachedAssemblyGroup userAssemblyGroup, Guid siteCollectionId, Byte[] binaryUserCodeToken, Byte[] proxyOperationToken, SPUserCodeExecutionContext executionContext, Boolean shouldUsageLog, Int32 currentProcessId) 
      at Microsoft.SharePoint.UserCode.SPUserCodeApplicationHostAppDomainRef.Execute(Type userCodeWrapperType, SPUserCodeCachedAssemblyGroup userAssemblyGroup, Guid siteCollectionId, Byte[] binaryUserCodeToken, Byte[] proxyOperationToken, SPUserCodeExecutionContext executionContext, Boolean shouldUsageLog, Int32 currentProcessId) 
      at Microsoft.SharePoint.UserCode.SPUserCodeAppDomain.Execute(Type userCodeWrapperType, SPUserCodeCachedAssemblyGroup userAssemblyGroup, Guid siteCollectionId, Byte[] binaryUserCodeToken, Byte[] proxyOperationToken, SPUserCodeExecutionContext executionContext, Boolean shouldUsageLog, Int32 currentProcessId) 
      at Microsoft.SharePoint.UserCode.SPUserCodeWorkerProcessProxyForShim.ExecuteInternal(Type userCodeWrapperType, SPUserCodeCachedAssemblyGroup userAssemblyGroup, Guid siteCollectionId, Byte[] binaryUserCodeToken, Byte[] proxyOperationToken, SPUserCodeExecutionContext executionContext) 
      at Microsoft.SharePoint.UserCode.SPUserCodeWorkerProcessProxy.Execute(Type userCodeWrapperType, SPUserCodeCachedAssemblyGroup userAssemblyGroup, Guid siteCollectionId, Byte[] binaryUserCodeToken, Byte[] proxyOperationToken, SPUserCodeExecutionContext executionContext) 
      at System.Runtime.Remoting.Messaging.StackBuilderSink._PrivateProcessMessage(IntPtr md, Object[] args, Object server, Object[]& outArgs) 
      at System.Runtime.Remoting.Messaging.StackBuilderSink.SyncProcessMessage(IMessage msg) 
      
     Exception rethrown at [0]: 
      at System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg, IMessage retMsg) 
      at System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData, Int32 type) 
      at Microsoft.SharePoint.UserCode.SPUserCodeWorkerProcess.ExecuteDelegate.EndInvoke(IAsyncResult result) 
      at Microsoft.SharePoint.UserCode.SPUserCodeWorkerProcess.Execute(Type userCodeWrapperType, SPUserCodeCachedAssemblyGroup userAssemblyGroup, Guid siteCollectionId, SPUserToken userToken, String currentAffinity, SPUserCodeExecutionContext executionContext) 
      at Microsoft.SharePoint.UserCode.SPUserCodeExecutionHost.Execute(Type userCodeWrapperType, Guid siteCollectionId, SPUserToken userToken, String affinity, SPUserCodeExecutionContext executionContext) 
      at System.Runtime.Remoting.Messaging.StackBuilderSink._PrivateProcessMessage(IntPtr md, Object[] args, Object server, Object[]& outArgs) 
      at System.Runtime.Remoting.Messaging.StackBuilderSink.SyncProcessMessage(IMessage msg) 
      
     Exception rethrown at [1]: 
      at System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg, IMessage retMsg) 
      at System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData, Int32 type) 
      at Microsoft.SharePoint.Administration.ISPUserCodeExecutionHostProxy.Execute(Type userCodeWrapperType, Guid siteCollectionId, SPUserToken userToken, String affinityBucketName, SPUserCodeExecutionContext executionContext) 
      at Microsoft.SharePoint.UserCode.SPUserCodeExecutionManager.Execute(Type userCodeWrapperType, SPSite site, SPUserCodeExecutionContext executionContext) 
      at Microsoft.SharePoint.UserCode.SPUserCodeWebPartRemoteExecutionHelper.<>c__DisplayClassa.b__9() 
      at Microsoft.SharePoint.Utilities.SecurityContext.RunAsProcess(CodeToRunElevated secureCode) 
      at Microsoft.SharePoint.UserCode.SPUserCodeWebPartRemoteExecutionHelper.ExecuteRequestInSandBox(HttpContext context, SPWeb web, SPWebPartManager manager, SPUserCodeWebPart userCodeWebPart)
    
    [InvalidOperationException: Cannot perform CAS Asserts in Security Transparent methods]
      at System.Security.CodeAccessSecurityEngine.CheckNReturnSO(PermissionToken permToken, CodeAccessPermission demand, StackCrawlMark& stackMark, Int32 create) 
      at System.Security.CodeAccessSecurityEngine.Assert(CodeAccessPermission cap, StackCrawlMark& stackMark) 
      at System.Security.CodeAccessPermission.Assert() 
      at SharePointListItems.VisualWebPart1.VisualWebPart1.ProcessingList(Object sender, EventArgs e) 
      at System.Web.UI.WebControls.Button.RaisePostBackEvent(String eventArgument) 
      at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)


    • Изменено Nikolay Iveback 24 сентября 2015 г. 8:51 + error list
    24 сентября 2015 г. 8:45
  • Вот так писать плохо:

    SPListItem item = olist.Items.Add();

    Нужно вот так - splistitem item=olist.AddItem(). 

    http://sharepoint.stackexchange.com/questions/54958/splist-add-vs-splist-additem-sharepoint-2010

    Далее - у вас может возникать ошибка при чтении данных из файла.

    Лучший вариант это дебаг(надеюсь у вас есть тестовый портал).

    для дебага вам нужно подключится к процессу w3wp

    https://msdn.microsoft.com/en-us/library/ff650703.aspx?f=255&MSPPError=-2147217396

    http://abhijitjana.net/2010/11/04/how-to-use-iis-manager-to-get-worker-processes-w3wp-exe-details-information/


    24 сентября 2015 г. 9:08
  • почему-то ругается на null в reader:

    using (StreamReader reader = new StreamReader(FileUpload1.PostedFile.InputStream))

    Object reference not set to an instance of an object.

    Чудеса...

    24 сентября 2015 г. 10:45
  • Объяснений этому нигде так и не нашел, создам новый вопрос в случае необходимости..
    25 сентября 2015 г. 6:54
  • Объяснений этому нигде так и не нашел, создам новый вопрос в случае необходимости..

    А что в FileUpload?

    if (FileUpload1.HasFile)
                try
                {
                    FileUpload1.SaveAs("C:\\Uploads\\" + 
                         FileUpload1.FileName);
                    Label1.Text = "File name: " +
                         FileUpload1.PostedFile.FileName + "<br>" +
                         FileUpload1.PostedFile.ContentLength + " kb<br>" +
                         "Content type: " +
                         FileUpload1.PostedFile.ContentType;
                }
                catch (Exception ex)
                {
                    Label1.Text = "ERROR: " + ex.Message.ToString();
                }

    Uploading Files in ASP.NET

    25 сентября 2015 г. 7:23
  • А что в FileUpload?

    Простой текст, строки. Не длинные. Конкретно сейчас контент файла такой:

    item1
    item2
    item3

    Свежий пример, работает вне SharePoint. Когда вставляю в код и пробую на шарике - HasFile даёт false и код не отрабатывает.

    protected void ProcessingList(object sender, EventArgs e)
    {
        if (FileUploadControl.HasFile)
        {
            FileUploadControl.PostedFile.SaveAs(@"C:\" + FileUploadControl.FileName);
        }
    }

    Попробую разобрать Ваш пример, спасибо.

    Апдейт: Максим, Ваш пример также не входит в try. HasFile не пропускает.

    Для полноты ощущений мой код разметки:

    <h1>Add items to _departmentList list</h1>
    <asp:FileUpload ID="FileUploadControl" Font-Italic="true" AllowMultiple="false" runat="server" />
    <asp:Button OnClick="ProcessingList" ID="SubmitButton" Width="250" Text="Ну даваАай!!!" runat="server" />
    <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>
    <br />
    <br />

    А может такое быть, если в настройках солюшена выбрано не .NET 3.5? o_O

    Сейчас выбрано по умолчанию 4.5 (VS 2013)




    25 сентября 2015 г. 7:42
  • С полноты картины и надо было начинать!!!

    Добавьте в код:

    <SharePoint:FormDigest runat="server" />

    Отправка файла из локальной папки на сайт SharePoint

    FormDigest Class

    • Помечено в качестве ответа Nikolay Iveback 25 сентября 2015 г. 9:51
    25 сентября 2015 г. 8:49
  • С полноты картины и надо было начинать!!!

    Добавьте в код:

    <SharePoint:FormDigest runat="server" />

    Отправка файла из локальной папки на сайт SharePoint

    FormDigest Class

    Слона то я и не приметил!

    Пардон, just first experience (:

    25 сентября 2015 г. 9:51
  • У меня похожая проблема, помогите разобраться

    https://social.technet.microsoft.com/Forums/ru-RU/ed458d66-1f35-4c72-8104-cf49f837ee89/import-content-from-a-txt-file-and-forward-to-gridview-in-the-sharepoint-?forum=sharepointru

    20 октября 2017 г. 14:22