/// <summary>
        /// Show or Hide this option in the given menu
        /// </summary>
        private void EnableDisableChildOption(TTaskList ATaskList, String AOptionName, Boolean AIsAllowed, XmlNode ANode)
        {
            while (ANode != null)
            {
                EnableDisableChildOption(ATaskList, AOptionName, AIsAllowed, ANode.FirstChild);

                if (ANode.Name == AOptionName)
                {
                    ATaskList.EnableDisableTaskItem(ANode, AIsAllowed);
                }

                ANode = ANode.NextSibling;
            }
        }
        private void UpdateSubsystemLinkStatus(int ALedgerNumber, TTaskList ATaskList, XmlNode ATaskListNode)
        {
            bool ServerCallSuccessful;
            ALedgerRow LedgerDR = null;

            if ((ATaskListNode != null) && (ATaskListNode.ParentNode != null)
                && (ATaskListNode.ParentNode.Name == "Finance"))
            {
                try
                {
                    LedgerDR =
                        ((ALedgerTable)TDataCache.TMFinance.GetCacheableFinanceTable(
                             TCacheableFinanceTablesEnum.LedgerDetails, ALedgerNumber))[0];
                }
                catch (ECachedDataTableLoadingRetryGotCancelledException Exc)
                {
                    TLogging.Log("Loading of Cacheable DataTable 'LedgerDetails' failed; the CLIENT NEEDS TO BE RESTARTED!  " +
                        "Details: " + Exc.ToString());

                    // RESTART CLIENT!
                    PetraClientShutdown.Shutdown.StopPetraClient(true, true, true, StrDataLoadingErrorMessage);
                }

                XmlNode TempNode = ATaskListNode.ParentNode.FirstChild;

                while (TempNode != null)
                {
                    ServerCallSuccessful = false;

                    Ict.Common.DB.TServerBusyHelper.CoordinatedAutoRetryCall("Finance Sub-system Activated inquiry", ref ServerCallSuccessful,
                        delegate
                        {
                            if (TempNode.Name == "GiftProcessing")
                            {
                                ATaskList.EnableDisableTaskItem(TempNode,
                                    TRemote.MFinance.Setup.WebConnectors.IsGiftProcessingSubsystemActivated(ALedgerNumber));
                            }
                            else if (TempNode.Name == "AccountsPayable")
                            {
                                ATaskList.EnableDisableTaskItem(TempNode,
                                    TRemote.MFinance.Setup.WebConnectors.IsAccountsPayableSubsystemActivated(ALedgerNumber));
                            }

                            ServerCallSuccessful = true;
                        });

                    if (!ServerCallSuccessful)
                    {
                        TLogging.Log("Inquiring of Finance Subsystems' Activated States failed; the CLIENT NEEDS TO BE RESTARTED!");
                        TServerBusyHelperGui.ShowLoadingOfDataGotCancelledDialog();

                        // RESTART CLIENT!
                        PetraClientShutdown.Shutdown.StopPetraClient(true, true, true, StrDataLoadingErrorMessage);

                        // ALL-IMPORTANT EXIT statement: without this, a number of OpenPetra Clients might get
                        // started from within this while loop!!!
                        Environment.Exit(0);
                    }

                    TempNode = TempNode.NextSibling;
                } // while

                EnableDisableChildOption(ATaskList, "SuspenseAccounts", LedgerDR.SuspenseAccountFlag, ATaskListNode.ParentNode);
            } // if
        }
        private void UpdateSubsystemLinkStatus(int ALedgerNumber, TTaskList ATaskList, XmlNode ATaskListNode)
        {
            if ((ATaskListNode != null) && (ATaskListNode.ParentNode != null)
                && (ATaskListNode.ParentNode.Name == "Finance"))
            {
                ALedgerRow ledger =
                    ((ALedgerTable)TDataCache.TMFinance.GetCacheableFinanceTable(
                         TCacheableFinanceTablesEnum.LedgerDetails, ALedgerNumber))[0];
                XmlNode TempNode = ATaskListNode.ParentNode.FirstChild;

                while (TempNode != null)
                {
                    if (TempNode.Name == "GiftProcessing")
                    {
                        ATaskList.EnableDisableTaskItem(TempNode,
                            TRemote.MFinance.Setup.WebConnectors.IsGiftProcessingSubsystemActivated(ALedgerNumber));
                    }
                    else if (TempNode.Name == "AccountsPayable")
                    {
                        ATaskList.EnableDisableTaskItem(TempNode,
                            TRemote.MFinance.Setup.WebConnectors.IsAccountsPayableSubsystemActivated(ALedgerNumber));
                    }

                    TempNode = TempNode.NextSibling;
                } // while

                EnableDisableChildOption(ATaskList, "SuspenseAccounts", ledger.SuspenseAccountFlag, ATaskListNode.ParentNode);
            } // if

        }