/// <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); }
/// <summary> /// Registers a step to use. /// </summary> /// <param name="stepQueryResponse">Step.</param> public void RegisterStep(StepQueryResponse stepQueryResponse) { StepSync.Add(stepQueryResponse); }
/// <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); }