Quickbooks POS SDK Добавить клиент Пользовательские данные поля: dataextadd

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

  •  21-12-2019
  •  | 
  •  

Вопрос

Может кто-нибудь поможет с добавлением данных в пользовательское поле UI, определенное пользовательское поле в QuickBooks POS 2013?

Я пытаюсь добавить данные в UI, определенное пользовательское поле (поле было сделано и видно в пользовательском интерфейсе POS, а не путем программирования; поэтому OnWerid - «0») при добавлении нового клиента с веб-страницы.

Я использую: Создание приложения в веб-формах Microsoft Visual Studio 2012, C # .NET, QbPosFC3LIB, разговаривая с QB POS 2013 Pro. Приложение и QBPOS-сервер находятся в / открыт и работают на одном сервере.

Цель

: клиент входит в информацию на веб-страницу. Данные включают в себя 11 атрибутов, которые отслеживает QbPOS в качестве части его основной программирования и 7 атрибутов, которые необходимо записать и определяются в пользовательских полях UI. После того, как клиент вступает в информацию, и данные проверяются методами (не включают в следующем коде) для форматирования и требований, то код ниже выполняется для отправки данных на QbPos-Server. Примечание. Команда AddCustomer работает на 100%.

Программный процесс: в следующем коде я делаю запрос на добавление клиента (CSTREQ) и получение клиента Add Repeate (CStreSP) для только Listid. Используя один метод 7 раз, чтобы создать 7 запросов, чтобы добавить данные в пользовательские поля (я прокомментировал 6 из 7 как «Возможно, это проблема» и тестирование только с одним DataxtextDDDDDDDDRQ) с помощью ListID CSTRESP (я не спрашиваю ( В программе) или нужен ответ на dataxtextdddrq). Затем раншись и близорукость (для отладки я заканчивается и закрываемся после CSTREQ и открыть перед Dataxtadd, без изменений в результате).

Проблема: Dataxtadddrq не добавляет информацию на пользовательские поля. После того, как клиент сделан, и программа ударяет часть DataExtadd, она добавляет одинаковые данные клиента в QBPOS и не добавляет данные EXT (var relognalmsgset, сделан null до daidexextdd).

Код под вопросом:

protected void DoCustomerAdd()
    {

        bool sessionBegun = false;
        bool connectionOpen = false;
        QBPOSSessionManager sessionManager = null;

        try
        {
            String custDateOfBirth = KEY_BIRTHDATE.Text;
            String custExpLevel = KEY_EXPERIENCE.Text;
            String custCNum = KEY_C_NUM.Text;
            String custCExpDate = KEY_C_EXP.Text;
            String custMemCardNun = textMembershipNumber.Text;
            String custIDNum = KEY_ID_NUM.Text;
            String custWaiverAppr = "Yes";

                //Create the session Manager object
            sessionManager = new QBPOSSessionManager();

                //Create the message set request object to hold our request
            IMsgSetRequest requestMsgSet = sessionManager.CreateMsgSetRequest(3, 0);
            requestMsgSet.Attributes.OnError = ENRqOnError.roeContinue;

            BuildCustomerAddRq(requestMsgSet);//Call

                //Connect to QuickBooks and begin a session
            sessionManager.OpenConnection("AddCust", "MyApp");
            connectionOpen = true;
            sessionManager.BeginSession("");
            sessionBegun = true;

                //Send the request to QuickBooks and get response
            IMsgSetResponse responseMsgSet = sessionManager.DoRequests(requestMsgSet);

                //look at response and get customer list id, needed for adding custom fields
            IResponse response = responseMsgSet.ResponseList.GetAt(0);
            ICustomerRet CustomerRet = (ICustomerRet)response.Detail;
            string custListID = CustomerRet.ListID.GetValue();

                //End the session and close the connection to QuickBooks
            sessionManager.EndSession();
            sessionBegun = false;
            sessionManager.CloseConnection();
            connectionOpen = false;

            requestMsgSet = null;

//////////////////////////////////////////////////////////////////////////////


            //Create the session Manager object
            sessionManager = new QBPOSSessionManager();

            //Create the message set request object to hold our request
            requestMsgSet = sessionManager.CreateMsgSetRequest(3, 0);
            requestMsgSet.Attributes.OnError = ENRqOnError.roeContinue;

            AddCustomerCustField(requestMsgSet, custListID, "C Number", custCNum);

            //Connect to QuickBooks and begin a session
            sessionManager.OpenConnection("AddCust", "MyApp");
            connectionOpen = true;
            sessionManager.BeginSession("");
            sessionBegun = true;

            //add to customfields

            sessionManager.DoRequests(requestMsgSet);

                /*/
            AddCustomerCustField(requestMsgSet, custListID, "Experience Level", custExpLevel);
            AddCustomerCustField(requestMsgSet, custListID, "Date of Birth", custDateOfBirth);
            sessionManager.DoRequests(requestMsgSet);
            AddCustomerCustField(requestMsgSet, custListID, "C Number", custCNum);
            sessionManager.DoRequests(requestMsgSet);
            AddCustomerCustField(requestMsgSet, custListID, "C Experation Date", custCExpDate);
            sessionManager.DoRequests(requestMsgSet);
            AddCustomerCustField(requestMsgSet, custListID, "Member Number", custMemCardNun);
            sessionManager.DoRequests(requestMsgSet);
            AddCustomerCustField(requestMsgSet, custListID, "Waiver Approved", custWaiverAppr);
            sessionManager.DoRequests(requestMsgSet);
            AddCustomerCustField(requestMsgSet, custListID, "ID Number", custDrivLiceNum);
            sessionManager.DoRequests(requestMsgSet);
            /*/

            sessionManager.EndSession();
            sessionBegun = false;
            sessionManager.CloseConnection();
            connectionOpen = false;

        }
        catch (Exception q)
        {
            if (sessionBegun) { } //sessionManager.EndSession();
            if (connectionOpen) { } //sessionManager.CloseConnection();
        }

    } //End DoCustomerAdd

    void BuildCustomerAddRq(IMsgSetRequest requestMsgSet)
    {
        String CustFirstName = KEY_FIRST_NAME.Text;
        String CustLastName = KEY_LAST_NAME.Text;
        //String CustCompanyName = TextBox.Text;
        String CustEMail = KEY_EMAIL.Text;
        bool CustIsOkToEMail = emailList.Checked;
        String CustPhone2 = KEY_PHONE.Text;
        String CustStreet = KEY_ADDRESS.Text;
        String CustCity = KEY_CITY.Text;
        String CustState = KEY_STATE.Text;
        String CustPostalCode = KEY_ZIP.Text;
        String CustCountry = "US";
        String CustType = textResultMembershipLevel.Text;

        ICustomerAdd CustomerAddRq = requestMsgSet.AppendCustomerAddRq();

            //Set field value's
        //CustomerAddRq.CompanyName.SetValue(CustCompanyName);
        CustomerAddRq.EMail.SetValue(CustEMail);
        CustomerAddRq.IsOkToEMail.SetValue(CustIsOkToEMail);
        CustomerAddRq.FirstName.SetValue(CustFirstName);
        CustomerAddRq.LastName.SetValue(CustLastName);
        CustomerAddRq.Phone2.SetValue(CustPhone2); //Cell
        CustomerAddRq.BillAddress.City.SetValue(CustCity);
        CustomerAddRq.BillAddress.Country.SetValue(CustCountry);
        CustomerAddRq.BillAddress.PostalCode.SetValue(CustPostalCode);
        CustomerAddRq.BillAddress.State.SetValue(CustState);
        CustomerAddRq.BillAddress.Street.SetValue(CustStreet);
        CustomerAddRq.CustomerType.SetValue(CustType);

    } //End BuildCustomerAddRq

    public void AddCustomerCustField(IMsgSetRequest requestMsgSet, String custListID, String fieldName, String enterData)
    {
        IDataExtAdd DataExtAddRq = requestMsgSet.AppendDataExtAddRq();
        DataExtAddRq.OwnerID.SetValue("0"); //field visable in UI so it is "0"
        DataExtAddRq.DataExtName.SetValue(fieldName); //name of field
        string ORDataExtOwnerElementType = "ListDataExt";
        if (ORDataExtOwnerElementType == "ListDataExt")
        {
            //set for customer add
            DataExtAddRq.ORDataExtOwner.ListDataExt.ListDataExtType.SetValue(ENListDataExtType.ldetCustomer);
            //give list id for cust
            DataExtAddRq.ORDataExtOwner.ListDataExt.ListObjRef.ListID.SetValue(custListID);
        }
        if (ORDataExtOwnerElementType == "OtherDataExtType")
        {
            //Set field value for OtherDataExtType
            DataExtAddRq.ORDataExtOwner.OtherDataExtType.SetValue(ENOtherDataExtType.odetCompany);
        }
            //Set field value for DataExtValue
        DataExtAddRq.DataExtValue.SetValue(enterData);


    } //End AddCustomerCustField
.

Спасибо за любую помощь, но прочитайте анализ, прежде чем помочь.

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

Решение

Я сделал некоторые тестирование и нашел, что может быть ошибкой, которая вызывает вашу проблему.Я использовал имя поля по умолчанию, «Custom 1» и получила ошибку Ответ «Ошибка расширения (имя расширения данных» содержит недопустимые символы (ы): «Пользовательский 1») ».Я знаю, что это имя пользовательского поля, и он активен.Я изменил имя поля на «Custom1» (без пробела) и смог обновить поле.

Глядя на ваш код, все поля, кажется, имеют пробелы в них.Я считаю, что в POS SDK есть ошибка, которая не позволяет пробелы в пользовательских именах поля.Если вы попробуйте изменять поля, чтобы не включить пробелы, у вас все еще есть проблема?

Кроме того, имейте в виду, что если экран клиента открыт, когда вы делаете изменения, вам иногда нужно закрыть и вернуться на экран клиента, чтобы увидеть обновления.Это не запускает обновление экрана, как он делает в QuickBooks.

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