كيفية الحصول على قائمة العملاء والوظائف والموظفين الذين يستخدمون 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