QOF (was QoF)

Derek Atkins warlord at MIT.EDU
Sun May 2 17:08:11 EDT 2004


First, it's QOF, not QoF.  QOF == Query Object Framework.

Neil Williams <linux at codehelp.co.uk> writes:

> I'm trying to understand QoF using the sourceforge example:
> http://qof.sourceforge.net/my-obj-example.c.html
>
> This is part of a file (I have a header and a genuine makefile to compile) but 
> I keep getting an empty GList returned at this line:
> 		printf("Debug: %s\n","zero length objects");
>
[snip]
> 	GncInvoice *firstinvoice = gncInvoiceCreate (testbook);
> 	gncInvoiceSetID(firstinvoice, "1001");
> 	gncInvoiceSetActive(firstinvoice, TRUE);

You don't need to do this.  Invoices are Active by default.

> 	GncInvoice *secondinvoice = gncInvoiceCreate (testbook);
> 	gncInvoiceSetID(secondinvoice, "2002");
> 	gncInvoiceSetActive(secondinvoice, TRUE);
> 	printf("Invoice ID: %s\n", gncInvoiceGetID(firstinvoice));

So this prints "1001".

> 	QofCollection *coll = qof_book_get_collection (testbook, GNC_ID_INVOICE);
> 	GList *all_my_objs = qof_collection_get_data (coll);

Uh, this function doesn't give you all the list of invoices.  What makes
you think it would?  To find the invoices you either need to iterate
(using qof_collection_foreach) to build the list, or you need to
build and run a Query.

What makes you think that this should be a GList*?  The API is:

   gpointer qof_collection_get_data (QofCollection *col);

If it returned a GList don't you think it would return a GList?

> 	if(g_list_length(all_my_objs) == 0) {
> 		printf("Debug: %s\n","zero length objects");
> 		all_my_objs = g_list_prepend(all_my_objs, secondinvoice);
> 	}
> 	for (n=all_my_objs; n; n=n->next) {
> 		GncInvoice *m = n->data;
> 		printf ("id=%s\n", gncInvoiceGetID(m));
> 	}
> }
>
> The forced addition of secondinvoice renders the expected id=2002\n output but 

In this case you're just being damned lucky.  I have no idea why it's
working for you at all.  It should just crash.

> I should be getting both 1001 and 2002, shouldn't I?

No.  See above.

> What am I missing?

The function to get the list of objects.  What you're using is wrong.

> Do I need more objects in testbook before the invoices are properly registered 
> or do the invoices need more data before the qof hashtable lookup can work?

No.  The invoices are all properly registered.  You're just not using
the right APIs to get at them.

-derek

-- 
       Derek Atkins, SB '93 MIT EE, SM '95 MIT Media Laboratory
       Member, MIT Student Information Processing Board  (SIPB)
       URL: http://web.mit.edu/warlord/    PP-ASEL-IA     N1NWH
       warlord at MIT.EDU                        PGP key available


More information about the gnucash-devel mailing list