void SrcParmMethod(DataContractBuilderVar parmVar)
        {
            string mName = $"parm{AxHelper.UppercaseWords(parmVar.Name)}";

            CodeGenerate.SetMethodName(mName);

            CodeGenerate.AppendLine("[");
            CodeGenerate.IndentIncrease();
            CodeGenerate.ProcessLastSym(",");
            CodeGenerate.Append($"DataMemberAttribute(identifierStr({AxHelper.UppercaseWords(parmVar.Name)}))");
            if (!String.IsNullOrEmpty(parmVar.Label))
            {
                CodeGenerate.ProcessLastSym(",");
                CodeGenerate.Append($"SysOperationLabelAttribute(literalstr(\"{parmVar.Label}\"))");
            }
            if (!String.IsNullOrEmpty(parmVar.LabelHelp))
            {
                CodeGenerate.ProcessLastSym(",");
                CodeGenerate.Append($"SysOperationHelpTextAttribute(literalstr(\"{parmVar.LabelHelp}\"))");
            }
            if (!String.IsNullOrEmpty(parmVar.GroupName))
            {
                CodeGenerate.ProcessLastSym(",");
                CodeGenerate.Append($"SysOperationGroupMemberAttribute('{parmVar.GroupName}')");
            }
            if (parmVar.PositionInGroup > 0)
            {
                CodeGenerate.ProcessLastSym(",");
                CodeGenerate.Append($"SysOperationDisplayOrderAttribute('{parmVar.PositionInGroup.ToString()}')");
            }

            CodeGenerate.AppendLine("").IndentDecrease();
            CodeGenerate.AppendLine("]");

            CodeGenerate.AppendLine($"public {parmVar.Type} {mName}({parmVar.Type} _{parmVar.Name} = {parmVar.Name})");
            CodeGenerate.BeginBlock();
            CodeGenerate.AppendLine($"{parmVar.Name} = _{parmVar.Name};");
            CodeGenerate.AppendLine($"return {parmVar.Name};");
            CodeGenerate.EndBlock();
        }
        public override void InitFromSnippetsParms(SnippetsParms snippetsParms)
        {
            ClassName = snippetsParms.GetParmStr(ClassNameParm);
            GenerateReportController = snippetsParms.GetParmBool(GenerateReportControllerParm);
            GenerateReportDP         = snippetsParms.GetParmBool(GenerateReportDPParm);
            ReportDPTableName        = snippetsParms.GetParmStr(ReportDPTableNameParm);
            if (String.IsNullOrWhiteSpace(ReportDPTableName))
            {
                ReportDPTableName = "TableTemDB";
            }
            ReportDPTableVarName = AxHelper.GetVarNameFromType(ReportDPTableName);
            string baseStr = ClassName;

            if (ClassName.ToLower().EndsWith("contract"))
            {
                baseStr = ClassName.Substring(0, ClassName.Length - "contract".Length);
            }
            ClassNameDP         = $"{baseStr}DP";
            ClassNameController = $"{baseStr}Controller";

            List <List <string> > parmList = snippetsParms.GetParmListSeparated(ParametersParmName);

            FieldsList = new List <DataContractBuilderVar>();
            GroupsList = new List <DataContractBuilderVar>();
            int groupNum = 0;

            IsAnyMandatory = false;

            Dictionary <string, int> groutPosDict = new Dictionary <string, int>();

            foreach (List <string> subList in parmList)
            {
                DataContractBuilderVar builderVar = new DataContractBuilderVar();

                string item = subList[0];
                if (item[item.Length - 1] == MandatoryPropertySym)//check mandatory
                {
                    builderVar.IsMandatory = true;
                    builderVar.Type        = item.Remove(item.Length - 1).Trim();
                }
                else
                {
                    builderVar.IsMandatory = false;
                    builderVar.Type        = item;
                }

                if (String.IsNullOrEmpty(builderVar.Type))
                {
                    throw new Exception("Type should be specified");
                }

                if (subList.Count > 1 && !String.IsNullOrWhiteSpace(subList[1]))  //check var name
                {
                    builderVar.Name = subList[1];
                }
                else
                {
                    builderVar.Name = AxHelper.GetVarNameFromType(builderVar.Type);
                }
                if (subList.Count > 2 && !String.IsNullOrWhiteSpace(subList[2]))
                {
                    builderVar.Label = subList[2];
                }
                if (subList.Count > 3 && !String.IsNullOrWhiteSpace(subList[3]))
                {
                    builderVar.LabelHelp = subList[3];
                }
                if (subList.Count > 4 && !String.IsNullOrWhiteSpace(subList[4]))
                {
                    builderVar.GroupName = subList[4];
                }
                if (subList.Count > 5 && !String.IsNullOrWhiteSpace(subList[5]))
                {
                    builderVar.GroupLabel = subList[5];
                }

                //calculate
                if (!groutPosDict.ContainsKey(builderVar.GroupName))
                {
                    groutPosDict.Add(builderVar.GroupName, 0);
                    if (!String.IsNullOrWhiteSpace(builderVar.GroupName))
                    {
                        groupNum++;
                        var varGr = new DataContractBuilderVar
                        {
                            GroupName       = builderVar.GroupName,
                            GroupLabel      = builderVar.GroupLabel,
                            PositionInGroup = groupNum
                        };
                        GroupsList.Add(varGr);
                    }
                }
                groutPosDict[builderVar.GroupName]++;
                if (builderVar.IsMandatory)
                {
                    IsAnyMandatory = true;
                }

                builderVar.PositionInGroup = groutPosDict[builderVar.GroupName];

                FieldsList.Add(builderVar);
            }
        }