문제

QuickBooks POS 2013의 UI 정의 사용자 정의 필드에 데이터를 추가하는 데 도움이 될 수 있습니까?

UI 정의 된 사용자 정의 필드에 데이터를 추가하려고합니다 (POS 사용자 인터페이스에서는 POS 사용자 인터페이스에서 필드가 만들어졌으며, 프로그래밍이 아닌 onwerid가 "0"이므로) 웹 페이지에서 새 고객을 추가 할 때입니다.

Microsoft Visual Studio 2012 WebForms, C # .NET, QBPOSFC3LIB에서 응용 프로그램 작성 QB POS 2013 PRO와 답변합니다. 응용 프로그램 및 QBPOS-Server는 동일한 서버에서 켜기 / 열고 실행됩니다.

목표 : 고객이 웹 페이지에 정보를 입력합니다. 데이터에는 QBPOS가 핵심 프로그래밍의 일부로 추적하는 11 개의 속성과 녹화 해야하는 7 개의 속성이 UI의 사용자 정의 필드에 정의되어 있습니다. 고객이 정보를 입력하면 데이터가 포맷 및 요구 사항에 대해 메서드 (아래 코드가 포함되지 않음)로 검증 된 다음 아래 코드가 실행되어 데이터를 QBSO 서버로 전송합니다. 참고 : AddCustomer 명령은 100 % 작동합니다.

프로그램 프로세스 : 아래 코드에서는 고객이 요청 (CStreq)을 추가하고 ListID 만 고객 추가 응답 (CStresp)을 추가합니다. 하나의 방법을 7 번 사용하여 사용자 정의 필드에 데이터를 추가하기 위해 7 개의 요청을 작성하십시오 (나는 7의 "아마도 문제가되는"문제 "및 하나의 DataExtAddRQ 만있는"아마도 하나의 DataExtAddrq만의 테스트를 묻는 것으로 묻습니다). 프로그램에서) 또는 DataExtAddrq에 대한 응답이 필요합니다. 그런 다음 youndession 및 closeConnection (CStreq 이후에 Degud 및 CStreq 이후에 닫히고 결과가 변경되지 않음)

문제점 : DataExtAddrq가 사용자 정의 필드에 정보를 추가하지 않습니다. 고객이 이루어지고 프로그램이 DataExtAdd 파트를 히트하면 QBPO에 동일한 고객 데이터를 추가하고 Ext Data를 추가하지 않습니다 (var requestmsgset은 dataExtAdd 전에 null이 만들어집니다).

문제의 코드 :

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
.

도움을 주셔서 감사하지만 돕기 전에 분석을 읽으십시오.

도움이 되었습니까?

해결책

나는 몇 가지 테스트를했고 문제의 원인이되는 버그 일 수있는 것을 발견했습니다.기본 사용자 정의 필드 이름 인 "사용자 정의 1"을 사용하고 오류 응답 "확장 오류가 발생했습니다 (데이터 확장 이름에 잘못된 문자가 포함되어 있습니다 :"사용자 정의 1 ")".이것이 사용자 정의 필드의 이름이며 활성화되어 있습니다.필드의 이름을 "사용자 정의 1"(공백없이)으로 변경했으며 필드를 업데이트 할 수있었습니다.

코드를보고 모든 필드는 공백이있는 것 같습니다.나는 사용자 정의 필드 이름에 공백을 허용하지 않는 POS SDK에 버그가 있다고 생각합니다.필드를 공백을 포함하지 않도록 변경 사항을 변경하면 문제가 있습니까?

또한 변경을 할 때 고객 화면이 열리면 닫아서 고객 화면으로 돌아가서 업데이트를 확인해야합니다.QuickBooks에서 화면 새로 고침을 트리거하지 않습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top