Ejemplo n.º 1
0
        // 将dt1000 gcs.ini文件中的查重配置升级到dup.xml文件中

        /*
         * [/我的电脑/图书编目]
         * key1=010$a,50,
         * key2=200$a,50,
         * key3=905$d,20,
         * key4=906$a,50,
         * key5=986$a,50,
         * HoldValue=130
         * targetDB1=/我的电脑/图书编目,
         * targetDB2=/我的电脑/图书总库,
         * */
        public static int UpgradeGcsIniDupCfg(string strGcsIniFilename,
                                              string strDupXmlFilename,
                                              out string strError)
        {
            strError = "";

            XmlDocument dom = new XmlDocument();

            dom.LoadXml("<root />");

            // 获得全部section值,
            List <string> sections = null;

            int nRet = GetIniSections(strGcsIniFilename,
                                      out sections,
                                      out strError);

            if (nRet == -1)
            {
                return(-1);
            }
            if (nRet == 0)
            {
                return(-1);
            }

            // 然后看每个section里面有没有一个名为"key1"的entry,
            // 如果有,就是我们关心的配置section
            List <string> dbpaths = new List <string>();

            for (int i = 0; i < sections.Count; i++)
            {
                string strSection = sections[i];

                StringBuilder s = new StringBuilder(255, 255);

                nRet = API.GetPrivateProfileString(strSection,
                                                   "key1",
                                                   "!!!null",
                                                   s,
                                                   255,
                                                   strGcsIniFilename);
                string strValue = s.ToString();
                if (nRet <= 0 ||
                    strValue == "!!!null")
                {
                }
                else
                {
                    if (IsValidDbPath(strSection) == true)
                    {
                        dbpaths.Add(strSection);
                    }
                }
            }

            // 方案名和发起数据库的关系数组
            List <DefaultProjectRelation> relations = new List <DefaultProjectRelation>();

            string strToday = DateTime.Now.ToShortDateString();

            // 做每个数据库
            for (int i = 0; i < dbpaths.Count; i++)
            {
                string strDbPath = dbpaths[i];

                if (String.IsNullOrEmpty(strDbPath) == true)
                {
                    continue;
                }

                string strThreshold = "";

                StringBuilder s = new StringBuilder(255, 255);
                nRet = API.GetPrivateProfileString(strDbPath,
                                                   "HoldValue",
                                                   "!!!null",
                                                   s,
                                                   255,
                                                   strGcsIniFilename);
                string strValue = s.ToString();
                if (strValue != "!!!null")
                {
                    strThreshold = strValue;
                }

                if (String.IsNullOrEmpty(strThreshold) == true)
                {
                    continue;
                }

                // 增加一个<project>元素
                XmlNode nodeProject = dom.CreateElement("project");
                dom.DocumentElement.AppendChild(nodeProject);
                string strProjectName = "查重方案" + (i + 1).ToString();    //"查重方案" + (i + 1).ToString() + " " + NewStylePath(strDbPath)
                DomUtil.SetAttr(nodeProject, "name", strProjectName);
                DomUtil.SetAttr(nodeProject, "comment", "发起库为 " + NewStylePath(strDbPath) + "," + strToday + " 从dt1000升级上来");

                DefaultProjectRelation relation = new DefaultProjectRelation();
                relation.StartDbPath = NewStylePath(strDbPath);
                relation.ProjectName = strProjectName;
                relations.Add(relation);

                // 增加若干<database>元素
                for (int j = 0; ; j++)
                {
                    string strEntry = "targetDB" + (j + 1).ToString();

                    StringBuilder s1 = new StringBuilder(255, 255);
                    nRet = API.GetPrivateProfileString(strDbPath,
                                                       strEntry,
                                                       "!!!null",
                                                       s1,
                                                       255,
                                                       strGcsIniFilename);
                    string strLine = s1.ToString();
                    if (nRet <= 0 ||
                        strLine == "!!!null")
                    {
                        break;
                    }

                    string strDatabaseName = "";
                    string strType         = "";

                    string[] parts = strLine.Split(new char[] { ',' });
                    if (parts.Length > 0)
                    {
                        strDatabaseName = parts[0].Trim();
                    }

                    if (parts.Length > 1)
                    {
                        strType = parts[1].Trim();
                    }

                    XmlNode nodeDatabase = dom.CreateElement("database");
                    nodeProject.AppendChild(nodeDatabase);

                    DomUtil.SetAttr(nodeDatabase, "name", NewStylePath(strDatabaseName));
                    DomUtil.SetAttr(nodeDatabase, "threshold", strThreshold);

                    ////
                    // 增加若干<accessPoint>元素
                    for (int k = 0; ; k++)
                    {
                        string strEntry2 = "key" + (k + 1).ToString();

                        StringBuilder s2 = new StringBuilder(255, 255);
                        nRet = API.GetPrivateProfileString(strDbPath,
                                                           strEntry2,
                                                           "!!!null",
                                                           s2,
                                                           255,
                                                           strGcsIniFilename);
                        string strLine1 = s2.ToString();
                        if (nRet <= 0 ||
                            strLine1 == "!!!null")
                        {
                            break;
                        }

                        string strFromName    = "";
                        string strWeight      = "";
                        string strSearchStyle = "";

                        string[] parts_of_line = strLine1.Split(new char[] { ',' });
                        if (parts_of_line.Length > 0)
                        {
                            strFromName = parts_of_line[0].Trim();
                        }

                        if (parts.Length > 1)
                        {
                            strWeight = parts_of_line[1].Trim();
                        }

                        if (parts_of_line.Length > 2)
                        {
                            strSearchStyle = parts_of_line[2].Trim();
                        }

                        if (strSearchStyle == "q")
                        {
                            strSearchStyle = "Left";
                        }
                        else if (strSearchStyle == "")
                        {
                            strSearchStyle = "Exact";
                        }

                        XmlNode nodeAccessPoint = dom.CreateElement("accessPoint");
                        nodeDatabase.AppendChild(nodeAccessPoint);

                        DomUtil.SetAttr(nodeAccessPoint, "name", strFromName);
                        DomUtil.SetAttr(nodeAccessPoint, "weight", strWeight);
                        DomUtil.SetAttr(nodeAccessPoint, "searchStyle", strSearchStyle);
                    } // end of k
                }     // end of j
            }         // end of i

            // 缺省查重方案定义
            // 在根下增加一个<defaultProject>容器元素
            XmlNode nodeContainer = dom.CreateElement("defaultProject");

            dom.DocumentElement.AppendChild(nodeContainer);

            for (int i = 0; i < relations.Count; i++)
            {
                DefaultProjectRelation relation = relations[i];

                XmlNode nodeSourceDatabase = dom.CreateElement("sourceDatabase");
                nodeContainer.AppendChild(nodeSourceDatabase);

                DomUtil.SetAttr(nodeSourceDatabase, "name", relation.StartDbPath);
                DomUtil.SetAttr(nodeSourceDatabase, "defaultProject", relation.ProjectName);
            }


            dom.Save(strDupXmlFilename);

            return(0);
        }
Ejemplo n.º 2
0
        // 将dt1000 gcs.ini文件中的查重配置升级到dup.xml文件中
        /*
[/我的电脑/图书编目]
key1=010$a,50,
key2=200$a,50,
key3=905$d,20,
key4=906$a,50,
key5=986$a,50,
HoldValue=130
targetDB1=/我的电脑/图书编目,
targetDB2=/我的电脑/图书总库,
         * */
        public static int UpgradeGcsIniDupCfg(string strGcsIniFilename,
            string strDupXmlFilename,
            out string strError)
        {
            strError = "";

            XmlDocument dom = new XmlDocument();
            dom.LoadXml("<root />");

            // 获得全部section值,
            List<string> sections = null;

            int nRet = GetIniSections(strGcsIniFilename,
                out sections,
                out strError);
            if (nRet == -1)
                return -1;
            if (nRet == 0)
                return -1;

            // 然后看每个section里面有没有一个名为"key1"的entry,
            // 如果有,就是我们关心的配置section
            List<string> dbpaths = new List<string>();
            for (int i = 0; i < sections.Count; i++)
            {
                string strSection = sections[i];

                StringBuilder s = new StringBuilder(255, 255);

                nRet = API.GetPrivateProfileString(strSection,
                    "key1",
                    "!!!null",
                    s,
                    255,
                    strGcsIniFilename);
                string strValue = s.ToString();
                if (nRet <= 0
                    || strValue == "!!!null")
                {
                }
                else
                {
                    if (IsValidDbPath(strSection) == true)
                        dbpaths.Add(strSection);
                }
            }

            // 方案名和发起数据库的关系数组
            List<DefaultProjectRelation> relations = new List<DefaultProjectRelation>();

            string strToday = DateTime.Now.ToShortDateString();

            // 做每个数据库
            for (int i = 0; i < dbpaths.Count; i++)
            {
                string strDbPath = dbpaths[i];

                if (String.IsNullOrEmpty(strDbPath) == true)
                    continue;

                string strThreshold = "";

                StringBuilder s = new StringBuilder(255, 255);
                nRet = API.GetPrivateProfileString(strDbPath,
                    "HoldValue",
                    "!!!null",
                    s,
                    255,
                    strGcsIniFilename);
                string strValue = s.ToString();
                if (strValue != "!!!null")
                {
                    strThreshold = strValue;
                }

                if (String.IsNullOrEmpty(strThreshold) == true)
                    continue;

                // 增加一个<project>元素
                XmlNode nodeProject = dom.CreateElement("project");
                dom.DocumentElement.AppendChild(nodeProject);
                string strProjectName = "查重方案" + (i + 1).ToString();    //"查重方案" + (i + 1).ToString() + " " + NewStylePath(strDbPath)
                DomUtil.SetAttr(nodeProject, "name", strProjectName);
                DomUtil.SetAttr(nodeProject, "comment", "发起库为 " + NewStylePath(strDbPath) + "," + strToday + " 从dt1000升级上来");

                DefaultProjectRelation relation = new DefaultProjectRelation();
                relation.StartDbPath = NewStylePath(strDbPath);
                relation.ProjectName = strProjectName;
                relations.Add(relation);

                // 增加若干<database>元素
                for (int j = 0; ; j++)
                {
                    string strEntry = "targetDB" + (j + 1).ToString();

                    StringBuilder s1 = new StringBuilder(255, 255);
                    nRet = API.GetPrivateProfileString(strDbPath,
                        strEntry,
                        "!!!null",
                        s1,
                        255,
                        strGcsIniFilename);
                    string strLine = s1.ToString();
                    if (nRet <= 0
                        || strLine == "!!!null")
                        break;

                    string strDatabaseName = "";
                    string strType = "";

                    string[] parts = strLine.Split(new char[] { ',' });
                    if (parts.Length > 0)
                        strDatabaseName = parts[0].Trim();

                    if (parts.Length > 1)
                        strType = parts[1].Trim();

                    XmlNode nodeDatabase = dom.CreateElement("database");
                    nodeProject.AppendChild(nodeDatabase);

                    DomUtil.SetAttr(nodeDatabase, "name", NewStylePath(strDatabaseName));
                    DomUtil.SetAttr(nodeDatabase, "threshold", strThreshold);

                    ////
                    // 增加若干<accessPoint>元素
                    for (int k = 0; ; k++)
                    {
                        string strEntry2 = "key" + (k + 1).ToString();

                        StringBuilder s2 = new StringBuilder(255, 255);
                        nRet = API.GetPrivateProfileString(strDbPath,
                            strEntry2,
                            "!!!null",
                            s2,
                            255,
                            strGcsIniFilename);
                        string strLine1 = s2.ToString();
                        if (nRet <= 0
                            || strLine1 == "!!!null")
                            break;

                        string strFromName = "";
                        string strWeight = "";
                        string strSearchStyle = "";

                        string[] parts_of_line = strLine1.Split(new char[] { ',' });
                        if (parts_of_line.Length > 0)
                            strFromName = parts_of_line[0].Trim();

                        if (parts.Length > 1)
                            strWeight = parts_of_line[1].Trim();

                        if (parts_of_line.Length > 2)
                            strSearchStyle = parts_of_line[2].Trim();

                        if (strSearchStyle == "q")
                            strSearchStyle = "Left";
                        else if (strSearchStyle == "")
                            strSearchStyle = "Exact";

                        XmlNode nodeAccessPoint = dom.CreateElement("accessPoint");
                        nodeDatabase.AppendChild(nodeAccessPoint);

                        DomUtil.SetAttr(nodeAccessPoint, "name", strFromName);
                        DomUtil.SetAttr(nodeAccessPoint, "weight", strWeight);
                        DomUtil.SetAttr(nodeAccessPoint, "searchStyle", strSearchStyle);
                    } // end of k


                } // end of j

            } // end of i

            // 缺省查重方案定义
            // 在根下增加一个<defaultProject>容器元素
            XmlNode nodeContainer = dom.CreateElement("defaultProject");
            dom.DocumentElement.AppendChild(nodeContainer);

            for (int i = 0; i < relations.Count; i++)
            {
                DefaultProjectRelation relation = relations[i];

                XmlNode nodeSourceDatabase = dom.CreateElement("sourceDatabase");
                nodeContainer.AppendChild(nodeSourceDatabase);

                DomUtil.SetAttr(nodeSourceDatabase, "name", relation.StartDbPath);
                DomUtil.SetAttr(nodeSourceDatabase, "defaultProject", relation.ProjectName);
            }


            dom.Save(strDupXmlFilename);

            return 0;
        }