Example #1
0
        /// <summary>
        /// Gets the last error that happened. This method is called only if an error is found.
        /// </summary>
        /// <param name="ticket">The ticket.</param>
        /// <returns>Tell the Web Connector what is the error.</returns>
        public virtual string GetLastError(string ticket)
        {
            try
            {
                var authenticatedTicket = authenticator.GetAuthenticationFromTicket(ticket);

                try
                {
                    LogMessage(authenticatedTicket, LogMessageType.GetError, LogDirection.In, ticket);

                    var result = string.Empty;

                    if (authenticatedTicket != null)
                    {
                        if (VersionValidator != null && !VersionValidator.IsValidTicket(authenticatedTicket.Ticket))
                        {
                            result = string.Format("The server requires QbXml version {0}.{1} or higher. Please upgrade QuickBooks.", QbXmlRequest.VERSION.Major, QbXmlRequest.VERSION.Minor);
                        }
                        else
                        {
                            StepQueryResponse stepQueryResponse = FindStep(authenticatedTicket.CurrentStep);
                            if (stepQueryResponse != null)
                            {
                                result = stepQueryResponse.LastError(authenticatedTicket);
                            }
                        }
                    }

                    LogMessage(authenticatedTicket, LogMessageType.GetError, LogDirection.Out, ticket, result);

                    return(result);
                }
                catch (Exception ex)
                {
                    throw new QbSyncException(authenticatedTicket, ex);
                }
            }
            catch (QbSyncException ex)
            {
                OnException(ex.Ticket, ex);
            }
            catch (Exception ex)
            {
                OnException(null, ex);
            }
            finally
            {
                SaveChanges();
            }

            return(null);
        }
        /// <summary>
        /// Response from the Web Connector based on the previous comamnd sent.
        /// </summary>
        /// <param name="ticket">The ticket.</param>
        /// <param name="response">The XML response.</param>
        /// <param name="hresult">Code in case of an error.</param>
        /// <param name="message">Human message in case of an error.</param>
        /// <returns></returns>
        public virtual int ReceiveRequestXML(string ticket, string response, string hresult, string message)
        {
            try
            {
                var authenticatedTicket = authenticator.GetAuthenticationFromTicket(ticket);
                LogMessage(authenticatedTicket, LogMessageType.Receive, LogDirection.In, ticket, response, hresult, message);

                var result = -1;

                if (authenticatedTicket != null)
                {
                    StepQueryResponse stepQueryResponse = FindStep(authenticatedTicket.CurrentStep);
                    if (stepQueryResponse != null)
                    {
                        stepQueryResponse.SetOptions(GetOptions(authenticatedTicket));
                        result = stepQueryResponse.ReceiveXML(authenticatedTicket, response, hresult, message);

                        if (result >= 0)
                        {
                            var stepName = stepQueryResponse.GotoStep();

                            // We go to the next step if we are asked to
                            if (!string.IsNullOrEmpty(stepName))
                            {
                                authenticatedTicket.CurrentStep = stepName;
                            }
                            else if (stepQueryResponse.GotoNextStep())
                            {
                                authenticatedTicket.CurrentStep = FindNextStepName(authenticatedTicket.CurrentStep);
                            }
                        }
                    }
                }

                LogMessage(authenticatedTicket, LogMessageType.Receive, LogDirection.Out, ticket, result.ToString());

                return(result);
            }
            catch (Exception ex)
            {
                OnException(ex);
            }
            finally
            {
                SaveChanges();
            }

            return(-1);
        }
Example #3
0
 /// <summary>
 /// Registers a step to use.
 /// </summary>
 /// <param name="stepQueryResponse">Step.</param>
 public void RegisterStep(StepQueryResponse stepQueryResponse)
 {
     StepSync.Add(stepQueryResponse);
 }
Example #4
0
        /// <summary>
        /// The Web Connector is asking what has to be done to its database. Return an XML command.
        /// </summary>
        /// <param name="ticket">The ticket.</param>
        /// <param name="strHCPResponse">First time use, an XML containing information about the QuickBooks client database.</param>
        /// <param name="strCompanyFileName">The QuickBooks file opened on the client.</param>
        /// <param name="qbXMLCountry">Country code.</param>
        /// <param name="qbXMLMajorVers">QbXml Major Version.</param>
        /// <param name="qbXMLMinorVers">QbXml Minor Version.</param>
        /// <returns></returns>
        public virtual string SendRequestXML(string ticket, string strHCPResponse, string strCompanyFileName, string qbXMLCountry, int qbXMLMajorVers, int qbXMLMinorVers)
        {
            try
            {
                var authenticatedTicket = authenticator.GetAuthenticationFromTicket(ticket);

                try
                {
                    LogMessage(authenticatedTicket, LogMessageType.Send, LogDirection.In, ticket, strHCPResponse, strCompanyFileName, qbXMLCountry, qbXMLMajorVers.ToString(), qbXMLMinorVers.ToString());

                    if (!string.IsNullOrWhiteSpace(strHCPResponse))
                    {
                        ProcessClientInformation(authenticatedTicket, strHCPResponse);
                    }

                    var result = string.Empty;
                    if (authenticatedTicket != null)
                    {
                        // Check the version, if we can't have the minimum version, we must fail.
                        if (VersionValidator != null && !VersionValidator.ValidateVersion(authenticatedTicket.Ticket, qbXMLCountry, qbXMLMajorVers, qbXMLMinorVers))
                        {
                            result = string.Empty;
                        }
                        else
                        {
                            StepQueryResponse stepQueryResponse = null;
                            while ((stepQueryResponse = FindStep(authenticatedTicket.CurrentStep)) != null)
                            {
                                stepQueryResponse.SetOptions(GetOptions(authenticatedTicket));
                                result = stepQueryResponse.SendXML(authenticatedTicket);

                                if (result == null)
                                {
                                    authenticatedTicket.CurrentStep = FindNextStepName(authenticatedTicket.CurrentStep);
                                }
                                else
                                {
                                    break;
                                }
                            }

                            // If we don't have more steps to execute, let's return nothing.
                            if (result == null)
                            {
                                result = string.Empty;
                            }
                        }
                    }

                    LogMessage(authenticatedTicket, LogMessageType.Send, LogDirection.Out, ticket, result);

                    return(result);
                }
                catch (Exception ex)
                {
                    throw new QbSyncException(authenticatedTicket, ex);
                }
            }
            catch (QbSyncException ex)
            {
                OnException(ex.Ticket, ex);
            }
            catch (Exception ex)
            {
                OnException(null, ex);
            }
            finally
            {
                SaveChanges();
            }

            return(null);
        }
Example #5
0
 /// <summary>
 /// Registers a step to use.
 /// </summary>
 /// <param name="stepQueryResponse">Step.</param>
 public void RegisterStep(StepQueryResponse stepQueryResponse)
 {
     StepSync.Add(stepQueryResponse);
 }