2018-10-29
12:27 PM
- last edited on
2022-10-05
01:33 PM
by
Daniel Kassai
item.itemType = API_StoryNavItem; item.mapId = API_PublicViewMap; err = ACAPI_Environment (APIEnv_SearchNavigatorItemID, &item, &items, NULL);But i tried to change parameters to get layouts like below, and i'm getting this error:
APIERR_BADDATABASE -2130313110.
item.itemType = API_LayoutNavItem; item.mapId = API_LayoutMap; err = ACAPI_Environment (APIEnv_SearchNavigatorItemID, &item, &items, NULL);From that error i tried to assign database info to the search query. with this.
API_DatabaseInfo db; BNZeroMemory (&db, sizeof (API_DatabaseInfo)); db.typeID = APIWind_LayoutID; item.itemType = API_LayoutNavItem; item.mapId = API_LayoutMap; item.db =db; err = ACAPI_Environment (APIEnv_SearchNavigatorItemID, &item, &items, NULL);And this way i got the same result... database error.
err=ACAPI_Database (APIDb_ChangeCurrentDatabaseID,&db);And this gave me the same database error. After that i don't have aní clue to solve my issue.
Solved! Go to Solution.
2018-11-15 11:35 AM
GS::Array<API_NavigatorItem> GetNavItemChildren (const API_NavigatorItem& item)
{
API_NavigatorItem** children = nullptr;
err = ACAPI_Environment (APIEnv_GetNavigatorChildrenItemsID, &item, &children);
if (err != NoError)
return err;
const Int32 childCount = BMhGetSize ((GSHandle)children) / Sizeof32 (API_NavigatorItem);
GS::Array<API_NavigatorItem> childArray;
for (Int32 ii = 0; ii < childCount; ++ii) {
const API_NavigatorItem& childItem = (*children)[ii];
childArray.Push (childItem);
childArray.Append (GetNavItemChildren (childItem));
}
BMhKill ((GSHandle *)&children);
return childArray;
}
GS::Array<API_NavigatorItem> GetAllLayoutNavItem ()
{
API_NavigatorSet set;
BNZeroMemory (&set, sizeof (API_NavigatorSet));
set.mapId = API_LayoutMap;
GSErrCode err = ACAPI_Environment (APIEnv_GetNavigatorSetID, &set);
if (err != NoError)
return err;
API_NavigatorItem rootItem;
BNZeroMemory (&rootItem, sizeof (API_NavigatorItem));
rootItem.guid = set.rootGuid;
rootItem.mapId = set.mapId;
return GetNavItemChildren (rootItem);
}
2018-11-15 11:35 AM
GS::Array<API_NavigatorItem> GetNavItemChildren (const API_NavigatorItem& item)
{
API_NavigatorItem** children = nullptr;
err = ACAPI_Environment (APIEnv_GetNavigatorChildrenItemsID, &item, &children);
if (err != NoError)
return err;
const Int32 childCount = BMhGetSize ((GSHandle)children) / Sizeof32 (API_NavigatorItem);
GS::Array<API_NavigatorItem> childArray;
for (Int32 ii = 0; ii < childCount; ++ii) {
const API_NavigatorItem& childItem = (*children)[ii];
childArray.Push (childItem);
childArray.Append (GetNavItemChildren (childItem));
}
BMhKill ((GSHandle *)&children);
return childArray;
}
GS::Array<API_NavigatorItem> GetAllLayoutNavItem ()
{
API_NavigatorSet set;
BNZeroMemory (&set, sizeof (API_NavigatorSet));
set.mapId = API_LayoutMap;
GSErrCode err = ACAPI_Environment (APIEnv_GetNavigatorSetID, &set);
if (err != NoError)
return err;
API_NavigatorItem rootItem;
BNZeroMemory (&rootItem, sizeof (API_NavigatorItem));
rootItem.guid = set.rootGuid;
rootItem.mapId = set.mapId;
return GetNavItemChildren (rootItem);
}
2019-05-01 10:00 AM
Tibor wrote:I'm playing around with Navigator. Since it was moved to separate class form Environment. I have updated code. However, it doesn't seem to work in any case. There is a slight success with Publisher Set. I can access set but I can't access any child. In the case of other types, I got nothing. Please help.
But you can iterate through the layout tree using APIEnv_GetNavigatorSetID and APIEnv_GetNavigatorChildrenItemsID methods:
GS::Array<API_NavigatorItem> GetNavItemChildren(const API_NavigatorItem* item)
{
ACAPI_WriteReport("child", true);
API_NavigatorItem** children = nullptr;
//GS::ErrCode err = ACAPI_Environment(APIEnv_GetNavigatorChildrenItemsID, &item, &children);
//API_NavigatorItem* = &item;
GS::ErrCode err = ACAPI_Navigator(APINavigator_GetNavigatorChildrenItemsID, &item, &children);
err;
ACAPI_WriteReport(GS::ValueToString(err), true);
//if (err != NoError)
// return err;
const Int32 childCount = BMhGetSize((GSHandle)children) / Sizeof32(API_NavigatorItem);
GS::Array<API_NavigatorItem> childArray;
ACAPI_WriteReport("cnt", true);
ACAPI_WriteReport(GS::ValueToString(childCount), true);
for (Int32 ii = 0; ii < childCount; ++ii) {
const API_NavigatorItem& childItem = (*children)[ii];
ACAPI_WriteReport(childItem.name, true);
childArray.Push(childItem);
childArray.Append(GetNavItemChildren(&childItem));
}
BMhKill((GSHandle *)&children);
return childArray;
}
void GetAllLayoutNavItem()
{
ACAPI_WriteReport("set", true);
API_NavigatorSet set;
BNZeroMemory(&set, sizeof(API_NavigatorSet));
//set.mapId = API_PublicViewMap;
set.mapId = API_LayoutMap;
//set.mapId = API_PublisherSets;
int idx = 1; //for Publisher Set
idx;
GSErrCode err = ACAPI_Navigator(APINavigator_GetNavigatorSetID, &set);
//if (err != NoError)
// return err;
ACAPI_WriteReport(GS::ValueToString(err), true);
const Int32 setCnr = BMhGetSize((GSHandle)&set) / Sizeof32(API_NavigatorSet);
ACAPI_WriteReport(GS::ValueToString(setCnr), true);
err;
API_NavigatorItem rootItem;
BNZeroMemory(&rootItem, sizeof(API_NavigatorItem));
rootItem.guid = set.rootGuid;
rootItem.mapId = set.mapId;
ACAPI_WriteReport(set.name, true);
ACAPI_WriteReport(GS::ValueToString(set.mapId), true);
GetNavItemChildren(&rootItem);
}
2019-05-14 01:59 PM
2019-07-18 01:34 PM
kzaremba wrote:Can you post the final code which you have iterated layouts successfully with?
After a few hours of debugging, I found a solution. Code works. I passed GUID of Navi Set... Which seem quite logical. But as it turned out it should be rootGuid. Does anyone know the difference?
2019-07-22 03:35 PM
Tomer1 wrote:Hi, as far as I remember this piece of code should work. Later on, I was just referring to GUID o set instead of rootGUID. Let me know if it's wroking.
Can you post the final code which you have iterated layouts successfully with?
2019-07-23 04:52 PM
2019-07-23 05:21 PM
2019-07-23 07:55 PM
2019-07-24 12:17 PM