[SOLVED] Quering Enginio with QML



  • Hello all!

    I need to query data from enginio databse and use it in a ComboBox, but I could not figure out how to do it. Could someone help me?

    Thanks


  • Lifetime Qt Champion

    Hi,

    Did you took a look at getting started Enginio QML ?



  • Hi guidupas,

    here's a small snippet showing how to query enginio by using EnginioModel:

    
    EnginioClient {
    	id: client
    	backendId: "myID..."
    }
    
    
    EnginioModel {
    	id: enMod
    	client: client
    	query: 
    		{
    		"objectType" : "objects.myobject",
    		"sort": [{"sortBy":"updatedAt","direction":"desc"}],
    		"query": {"updatedAt": {"$gt": {"$type": "time","$value": getYesterday()}}},
    		"limit": 15
    		}
    }
    
    
    function getYesterday( ) {
    	var today = new Date();
    	today.setDate(today.getDate()-5)
    	return Qt.formatDate(today, "yyyy-MM-ddT00:00:00Z");
    }
    
    

    You may use all the objects in the EnginioModel enMod in your script:

    text: updatedAt 
    

    etc.

    Hope, it helps



  • @SGaist

    Hello!

    Thanks for the reply

    Yes, I have seem the link you suggested, but it just show how to insert data and my difficult here is how to get and use the data from Enginio.



  • @clochydd

    Hello!

    Thanks for the reply!

    The code you posted helped a lot, but I could not, yet, use the data. When I try to use it like you suggested: text: updatedAt it shows me the message:

    qrc:/main.qml:117: ReferenceError: updatedAt is not defined

    Here is my code. I will became grateful if you could help me:

    EnginioClient {
            id: clienteEnginio
            backendId: "MyBackEnd"
        }
    
    EnginioModel {
            id: paisEnginioModel
            client: clienteEnginio
    
            query: {
                "objectType" : "objects.pais",
                "sort": [{"sortBy":"updatedAt","direction":"desc"}],
                "query": {"updatedAt": {"$gt": {"$type": "time","$value": getYesterday()}}},
                "limit": 15
            }
            property string text: updatedAt
        }
    
        function getYesterday( ) {
            var today = new Date();
            today.setDate(today.getDate()-5)
            return Qt.formatDate(today, "yyyy-MM-ddT00:00:00Z");
        }
    


  • Hello,

    in my example I used updatedAt as this is one of the internal properties.
    Therefore it is not necessary to declare it as a property.
    Instead of it you may use any of the properties from your enginio object.
    If you have "name" you may use it without any further declaration in your model.

    Just try to delete the entry "property string..." and try to use it with your clienteEnginio.



  • @clochydd

    It returned this:
    Cannot assign to non-existent property "text"

    Here is the code:

    EnginioModel {
            id: paisEnginioModel
            client: clienteEnginio
            /*query: {
                "objectType" : "objects.pais",
                "sort": [{"sortBy" : "nome","direction" : "desc"}],
                "query": {"nome": {"$gt": {"$type" : "string","$value": "Brasil"}}},
                "limit": 15
            }*/
    
            query: {
                "objectType" : "objects.pais",
                "sort": [{"sortBy":"updatedAt","direction":"desc"}],
                "query": {"updatedAt": {"$gt": {"$type": "time","$value": getYesterday()}}},
                "limit": 15
            }
    
            text: updatedAt
        }
    


  • Did you assign your enginioModel to your ComboBox?

    ComboBox {
        width: 200
        model: paisEnginioModel
    }
    


  • @clochydd

    Yes, here it is:

    EnginioClient {
            id: clienteEnginio
            backendId: "MyId"
        }
        EnginioModel {
            id: paisEnginioModel
            client: clienteEnginio
            query: {
                "objectType" : "objects.pais",
                "sort": [{"sortBy":"updatedAt","direction":"desc"}],
                "query": {"updatedAt": {"$gt": {"$type": "time","$value": getYesterday()}}},
                "limit": 15
            }
    
            text: updatedAt
        }
        ComboBox {
            id: comboBox1
    
            model: paisEnginioModel
        }
    

    It returns this message:
    QQmlApplicationEngine failed to load component
    qrc:/main.qml:70 Cannot assign to non-existent property "text"



  • You should not use text: updateAt inside your model.
    (In my first post this was only meant as an example...)

    By assigning the model to the ComboBox the properties from the model are part of the ComboBox.

    If you look at the ComboBox example:

    ComboBox {
        width: 200
        model: [ "Banana", "Apple", "Coconut" ]
    }
    

    [ "Banana", "Apple", "Coconut" ] will be replace by your paisEnginioModel.



  • Hi guidupas,

    until now I didn't use a ComboBox with QML and Enginio, so I've made this small example:

    Assume, we have a collection objects.contacts with custom properties name and address:

    {
      "name": "Peter",
      "address": "Somewhere"
    }
    {
      "name": "Peter",
      "address": "Anywhere"
    }
    

    and we want to see the addresses for all Peters in the ComboBox:

    import QtQuick 2.3
    import QtQuick.Controls 1.2
    import Enginio 1.0
    
    Rectangle {
        width: 500; height: 200
    
        EnginioClient {
            id: client
            backendId: "myBackendID..."
            onError: console.log(reply.errorCode + ": " + reply.errorString)
        }
        EnginioModel {
            id: eModel
            client: client
            query: {
                "objectType": "objects.contacts",
                "query" : {"name": "Peter"}
            }
        }
        ComboBox {
            model: eModel
            textRole: "address"
    
        }
    }
    

    And your ComboBox will contain:
    Somewhere
    Anywhere

    Hope, it helps a bit...



  • @clochydd

    It worked fine.

    Thank you very much. It helped a lot.



  • @clochydd

    Hello @clochydd !

    I heard that Enginio is going to be deprecated. Do you know if this is true?

    Cheers.


  • Lifetime Qt Champion

    Hi,

    AFAIK, the talk is about the client library, not the service



  • Hi SGaist,

    thanks for your comment - is there any information available in the forum or elsewhere? I wonder about the consequences, if the client library will be deprecated.


  • Lifetime Qt Champion

    Currently I only saw this on the mailing list. If that be the case, it will be properly announced. The deprecation just means that there won't be further development on the client part except security related stuff. The code itself isn't going to disappear.



  • I was just starting to learn engin.io but according to the 5.6 roadmap the module will be deprecated http://wiki.qt.io/New_Features_in_Qt_5.6). What would be the recommanded way to communicate with an EDS backend from a qml mobile app? Even if the api will remains I feel it is not advisable to start a new project with an ingoing deprecated module...



  • @Charby
    You are absolutely right! And it seems to be quite strange to see Digia propagating Enginio on their current web presence while planning to remove Qt Enginio...


  • Lifetime Qt Champion

    From https://developer.qtcloudservices.com/eds/references/sdk-libraries It looks like there's something in the work.



  • @SGaist Sir I am new to qt . I didn't know where to ask to I am givingmy question here:

    I downloaded qt-opensource-linux-x86-5.4.1.run but how to install it on ubuntu 14.04LTS?


  • Lifetime Qt Champion

    Hi and welcome to devnet,

    You have a wiki entry here that describes how to do it.

    For future questions: please don't highjack threads with completely unrelated questions.



  • @SGaist Sir I am trying the same since 1 hour but getting this problem:

    administrator@pc-7:~/Downloads/FlareGet/Applications$ chmod +x qt-opensource-linux-x86-5.4.1.run
    administrator@pc-7:~/Downloads/FlareGet/Applications$ ./qt-linux-opensource-linux-x86-5.4.1.run
    bash: ./qt-linux-opensource-linux-x86-5.4.1.run: No such file or directory


  • Lifetime Qt Champion

    Please open a new thread for your problem.



  • @SGaist how. I dont know . I am not able to find new thread


  • Lifetime Qt Champion


Log in to reply
 

Looks like your connection to Qt Forum was lost, please wait while we try to reconnect.