The comment from here forced me to pay attention to the Boolean parameter on the Query.pack() method which I didn't mention before. It is not obvious what it does by looking at its name - _doCheck. I tried to figure out what it does and I've got the following:
If a query contains DynaLink then calling Query.pack(true) will throw the error: Attempting to pack a query that contains one or more dynamic links.
If a query contains DynaLink then calling Query.pack(false) will succeed and DynaLink will not be stored in the package - it will not appear on a new query created from the package.
Does anybody have more information on this parameter?
public static void testQueryPack()
Query q1 = new Query();
qbds = q1.addDataSource(tablenum(InventTable));
qbds.addDynalink(fieldnum(InventTable, ItemGroupId), itemGroup, fieldnum(InventItemGroup, ItemGroupId));
q2 = new Query(q1.pack(false));
qbds = q2.dataSourceTable(tablenum(InventTable));