Pregunta

¿Puede alguien ayudar a agregar datos a un campo personalizado definido por UI en QuickBooks POS 2013?

Estoy tratando de agregar datos a un campo personalizado definido por la interfaz de usuario (el campo se realizó y visible en la interfaz de usuario POS, no mediante la programación; por lo que el ondulido es "0") al agregar un nuevo cliente desde una página web.

Estoy usando: creando la aplicación en Microsoft Visual Studio 2012 WebForms, C # .NET, QBPOSFC3LIB, hablando con QB POS 2013 PRO. La aplicación y QBPOS-Server están activados / abiertos y se ejecutan en el mismo servidor.

Objetivo: Un cliente ingresa a la información en la página web. Los datos incluyen 11 atributos que las pistas QBPOS como parte de su programación núcleo y 7 atributos que deben grabarse y se definen en los campos personalizados de la UI. Después de que el cliente ingrese a la información y los datos se verifican con métodos (no incluyen en el código a continuación) para el formato y los requisitos, se ejecuta el siguiente código para enviar los datos al servidor QBPOS. Nota: El comando AddCustomer funciona 100%.

Proceso del programa: en el siguiente código, estoy haciendo que la solicitud de AGREGA CLIENTE (CSTREQ) y obtenga la respuesta al cliente añada (cstresp) por solo el Listid. Usando un método 7 veces para crear 7 solicitudes para agregar datos a los campos personalizados (comenté 6 de los 7 como "quizás ese es el problema" y pruebe con solo un DauTextAdDRQ) con el Listid Cstresp (no pregunte ( en el programa) o necesita una respuesta para el DauTextAdDRQ). Luego, la temporada y el cierre de CloseConnection (para depurar, termino y cierran después del CSTREQ y vuelva a abrir antes de DataExtAddd, no hay cambios en el resultado).

Problema: el DauTexTadDRQ no está agregando la información a los campos personalizados. Después de que se realiza el cliente y el programa llega a la parte de DauTextAdd, agrega los mismos datos del cliente a QBPOS y no agrega los datos EXT (VAR SOLICTHSGSET se realiza NULL antes de DAIFTEXTADD).

Código en cuestión:

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

Gracias por cualquier ayuda, pero lea el análisis antes de ayudar.

¿Fue útil?

Solución

Hice algunas pruebas y encontré lo que podría ser un error que está causando su problema.Utilicé el nombre de campo personalizado predeterminado, "Personalizado 1" y obtuve una respuesta de error "Error de extensión (el nombre de la extensión de datos contiene caracteres no válidos (s):" Personalizado 1 ")".Sé que este es el nombre del campo personalizado, y está activo.Cambié el nombre del campo a "Custom1" (sin espacio) y pude actualizar el campo.

Mirando su código, todos los campos parecen tener espacios en ellos.Creo que hay un error en el SDK POS que no permite espacios en los nombres de los campos personalizados.Si intenta cambiar los campos para no incluir espacios, ¿todavía tiene el problema?

Además, tenga en cuenta que si la pantalla del cliente está abierta cuando realiza el cambio, a veces necesita cerrar y volver a la pantalla del cliente para ver las actualizaciones.No activa una pantalla de refrescos como lo hace en QuickBooks.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top