static BOOL ObjectFound (HWND hwnd, int objtype) { int iresulttype, ires; char szFindStr [MAXOBJECTNAME]; UCHAR buf1 [MAXOBJECTNAME], buf2 [MAXOBJECTNAME], buf3 [MAXOBJECTNAME]; LPUCHAR parentstrings [MAXPLEVEL]; HWND hwndDB = GetDlgItem (hwnd, IDC_LOCATE_DATABASE); HWND hwndFind = GetDlgItem (hwnd, IDC_LOCATE_FIND); int hdl = GetCurMdiNodeHandle (); BOOL bwsystem = GetSystemFlag (); if (objtype < 0) return FALSE; else { switch (objtype) { case OT_DATABASE: case OT_USER : case OT_GROUP : case OT_ROLE : case OT_LOCATION: Edit_GetText (hwndFind, szFindStr, sizeof (szFindStr)); if (x_strcmp (szFindStr, String_all) == 0) return TRUE; else { ires = DOMGetObjectLimitedInfo (hdl, szFindStr, // Object name to find "", // Object owner objtype, // Object type 0, // Level NULL, // Parent string bwsystem, &iresulttype, buf1, buf2, buf3); if (ires == RES_SUCCESS) return TRUE; else return FALSE; } case OT_TABLE : case OT_VIEW : case OT_PROCEDURE : case OT_SCHEMAUSER : case OT_SYNONYM : case OT_DBEVENT : case OT_SEQUENCE : Edit_GetText (hwndFind, szFindStr, sizeof (szFindStr)); if (x_strcmp (szFindStr, String_all) == 0) return TRUE; else { char szDbName [MAXOBJECTNAME]; Edit_GetText (hwndDB, szDbName, sizeof (szDbName)); parentstrings [0] = szDbName; ires = DOMGetObjectLimitedInfo (hdl, szFindStr, // Object name to find "", // Object owner objtype, // Object type 1, // Level parentstrings, // Parent string bwsystem, &iresulttype, buf1, buf2, buf3); if (ires == RES_SUCCESS) return TRUE; else return FALSE; } case OT_RULE : case OT_INDEX : case OT_INTEGRITY : { char szDbName [MAXOBJECTNAME]; Edit_GetText (hwndFind, szFindStr, sizeof (szFindStr)); if (x_strcmp (szFindStr, String_all) == 0) return FALSE; Edit_GetText (hwndDB, szDbName, sizeof (szDbName)); parentstrings [0] = szDbName; ires = DOMGetObjectLimitedInfo (hdl, szFindStr, // Object name to find "", // Object owner objtype, // Object type 2, // Level parentstrings, // Parent string bwsystem, &iresulttype, buf1, buf2, buf3); if (ires == RES_SUCCESS) return TRUE; else return FALSE; } default: return FALSE; } } }
LONG CuDlgDomPropTblInteg::OnUpdateData (WPARAM wParam, LPARAM lParam) { // cast received parameters int nNodeHandle = (int)wParam; LPIPMUPDATEPARAMS pUps = (LPIPMUPDATEPARAMS)lParam; ASSERT (nNodeHandle != -1); ASSERT (pUps); // ignore selected actions on filters switch (pUps->nIpmHint) { case 0: case FILTER_DOM_SYSTEMOBJECTS: // eligible //case FILTER_DOM_BASEOWNER: //case FILTER_DOM_OTHEROWNER: break; case FILTER_DOM_BKREFRESH: // eligible if UpdateType is compatible with DomGetFirst/Next object type, // or is ot_virtnode, which means refresh for all whatever the type is if (pUps->pSFilter->UpdateType != OT_VIRTNODE && pUps->pSFilter->UpdateType != OT_INTEGRITY) return 0L; break; case FILTER_SETTING_CHANGE: VDBA_OnGeneralSettingChange(&m_cListCtrl); return 0L; default: return 0L; // nothing to change on the display } // Get info on the current item LPTREERECORD lpRecord = (LPTREERECORD)pUps->pStruct; ASSERT (lpRecord); ResetDisplay(); // // Get list of Tbl for the replication // m_Data.m_uaTblInteg.RemoveAll(); int iret; UCHAR buf[MAXOBJECTNAME]; UCHAR bufOwner[MAXOBJECTNAME]; UCHAR bufComplim[MAXOBJECTNAME]; // // CHECK EXISTENCE SINCE REGISTERED TABLE MIGHT NOT REALLY EXIST YET // int resultType; UCHAR resultObjectName[MAXOBJECTNAME]; UCHAR resultOwnerName[MAXOBJECTNAME]; UCHAR resultExtraData[MAXOBJECTNAME]; char* parentStrings[3]; parentStrings[0] = (char*)lpRecord->extra; // DBName parentStrings[1] = parentStrings[2] = NULL; // preparation for get limited info - added static type - added all related granted types LPUCHAR lpName = NULL; LPUCHAR lpOwner = NULL; int basicType = GetBasicType(lpRecord->recType); m_Data.m_objType = basicType; switch (basicType) { case OT_TABLE: case OT_SCHEMAUSER_TABLE: lpName = (LPUCHAR)lpRecord->objName; lpOwner = (LPUCHAR)lpRecord->ownerName; break; case OT_STATIC_INTEGRITY: lpName = (LPUCHAR)lpRecord->extra2; lpOwner = (LPUCHAR)lpRecord->tableOwner; break; default: ASSERT(FALSE); return 0L; } iret = DOMGetObjectLimitedInfo(nNodeHandle, lpName, // object name, lpOwner, // object owner OT_TABLE, // iobjecttype 1, // level (unsigned char **)parentStrings, // parenthood TRUE, // bwithsystem &resultType, resultObjectName, resultOwnerName, resultExtraData ); if (iret == RES_ENDOFDATA) iret = RES_ERR; // Non-existent: ERROR !!! if (iret == RES_SUCCESS) { LPUCHAR aparentsTemp[MAXPLEVEL]; // prepare parenthood with schema where relevant aparentsTemp[0] = lpRecord->extra; // DBName UCHAR bufParent1[MAXOBJECTNAME]; aparentsTemp[1] = bufParent1; x_strcpy((char *)buf, (const char *)resultObjectName); StringWithOwner(buf, resultOwnerName, aparentsTemp[1]); // schema.name aparentsTemp[2] = NULL; memset (&bufComplim, '\0', sizeof(bufComplim)); memset (&bufOwner, '\0', sizeof(bufOwner)); iret = DOMGetFirstObject(nNodeHandle, OT_INTEGRITY, 2, // level, aparentsTemp, // Temp mandatory! pUps->pSFilter->bWithSystem, // bwithsystem NULL, // lpowner buf, bufOwner, bufComplim); } if (iret != RES_SUCCESS && iret != RES_ENDOFDATA) { // Erroneous case! CuNameWithOwner errItem(VDBA_MfcResourceString (IDS_DATA_UNAVAILABLE));//"<Data Unavailable>" m_Data.m_uaTblInteg.Add(errItem); } else { while (iret == RES_SUCCESS) { CuNameWithOwner item((const char*)buf, _T("")); // no owner m_Data.m_uaTblInteg.Add(item); iret = DOMGetNextObject(buf, bufOwner, bufComplim); } } if (m_Data.m_uaTblInteg.GetCount() == 0) { CuNameWithOwner noItem(VDBA_MfcResourceString (IDS_E_NO_INTEGRITY));//"<No Integrity>" m_Data.m_uaTblInteg.Add(noItem); } // Refresh display RefreshDisplay(); return 0L; }
LONG CuDlgDomPropView::OnUpdateData (WPARAM wParam, LPARAM lParam) { // cast received parameters int nNodeHandle = (int)wParam; LPIPMUPDATEPARAMS pUps = (LPIPMUPDATEPARAMS)lParam; ASSERT (nNodeHandle != -1); ASSERT (pUps); // ignore selected actions on filters switch (pUps->nIpmHint) { case 0: //case FILTER_DOM_SYSTEMOBJECTS: //case FILTER_DOM_BASEOWNER: //case FILTER_DOM_OTHEROWNER: break; case FILTER_DOM_BKREFRESH_DETAIL: if (m_Data.m_refreshParams.MustRefresh(pUps->pSFilter->bOnLoad, pUps->pSFilter->refreshtime)) break; // need to update else return 0; // no need to update break; case FILTER_SETTING_CHANGE: VDBA_OnGeneralSettingChange(&m_clistCtrl); return 0L; default: return 0L; // nothing to change on the display } // Get info on the object VIEWPARAMS ViewParams; memset (&ViewParams, 0, sizeof (ViewParams)); LPTREERECORD lpRecord = (LPTREERECORD)pUps->pStruct; ASSERT (lpRecord); ResetDisplay(); // // Get Detail Info // x_strcpy ((char *)ViewParams.objectname, RemoveDisplayQuotesIfAny((LPCTSTR)StringWithoutOwner(lpRecord->objName))); x_strcpy ((char *)ViewParams.szSchema, (const char *)lpRecord->ownerName); x_strcpy ((char *)ViewParams.DBName, (const char *)lpRecord->extra); int dummySesHndl; int iResult = GetDetailInfo ((LPUCHAR)GetVirtNodeName(nNodeHandle), OT_VIEW, &ViewParams, FALSE, &dummySesHndl); if (iResult != RES_SUCCESS) { ASSERT (FALSE); // Reset m_Data CuDomPropDataView tempData; tempData.m_refreshParams = m_Data.m_refreshParams; m_Data = tempData; // Refresh display RefreshDisplay(); return 0L; } // Update refresh info m_Data.m_refreshParams.UpdateRefreshParams(); // update member variables, for display/load/save purpose m_Data.m_csText = ViewParams.lpViewText; // liberate detail structure FreeAttachedPointers (&ViewParams, OT_VIEW); // // Get list of view components // m_Data.m_acsViewComponents.RemoveAll(); m_Data.m_acsSchema.RemoveAll(); m_Data.m_awCompType.RemoveAll(); int iret; LPUCHAR aparentsTemp[MAXPLEVEL]; UCHAR buf[MAXOBJECTNAME]; UCHAR bufOwner[MAXOBJECTNAME]; UCHAR bufComplim[MAXOBJECTNAME]; memset (&bufComplim, '\0', sizeof(bufComplim)); memset (&bufOwner, '\0', sizeof(bufOwner)); // prepare parenthood with schema where relevant aparentsTemp[0] = lpRecord->extra; // DBName UCHAR bufParent1[MAXOBJECTNAME]; aparentsTemp[1] = bufParent1; x_strcpy((char *)buf, (const char *)lpRecord->objName); StringWithOwner(buf, lpRecord->ownerName, aparentsTemp[1]); // schema.name aparentsTemp[2] = NULL; iret = DOMGetFirstObject(nNodeHandle, OT_VIEWTABLE, 2, // level, aparentsTemp, // Temp mandatory! pUps->pSFilter->bWithSystem, // bwithsystem NULL, // owner buf, bufOwner, bufComplim); if (iret != RES_SUCCESS && iret != RES_ENDOFDATA) { // Erroneous case! CString csUnavail; csUnavail.LoadString(IDS_TM_ERR_ERR);// = "< Data Unavailable >"; m_Data.m_acsViewComponents.Add(csUnavail); m_Data.m_acsSchema.Add(_T("")); m_Data.m_awCompType.Add(OT_VIEWTABLE); // unresolved view component } else { while (iret == RES_SUCCESS) { m_Data.m_acsViewComponents.Add((LPCTSTR)buf); m_Data.m_acsSchema.Add((LPCTSTR)bufOwner); // Solve type on the fly int viewCompType; UCHAR resBuf[MAXOBJECTNAME]; UCHAR resBuf2[MAXOBJECTNAME]; UCHAR resBuf3[MAXOBJECTNAME]; LPUCHAR aparentsSolve[MAXPLEVEL]; aparentsSolve[0] = lpRecord->extra; // DBName aparentsSolve[1] = aparentsSolve[2] = NULL; int res = DOMGetObjectLimitedInfo(nNodeHandle, buf, bufOwner, OT_VIEWTABLE, 1, // level aparentsSolve, // parentstrings, TRUE, &viewCompType, resBuf, resBuf2, resBuf3); if (res != RES_SUCCESS) viewCompType = OT_VIEWTABLE; m_Data.m_awCompType.Add(viewCompType); // OT_TABLE or OT_VIEW, or OT_VIEWTABLE if error iret = DOMGetNextObject(buf, bufOwner, bufComplim); } } if (m_Data.m_acsViewComponents.GetUpperBound() == -1) { CString csNoViewComp; csNoViewComp.LoadString(IDS_VIEW_COMPONENTS);// = "< No View Components>"; m_Data.m_acsViewComponents.Add(csNoViewComp); m_Data.m_acsSchema.Add(_T("")); m_Data.m_awCompType.Add(OT_VIEWTABLE); // unresolved view component } // Get comment TCHAR *lpObjComment = NULL; LPOBJECTLIST lpObjCol = NULL; iret = VDBAGetCommentInfo ( (LPTSTR)(LPUCHAR)GetVirtNodeName(nNodeHandle), (LPTSTR)ViewParams.DBName, (LPTSTR)ViewParams.objectname, (LPTSTR)ViewParams.szSchema, &lpObjComment, lpObjCol); if (iret!=RES_SUCCESS) { CString csMsg; csMsg.LoadString(IDS_NOT_AVAILABLE); m_ctrlEditComment.SetWindowText(csMsg); m_Data.m_csComment = csMsg; } else if (lpObjComment) { m_ctrlEditComment.SetWindowText(lpObjComment); m_Data.m_csComment = lpObjComment; ESL_FreeMem(lpObjComment); } else { m_ctrlEditComment.SetWindowText(_T("")); m_Data.m_csComment.Empty(); } // // Refresh display // RefreshDisplay(); return 0L; }
LONG CuDlgDomPropTableGrantees::OnUpdateData (WPARAM wParam, LPARAM lParam) { // cast received parameters int nNodeHandle = (int)wParam; LPIPMUPDATEPARAMS pUps = (LPIPMUPDATEPARAMS)lParam; ASSERT (nNodeHandle != -1); ASSERT (pUps); // ignore selected actions on filters switch (pUps->nIpmHint) { case 0: case FILTER_DOM_SYSTEMOBJECTS: // can be $ingres //case FILTER_DOM_BASEOWNER: //case FILTER_DOM_OTHEROWNER: break; case FILTER_DOM_BKREFRESH: // eligible if UpdateType is compatible with DomGetFirst/Next object type, // or is ot_virtnode, which means refresh for all whatever the type is if (pUps->pSFilter->UpdateType != OT_VIRTNODE && pUps->pSFilter->UpdateType != OTLL_GRANTEE) return 0L; break; case FILTER_SETTING_CHANGE: VDBA_OnGeneralSettingChange(&m_cListCtrl); return 0L; default: return 0L; // nothing to change on the display } // Get info on the current item LPTREERECORD lpRecord = (LPTREERECORD)pUps->pStruct; ASSERT (lpRecord); ResetDisplay(); // // Get list of Grantees // m_Data.m_uaTableGrantees.RemoveAll(); int iret; LPUCHAR aparentsTemp[MAXPLEVEL]; UCHAR buf[MAXOBJECTNAME]; UCHAR bufOwner[MAXOBJECTNAME]; UCHAR bufComplim[MAXOBJECTNAME]; memset (&bufComplim, '\0', sizeof(bufComplim)); memset (&bufOwner, '\0', sizeof(bufOwner)); // prepare parenthood with schema where relevant aparentsTemp[0] = lpRecord->extra; // parent DB Name UCHAR bufParent1[MAXOBJECTNAME]; aparentsTemp[1] = bufParent1; switch (lpRecord->recType) { case OT_TABLE: case OTR_GRANTEE_SEL_TABLE: case OTR_GRANTEE_INS_TABLE: case OTR_GRANTEE_UPD_TABLE: case OTR_GRANTEE_DEL_TABLE: case OTR_GRANTEE_REF_TABLE: case OTR_GRANTEE_CPI_TABLE: case OTR_GRANTEE_CPF_TABLE: case OTR_GRANTEE_ALL_TABLE: case OTR_LOCATIONTABLE: case OT_REPLIC_REGTABLE: case OT_SCHEMAUSER_TABLE: case OTR_REPLIC_CDDS_TABLE: x_strcpy((char *)buf, (const char *)lpRecord->objName); break; case OT_STATIC_TABLEGRANTEES: x_strcpy((char *)buf, (const char *)lpRecord->extra2); break; default: ASSERT (FALSE); buf[0] = '\0'; } ASSERT (lpRecord->ownerName); StringWithOwner(buf, lpRecord->ownerName, aparentsTemp[1]); // schema.name aparentsTemp[2] = NULL; // loop on grants BOOL bError = FALSE; for (int index = 0; index < NBTBLGRANTEES; index++) { iret = DOMGetFirstObject(nNodeHandle, aGrantType[index], 2, // level, aparentsTemp, // Temp mandatory! pUps->pSFilter->bWithSystem, // bwithsystem NULL, // lpowner buf, bufOwner, bufComplim); if (iret != RES_SUCCESS && iret != RES_ENDOFDATA) { bError = TRUE; continue; } else { while (iret == RES_SUCCESS) { // received data: // - Grantee name in buf CuTableGrantee grantee((const char *)buf, // Grantee name (user/group/role) FALSE, // not special item aGrantType[index] // grant type ); // Solve type on the fly and SetGranteeType int granteeType; UCHAR resBuf[MAXOBJECTNAME]; UCHAR resBuf2[MAXOBJECTNAME]; UCHAR resBuf3[MAXOBJECTNAME]; int res = DOMGetObjectLimitedInfo(nNodeHandle, buf, bufOwner, OT_GRANTEE, 0, // level NULL, // parentstrings, TRUE, &granteeType, resBuf, resBuf2, resBuf3); if (res != RES_SUCCESS) grantee.SetGranteeType(OT_ERROR); else grantee.SetGranteeType(granteeType); CuMultFlag *pRefGrantee = m_Data.m_uaTableGrantees.Find(&grantee); if (pRefGrantee) m_Data.m_uaTableGrantees.Merge(pRefGrantee, &grantee); else m_Data.m_uaTableGrantees.Add(grantee); iret = DOMGetNextObject(buf, bufOwner, bufComplim); } } } // Manage error case if (bError) { /* "<Data Unavailable>" */ CuTableGrantee grantee1(VDBA_MfcResourceString (IDS_DATA_UNAVAILABLE), TRUE); m_Data.m_uaTableGrantees.Add(grantee1); } // Manage no grantee if (m_Data.m_uaTableGrantees.GetCount() == 0) { /* "<No Grantee>" */ CuTableGrantee grantee2(VDBA_MfcResourceString (IDS_E_NO_GRANTEE), TRUE); m_Data.m_uaTableGrantees.Add(grantee2); } ASSERT (m_Data.m_uaTableGrantees.GetCount() > 0 ); // Refresh display RefreshDisplay(); return 0L; }
LONG CuDlgReplicationServerPageStartupSetting::OnUpdateData (WPARAM wParam, LPARAM lParam) { int iret,ires,irestype, nNodeHdl = -1; UCHAR DBAUsernameOntarget[MAXOBJECTNAME]; UCHAR buf[EXTRADATASIZE]; UCHAR extradata[EXTRADATASIZE]; LPUCHAR parentstrings [MAXPLEVEL]; CString cDefNumSvr,cDefDbName,cLocal; CString strMsg,strMsg1; LPIPMUPDATEPARAMS pUps = (LPIPMUPDATEPARAMS)lParam; m_pSvrDta = (LPREPLICSERVERDATAMIN)pUps->pStruct; EnableButtons(); // // Specialize the OnUpdateData: if (!m_pSvrDta->m_bRefresh) return 0L; m_pSvrDta->m_bRefresh = FALSE; CdIpmDoc* pIpmDoc = NULL; CfIpmFrame* pIpmFrame = (CfIpmFrame*)GetParentFrame(); ASSERT(pIpmFrame); if (pIpmFrame) { pIpmDoc = pIpmFrame->GetIpmDoc(); ASSERT (pIpmDoc); } if (!pIpmDoc) return 0L; nNodeHdl = LIBMON_OpenNodeStruct (m_pSvrDta->LocalDBNode); if (nNodeHdl == -1) { strMsg.LoadString(IDS_MAX_NB_CONNECT); // _T("Maximum number of connections has been reached" strMsg1.LoadString (IDS_E_READ_FILE); // " - Cannot read file." strMsg += _T("\n") + strMsg1; MessageBox(strMsg ,NULL, MB_ICONHAND | MB_OK | MB_TASKMODAL); return 0L; } // Temporary for activate a session ires = DOMGetFirstObject (nNodeHdl, OT_DATABASE, 0, NULL, FALSE, NULL, buf, NULL, NULL); cDefDbName.Format(_T("%s::%s"), m_pSvrDta->LocalDBNode,m_pSvrDta->LocalDBName); // //Get DBA user name for this database parentstrings[0]=m_pSvrDta->LocalDBName; parentstrings[1]=NULL; memset (DBAUsernameOntarget,'\0',sizeof(DBAUsernameOntarget)); iret = DOMGetObjectLimitedInfo( nNodeHdl, parentstrings [0], (UCHAR *)"", OT_DATABASE, 0, parentstrings, TRUE, &irestype, buf, DBAUsernameOntarget, extradata ); if (iret != RES_SUCCESS) { LIBMON_CloseNodeStruct(nNodeHdl); //wsprintf((char *)buf,"DBA owner on database : %s not found. Read file aborted.",parentstrings[0]); strMsg.Format(IDS_F_DB_OWNER,parentstrings[0]); MessageBox(strMsg, NULL, MB_ICONEXCLAMATION | MB_OK | MB_TASKMODAL); return 0L; } LIBMON_CloseNodeStruct(nNodeHdl); m_csDBAOwner=DBAUsernameOntarget; cDefNumSvr.Format(_T("%d"),m_pSvrDta->serverno); if (m_csDBAOwner.IsEmpty() ||cDefNumSvr.IsEmpty()||cDefDbName.IsEmpty()) { return 0L; } Cleanup(); m_cListCtrl.DeleteAllItems(); CString csVnodeAndUsers; // Read default flags on "LocalDBNode (user:XXX)" csVnodeAndUsers.Format(_T("%s%s%s%s"), m_pSvrDta->LocalDBNode, LPUSERPREFIXINNODENAME, (LPCTSTR)m_csDBAOwner, LPUSERSUFFIXINNODENAME); nNodeHdl = LIBMON_OpenNodeStruct ((LPUCHAR)(LPCTSTR)csVnodeAndUsers); if (nNodeHdl == -1) { strMsg.LoadString (IDS_MAX_NB_CONNECT); // _T("Maximum number of connections has been reached" strMsg1.LoadString (IDS_E_READ_FILE); // " - Cannot read file." strMsg += _T("\n") + strMsg1; MessageBox(strMsg ,NULL, MB_ICONHAND | MB_OK | MB_TASKMODAL); return 0L; } memset (DBAUsernameOntarget,'\0',sizeof(DBAUsernameOntarget)); iret = DOMGetObjectLimitedInfo( nNodeHdl, parentstrings [0], (UCHAR *)"", OT_DATABASE, 0, parentstrings, TRUE, &irestype, buf, DBAUsernameOntarget, extradata ); if (iret != RES_SUCCESS) { LIBMON_CloseNodeStruct(nNodeHdl); //wsprintf((char *)buf,"DBA owner on database : %s not found. Read file aborted.",parentstrings[0]); strMsg.Format(IDS_F_DB_OWNER,parentstrings[0]); MessageBox(strMsg, NULL, MB_ICONEXCLAMATION | MB_OK | MB_TASKMODAL); return 0L; } m_FlagsList.DefineAllFlagsWithDefaultValues(nNodeHdl , cDefNumSvr, cDefDbName, m_csDBAOwner); LIBMON_CloseNodeStruct(nNodeHdl); // Read Runrepl.opt from "LocalDBNode (user:XXX)" or From "RunNode" if (lstrcmp((char *)m_pSvrDta->LocalDBNode,(char *)m_pSvrDta->RunNode) == 0) csVnodeAndUsers.Format(_T("%s%s%s%s"), m_pSvrDta->LocalDBNode, LPUSERPREFIXINNODENAME, (LPCTSTR)m_csDBAOwner, LPUSERSUFFIXINNODENAME); else csVnodeAndUsers = m_pSvrDta->RunNode; nNodeHdl = LIBMON_OpenNodeStruct ((LPUCHAR)(LPCTSTR)csVnodeAndUsers); if (nNodeHdl == -1) { strMsg.LoadString(IDS_MAX_NB_CONNECT); // _T("Maximum number of connections has been reached" strMsg1.LoadString (IDS_E_READ_FILE); // " - Cannot read file." strMsg += _T("\n") + strMsg1; MessageBox(strMsg ,NULL, MB_ICONHAND | MB_OK | MB_TASKMODAL); return 0L; } CWaitCursor hourglass; // Read file Runrepl.opt and fill m_FlagsList. iret = GetReplicServerParams ( pIpmDoc, m_pSvrDta, &m_FlagsList ); LIBMON_CloseNodeStruct (nNodeHdl); CaReplicationItem* pItem = NULL; while (!m_FlagsList.IsEmpty()) { pItem = m_FlagsList.RemoveHead(); if (pItem->IsDisplay()) AddItem (pItem); else delete pItem; } EnableButtons(); return 0L; }