So erhalten Sie eine Liste von Kunden, Jobs und Mitarbeitern mit QuickBooks QBFC (8.0 SDK)

StackOverflow https://stackoverflow.com/questions/1173859

  •  19-09-2019
  •  | 
  •  

Frage

Ich habe die schmerzhafte Aufgabe erhalten, eine C# -Anwendung zu schreiben, um Mitarbeiterzeiteinträge in einer separaten Datenbank mit QuickBooks zu synchronisieren. Da ich in der QB -Programmierung brandneu bin, versuche ich, grundlegende Aufgaben zu putzen, z. B. eine Liste von Kunden, dann Jobs für jeden Kunden, dann die Mitarbeiter. Ich habe die SDK-Dokumentation gelesen, aber ich bin immer noch ein wenig verschwommen in den Details, weil die Beispiele, die ich finde, im Moment für mich etwas zu fortgeschritten sind :-P.

Um die Dinge einfach zu halten, möchte ich nach einem Code -Snippet fragen, das mir die Liste der Kunden für den Anfang gibt. Hier ist der Code, den ich habe:

        QBSessionManager SessionManager = new QBSessionManager();
        IMsgSetRequest customerSet = SessionManager.CreateMsgSetRequest("US", 8, 0);

        //          
        // Code to get list of customers here.
        //

        SessionManager.OpenConnection2("", "New App", ENConnectionType.ctLocalQBD);
        SessionManager.BeginSession(string.Empty, ENOpenMode.omDontCare);
        IMsgSetResponse Resp = SessionManager.DoRequests(customerSet);
        MessageBox.Show(Resp.ToXMLString());
        SessionManager.EndSession();
        SessionManager.CloseConnection();

Kann jemand den "Code, um hier eine Liste von Kunden zu erhalten" für mich ausfüllen? Vielen Dank im Voraus!

Sieger

War es hilfreich?

Lösung 2

Ok, scheint das fehlende Stück gefunden zu haben:

ICustomerQuery customers = customerSet.AppendCustomerQueryRq();

Dies erzeugt alle Daten, die sich auf jeden Kunden beziehen, was ein Schritt nach vorne ist. Das Analysieren des XML für Kunden sollte ziemlich einfach sein, aber es ist mühsam, die einzelnen Aufgaben/Jobs für jeden Kunden zu analysieren, da es für jede Aufgabe keine Unternoten gibt. Grundsätzlich erhalten Sie wiederholte Teile von XML mit allen grundlegenden Kundeninformationen (Adresse, Abrechnung, Abrechnung, Abrechnung, Abrechnung, Abrechnung Adresse, Versandadresse usw.), dann diese eine Eigenschaft namens "Fullname", die einen Dickdarm an den Kundennamen angibt, gefolgt vom Task -Titel (dem selbst von einem anderen Dickdarm mit einem Subtask -Titel usw. folgen kann). Ich frage mich, ob es etwas Kluges gibt, das ich mit der Anfrage -Abfrage machen kann, um eine bessere XML -Antwort zu erhalten (z. B. geben Sie an, welche Eigenschaften ich zurückgeben möchte, und durchsetzen Sie möglicherweise die Erstellung von Unternoten für jede Aufgabe für einen bestimmten Kunden) ... Kommentare werden geschätzt.

Andere Tipps

customers.IncludeRetElementList.Add("IsActive");
customers.IncludeRetElementList.Add("ListID");
customers.IncludeRetElementList.Add("EditSequence");
customers.IncludeRetElementList.Add("Name");
customers.IncludeRetElementList.Add("ParentRef");

Nur die in der obigen Liste angegebenen Felder werden von QuickBooks zurückgegeben - es ist sehr wichtig, die richtigen Zeichenfolgen im richtigen Fall zu verwenden - keine Fehlermeldungen ergeben sich, wenn etwas nicht stimmt. Sie können keine Unterfelder angeben (z. B. Stadt in einem Adressblock; Sie müssen den gesamten Adressblock erhalten). Für benutzerdefinierte Felder müssen Sie auch die EigentümerID angeben (verwenden Sie 0 für benutzerdefinierte Felder, die für einen Antrag nicht privat sind).

customers.IncludeRetElementList.Add("DataExtRet"); //will return non-private and/or private data extension fields depending on the OwnerIDList, below
customers.OwnerIDList.Add("0"); // required for non-private data extn fields
customers.OwnerIDList.Add("Your Appln GUID"); // Use this to get private data extns for the Appln identified by the GUID

Chili und Hassans Antwort. Ich bin froh, über diese Frage gestoßen zu sein, als ich selbst mit den QBFC -Beispielen zu kämpfen hatte. Hier ist ein vollständiger Code, der möglicherweise jemandem auf der Straße hilft. Wenn mich in der Zwischenzeit jemand in Richtung einer nützlichen Dokumentation verweisen könnte ... wäre das großartig.

Die Mitarbeiterdaten in eine XML -Zeichenfolge bringen

    public static string EmployeeListXML()
    {
        QBSessionManager SessionManager = new QBSessionManager();
        IMsgSetRequest msgSetReq = SessionManager.CreateMsgSetRequest("US", 8, 0);
        IEmployeeQuery employee = msgSetReq.AppendEmployeeQueryRq();
        employee.IncludeRetElementList.Add("IsActive");
        employee.IncludeRetElementList.Add("ListID");
        employee.IncludeRetElementList.Add("EditSequence");
        employee.IncludeRetElementList.Add("FirstName");
        employee.IncludeRetElementList.Add("LastName");
        employee.IncludeRetElementList.Add("SSN");
        //employee.IncludeRetElementList.Add("ParentRef");
        //employee.IncludeRetElementList.Add("DataExtRet"); //will return non-private and/or private data extension fields depending on the OwnerIDList, below
        employee.OwnerIDList.Add("0"); // required for non-private data extn fields
        //customers.OwnerIDList.Add("Your Appln GUID"); // Use this to get private data extns for the Appln identified by the GUID
        SessionManager.OpenConnection2("", Application.ProductName, ENConnectionType.ctLocalQBD);
        //SessionManager.BeginSession(string.Empty, ENOpenMode.omDontCare);
        SessionManager.BeginSession(frmMain.QBFileName, ENOpenMode.omDontCare); // I have the filename on frmMain
        IMsgSetResponse Resp = SessionManager.DoRequests(msgSetReq);
        SessionManager.EndSession();
        SessionManager.CloseConnection();
        //MessageBox.Show(Resp.ToXMLString());
        return Resp.ToXMLString();
    }

Wenn Sie die XML -Zeichenfolge in eine Liste von Emplpoyee -Objekten einfügen

    public static List<Employee> EmployeeXMLtoList()
    {
        string sXML = EmployeeListXML();

        List<Employee> lstEmp = new List<Employee>();
        XmlDocument xmlDoc = new XmlDocument();
        xmlDoc.LoadXml(sXML);
        XmlNodeList parentNode = xmlDoc.GetElementsByTagName("EmployeeRet");
        foreach (XmlNode childNode in parentNode)
        {
            Employee oEmp = new Employee();
            oEmp.ListID = childNode.SelectSingleNode("ListID").InnerText;
            oEmp.EditSequence = childNode.SelectSingleNode("EditSequence").InnerText;
            oEmp.Active = childNode.SelectSingleNode("IsActive").InnerText;
            oEmp.FirstName = childNode.SelectSingleNode("FirstName").InnerText;
            oEmp.LastName = childNode.SelectSingleNode("LastName").InnerText;
            oEmp.SSN = childNode.SelectSingleNode("SSN").InnerText;
            lstEmp.Add(oEmp);
        }
        return lstEmp;
    }

Funktion, die ein Mitarbeiterobjekt mit LINQ zurückgeben

    public static Employee GetEmployeeObject(string sSSN)
    {
        Employee oReturn = null;
        List<Employee> lstEmployee = EmployeeXMLtoList();

        IEnumerable<Employee> lstEmps = from oEmp in lstEmployee
                                        where oEmp.SSN == sSSN
                                        select oEmp;

        foreach (var oEmp in lstEmps)
        {
            oReturn = oEmp;
        }
        return oReturn;
    }

Beispiel für Code

 Employee oEmployee = QB.GetEmployeeObject("112-35-8560");

Mitarbeiterklasse

public class Employee
{
    private string sEmployeeID;
    private string sSSN;
    private string sLastName;
    private string sFirstName;
    private string sAddress1;
    private string sAddress2;
    private string sCity;
    private string sState;
    private string sZipCode;
    private string sGender;
    private string sEthnicity;
    private DateTime dDOB;
    private string sMaritalStatus;
    private int iDependants;
    private string sUScitizen;
    private decimal iPayRate;
    private string sPhone;
    private DateTime dHireDate;
    private string sEmail;

    public Employee() { }

    public string EmployeeID
    {
        get { return sEmployeeID; }
        set { sEmployeeID = value; }
    }

    public string ListID
    {
        get; set;
    }

    public string EditSequence
    {
        get;  set;
    }

    public string Active
    {
        get; set;
    }


    public string SSN
    {
        get { return sSSN; }
        set { sSSN = value; }
    }

    public string LastName
    {
        get { return sLastName; }
        set { sLastName = value; }
    }

    public string FirstName
    {
        get { return sFirstName; }
        set { sFirstName = value; }
    }

    public string FullName
    {
        get { return FirstName + " " + LastName; }
        set { }
    }

    public string Address1
    {
        get { return sAddress1; }
        set { sAddress1 = value; }
    }

    public string Address2
    {
        get { return sAddress2; }
        set { sAddress2 = value; }
    }

    public string State
    {
        get { return sState; }
        set { sState = value; }
    }
    public string City
    {
        get { return sCity; }
        set { sCity = value; }
    }
    public string ZipCode
    {
        get { return sZipCode; }
        set { sZipCode = value; }
    }
    public string Gender
    {
        get { return sGender; }
        set { sGender = value; }
    }

    public string Ethnicity
    {
        get { return sEthnicity; }
        set { sEthnicity = value; }
    }

    public DateTime DOB
    {
        get { return dDOB; }
        set { dDOB = value; }
    }
    public string MaritalStatus
    {
        get { return sMaritalStatus; }
        set { sMaritalStatus = value; }
    }
    public int Dependants
    {
        get { return iDependants; }
        set { iDependants = value; }
    }
    public string UScitizen
    {
        get { return sUScitizen; }
        set { sUScitizen = value; }
    }

    public decimal PayRate
    {
        get { return iPayRate; }
        set { iPayRate = value; }
    }
    public DateTime HireDate
    {
        get { return dHireDate; }
        set { dHireDate = value; }
    }
    public string Phone
    {
        get { return sPhone; }
        set { sPhone = value; }
    }
    public string Email
    {
        get { return sEmail; }
        set { sEmail = value; }
    }

}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top