Установить программно созданный XML-документ для открытия с помощью шаблона InfoPath в SharePoint

У меня проблема с получением XML-документов, которые я создаю программным способом, и добавляю их в библиотеку форм в SharePoint, чтобы открывать их с помощью шаблона InfoPath, а не просто открывать их в виде простых XML-документов в Internet Explorer.

По сути, у меня есть веб-сервис, который проверяет базу данных, чтобы узнать, выполняются ли определенные условия. Если это так, веб-служба программно создает документ XML, имеющий ту же схему XML, что и файлы, созданные с помощью шаблона InfoPath, упомянутого ранее. Обычный процесс состоит в том, что реальный пользователь открывает этот шаблон InfoPath, заполняет данные и нажимает кнопку SUBMIT, которая создает XML-документ за кулисами и сохраняет его в библиотеке форм. Когда пользователь заходит в библиотеку форм для последующего просмотра этого XML-документа, документ автоматически открывается с помощью шаблона InfoPath (а не открывается как XML-документ в Internet Explorer).

Я пытаюсь выяснить, почему мои XML-документы, сгенерированные из веб-службы, ведут себя в этом отношении иначе, чем XML-документы, сгенерированные из InfoPath. Вот фрагмент кода, который я использую для создания XML-документа внутри веб-службы:

        //specify path to the SharePoint site and the form library
        var clientContext = new ClientContext("http://urlToSiteContainingTheFormLibrary");
        var site = clientContext.Web;
        clientContext.Load(site);
        var folder = site.GetFolderByServerRelativeUrl("FormLibraryNameHere");
        clientContext.Load(folder);            
        clientContext.ExecuteQuery();

        //create new file to add to the form library
        var fci = new FileCreationInformation();
        var encoding = new System.Text.UTF8Encoding();

        //load the InfoPath document's XML schema from resources file
        var baseXml = XElement.Load(new StringReader(Properties.Resources.BaseXml));
        //fill out the appropriate elements and attributes of the XML here
        //......
        //

        //set remaining properties of the new FileCreationInformation object
        byte[] array = encoding.GetBytes(baseXml.ToString());

        fci.Content = array;
        fci.Overwrite = true;
        fci.Url = "DocumentName"            

        //add the new file to the form library
        var newFile = folder.Files.Add(fci);
        clientContext.Load(newFile);
        var item = newFile.ListItemAllFields;
        clientContext.Load(item);

        //set metadata for the xml file here
        item["HTML_x0020_File_x0020_Type"] = "InfoPath.Document.3";
        item["TemplateUrl"] =
            "http://templateUrlHere/template.xsn?openin=preferclient&noredirect=true&xsnlocation=/templateLocation/template.xsn";
        //set remaining item properties......

        //update changes to the item
        item.Update();

        //commit the changes
        clientContext.ExecuteQuery();

На этом этапе мой XML-документ успешно отправлен в мою библиотеку форм, но когда я открываю его, он открывается как обычный XML-код в Internet Explorer, а не с использованием указанного мной шаблона. Я бы предположил, что свойства HTML_x0020_File_x0020_Type и TemplateUrl этого элемента будут указывать достаточно информации для SharePoint, чтобы он знал, что ему нужно открыть этот файл с помощью шаблона InfoPath, но, возможно, есть и другое свойство, которое мне нужно установить. Кто-нибудь имел опыт работы с подобной проблемой? Сначала я думал, что URL, который я использовал для своего шаблона, был неправильным, но я скопировал его непосредственно из существующего XML-документа, созданного с помощью шаблона InfoPath, поэтому я не думаю, что это проблема (я не учел URL и имена файлов в моем примере кода выше, поэтому, пожалуйста, игнорируйте тот факт, что эти URL неверны). Я продолжаю устранять эту проблему, но в то же время я подумал, что кто-то мог решить эту проблему раньше и может дать некоторое представление.

Заранее благодарю за любые ответы, я ценю любую помощь, которая предлагается.

1 ответ

Я знаю, что прошло много времени с тех пор, как был задан этот вопрос, но я думаю, что нашел решение или, по крайней мере, проблему.

Я недавно решил ту же проблему.

При загрузке одного из файлов, которые отображались в формате xml, когда они фактически являлись InfoPath, открытие его в блокноте показало, что количество реальных символов мусора по крайней мере равно количеству пустых символов мусора.

Оказывается, я использовал XmlTextWriter написать в MemoryStream, в XmlTextWriter я использую Encoding.UTF8, После изменения на Encoding.Default файлы были правильно сохранены и отображены как InfoPath.

Таким образом, для любого с подобной проблемой, проверьте значение в файле XML, попробуйте удалить пустые значения, если таковые имеются, и перезагрузите. Затем проверьте код, создающий документ, и, если он записывается как UTF8, попробуйте другую кодировку, например UTF16.

Другие вопросы по тегам