示例#1
0
        /// <summary>
        /// To extract the json object from msapp file and bind it to UI
        /// </summary>
        /// <param name="obj"></param>
        public async void BrowseBtnClicked(object obj)
        {
            var uiContext = SynchronizationContext.Current;

            await Task.Run(async() =>
            {
                string message = "";
                var ofd        = new Win32.OpenFileDialog()
                {
                    Filter = "PowerApps Files (*.msapp)|*.msapp"
                };
                var result = ofd.ShowDialog();
                if (result == false)
                {
                    return;
                }
                PathTxtBox = ofd.FileName;
                try
                {
                    if (string.IsNullOrWhiteSpace(PathTxtBox) ||
                        Path.GetExtension(PathTxtBox) != ".msapp")
                    {
                        message = "Select the PowerApps App!";
                    }
                    else
                    {
                        this.IsLoading = true;
                        ChangeManager changeManager = new ChangeManager();
                        Title        = changeManager.GetAppTitle(PathTxtBox);
                        searchResult = changeManager.GetModifiedControleList(PathTxtBox);

                        if (searchResult == null || searchResult.Count == 0 ||
                            (searchResult.Count == 1 && searchResult[0].ControlList.Count == 0))
                        {
                            var screenName = $"No change found in the App!";
                            searchResult   = new List <ModifiedResult>
                            {
                                new ModifiedResult
                                {
                                    ScreenName = screenName
                                }
                            };
                        }

                        //Clear the binded object everytime
                        ScreenList       = new ObservableCollection <DataModel>();
                        SelectedControls = new ObservableCollection <Controls>();
                        //DataModel local variables
                        DataModel _dataModel = null;
                        Controls _controls   = null;
                        Property _property   = null;

                        //Fill the object by traversing
                        searchResult.ForEach(r =>
                        {
                            _dataModel            = new DataModel();
                            _dataModel.ScreenName = r.ScreenName;
                            _dataModel.ScreenIcon = "./Assets/icons/screen.png";

                            r.ControlList?.ForEach(s =>
                            {
                                _controls             = new Controls();
                                _controls.ControlName = $"{s.ControlName}";
                                _controls.ControlIcon = LookupIcon(s.Template);
                                //_property = new Property();
                                //_property.PropertyName = $"Parent: {s.Parent}";
                                //_controls.Properties.Add(_property);
                                s.Script?.ForEach(q =>
                                {
                                    if (!string.Equals(q.DefaultSetting, q.InvariantScript,
                                                       StringComparison.OrdinalIgnoreCase))
                                    {
                                        _property = new Property();
                                        _property.PropertyName = q.Property;
                                        _property.Properties.Add(new PropertyDetails()
                                        {
                                            IsBaseLine = true, Name = "", Value = q.DefaultSetting
                                        });
                                        _property.Properties.Add(new PropertyDetails()
                                        {
                                            IsBaseLine = false, Name = "", Value = q.InvariantScript
                                        });
                                        _controls.Properties.Add(_property);
                                    }
                                });

                                _dataModel.Controls.Add(_controls);
                            });
                            uiContext.Send(x => ScreenList.Add(_dataModel), null);
                        });

                        //Clone to local list
                        OriginalScreenList = ScreenList;
                        this.IsLoading     = false;
                    }
                }
                catch (Exception ex)
                {
                    message = ex.Message;
                }

                if (!string.IsNullOrWhiteSpace(message))
                {
                    MessageBoxButton button = MessageBoxButton.OK;
                    System.Windows.MessageBox.Show(message, "Message", button);
                }
            });
        }