Pergunta

alguém pode me ajudar com a adição de dados de uma INTERFACE de usuário Personalizada definida pelo Campo em QuickBooks POS 2013?

Eu estou tentando adicionar dados a uma INTERFACE do usuário personalizada definida pelo campo (o campo foi feita e visível nos terminais de interface de usuário, e não pela programação;assim, o OnwerID é "0") quando a adição de um novo cliente a partir de uma página da web.

Eu estou usando:criar o aplicativo no Microsoft Visual Studio 2012 WebForms, C# .NET, QBPOSFC3Lib, falando QB POS Pro 2013.A aplicação e QBPOS-servidor estão ambos em/aberto e em execução no mesmo servidor.

Objetivo:um cliente entra informações sobre a página da web.Dados inclui 11 atributos que QBPOS faixas como parte de seu núcleo de programação e 7 atributos que precisam ser gravados e são definidos na INTERFACE do usuário Personalizada Campos.Depois que o cliente entra em informações e dados é verificada com os métodos (não incluir no código abaixo) para a formatação de requisitos e, em seguida, o código abaixo é executado para enviar os dados para o QBPOS-servidor.Nota:Adicionarcliente comando funciona 100%.

Processo Do Programa:No código abaixo, como estou fazendo com o Cliente Adicionar Pedido (CstReq) e conseguir que o Cliente Adicionar Resposta (CstResp) somente para o ListID.Usando um método 7 vezes para criar 7 pedidos para adicionar dados para os campos personalizados (eu comentada 6 dos 7 como um "talvez este seja o problema" e o teste com apenas um DataExtAddRq) com o CstResp ListID (eu não peço que (no programa) ou precisa de uma Resposta para o DataExtAddRq).Em seguida, EndSession e CloseConnection (para depuração de eu terminar e fechar após o CstReq e reabrir antes de DataExtAdd, sem alteração no resultado).

Problema:o DataExtAddRq não está adicionando as informações para os campos personalizados.Depois que o cliente está feita e o programa atinge o DataExtAdd parte, adiciona os mesmos dados de clientes para QBPOS e não adicione a Extensão de dados (var requestMsgSet é feito nulo antes de DataExtAdd).

O código em questão:

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

Obrigado por qualquer ajuda, mas por favor, leia a análise antes de ajudar.

Foi útil?

Solução

Eu fiz alguns testes e encontrei o que pode ser um bug que está causando seu problema.Eu usei o nome do campo personalizado padrão, "Personalizado 1" e obtive um erro de extensão de resposta de erro "(o nome de extensão de dados contém caracteres inválidos:" personalizado 1 ")".Eu sei que este é o nome do campo personalizado, e está ativo.Eu mudei o nome do campo para "custom1" (sem espaço) e foi capaz de atualizar o campo.

Olhando para o seu código, todos os campos parecem ter espaços neles.Eu acredito que há um bug no POS SDK que não permite espaços nos nomes de campo personalizados.Se você tentar alterar os campos para não incluir espaços, você ainda tem o problema?

Além disso, tenha em mente que se a tela do cliente estiver aberta quando você fizer a alteração, às vezes precisará fechar e voltar para a tela do cliente para ver as atualizações.Não aciona uma atualização de tela como ela faz em QuickBooks.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top