예제 #1
0
        public long unversionedEdit(IQueryFilter qFilterGen, int sequenceColumnNum, int idxSeqField, int curLoop, ref ITransactions transactions)
        {
            long sequenceValue = -1;

            using (ComReleaser comReleaser = new ComReleaser())
            {
                if (AAState._gentabWorkspace.IsInEditOperation)
                {
                    // throw new Exception("Cannot use ITransactions during an edit operation.");
                }
                // Begin a transaction.
                if (transactions == null)
                {
                    transactions = (ITransactions)AAState._gentabWorkspace;
                }

                transactions.StartTransaction();
                try
                {
                    // Use ITable.Update to create an update cursor.
                    ICursor seq_updateCursor = AAState._gentab.Update(qFilterGen, true);
                    comReleaser.ManageLifetime(seq_updateCursor);

                    IRow seq_row = null;
                    seq_row = seq_updateCursor.NextRow();
                    int sequenceInt = 1;

                    if (seq_row != null)
                    {
                        if (idxSeqField > 0)
                        {
                            object seqInt = seq_row.get_Value(idxSeqField);
                            if (seqInt != null)
                            {
                                if (seqInt != DBNull.Value)
                                {
                                    try
                                    {
                                        sequenceInt = Convert.ToInt32(seqInt);
                                    }
                                    catch
                                    {
                                    }
                                }
                            }
                        }
                        object seqValue = seq_row.get_Value(sequenceColumnNum);

                        if (seqValue == null)
                        {
                            sequenceValue = 0;
                        }
                        else if (seqValue.ToString() == "")
                        {
                            sequenceValue = 0;
                        }
                        else
                        {
                            try
                            {
                                sequenceValue = Convert.ToInt64(seqValue);
                            }
                            catch
                            {
                                sequenceValue = 0;
                            }
                        }

                        AAState.WriteLine("                  " + sequenceValue + " is the existing value and the interval is " + sequenceInt + ": " + DateTime.Now.ToString("h:mm:ss tt"));

                        sequenceValue = sequenceValue + sequenceInt;

                        seq_row.set_Value(sequenceColumnNum, sequenceValue);
                        AAState.WriteLine("                  " + seq_row.Fields.get_Field(sequenceColumnNum).AliasName + " changed to " + sequenceValue + ": " + DateTime.Now.ToString("h:mm:ss tt"));

                        seq_updateCursor.UpdateRow(seq_row);

                        transactions.CommitTransaction();

                        seq_updateCursor = AAState._gentab.Search(qFilter, true);
                        if (seq_row != null)
                        {
                            seqValue = seq_row.get_Value(sequenceColumnNum);

                            if (seqValue == null)
                            {
                                return(sequenceValue);
                            }
                            else if (seqValue.ToString() == "")
                            {
                                return(sequenceValue);
                            }
                            else
                            {
                                try
                                {
                                    if (sequenceValue == Convert.ToInt64(seqValue))
                                    {
                                        return(sequenceValue);
                                    }
                                    else
                                    {
                                        if (curLoop > 30)
                                        {
                                            MessageBox.Show("A unique ID could not be generated after 30 attempts: " + DateTime.Now.ToString("h:mm:ss tt"));
                                        }
                                        else
                                        {
                                            return(unversionedEdit(qFilterGen, sequenceColumnNum, idxSeqField, curLoop + 1, ref transactions));
                                        }
                                    }
                                }
                                catch
                                {
                                    return(sequenceValue);
                                }
                            }
                        }
                        return(sequenceValue);
                    }
                    else
                    {
                        AAState.WriteLine("                  No records found in Generate ID table" + ": " + DateTime.Now.ToString("h:mm:ss tt"));
                        transactions.AbortTransaction();
                        return(-1);
                    }
                }
                catch (COMException comExc)
                {
                    AAState.WriteLine("                  Error saving transaction to DB" + ": " + DateTime.Now.ToString("h:mm:ss tt"));

                    // If an error occurs during the inserts and updates, rollback the transaction.
                    transactions.AbortTransaction();
                    return(-1);
                }
            }
        }
예제 #2
0
        private string GenerateID(string valData)
        {
            string sequenceColumnName, sequenceFixedWidth, sequencePostfix = "";
            int    sequenceColumnNum;
            int    sequenceIntColumnNum;
            int    sequencePadding;
            string formatString;

            string[]   args       = null;
            string     output     = null;
            List <int> intFldIdxs = new List <int>();

            ITable _gentab = Globals.FindTable(ArcMap.Application, "GenerateId");

            try
            {
                AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14ar") + "GENERATE_ID");
                if (_gentab != null)
                {
                    sequenceColumnName = "";
                    sequenceColumnNum  = -1;

                    sequenceFixedWidth = "";
                    sequencePadding    = 0;
                    formatString       = "";
                    bool onlyWhenNull = false;

                    // Parse arguments
                    if (valData != null)
                    {
                        args = valData.Split('|');
                    }
                    switch (args.GetLength(0))
                    {
                    case 1:      // sequenceColumnName only
                        sequenceColumnName = args[0].ToString(); break;

                    case 2:      // sequenceColumnName|sequenceFixedWidth
                        sequenceColumnName = args[0].ToString();
                        sequenceFixedWidth = args[1].ToString();
                        break;

                    case 3:      // sequenceColumnName|sequenceFixedWidth|formatString
                        sequenceColumnName = args[0].ToString();
                        sequenceFixedWidth = args[1].ToString();
                        formatString       = args[2].ToString();
                        break;

                    case 4:      // sequenceColumnName|sequenceFixedWidth|formatString
                        sequenceColumnName = args[0].ToString();
                        sequenceFixedWidth = args[1].ToString();
                        formatString       = args[2].ToString();
                        onlyWhenNull       = args[3].ToString().ToUpper() == "TRUE" ? true : false;

                        break;

                    default: break;
                    }
                    //object val = inObject.get_Value(intFldIdxs[0]);
                    bool proceed = true;
                    //if (onlyWhenNull &&
                    //    (inObject.get_Value(intFldIdxs[0]) != null &&
                    //    inObject.get_Value(intFldIdxs[0]) != DBNull.Value &&
                    //    inObject.get_Value(intFldIdxs[0]).ToString().Trim() != "")
                    //    )
                    //{
                    //    proceed = false;
                    //}
                    if (proceed)
                    {
                        //Check for requested zero padding of sequence number
                        if (sequenceFixedWidth != "")
                        {
                            int.TryParse(sequenceFixedWidth.ToString(), out sequencePadding);
                        }
                        if (sequencePadding > 25)
                        {
                            AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain116"));
                            AAState.WriteLine("                  WARNING: " + sequencePadding + " 0's is what you have");
                        }
                        else if (sequencePadding > 50)
                        {
                            MessageBox.Show(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorChain117"));
                        }
                        qFilter             = new QueryFilterClass();
                        qFilter.WhereClause = "SEQNAME = '" + sequenceColumnName + "'";

                        sequenceColumnNum    = AAState._gentab.Fields.FindField("SEQCOUNTER");
                        sequenceIntColumnNum = AAState._gentab.Fields.FindField("SEQINTERV");
                        ITransactions pTras = null;

                        long sequenceValue = unversionedEdit(qFilter, sequenceColumnNum, sequenceIntColumnNum, 1, ref pTras);
                        //Debug.WriteLine(sequenceValue.ToString());
                        pTras = null;

                        if (sequenceValue == -1)
                        {
                            AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14a") + "GENERATE_ID: " + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14ao"));
                        }

                        else
                        {
                            if (formatString == null || formatString == "" || formatString.ToLower().IndexOf("[seq]") == -1)
                            {
                                string setVal = (sequenceValue.ToString("D" + sequencePadding) + sequencePostfix).ToString();

                                output = (sequenceValue.ToString("D" + sequencePadding) + sequencePostfix).Trim();
                            }
                            else
                            {
                                int locIdx = formatString.ToUpper().IndexOf("[SEQ]");
                                if (locIdx >= 0)
                                {
                                    formatString = formatString.Remove(locIdx, 5);
                                    formatString = formatString.Insert(locIdx, sequenceValue.ToString("D" + sequencePadding));
                                }
                                //formatString = formatString.Replace("[seq]", sequenceValue.ToString("D" + sequencePadding));



                                output = formatString.Trim();
                            }
                        }
                    }
                }
                else
                {
                    AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14a") + "GENERATE_ID: " + A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14ap"));
                }
            }


            catch (Exception ex)
            {
                AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorError_14a") + "GENERATE_ID: " + ex.Message);
            }
            finally
            {
                if (qFilter != null)
                {
                    Marshal.ReleaseComObject(qFilter);
                    GC.Collect(300);
                    GC.WaitForFullGCComplete();
                    qFilter = null;
                }
                AAState.WriteLine(A4LGSharedFunctions.Localizer.GetString("AttributeAssistantEditorMess_14as") + "GENERATE_ID");
            }
            return(output);
        }