Beispiel #1
0
        /// <summary>
        /// part of the buildXML which deals with the command only - used for command serialization unit test
        /// </summary>
        /// <param name="message"></param>
        /// <param name="execStackExists"></param>
        /// <returns></returns>
        internal void BuildXMLInternal(StringBuilder message, bool execStackExists)
        {
            bool hasChildElements = false;

            message.Append(XMLConstants.START_TAG + ConstInterface.MG_TAG_COMMAND);
            message.Append(" " + XMLConstants.MG_ATTR_TYPE + "=\"");
            switch (Type)
            {
            case ClientCommandType.VerifyCache:
                message.Append(ConstInterface.MG_ATTR_VAL_VERIFY_CACHE);
                break;

            case ClientCommandType.Event:
                message.Append(ConstInterface.MG_ATTR_VAL_EVENT);
                break;

            case ClientCommandType.Recompute:
                message.Append(ConstInterface.MG_ATTR_VAL_RECOMP);
                break;

            case ClientCommandType.Transaction:
                message.Append(ConstInterface.MG_ATTR_VAL_TRANS);
                break;

            case ClientCommandType.Unload:
                message.Append(ConstInterface.MG_ATTR_VAL_UNLOAD);
                break;

            case ClientCommandType.Hibernate:
                message.Append(ConstInterface.MG_ATTR_VAL_HIBERNATE);
                break;

            case ClientCommandType.Resume:
                message.Append(ConstInterface.MG_ATTR_VAL_RESUME);
                break;

            case ClientCommandType.ExecOper:
                message.Append(ConstInterface.MG_ATTR_VAL_EXEC_OPER);
                break;

            case ClientCommandType.Menu:
                message.Append(ConstInterface.MG_ATTR_VAL_MENU);
                break;

            case ClientCommandType.Evaluate:
                message.Append(ConstInterface.MG_ATTR_VAL_EVAL);
                break;

            case ClientCommandType.OpenURL:
                message.Append(ConstInterface.MG_ATTR_VAL_OPENURL);
                break;

            case ClientCommandType.Query:
                message.Append(ConstInterface.MG_ATTR_VAL_QUERY);
                break;

            case ClientCommandType.Expand:
                message.Append(ConstInterface.MG_ATTR_VAL_EXPAND);
                break;

            case ClientCommandType.IniputForceWrite:
                message.Append(ConstInterface.MG_ATTR_VAL_INIPUT_FORCE_WRITE);
                break;

            default:
                Logger.Instance.WriteErrorToLog("in Command.buildXML() no such type: " + Type);
                break;
            }

            message.Append("\"");

            if (TaskTag != null && !execStackExists)
            {
                // QCR #980454 - the task id may change during the task's lifetime, so taskId might
                // be holding the old one - find the task and refetch its current ID.
                String id = MGDataTable.Instance.getTaskIdById(TaskTag);

                message.Append(" " + XMLConstants.MG_ATTR_TASKID + "=\"" + id + "\"");
            }
            if (_oper != 0)
            {
                message.Append(" " + ConstInterface.MG_ATTR_OPER + "=\"" + _oper + "\"");
            }
            if (_fldId != -1)
            {
                message.Append(" " + ConstInterface.MG_ATTR_FIELDID + "=\"" + _fldId + "\"");
            }
            if (_ignoreSubformRecompute)
            {
                message.Append(" " + ConstInterface.MG_ATTR_IGNORE_SUBFORM_RECOMPUTE + "=\"" + 1 + "\"");
            }
            if (_handlerId != null && !execStackExists)
            {
                message.Append(" " + ConstInterface.MG_ATTR_HANDLERID + "=\"" + _handlerId + "\"");
            }
            if (MagicEvent != 0)
            {
                message.Append(" " + ConstInterface.MG_ATTR_MAGICEVENT + "=\"" + MagicEvent + "\"");
            }
            if (rollbackType != RollbackEventCommand.RollbackType.NONE)
            {
                message.Append(" " + ConstInterface.MG_ATTR_ROLLBACK_TYPE + "=\"" + (char)rollbackType + "\"");
            }
            if (_exitByMenu)
            {
                message.Append(" " + ConstInterface.MG_ATTR_EXIT_BY_MENU + "=\"" + "=\"1\"");
            }
            if (_operIdx > Int32.MinValue && !execStackExists)
            {
                message.Append(" " + ConstInterface.MG_ATTR_OPER_IDX + "=\"" + _operIdx + "\"");
            }
            if (_ditIdx > Int32.MinValue)
            {
                message.Append(" " + XMLConstants.MG_ATTR_DITIDX + "=\"" + _ditIdx + "\"");
            }
            if (_val != null)
            {
                message.Append(" " + XMLConstants.MG_ATTR_VALUE + "=\"" + XmlParser.escape(_val) + "\"");
            }
            if (_expIdx > Int32.MinValue)
            {
                message.Append(" " + ConstInterface.MG_ATTR_EXP_IDX + "=\"" + _expIdx + "\"");
            }
            if (_expType != StorageAttribute.NONE)
            {
                String maxDigits = "";
                if (_lengthExpVal > 0)
                {
                    maxDigits += _lengthExpVal;
                }

                message.Append(" " + ConstInterface.MG_ATTR_EXP_TYPE + "=\"" + (char)_expType + maxDigits + "\"");
            }
            if (!_reversibleExit)
            {
                message.Append(" " + ConstInterface.MG_ATTR_REVERSIBLE + "=\"0\"");
            }

            if (_varList != null)
            {
                message.Append(" " + ConstInterface.MG_ATTR_ARGLIST + "=\"");
                _varList.buildXML(message);
                message.Append("\"");
            }

            if (_generation != null)
            {
                message.Append(" " + ConstInterface.MG_ATTR_GENERATION + "=\"" + _generation + "\"");
            }

            if (_taskVarList != null)
            {
                message.Append(" " + ConstInterface.MG_ATTR_TASKVARLIST + "=\"" + _taskVarList + "\"");
            }

            if (Obj != null)
            {
                message.Append(" " + ConstInterface.MG_ATTR_OBJECT + "=\"" + Obj + "\"");
            }

            if (_mprgCreator != null)
            {
                message.Append(" " + ConstInterface.MG_ATTR_MPRG_SOURCE + "=\"" + _mprgCreator.getTaskTag() + "\"");
            }

            if (_level != 0)
            {
                message.Append(" " + ConstInterface.MG_ATTR_TRANS_LEVEL + "=\"" + _level + "\"");
            }

            if (_key != null)
            {
                message.Append(" " + ConstInterface.MG_ATTR_KEY + "=\"" + _key + "\"");
            }

            if (RefreshMode != 0)
            {
                message.Append(" " + ConstInterface.MG_ATTR_REALREFRESH + "=\"" + (int)RefreshMode + "\"");
            }
            //this tag value alway when sent equals to 1

            if (_keepUserSort)
            {
                message.Append(" " + ConstInterface.MG_ATTR_KEEP_USER_SORT + "=\"1\"");
            }

            if (SubformTaskTag != null)
            {
                message.Append(" " + ConstInterface.MG_ATTR_SUBFORM_TASK + "=\"" + SubformTaskTag + "\"");
            }
            //this tag value always when sent does not equal to 0

            if (_menuUid > Int32.MinValue)
            {
                message.Append(" " + ConstInterface.MG_ATTR_MNUUID + "=\"" + _menuUid + "\"");
            }

            if (MenuComp > Int32.MinValue)
            {
                message.Append(" " + ConstInterface.MG_ATTR_MNUCOMP + "=\"" + MenuComp + "\"");
            }

            if (_closeSubformOnly)
            {
                message.Append(" " + ConstInterface.MG_ATTR_CLOSE_SUBFORM_ONLY + "=\"1\"");
            }

            if (_checkOnly)
            {
                message.Append(" " + ConstInterface.MG_ATTR_CHECK_ONLY + "=\"1\"");
            }

            if (_treePath != null)
            {
                message.Append(" " + ConstInterface.MG_ATTR_PATH + "=\"" + _treePath + "\"");
            }

            if (_treeValues != null)
            {
                message.Append(" " + ConstInterface.MG_ATTR_VALUES + "=\"" + _treeValues + "\"");
            }

            if (_treeIsNulls != null)
            {
                message.Append(" " + ConstInterface.MG_ATTR_TREE_IS_NULLS + "=\"" + _treeIsNulls + "\"");
            }

            if (_direction != -1)
            {
                message.Append(" " + ConstInterface.MG_ATTR_DIRECTION + "=\"" + _direction + "\"");
            }

            if (_incrmentalSearchString != null)
            {
                message.Append(" " + ConstInterface.MG_ATTR_SEARCH_STR + "=\"" + _incrmentalSearchString + "\"");
            }

            if (_resetIncrementalSearch)
            {
                message.Append(" " + ConstInterface.MG_ATTR_RESET_SEARCH + "=\"1\"");
            }

            if (_accessedCacheFiles != null && _accessedCacheFiles.Count > 0)
            {
                hasChildElements = true;
                message.Append(" " + ConstInterface.MG_ATTR_SHOULD_PRE_PROCESS + "=\"Y\"");
                message.Append(XMLConstants.TAG_CLOSE + "\n");

                foreach (KeyValuePair <string, string> cachedFileInfo in _accessedCacheFiles)
                {
                    message.Append(XMLConstants.XML_TAB + XMLConstants.XML_TAB + XMLConstants.TAG_OPEN);
                    message.Append(ConstInterface.MG_TAG_CACHE_FILE_INFO + " ");
                    message.Append(ConstInterface.MG_ATTR_SERVER_PATH + "=\"" + cachedFileInfo.Key + "\" ");
                    message.Append(ConstInterface.MG_ATTR_TIMESTAMP + "=\"" + cachedFileInfo.Value + "\"");
                    message.Append(XMLConstants.TAG_TERM + "\n");
                }

                message.Append(XMLConstants.XML_TAB + XMLConstants.END_TAG + ConstInterface.MG_TAG_COMMAND);
            }

            switch (Type)
            {
            case ClientCommandType.Query:
                message.Append(" " + ConstInterface.MG_ATTR_VAL_QUERY_TYPE + "=\"");
                switch (_queryType)
                {
                case QueryType.GLOBAL_PARAMS:
                    message.Append(ConstInterface.MG_ATTR_VAL_QUERY_GLOBAL_PARAMS);
                    break;

                default:
                    message.Append(ConstInterface.MG_ATTR_VAL_QUERY_CACHED_FILE);
                    message.Append("\" ");
                    message.Append(ConstInterface.MG_ATTR_FILE_PATH);
                    message.Append("=\"");
                    message.Append(_text);
                    break;
                }

                message.Append("\"");
                break;

            case ClientCommandType.IniputForceWrite:
                _text = XmlParser.escape(_text);
                message.Append(" " + ConstInterface.MG_ATTR_VAL_INIPUT_PARAM + "=\"" + _text + "\"");
                break;

            default:
                try
                {
                    MGData currMGData      = MGDataTable.Instance.getCurrMGData();
                    int    length          = currMGData.getTasksCount();
                    bool   titleExist      = false;
                    Task   currFocusedTask = ClientManager.Instance.getLastFocusedTask();

                    for (int i = 0;
                         i < length;
                         i++)
                    {
                        Task task = currMGData.getTask(i);
                        var  ctrl = (MgControl)task.getLastParkedCtrl();
                        if (ctrl != null && task.KnownToServer && !task.IsOffline)
                        {
                            if (!titleExist)
                            {
                                message.Append(" " + ConstInterface.MG_ATTR_FOCUSLIST + "=\"");
                                titleExist = true;
                            }
                            else
                            {
                                message.Append('$');
                            }
                            message.Append(task.getTaskTag() + ",");
                            message.Append((task.getLastParkedCtrl()).getDitIdx());
                        }
                    }

                    if (titleExist)
                    {
                        message.Append("\"");
                    }

                    if (currFocusedTask != null && !currFocusedTask.IsOffline)
                    {
                        message.Append(" " + ConstInterface.MG_ATTR_FOCUSTASK + "=\"" + currFocusedTask.getTaskTag() + "\"");
                    }
                }
                catch (Exception ex)
                {
                    Logger.Instance.WriteErrorToLog(ex);
                }
                break;
            }

            if (hasChildElements)
            {
                message.Append(XMLConstants.TAG_CLOSE);
            }
            else
            {
                message.Append(XMLConstants.TAG_TERM);
            }
        }