예제 #1
0
        private void CheckListItemField(SPWeb web, SPList list, SPListItem listItem, Guid fieldId, JChemMetaFieldCollector metaData, WebStructureOutput webZipOutput)
        {
            try
            {
                JChemContextInfo ctx = new JChemContextInfo(
                    SPSecurity.AuthenticationMode != System.Web.Configuration.AuthenticationMode.Windows,
                    web.CurrentUser.LoginName,
                    Convert.ToBase64String(web.CurrentUser.UserToken.BinaryToken),
                    Guid.NewGuid(),
                    web.Site.ID,
                    web.ID,
                    web.Locale,
                    web.Locale,
                    Guid.NewGuid());
                StructureServiceClient client = new StructureServiceClient(ctx, SPServiceContext.GetContext(web.Site));

                var fieldContent = listItem[fieldId] as string;
                if (!string.IsNullOrEmpty(fieldContent))
                {
                    var fieldContentDocument = new HtmlDocument();
                    fieldContentDocument.LoadHtml(fieldContent);

                    HtmlNodeCollection structureHtmlNodesWithIdOrURL =
                        fieldContentDocument.DocumentNode.SelectNodes("//img[contains(@src,'/_vti_bin/JChem/CxnWebGet.svc/GetStructureImageFromSession')]");
                    if (structureHtmlNodesWithIdOrURL != null)
                    {
                        ConsoleEx.WriteLine(ConsoleColor.DarkRed, "\tEmpty structure found in '{0}/{1}/{2}'", web.Title, list.Title, listItem.Name);
                        foreach (var entry in metaData)
                        {
                            var structures = JChemMetaFieldDataProvider.GetStructures(entry.Value[FieldPropertyCollector.SructuresProperty]);
                            foreach (var structure in structures)
                            {
                                if (!structure.StructureString.StartsWith("error", StringComparison.InvariantCultureIgnoreCase))
                                {
                                    try
                                    {
                                        var image = client.GetStructureImage(structure.StructureString, structure.Format.ToString(), 200, 200, false);
                                        using (var imageStream = new MemoryStream())
                                        {
                                            image.Save(imageStream, System.Drawing.Imaging.ImageFormat.Png);
                                            imageStream.Position = 0;
                                            webZipOutput.AddStructure(list.Title, listItem.Name, listItem.ID, structure.Id.ToString(), imageStream.ToArray());
                                        }
                                    }
                                    catch (Exception ex)
                                    {
                                        ConsoleEx.WriteLine(ConsoleColor.Red, "\tCannot render structure: {0}", ex.Message);
                                        Environment.Exit(1);
                                    }
                                }
                            }
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                ConsoleEx.WriteLine("\tCannot determine content of column '{0}'. Reason: {1}", list.Fields[fieldId].Title, ex.Message);
            }
        }
        private static void RunOptionsAndReturnExitCode(Options opts)
        {
            try
            {
                using (var site = new SPSite(opts.Url))
                {
                    using (var web = site.OpenWeb())
                    {
                        var assembly             = Assembly.GetAssembly(typeof(ExportManager));
                        var type                 = assembly.GetType("ChemAxon.JChemSharePoint.Services.Model.SP.Data.JChemAppContext");
                        var createContext        = type.GetMethod("CreateContext", new Type[] { typeof(JChemContextInfo) });
                        JChemContextInfo ctxInfo = new JChemContextInfo(true, Environment.UserName,
                                                                        Convert.ToBase64String(web.CurrentUser.UserToken.BinaryToken),
                                                                        Guid.NewGuid(),
                                                                        site.ID,
                                                                        web.ID,
                                                                        web.Locale,
                                                                        web.Locale,
                                                                        Guid.NewGuid());

                        using (DataContext ctx = (DataContext)createContext.Invoke(null, new object[] { ctxInfo }))
                        {
                            var           list          = web.GetListFromUrl(opts.Url);
                            var           outputFile    = string.IsNullOrWhiteSpace(opts.Output) ? list.Title : Path.GetFileNameWithoutExtension(opts.Output);
                            var           fileFormat    = string.IsNullOrWhiteSpace(opts.Format) ? "mrv" : opts.Format;
                            ExportManager exportManager = new ExportManager(ctx);
                            var           exportOptions = new ExportOptions()
                            {
                                FileEncoding        = "UTF-8",
                                FileName            = outputFile,
                                IncludeNoStructures = false,
                                OutputFormat        = fileFormat,
                                ListId  = list.ID,
                                Columns = new List <ExportColumn>
                                {
                                    new ExportColumn()
                                    {
                                        ColumnName            = opts.ColumnName,
                                        IsMainStructureColumn = true,
                                        IsStructureColumn     = true,
                                        IsSelectedForSaving   = true
                                    }
                                }
                            };
                            using (var stream = exportManager.ExportList(exportOptions))
                            {
                                using (var fs = new FileStream(string.Format("{0}.{1}", outputFile, fileFormat), FileMode.Create))
                                {
                                    stream.CopyTo(fs);
                                }
                            }
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine("Error while exporting: ", ex.Message);
                Console.WriteLine("Stack: ", ex.StackTrace);
            }
        }