Как получить список клиентов, рабочих мест и сотрудников, использующих QuickBooks QBFC (8.0 SDK)
-
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; }
}
}