private Document GetDocument(Category.CategoriesRow row, Token lastToken, NorthwindConfig config)
        {
            #region Declarations
            ProductFamilyDocument doc;
            string id;
            #endregion



            id = row.CategoryID.ToString();

            doc    = new ProductFamilyDocument();
            doc.Id = id;

            if (lastToken.InitRequest)
            {
                doc.LogState = LogState.Created;
            }

            else if (row.IsCreateIDNull() || row.IsModifyIDNull() ||
                     row.IsCreateUserNull() || row.IsModifyUserNull())
            {
                doc.LogState = LogState.Created;
            }

            else if ((row.CreateID > lastToken.SequenceNumber) &&
                     (row.CreateUser != config.CrmUser))
            {
                doc.LogState = LogState.Created;
            }

            else if ((row.CreateID == lastToken.SequenceNumber) &&
                     (row.CreateUser != config.CrmUser) &&
                     (id.CompareTo(lastToken.Id.Id) > 0))
            {
                doc.LogState = LogState.Created;
            }
            else if ((row.ModifyID >= lastToken.SequenceNumber) && (row.ModifyUser != config.CrmUser))
            {
                doc.LogState = LogState.Updated;
            }

            doc.active.Value = Constants.DefaultValues.Active;
            doc.name.Value   = row.IsCategoryNameNull() ? null : row.CategoryName;

            doc.description.Value = row.IsDescriptionNull() ? null : row.Description;

            return(doc);
        }
        public override void Update(Document doc, NorthwindConfig config, ref List <TransactionResult> result)
        {
            List <TransactionResult> transactionResult = new List <TransactionResult>();
            ProductFamilyDocument    productFamilyDoc  = doc as ProductFamilyDocument;

            #region check input values
            if (productFamilyDoc == null)
            {
                result.Add(doc.SetTransactionStatus(TransactionStatus.UnRecoverableError, Resources.ErrorMessages_DocumentTypeNotSupported));
                return;
            }

            // check id
            #endregion

            DataSets.CategoryTableAdapters.CategoriesTableAdapter tableAdapter;


            DataSets.Category category = new DataSets.Category();
            DataSets.Category.CategoriesRow row;
            tableAdapter = new DataSets.CategoryTableAdapters.CategoriesTableAdapter();
            using (OleDbConnection connection = new OleDbConnection(config.ConnectionString))
            {
                connection.Open();
                tableAdapter.Connection = connection;
                int recordCount = tableAdapter.FillBy(category.Categories, Convert.ToInt32(productFamilyDoc.Id));
                if (recordCount == 0)
                {
                    doc.SetTransactionStatus(TransactionStatus.UnRecoverableError, "Category does not exists");
                    return;
                }
                row = (Category.CategoriesRow)category.Categories.Rows[0];

                try
                {
                    if (!productFamilyDoc.name.NotSet)
                    {
                        if (productFamilyDoc.name.IsNull)
                        {
                            row.SetCategoryNameNull();
                        }
                        else
                        {
                            row.CategoryName = (string)productFamilyDoc.name.Value;
                        }
                    }

                    if (!productFamilyDoc.description.NotSet)
                    {
                        if (productFamilyDoc.description.IsNull)
                        {
                            row.SetDescriptionNull();
                        }
                        else
                        {
                            row.Description = (string)productFamilyDoc.description.Value;
                        }
                    }

                    row.ModifyID   = config.SequenceNumber;
                    row.ModifyUser = config.CrmUser;
                }
                catch (Exception e)
                {
                    productFamilyDoc.Id = "";
#warning Check error message
                    result.Add(productFamilyDoc.SetTransactionStatus(TransactionStatus.UnRecoverableError, e.ToString()));
                    return;
                }

                tableAdapter            = new DataSets.CategoryTableAdapters.CategoriesTableAdapter();
                tableAdapter.Connection = connection;

                tableAdapter.Update(category.Categories);

                result.Add(doc.SetTransactionStatus(TransactionStatus.Success));
            }
        }
        public override void Add(Document doc, NorthwindConfig config, ref List <TransactionResult> result)
        {
            List <TransactionResult> transactionResult = new List <TransactionResult>();
            ProductFamilyDocument    productFamilyDoc  = doc as ProductFamilyDocument;

            #region check input values
            if (productFamilyDoc == null)
            {
                result.Add(doc.SetTransactionStatus(TransactionStatus.UnRecoverableError, Resources.ErrorMessages_DocumentTypeNotSupported));
                return;
            }
            #endregion

            DataSets.CategoryTableAdapters.CategoriesTableAdapter tableAdapter;


            DataSets.Category category          = new DataSets.Category();
            DataSets.Category.CategoriesRow row = category.Categories.NewCategoriesRow();


            #region fill dataset from document
            try
            {
                if (productFamilyDoc.name.IsNull)
                {
                    row.SetCategoryNameNull();
                }
                else
                {
                    row.CategoryName = (string)productFamilyDoc.name.Value;
                }

                if (productFamilyDoc.description.IsNull)
                {
                    row.SetDescriptionNull();
                }
                else
                {
                    row.Description = (string)productFamilyDoc.description.Value;
                }


                row.CreateID   = config.SequenceNumber;
                row.CreateUser = config.CrmUser;

                row.ModifyID   = config.SequenceNumber;
                row.ModifyUser = config.CrmUser;
            }
            catch (Exception e)
            {
                productFamilyDoc.Id = "";
#warning Check error message
                result.Add(productFamilyDoc.SetTransactionStatus(TransactionStatus.UnRecoverableError, e.ToString()));
                return;
            }

            #endregion

            using (OleDbConnection connection = new OleDbConnection(config.ConnectionString))
            {
                connection.Open();


                tableAdapter            = new DataSets.CategoryTableAdapters.CategoriesTableAdapter();
                tableAdapter.Connection = connection;


                category.Categories.AddCategoriesRow(row);
                tableAdapter.Update(category.Categories);
                OleDbCommand Cmd    = new OleDbCommand("SELECT @@IDENTITY", connection);
                object       lastid = Cmd.ExecuteScalar();
                productFamilyDoc.Id = ((int)lastid).ToString();
            }
            result.Add(doc.SetTransactionStatus(TransactionStatus.Success));
        }