QuickBooks Pos SDK Ajouter les données de champ personnalisées client: DataextAjouter

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

  •  21-12-2019
  •  | 
  •  

Question

Quelqu'un peut-il aider à ajouter des données à un champ personnalisé défini UI dans QuickBooks POS 2013?

J'essaie d'ajouter des données à un champ personnalisé défini UI (le champ a été effectué et visible dans l'interface utilisateur POS, pas en programmant; donc l'Onwerid est "0") lors de l'ajout d'un nouveau client à partir d'une page Web.

J'utilise: Création de l'application dans Microsoft Visual Studio 2012 WebForms, C # .NET, QBOSFC3Lib, Parler à QB Pos 2013 Pro. L'application et le serveur Qbpos sont à la fois activés / ouverts et fonctionnant sur le même serveur.

Objectif: un client entre des informations sur la page Web. Les données comprennent 11 attributs que QBOS piste dans le cadre de sa programmation principale et 7 attributs à enregistrer et sont définis dans les champs personnalisés de l'UI. Une fois que le client entre dans les informations et que les données sont vérifiées avec des méthodes (non incluses dans le code ci-dessous) pour la mise en forme et les exigences, le code ci-dessous s'exécute pour envoyer les données au serveur QBOS-Server. Remarque: la commande addcustomer fonctionne à 100%.

Processus du programme: Dans le code ci-dessous, je rends le client Ajouter une demande (CStreq) et obtenir le client Ajoutez une réponse (CSTRESP) pour seuls la liste des cadres. Utilisation d'une méthode 7 fois pour créer 7 demandes d'ajouter des données aux champs personnalisés (j'ai commenté 6 des 7 comme un "peut-être que c'est le problème" et teste avec un seul dataextaddrq) avec le CStrespectAide (je ne demande pas (je ne demande pas ( dans le programme) ou besoin d'une réponse pour la DataextAddrq). Ensuite, les mines et la fermeture (pour déboguer je finis et fermez après le CStreq et rouvrir avant DataextaDD, aucun changement de résultat).

Problème: le dataextAddrq ne ajoute pas les informations aux champs personnalisés. Une fois que le client est effectué et que le programme frappe la partie DataextaDD, elle ajoute les mêmes données client à QBOS et n'ajoute pas les données EXT (Var Dem demandsGset est fabriqué null avant DataextaDD).

code en question:

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

Merci de toute aide, mais s'il vous plaît lisez l'analyse avant d'aider.

Était-ce utile?

La solution

J'ai fait des tests et j'ai trouvé ce qui pourrait être un bug qui cause votre problème.J'ai utilisé le nom de champ personnalisé par défaut "personnalisé 1" et j'ai obtenu une réponse d'erreur "Erreur d'extension (le nom de l'extension de données contient des caractères non valides:" Personnalisé 1 ")".Je sais que c'est le nom du champ personnalisé, et c'est actif.J'ai changé le nom du champ en "personnalisé1" (sans espace) et a pu mettre à jour le champ.

En regardant votre code, tous les champs semblent avoir des espaces dans eux.Je crois qu'il y a un bogue dans le SDK POS qui ne permet pas d'espaces dans les noms de champ personnalisés.Si vous essayez de changer les champs pour ne pas inclure les espaces, avez-vous toujours le problème?

Aussi, gardez à l'esprit que si l'écran du client est ouvert lorsque vous effectuez la modification, vous devez parfois fermer et revenir à l'écran du client pour voir les mises à jour.Il ne déclenche pas un rafraîchissement de l'écran comme celui-ci fait dans QuickBooks.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top