Comment obtenir la liste des clients, des emplois et des employés à l'aide de QuickBooks QBFC (8.0 SDK)

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

  •  19-09-2019
  •  | 
  •  

Question

On m'a donné la tâche douloureuse d'écrire une application C # pour synchroniser les entrées de temps des employés dans une base de données distincte avec QuickBooks. Étant donné que je suis nouveau dans la programmation QB, j'essaie de faire des tâches de base, comme l'obtention d'une liste de clients, puis des emplois pour chaque client, puis des employés. J'ai lu la documentation SDK, mais je suis toujours un peu flou sur les détails parce que les exemples que je trouve sont un peu trop avancés pour moi en ce moment: P.

Pour garder les choses simples, je voudrais demander un extrait de code qui me donne la liste des clients pour les débutants. Voici le code que j'ai:

        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();

Quelqu'un peut-il remplir le "code pour obtenir la liste des clients ici" pour moi? Merci beaucoup d'avance!

Victor

Était-ce utile?

La solution 2

Ok, on dirait que j'ai trouvé la pièce manquante:

ICustomerQuery customers = customerSet.AppendCustomerQueryRq();

Cela produit toutes les données liées à chaque client, ce qui est un pas en avant. L'analyse du XML pour les clients doit être assez simple, mais l'analyse des tâches / emplois individuels pour chaque client sera laborieux, car il n'y a pas de sous-nodes pour chaque tâche - en gros, vous obtenez des morceaux de répétition de XML avec toutes les informations de base du client (adresse, facturation Adresse, adresse d'expédition, etc.), puis cette propriété appelée "FullName" qui ajoute un côlon au nom du client, suivi du titre de la tâche (qui peut être suivi par un autre côlon avec un titre de sous-tâche, etc.). Je me demande s'il y a quelque chose de intelligent que je peux faire avec la requête de demande pour obtenir une meilleure réponse XML (par exemple, spécifiez quelles propriétés je veux renvoyer, et peut-être appliquer la création de sous-nodes pour chaque tâche pour un client donné) ... Les commentaires sont appréciés.

Autres conseils

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

Seuls les champs spécifiés dans la liste ci-dessus seront renvoyés à partir de QuickBooks - il est très important d'utiliser les chaînes correctes dans le cas correct - aucun message d'erreur ne résultera si quelque chose ne va pas. Vous ne pouvez pas spécifier des sous-champs (par exemple, ville dans un bloc d'adresses; vous devez obtenir l'ensemble du bloc d'adresse). Pour les champs personnalisés, vous devez également spécifier le propriétaire (utilisez 0 pour les champs personnalisés qui ne sont pas privés sur une application)

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

Ajoutant aux vainqueurs, le chili et la réponse de Hassan. Heureux d'avoir trébuché sur cette question car je me débattais moi-même avec les exemples du QBFC. Voici un ensemble complet de code qui pourrait bien aider quelqu'un sur la route. Si, en attendant, quelqu'un pouvait simplement me pointer dans le sens d'une documentation utile ... ce serait génial.

Amener les données des employés à une chaîne XML

    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();
    }

Mettre la chaîne XML dans une liste d'objets emppoyee

    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;
    }

Fonction qui renvoie un objet employé à l'aide de linq

    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;
    }

Exemple de code

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

Classe des employés

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; }
    }

}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top