Как получить список клиентов, рабочих мест и сотрудников, использующих QuickBooks QBFC (8.0 SDK)

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

  •  19-09-2019
  •  | 
  •  

Вопрос

Мне дали болезненную задачу написания приложения C# для синхронизации записей сотрудников в отдельной базе данных с QuickBooks. Поскольку я совершенно новичок в программировании QB, я пытаюсь выполнить основные задачи, такие как получение списка клиентов, а затем рабочие места для каждого клиента, а затем сотрудников. Я читал документацию SDK, но я все еще немного нечетком в деталях, потому что примеры, которые я нахожу, на данный момент слишком продвинуты для меня:-p

Чтобы все было просто, я хотел бы попросить фрагмент кода, который дает мне список клиентов для начала. Вот код, который у меня есть:

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

Может ли кто -нибудь заполнить «код, чтобы получить список клиентов здесь» для меня? Заранее большое спасибо!

Виктор

Это было полезно?

Решение 2

Хорошо, похоже, что я нашел недостающую часть:

ICustomerQuery customers = customerSet.AppendCustomerQueryRq();

Это создает все данные, связанные с каждым клиентом, что является шагом вперед. Расположение XML для клиентов должно быть довольно простым, но анализ индивидуальных задач/заданий для каждого клиента будет трудоемким, потому что для каждой задачи нет никаких поднодов - в основном вы получаете повторяющиеся куски XML со всей основной информацией о клиенте (адрес, выставление счетов Адрес, адрес доставки и т. Д.), Тогда это одно свойство под названием «FullName», которое добавляет толстую кишку к имени клиента, за которым следует заголовок задачи (за которым можно следовать другой толстой кишке с заголовком подзадачи и т. Д.). Мне интересно, есть ли что -то умное, что я могу сделать с запросом запроса, чтобы получить лучший ответ XML (например, указать, какие свойства я хочу, чтобы вернуть, и, возможно, обеспечить соблюдение создания поднодов для каждой задачи для данного клиента) ... Комментарии благодарны.

Другие советы

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

Только поля, указанные в приведенном выше списке, будут возвращены из QuickBooks - очень важно использовать правильные строки в правильном случае - никакие сообщения об ошибках не возникнут, если что -то не так. Вы не можете указать суб-поля (например, город в пределах адресного блока; вы должны получить весь адресный блок). Для пользовательских полей вы также должны указать владелец (используйте 0 для пользовательских полей, которые не являются частными для приложения)

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

В дополнение к победителям, ответа Чили и Хасана. Рад, что наткнулся на этот вопрос, так как я сам боролся с примерами QBFC. Вот полный набор кода, который может просто помочь кому -то в будущем. Если тем временем кто -то мог бы просто указать мне в направлении какой -то полезной документации ... это было бы здорово.

Получение данных сотрудника в строку 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();
    }

Вставка строки XML в список объектов emplpoyee

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

Функция, которая возвращает объект сотрудника с помощью 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;
    }

Пример кода

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

Класс сотрудников

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

}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top