//private ParametrizedAction booleanValue = new ParametrizedAction();
 public static void parametrizedAction_Execute(object sender, ParametrizedActionExecuteEventArgs e)
 {
     if (((ActionBase)sender).Controller is ActionBaseController)
     {
         ((ActionBaseController)((ActionBase)sender).Controller).LogTrace(e.Action, e.ParameterCurrentValue);
     }
 }
 private void CountAction_Execute(object sender, ParametrizedActionExecuteEventArgs e)
 {
     ListView list = (ListView)View;
     int count = Convert.ToInt32(e.ParameterCurrentValue);
     int oldCount = list.CollectionSource.List.Count;
     BeginUpdate();
     if (count >= 0 && count > oldCount)
     {
         for (int i = 0; i < count - oldCount; i++)
         {
             ReportStyleGroup group = new ReportStyleGroup();
             group.CaptionFont = new Font("Times New Roman", 12, FontStyle.Bold);
             group.Left = 0;
             list.CollectionSource.Add(group);
         }
     }
     else if (count >= 0 && count < oldCount)
     {
         for (int i = 0; i < oldCount - count; i++)
         {
             object group = list.CollectionSource.List[oldCount - i - 1];
             list.CollectionSource.Remove(group);
         }
     }
     EndUpdate();
     list.CollectionSource.ResetCollection();
 }
		private void passStringAction_Execute(object sender, ParametrizedActionExecuteEventArgs e) {
			IWorkflowDefinition definition = View.ObjectSpace.FindObject<XpoWorkflowDefinition>(CriteriaOperator.Parse("Name = 'Custom start workflow'"));
			if(definition != null) {
				IPassStringData serverWorkflow = ChannelFactory<IPassStringData>.CreateChannel(new BasicHttpBinding(), new EndpointAddress(WorkflowServerAddress + definition.GetUniqueId()));
				serverWorkflow.PassStringData((string)e.ParameterCurrentValue);
			}
		}
        private void searchOfficeUserAction_Execute(object sender, ParametrizedActionExecuteEventArgs e)
        {
            string paramValue        = e.ParameterCurrentValue as string;
            AuthenUserEofficebyID ws = new AuthenUserEofficebyID();
            DataUser user            = new DataUser();

            user = ws.AuthenUser("InternetUser", "InternetPass", paramValue);

            if (user is null || !user.Authen)
            {
                throw new UserFriendlyException("ลสก. ไม่ถูกต้อง");
            }

            ((Employee)View.CurrentObject).UserName  = user.EMAIL.Substring(0, 1) + user.EMAIL.Split('.')[1].Substring(0, 1) + user.ID;
            ((Employee)View.CurrentObject).Title     = user.TITLE;
            ((Employee)View.CurrentObject).FirstName = user.FNAME;
            ((Employee)View.CurrentObject).LastName  = user.LNAME;

            //IObjectSpace objectSpace = Application.CreateObjectSpace();
            var obj = ObjectSpace.FindObject <Office>(new BinaryOperator("OfficeId", user.OFFICEID));

            ((Employee)View.CurrentObject).Office   = obj;
            ((Employee)View.CurrentObject).Position = user.POSITION_M;
            ((Employee)View.CurrentObject).Email    = user.EMAIL;
        }
示例#5
0
        private void Search_Execute(object sender, ParametrizedActionExecuteEventArgs e)
        {
            var os = this.Application.CreateObjectSpace();

            objects.Clear();
            foreach (Type type in SearchableTypes)
            {
                SuperSearchAttribute attrs = (SuperSearchAttribute)type.GetCustomAttributes(true).Cast <Attribute>().Where(att => att.GetType().IsAssignableFrom(typeof(SuperSearchAttribute))).FirstOrDefault();

                CriteriaOperator criteria          = GetCaseInsensitiveCriteria(e.ParameterCurrentValue, type);
                string[]         DisplayProperties = attrs.DisplayProperties.Split(';');
                string           QueryColumns      = this.Application.Model.BOModel.GetClass(type).KeyProperty + ";" + attrs.DisplayProperties;
                var    Dv          = os.CreateDataView(type, QueryColumns, criteria, null);
                string FullDisplay = string.Empty;
                for (int i = 0; i < Dv.Count; i++)
                {
                    var SearchResult = this.View.ObjectSpace.CreateObject <SearchResult>();
                    SearchResult.ObjectDisplayName = type.Name;
                    XafDataViewRecord xafDataViewRecord = (XafDataViewRecord)Dv[i];
                    SearchResult.ObjectType = type;
                    SearchResult.ObjectKey  = xafDataViewRecord[0].ToString();
                    foreach (var displayProperty in DisplayProperties)
                    {
                        FullDisplay = FullDisplay + " " + xafDataViewRecord[displayProperty]?.ToString();
                    }
                    SearchResult.Display = FullDisplay;
                    objects.Add(SearchResult);
                }
            }

            this.View.ObjectSpace.Refresh();
        }
示例#6
0
 void FullTextFilterAction_Execute(object sender, ParametrizedActionExecuteEventArgs e)
 {
     if (((IModelListViewPreventDataLoading)View.Model).PreventDataLoadingWhenFilterByText)
     {
         DefaultLoading();
     }
 }
 private void FullTextFilterAction_Execute(object sender, ParametrizedActionExecuteEventArgs e)
 {
     //we locate filter with the key FilterController.FullTextSearchCriteriaName then we convert it to case insensitive
     if (!string.IsNullOrEmpty(e.ParameterCurrentValue as string) && View.CollectionSource.Criteria.ContainsKey(FilterController.FullTextSearchCriteriaName))
     {
         View.CollectionSource.Criteria[FilterController.FullTextSearchCriteriaName] = GetCaseInsensitiveCriteria(e.ParameterCurrentValue, View.CollectionSource.Criteria[FilterController.FullTextSearchCriteriaName]);
     }
 }
示例#8
0
        /// <summary>
        /// Метод поиска товара по дате
        /// </summary>
        /// <param name="e">Аргументы поступающие в параметризированный action, включая дату</param>
        private void CargoHistoryAction_Execute(object sender, ParametrizedActionExecuteEventArgs e)
        {
            var paramValue = e.ParameterCurrentValue;

            ((ListView)View).CollectionSource.Criteria["Filter2"] = CriteriaOperator.Parse("([Create_Cargo] <= ? And [Delete_Cargo] >= ? )" +
                                                                                           "Or ([Create_Cargo] <= ? And [Delete_Cargo] Is Null)",
                                                                                           paramValue, paramValue, paramValue);
        }
示例#9
0
 private void SearchTextActionExecute(object sender, ParametrizedActionExecuteEventArgs e)
 {
     if (filterController != null && e.ParameterCurrentValue != null)
     {
         filterController.FullTextSearch(e.ParameterCurrentValue.ToString());
         UpdateActionState();
     }
 }
 private void stopWorkflowAction_Execute(object sender, ParametrizedActionExecuteEventArgs e)
 {
     if (StartStopClient != null)
     {
         string result = StartStopClient.Stop((string)e.ParameterCurrentValue);
         XtraMessageBox.Show(result);
     }
 }
示例#11
0
        void findNodeAction_Execute(object sender, ParametrizedActionExecuteEventArgs e)
        {
            string searchText = e.ParameterCurrentValue as String;

            if (!String.IsNullOrEmpty(searchText))
            {
                treeList.ExpandAll();
            }
        }
 private void FindBySubjectAction_Execute(object sender, ParametrizedActionExecuteEventArgs e)
 {
     IObjectSpace objectSpace = Application.CreateObjectSpace();
     string paramValue = e.ParameterCurrentValue as string;
     object obj = objectSpace.FindObject(((ListView)View).ObjectTypeInfo.Type,
         CriteriaOperator.Parse(string.Format("Contains([Subject], '{0}')", paramValue)));
     if(obj != null) {
         e.ShowViewParameters.CreatedView = Application.CreateDetailView(objectSpace, obj);
     }
 }
示例#13
0
        private void OpenDetailViewAction_Execute(object sender, ParametrizedActionExecuteEventArgs e)
        {
            IObjectSpace objectSpace = Application.CreateObjectSpace(typeof(Contact));
            Contact      contact     = objectSpace.FindObject <Contact>(new BinaryOperator("Oid", e.ParameterCurrentValue.ToString()));

            if (contact != null)
            {
                e.ShowViewParameters.CreatedView = Application.CreateDetailView(objectSpace, contact, View);
            }
        }
 void FullTextFilterAction_Execute(object sender, ParametrizedActionExecuteEventArgs e)
 {
     if (string.IsNullOrEmpty(e.ParameterCurrentValue as string))
     {
         View.CollectionSource.Criteria[LoadWhenFiltered] = GetDoNotLoadWhenFilterExistsCriteria();
     }
     else
     {
         ClearDoNotLoadWhenFilterExistsCriteria();
     }
 }
        private void OpenDetailViewAction_Execute(object sender, ParametrizedActionExecuteEventArgs e)
        {
            Guid.TryParse((string)e.ParameterCurrentValue, out var oid);
            IObjectSpace objectSpace = Application.CreateObjectSpace(typeof(Contact));
            Contact      contact     = objectSpace.FindObject <Contact>(new BinaryOperator(nameof(Contact.Oid), oid));

            if (contact != null)
            {
                e.ShowViewParameters.CreatedView = Application.CreateDetailView(objectSpace, contact, View);
            }
        }
示例#16
0
        private void passStringAction_Execute(object sender, ParametrizedActionExecuteEventArgs e)
        {
            IWorkflowDefinition definition = View.ObjectSpace.FindObject <EFWorkflowDefinition>(CriteriaOperator.Parse("Name = 'Custom start workflow'"));

            if (definition != null)
            {
                IPassStringData serverWorkflow = ChannelFactory <IPassStringData> .CreateChannel(new BasicHttpBinding(), new EndpointAddress(WorkflowServerAddress + definition.GetUniqueId()));

                serverWorkflow.PassStringData((string)e.ParameterCurrentValue);
            }
        }
        void findNodeAction_Execute(object sender, ParametrizedActionExecuteEventArgs e)
        {
            string value = e.ParameterCurrentValue as String;

            if (!String.IsNullOrEmpty(value))
            {
                treeList.ExpandAll();
            }
            treeList.ApplyFindFilter(value);
            // Alternatively, use the TreeList.ActiveFilterCriteria property
            // treeList.ActiveFilterCriteria = new DevExpress.Data.Filtering.FunctionOperator(FunctionOperatorType.Contains, new OperandProperty("Name"), new OperandValue(value));
        }
示例#18
0
 private void FindBySubjectAction_Execute(object sender, ParametrizedActionExecuteEventArgs e) {
     IObjectSpace objectSpace = Application.CreateObjectSpace();
     string paramValue = e.ParameterCurrentValue as string;
     if(!string.IsNullOrEmpty(paramValue)) {
         paramValue = "%" + paramValue + "%";
     }
     object obj = objectSpace.FindObject(((ListView)View).ObjectTypeInfo.Type,
         new BinaryOperator("Subject", paramValue, BinaryOperatorType.Like));
     if(obj != null) {
         e.ShowViewParameters.CreatedView = Application.CreateDetailView(objectSpace, obj);
     }
 }
示例#19
0
 private void exportToTxt_Execute(object sender, ParametrizedActionExecuteEventArgs e)
 {
     //diagnostic info for:
     //ReportV2Demo_Web_ContacttWithSubMappedToViewData (Elapsed:00:00:31.1559236) Application:ReportV2Demo_Web MachineName:VICTIMTARGET IP:172.22.2.17
     //Caught the 'System.IO.FileNotFoundException' exception. Exeption text: 'Could not find file 'c:\Projects\13.2\Xaf_FT_Demos_ReportsV2\Scripts\ContactReportWithSubreportMappedToViewDataSource.txt'.', stack trace: ' at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
     // at System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, Int32 rights, Boolean useRights, FileShare share, Int32 bufferSize, FileOptions options, SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy, Boolean useLongPath, Boolean checkHost)
     // at System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access)
     // at DevExpress.EasyTest.Framework.Commands.CompareFilesCommand.FileCompare(String file1, String file2)
     DevExpress.Persistent.Base.Tracing.Tracer.LogText("Saving report '" + shownReport.ToString() + "' to file '" + (string)e.ParameterCurrentValue + "'");
     DevExpress.Persistent.Base.Tracing.Tracer.LogText("Environment.CurrentDirectory: '" + Environment.CurrentDirectory);
     shownReport.ExportToText((string)e.ParameterCurrentValue);
 }
示例#20
0
 private void ParametrizedActionOnExecute(object sender, ParametrizedActionExecuteEventArgs parametrizedActionExecuteEventArgs)
 {
     if (parametrizedActionExecuteEventArgs.ParameterCurrentValue.ToString() == "CheckSameCaptionColumns")
     {
         var columnWrappers = ((ASPxGridListEditor)View.Editor).Columns.Where(wrapper => wrapper.Caption == "Reference Name");
         ((ParametrizedAction)sender).Value = null;
         foreach (var columnWrapper in columnWrappers)
         {
             ((ParametrizedAction)sender).Value += columnWrapper.PropertyName + ",";
         }
         ((ParametrizedAction)sender).Value = ((ParametrizedAction)sender).Value.ToString().Trim(',');
     }
 }
示例#21
0
        private void FindBySubjectAction_Execute(object sender, ParametrizedActionExecuteEventArgs e)
        {
            IObjectSpace objectSpace = Application.CreateObjectSpace();
            string       paramValue  = e.ParameterCurrentValue as string;

            if (!string.IsNullOrEmpty(paramValue))
            {
                paramValue = "%" + paramValue + "%";
            }
            object obj = objectSpace.FindObject(((ListView)View).ObjectTypeInfo.Type,
                                                new BinaryOperator("Subject", paramValue, BinaryOperatorType.Like));

            if (obj != null)
            {
                e.ShowViewParameters.CreatedView = Application.CreateDetailView(objectSpace, obj);
            }
        }
        private void paGenerate_Execute(object sender, ParametrizedActionExecuteEventArgs e)
        {
            var eParameterCurrentValue = e.ParameterCurrentValue.ToString();
            int year = int.Parse(eParameterCurrentValue);

            var firstDay = new DateTime(year, 1, 1);

            for (int i = 0; i < 365; i++)
            {
                var calendarDay = ObjectSpace.CreateObject <CalendarDay>();
                var date        = firstDay.AddDays(i);
                calendarDay.Date      = date;
                calendarDay.Day       = date.DayOfYear;
                calendarDay.DayOfWeek = date.DayOfWeek;
                calendarDay.Year      = date.Year;
                calendarDay.Weekend   = (date.DayOfWeek == DayOfWeek.Saturday || date.DayOfWeek == DayOfWeek.Sunday);
            }

            ObjectSpace.CommitChanges();
        }
        private void FullTextFilterAction_Execute(object sender, ParametrizedActionExecuteEventArgs e)
        {
            if (scaPaymentFilter.SelectedItem != null)
            {
                switch (scaPaymentFilter.SelectedItem.Data.ToString())
                {
                case "1":
                    ((ListView)View).CollectionSource.SetCriteria("Custom", $"dt_PaidDate Is Null");
                    break;

                default:
                    ((ListView)View).CollectionSource.SetCriteria("Custom", null);
                    break;
                }
            }
            else
            {
                ((ListView)View).CollectionSource.SetCriteria("Custom", null);
            }
        }
示例#24
0
        private void FullTextFilterAction_Execute(object sender, ParametrizedActionExecuteEventArgs e)
        {
            if (scaFilter.SelectedItem != null)
            {
                switch (scaFilter.SelectedItem.Data.ToString())
                {
                case "T":
                    ((ListView)View).CollectionSource.SetCriteria("Custom", ((SysUser)SecuritySystem.CurrentUser).IsUserInRole("TMK") ? _sTMKCondition : _sCustomCondition);
                    break;

                default:
                    ((ListView)View).CollectionSource.SetCriteria("Custom", null);
                    break;
                }
            }
            else
            {
                ((ListView)View).CollectionSource.SetCriteria("Custom", null);
            }
        }
示例#25
0
        //protected override void OnFrameAssigned() {
        //    DefaultBarActionItemsFactory.CustomizeActionControl += new EventHandler<CustomizeActionControlEventArgs<ActionBase>>(DefaultBarActionItemsFactory_CustomizeActionControl);
        //}

        //void DefaultBarActionItemsFactory_CustomizeActionControl(object sender, CustomizeActionControlEventArgs<ActionBase> e) {
        //    if (e.Action.Id == CourseDateAction.Id) {
        //        BarEditItem barItem = (BarEditItem)e.ActionControl.Control;
        //        RepositoryItemDateEdit repositoryItem = (RepositoryItemDateEdit)barItem.Edit;
        //        repositoryItem.Mask.UseMaskAsDisplayFormat = true;
        //        repositoryItem.Mask.EditMask = "dd.MM.yyyy";
        //    }
        //}


        private void CourseDateAction_Execute(object sender, ParametrizedActionExecuteEventArgs e)
        {
            if (View == null || View.CurrentObject == null)
            {
                return;
            }
            csCNMCourseEditor current = View.CurrentObject as csCNMCourseEditor;

            if (current == null)
            {
                return;
            }

            if (e.ParameterCurrentValue != null && e.ParameterCurrentValue.ToString() != string.Empty)
            {
                current.CourseDate = Convert.ToDateTime(e.ParameterCurrentValue);
                current.FillValutaCourceCollection(current.CourseDate);
                ObjectSpace.CommitChanges();
            }
        }
        private void FullTextFilterAction_Execute(object sender, ParametrizedActionExecuteEventArgs e)
        {
            if (scaFilter.SelectedItem != null)
            {
                switch (scaFilter.SelectedItem.Data.ToString())
                {
                case "1":
                    ((ListView)View).CollectionSource.SetCriteria("Custom", $"LastPatentProgress Is Null Or LastPatentProgress.n_Item != {Convert.ToInt32(EnumsAll.PatentProgressItem.已递交)} And LastPatentProgress.n_Item != {Convert.ToInt32(EnumsAll.PatentProgressItem.指示放弃)}");
                    break;

                default:
                    ((ListView)View).CollectionSource.SetCriteria("Custom", null);
                    break;
                }
            }
            else
            {
                ((ListView)View).CollectionSource.SetCriteria("Custom", null);
            }
        }
示例#27
0
        /// <summary>
        /// Метод поиска склада по имени
        /// </summary>
        /// <param name="e">Аргументы поступающие в параметризированный action, включая дату</param>
        private void FindFieldDataAction_Execute(object sender, ParametrizedActionExecuteEventArgs e)
        {
            try
            {
                IObjectSpace objectSpace = Application.CreateObjectSpace();
                string       paramValue  = e.ParameterCurrentValue as string;
                object       obj         = objectSpace.FindObject(((ListView)View).ObjectTypeInfo.Type,
                                                                  CriteriaOperator.Parse(string.Format("Contains([Name], '{0}')", paramValue)));

                if (obj != null)
                {
                    DetailView detailView = Application.CreateDetailView(objectSpace, obj);
                    detailView.ViewEditMode          = DevExpress.ExpressApp.Editors.ViewEditMode.Edit;
                    e.ShowViewParameters.CreatedView = detailView;
                }
            }
            catch (Exception ex)
            {
                Tracing.Tracer.LogText(ex.ToString() + "Action : Find Field Data");
            }
        }
示例#28
0
        private void ParametrizedAction_Execute(object sender, ParametrizedActionExecuteEventArgs e)
        {
            //IObjectSpace objectSpace = Application.CreateObjectSpace();
            string   parameter = e.ParameterCurrentValue as string;
            ListView view      = (ListView)View;

            if (!string.IsNullOrWhiteSpace(parameter))
            {
                view.CollectionSource.Criteria["filter"] = CriteriaOperator.Parse("[条形码]=? OR [京东码]=? OR [旧京东码]=?", parameter, parameter, parameter);
                view.CollectionSource.ResetCollection();
                if (view.CollectionSource.GetCount() != 0)
                {
                    IObjectSpace  rptObjectSpace = ReportDataProvider.ReportObjectSpaceProvider.CreateObjectSpace(typeof(ReportDataV2));
                    IReportDataV2 reportData     = rptObjectSpace.FindObject <ReportDataV2>(
                        new BinaryOperator("DisplayName", "入库标签"));
                    if (reportData == null)
                    {
                        throw new UserFriendlyException("Cannot find the '入库标签' report.");
                    }
                    else
                    {
                        PrintReport(reportData);
                    }
                }
            }
            else
            {
                view.CollectionSource.Criteria.Remove("filter");
                view.CollectionSource.ResetCollection();
            }
            //object obj = objectSpace.FindObject(((ListView)View).ObjectTypeInfo.Type, CriteriaOperator.Parse("[条形码]=? OR [京东码]=? OR [旧京东码]=?", parameter, parameter, parameter));
            //if (obj != null)
            //{
            //DetailView detailView = Application.CreateDetailView(objectSpace, obj);
            //detailView.ViewEditMode = ViewEditMode.Edit;
            //e.ShowViewParameters.CreatedView = detailView;

            //}
        }
示例#29
0
        private void GenerateData_Execute(object sender, ParametrizedActionExecuteEventArgs e)
        {
            var batches = ((int)e.ParameterCurrentValue / 100);

            for (int i = 0; i < batches; i++)
            {
                using (var os = Application.CreateObjectSpace(typeof(SlowOffer)))
                {
                    var testOrders = new Faker <TAggregate>()
                                     .CustomInstantiator((f) => os.CreateObject <TAggregate>())
                                     .RuleFor(o => o.Hours, f => f.Random.Number(1, 10000));

                    var faker = new Faker <TObject>()
                                .CustomInstantiator((f) => os.CreateObject <TObject>())
                                .RuleFor(o => o.Name, (f, p) => f.Name.FirstName())
                                .FinishWith((f, o) => o.AddRange(testOrders.Generate(1000).ToList()));

                    faker.Generate(100);
                    os.CommitChanges();
                }
            }
            ObjectSpace.Refresh();
        }
示例#30
0
        private void FullTextFilterAction_Execute(object sender, ParametrizedActionExecuteEventArgs e)
        {
            if (scaFilter.SelectedItem != null)
            {
                switch (scaFilter.SelectedItem.Data.ToString())
                {
                case "1":
                    View.CollectionSource.SetCriteria("Custom", $"IsNullOrEmpty(InvoiceNo) And NoNeedInvoice = False");
                    break;

                case "2":
                    View.CollectionSource.SetCriteria("Custom", $"IsNullOrEmpty(InternalNo)");
                    break;

                default:
                    View.CollectionSource.SetCriteria("Custom", null);
                    break;
                }
            }
            else
            {
                View.CollectionSource.SetCriteria("Custom", null);
            }
        }
        void focusNodeAction_Execute(object sender, ParametrizedActionExecuteEventArgs e)
        {
            string       textToSearch = e.ParameterCurrentValue as String;
            TreeListNode matchingNode = null;

            if (!String.IsNullOrEmpty(textToSearch))
            {
                matchingNode = treeList.FindNode(node => {
                    object currentObject            = node.Tag;
                    ITypeInfo currentObjectTypeInfo = XafTypesInfo.Instance.FindTypeInfo(currentObject.GetType());
                    string value = currentObjectTypeInfo.DefaultMember.GetValue(currentObject) as string;
                    if (value != null && value.ToLower().Contains(textToSearch.ToLower()))
                    {
                        return(true);
                    }
                    else
                    {
                        node.Expanded = true;
                        return(false);
                    }
                });
            }
            treeList.FocusedNode = matchingNode ?? treeList.Nodes.FirstNode;
        }
示例#32
0
 private void ParametrizedActionOnExecute(object sender, ParametrizedActionExecuteEventArgs parametrizedActionExecuteEventArgs){
     
 }
 private void parametrizedAction_Execute(object sender, ParametrizedActionExecuteEventArgs e)
 {
     LogTrace(string.Format("The 'ParametrizedAction' is executed with parameter '{0}' for the '{1}' object.", e.ParameterCurrentValue == null ? "Null" : e.ParameterCurrentValue.ToString(), currentObject.Name));
 }
示例#34
0
 private void actHistDateFilter_Execute(object sender, ParametrizedActionExecuteEventArgs e)
 {
     ExecuteDateFilter();
 }
		private void stopWorkflowAction_Execute(object sender, ParametrizedActionExecuteEventArgs e) {
			if(StartStopClient != null) {
				string result = StartStopClient.Stop((string)e.ParameterCurrentValue);
				XtraMessageBox.Show(result);
			}
		}
 private void DateActtion_Execute(object sender, ParametrizedActionExecuteEventArgs e)
 {
     Console.WriteLine(e.ParameterCurrentValue);
 }