How to use ControlInfoDocLink method of AppUIBasics.Data.ControlInfoDataItem class

Best WinAppDriver code snippet using AppUIBasics.Data.ControlInfoDataItem.ControlInfoDocLink

ControlInfoDataSource.cs

Source:ControlInfoDataSource.cs Github

copy

Full Screen

...37 this.Subtitle = subtitle;38 this.Description = description;39 this.ImagePath = imagePath;40 this.Content = content;41 this.Docs = new ObservableCollection<ControlInfoDocLink>();42 this.RelatedControls = new ObservableCollection<string>();43 }44 public string UniqueId { get; private set; }45 public string Title { get; private set; }46 public string Subtitle { get; private set; }47 public string Description { get; private set; }48 public string ImagePath { get; private set; }49 public string Content { get; private set; }50 public ObservableCollection<ControlInfoDocLink> Docs { get; private set; }51 public ObservableCollection<string> RelatedControls { get; private set; }52 public override string ToString()53 {54 return this.Title;55 }56 }57 public class ControlInfoDocLink58 {59 public ControlInfoDocLink(string title, string uri)60 {61 this.Title = title;62 this.Uri = uri;63 }64 public string Title { get; private set; }65 public string Uri { get; private set; }66 }67 /// <summary>68 /// Generic group data model.69 /// </summary>70 public class ControlInfoDataGroup71 {72 public ControlInfoDataGroup(String uniqueId, String title, String subtitle, String imagePath, String description)73 {74 this.UniqueId = uniqueId;75 this.Title = title;76 this.Subtitle = subtitle;77 this.Description = description;78 this.ImagePath = imagePath;79 this.Items = new ObservableCollection<ControlInfoDataItem>();80 }81 public string UniqueId { get; private set; }82 public string Title { get; private set; }83 public string Subtitle { get; private set; }84 public string Description { get; private set; }85 public string ImagePath { get; private set; }86 public ObservableCollection<ControlInfoDataItem> Items { get; private set; }87 public override string ToString()88 {89 return this.Title;90 }91 }92 /// <summary>93 /// Creates a collection of groups and items with content read from a static json file.94 /// 95 /// ControlInfoSource initializes with data read from a static json file included in the 96 /// project. This provides sample data at both design-time and run-time.97 /// </summary>98 public sealed class ControlInfoDataSource99 {100 private static ControlInfoDataSource _controlInfoDataSource = new ControlInfoDataSource();101 private static readonly object _lock = new object();102 private ObservableCollection<ControlInfoDataGroup> _groups = new ObservableCollection<ControlInfoDataGroup>();103 public ObservableCollection<ControlInfoDataGroup> Groups104 {105 get { return this._groups; }106 }107 public static async Task<IEnumerable<ControlInfoDataGroup>> GetGroupsAsync()108 {109 await _controlInfoDataSource.GetControlInfoDataAsync();110 return _controlInfoDataSource.Groups;111 }112 public static async Task<ControlInfoDataGroup> GetGroupAsync(string uniqueId)113 {114 await _controlInfoDataSource.GetControlInfoDataAsync();115 // Simple linear search is acceptable for small data sets116 var matches = _controlInfoDataSource.Groups.Where((group) => group.UniqueId.Equals(uniqueId));117 if (matches.Count() == 1) return matches.First();118 return null;119 }120 public static async Task<ControlInfoDataItem> GetItemAsync(string uniqueId)121 {122 await _controlInfoDataSource.GetControlInfoDataAsync();123 // Simple linear search is acceptable for small data sets124 var matches = _controlInfoDataSource.Groups.SelectMany(group => group.Items).Where((item) => item.UniqueId.Equals(uniqueId));125 if (matches.Count() > 0) return matches.First();126 return null;127 }128 private async Task GetControlInfoDataAsync()129 {130 lock (_lock)131 {132 if (this._groups.Count != 0)133 return;134 }135 Uri dataUri = new Uri("ms-appx:///DataModel/ControlInfoData.json");136 StorageFile file = await StorageFile.GetFileFromApplicationUriAsync(dataUri);137 string jsonText = await FileIO.ReadTextAsync(file);138 JsonObject jsonObject = JsonObject.Parse(jsonText);139 JsonArray jsonArray = jsonObject["Groups"].GetArray();140 lock (_lock)141 {142 foreach (JsonValue groupValue in jsonArray)143 {144 JsonObject groupObject = groupValue.GetObject();145 ControlInfoDataGroup group = new ControlInfoDataGroup(groupObject["UniqueId"].GetString(),146 groupObject["Title"].GetString(),147 groupObject["Subtitle"].GetString(),148 groupObject["ImagePath"].GetString(),149 groupObject["Description"].GetString());150 foreach (JsonValue itemValue in groupObject["Items"].GetArray())151 {152 JsonObject itemObject = itemValue.GetObject();153 var item = new ControlInfoDataItem(itemObject["UniqueId"].GetString(),154 itemObject["Title"].GetString(),155 itemObject["Subtitle"].GetString(),156 itemObject["ImagePath"].GetString(),157 itemObject["Description"].GetString(),158 itemObject["Content"].GetString());159 if (itemObject.ContainsKey("Docs"))160 {161 foreach (JsonValue docValue in itemObject["Docs"].GetArray())162 {163 JsonObject docObject = docValue.GetObject();164 item.Docs.Add(new ControlInfoDocLink(docObject["Title"].GetString(), docObject["Uri"].GetString()));165 }166 }167 if (itemObject.ContainsKey("RelatedControls"))168 {169 foreach (JsonValue relatedControlValue in itemObject["RelatedControls"].GetArray())170 {171 item.RelatedControls.Add(relatedControlValue.GetString());172 }173 }174 group.Items.Add(item);175 }176 if (!this.Groups.Any(g => g.Title == group.Title))177 this.Groups.Add(group);178 }...

Full Screen

Full Screen

ControlInfoDocLink

Using AI Code Generation

copy

Full Screen

1using AppUIBasics.Data;2using Windows.UI.Xaml;3using Windows.UI.Xaml.Controls;4using Windows.UI.Xaml.Navigation;5{6 {7 public ControlInfoPage()8 {9 this.InitializeComponent();10 }11 protected override void OnNavigatedTo(NavigationEventArgs e)12 {13 base.OnNavigatedTo(e);14 var controlInfoDataItem = e.Parameter as ControlInfoDataItem;15 if (controlInfoDataItem != null)16 {17 DataContext = controlInfoDataItem;18 }19 }20 private void Button_Click(object sender, RoutedEventArgs e)21 {22 var controlInfoDataItem = DataContext as ControlInfoDataItem;23 if (controlInfoDataItem != null)24 {25 string docLink = controlInfoDataItem.ControlInfoDocLink;26 var uri = new Uri(docLink);27 var success = Windows.System.Launcher.LaunchUriAsync(uri);28 }29 }30 }31}32 <Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">

Full Screen

Full Screen

ControlInfoDocLink

Using AI Code Generation

copy

Full Screen

1using System;2using System.Collections.Generic;3using System.Linq;4using System.Text;5using System.Threading.Tasks;6using Windows.UI.Xaml.Controls;7using Windows.UI.Xaml.Navigation;8using AppUIBasics.Data;9using Windows.UI.Xaml;10using Windows.UI.Xaml.Media;11using Windows.UI;12using Windows.UI.Xaml.Input;13using Windows.UI.Xaml.Media.Animation;14using Windows.UI.Xaml.Media.Imaging;15using Windows.UI.Xaml.Shapes;16using Windows.UI.Xaml.Markup;17{18 {19 public ControlInfoPage()20 {21 this.InitializeComponent();22 this.Loaded += ControlInfoPage_Loaded;23 }24 private void ControlInfoPage_Loaded(object sender, RoutedEventArgs e)25 {26 var data = (ControlInfoDataItem)this.DataContext;27 Uri uri = new Uri(data.ControlInfoDocLink);28 webView.Navigate(uri);29 }30 }31}32using System;33using System.Collections.Generic;34using System.Linq;35using System.Text;36using System.Threading.Tasks;37using Windows.UI.Xaml.Controls;38using Windows.UI.Xaml.Navigation;39using AppUIBasics.Data;40using Windows.UI.Xaml;41using Windows.UI.Xaml.Media;42using Windows.UI;43using Windows.UI.Xaml.Input;44using Windows.UI.Xaml.Media.Animation;45using Windows.UI.Xaml.Media.Imaging;46using Windows.UI.Xaml.Shapes;47using Windows.UI.Xaml.Markup;48{49 {50 public ControlInfoPage()51 {52 this.InitializeComponent();53 this.Loaded += ControlInfoPage_Loaded;54 }55 private void ControlInfoPage_Loaded(object sender, RoutedEventArgs e)56 {57 var data = (ControlInfoDataItem)this.DataContext;58 Uri uri = new Uri(data.ControlInfoDocLink);59 webView.Navigate(uri);60 }61 }62}

Full Screen

Full Screen

ControlInfoDocLink

Using AI Code Generation

copy

Full Screen

1using System;2using System.Collections.Generic;3using System.Linq;4using System.Text;5using System.Threading.Tasks;6using Windows.UI.Xaml.Controls;7using Windows.UI.Xaml.Navigation;8using Windows.UI.Xaml;9using AppUIBasics.Data;10using Windows.UI.Xaml.Media.Imaging;11using Windows.UI.Xaml.Data;12using Windows.UI.Xaml.Documents;13using System.Collections.ObjectModel;14using Windows.UI.Xaml.Media;15using Windows.UI;16using Windows.UI.Xaml.Shapes;17using Windows.UI.Xaml.Media.Animation;18using Windows.UI.Xaml.Controls.Primitives;19using Windows.UI.Xaml.Input;20using Windows.UI.Xaml.Automation.Peers;21using Windows.UI.Xaml.Automation.Provider;22using Windows.UI.Xaml.Automation;23using Windows.Foundation;24using Windows.UI.Popups;25using Windows.UI.Core;26using Windows.UI.Xaml.Hosting;27using Windows.UI.Composition;28using Windows.UI.ViewManagement;29using Windows.UI;30{31 {32 private ObservableCollection<ControlInfoDataItem> AllControls;33 private ObservableCollection<ControlInfoDataItem> _controls;34 {35 get { return this._controls; }36 set { this.SetProperty(ref this._controls, value); }37 }38 public GridViewPage()39 {40 this.InitializeComponent();41 AllControls = ControlInfoDataSource.Instance.Groups.SelectMany(g => g.Items).ToObservableCollection();42 Controls = AllControls;43 }44 private void Search_TextChanged(AutoSuggestBox sender, AutoSuggestBoxTextChangedEventArgs args)45 {46 if (args.Reason == AutoSuggestionBoxTextChangeReason.UserInput)47 {48 if (string.IsNullOrEmpty(sender.Text))49 {50 Controls = AllControls;51 }52 {53 Controls = AllControls.Where(c => c.Title.IndexOf(sender.Text, StringComparison.OrdinalIgnoreCase) >= 0).ToObservableCollection();54 }55 }56 }57 private void Search_QuerySubmitted(AutoSuggestBox sender, AutoSuggestBoxQuerySubmittedEventArgs args)58 {59 if (args.ChosenSuggestion != null)60 {61 var control = args.ChosenSuggestion as ControlInfoDataItem;62 Frame.Navigate(typeof(ItemPage), control.UniqueId);63 }64 {65 var control = AllControls.FirstOrDefault(c => c.Title.IndexOf(sender.Text,

Full Screen

Full Screen

ControlInfoDocLink

Using AI Code Generation

copy

Full Screen

1using System.Windows;2using System.Windows.Controls;3using System.Windows.Navigation;4using AppUIBasics.Data;5{6 {7 public ControlInfoDocLink()8 {9 this.InitializeComponent();10 }11 protected override void OnNavigatedTo(NavigationEventArgs e)12 {13 var dataItem = e.Parameter as ControlInfoDataItem;14 if (dataItem != null)15 {16 this.DataContext = dataItem;17 }18 }19 }20}21 Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">22 <TextBlock Text="{Binding Title}" Style="{StaticResource TitleTextBlockStyle}" />23 <TextBlock Text="{Binding Description}" Style="{StaticResource BodyTextBlockStyle}" />24 <controls:WebView Grid.Row="1" Margin="12" Source="{Binding DocLink}" />

Full Screen

Full Screen

ControlInfoDocLink

Using AI Code Generation

copy

Full Screen

1using System;2using System.Collections.Generic;3using System.Linq;4using System.Text;5using System.Threading.Tasks;6using Windows.UI.Xaml;7using Windows.UI.Xaml.Controls;8using AppUIBasics.Data;9{10 {11 public ControlInfoDataItemPage()12 {13 this.InitializeComponent();14 }15 public ControlInfoDataItem ControlInfoDataItem { get { return this.DataContext as ControlInfoDataItem; } }16 private void Button_Click(object sender, RoutedEventArgs e)17 {18 string link = ControlInfoDataItem.ControlInfoDocLink();19 if (!string.IsNullOrEmpty(link))20 {21 Windows.System.Launcher.LaunchUriAsync(new Uri(link));22 }23 }24 }25}26using System;27using System.Collections.Generic;28using System.Linq;29using System.Text;30using System.Threading.Tasks;31using Windows.UI.Xaml;32using Windows.UI.Xaml.Controls;33using AppUIBasics.Data;34{35 {36 public ControlInfoDataItemPage()37 {38 this.InitializeComponent();39 }40 public ControlInfoDataItem ControlInfoDataItem { get { return this.DataContext as ControlInfoDataItem; } }41 private void Button_Click(object sender, RoutedEventArgs e)42 {43 string link = ControlInfoDataItem.ControlInfoDocLink();44 if (!string.IsNullOrEmpty(link))45 {46 Windows.System.Launcher.LaunchUriAsync(new Uri(link));47 }48 }49 }50}51using System;52using System.Collections.Generic;53using System.Linq;54using System.Text;55using System.Threading.Tasks;56using Windows.UI.Xaml;57using Windows.UI.Xaml.Controls;58using AppUIBasics.Data;

Full Screen

Full Screen

ControlInfoDocLink

Using AI Code Generation

copy

Full Screen

1using System;2using System.Windows;3using System.Windows.Controls;4using System.Windows.Media;5using System.Windows.Media.Imaging;6using System.Windows.Navigation;7using System.Windows.Shapes;8using System.Windows.Data;9using System.Windows.Input;10using System.Windows.Markup;11using System.Windows.Media.Animation;12using System.Windows.Media.Effects;13using System.Windows.Media.Media3D;14using System.Windows.Media.Imaging;15using System.Windows.Shapes;16using System.Windows.Threading;17using System.Windows.Controls.Primitives;18using System.Windows.Documents;19using System.Windows.Ink;20using System.Windows.Input.StylusPlugIns;21using System.Windows.Interop;22using System.Windows.Media.Animation;23using System.Windows.Media.Effects;24using System.Windows.Media.Media3D;25using System.Windows.Media.TextFormatting;26using System.Windows.Navigation;27using System.Windows.Resources;28using System.Windows.Shell;29using System.Windows.Threading;30using System.Windows.Xps;31using System.Windows.Xps.Packaging;32using System.Windows.Xps.Serialization;33using System.IO;34using System.Windows.Controls;35using System.Windows.Media;36using System.Windows.Media.Imaging;37using System.Windows.Navigation;38using System.Windows.Shapes;39using System.Windows.Data;40using System.Windows.Input;41using System.Windows.Markup;42using System.Windows.Media.Animation;43using System.Windows.Media.Effects;44using System.Windows.Media.Media3D;45using System.Windows.Media.Imaging;46using System.Windows.Shapes;47using System.Windows.Threading;48using System.Windows.Controls.Primitives;49using System.Windows.Documents;50using System.Windows.Ink;51using System.Windows.Input.StylusPlugIns;52using System.Windows.Interop;53using System.Windows.Media.Animation;54using System.Windows.Media.Effects;55using System.Windows.Media.Media3D;56using System.Windows.Media.TextFormatting;57using System.Windows.Navigation;58using System.Windows.Resources;59using System.Windows.Shell;60using System.Windows.Threading;61using System.Windows.Xps;62using System.Windows.Xps.Packaging;63using System.Windows.Xps.Serialization;64using System.IO;65using System.Windows.Controls;66using System.Windows.Media;67using System.Windows.Media.Imaging;68using System.Windows.Navigation;69using System.Windows.Shapes;70using System.Windows.Data;71using System.Windows.Input;72using System.Windows.Markup;73using System.Windows.Media.Animation;74using System.Windows.Media.Effects;75using System.Windows.Media.Media3D;76using System.Windows.Media.Imaging;77using System.Windows.Shapes;78using System.Windows.Threading;79using System.Windows.Controls.Primitives;80using System.Windows.Documents;81using System.Windows.Ink;82using System.Windows.Input.StylusPlugIns;83using System.Windows.Interop;

Full Screen

Full Screen

ControlInfoDocLink

Using AI Code Generation

copy

Full Screen

1using System;2using System.Collections.Generic;3using System.Linq;4using System.Text;5using System.Threading.Tasks;6using AppUIBasics.Data;7{8 {9 public ControlInfoDataList()10 {11 this.InitializeComponent();12 }13 private void ListView_ItemClick(object sender, ItemClickEventArgs e)14 {15 var clickedItem = e.ClickedItem as ControlInfoDataItem;16 var clickedItemLink = clickedItem.ControlInfoDocLink;17 }18 }19}20using System;21using System.Collections.Generic;22using System.Linq;23using System.Text;24using System.Threading.Tasks;25using AppUIBasics.Data;26{27 {28 public ControlInfoDataList()29 {30 this.InitializeComponent();31 }32 private void ListView_ItemClick(object sender, ItemClickEventArgs e)33 {34 var clickedItem = e.ClickedItem as ControlInfoDataItem;35 var clickedItemLink = clickedItem.ControlInfoDocLink;36 }37 }38}39using System;40using System.Collections.Generic;41using System.Linq;42using System.Text;43using System.Threading.Tasks;44using AppUIBasics.Data;45{46 {47 public ControlInfoDataList()48 {49 this.InitializeComponent();50 }51 private void ListView_ItemClick(object sender, ItemClickEventArgs e)52 {53 var clickedItem = e.ClickedItem as ControlInfoDataItem;54 var clickedItemLink = clickedItem.ControlInfoDocLink;55 }56 }57}58using System;59using System.Collections.Generic;60using System.Linq;61using System.Text;62using System.Threading.Tasks;63using AppUIBasics.Data;64{

Full Screen

Full Screen

ControlInfoDocLink

Using AI Code Generation

copy

Full Screen

1using System;2using System.Collections.Generic;3using System.Linq;4using System.Text;5using System.Threading.Tasks;6using AppUIBasics.Data;7using System.Windows.Input;8using Windows.UI.Xaml.Controls;9using Windows.UI.Xaml.Navigation;10using Windows.UI.Xaml;11using Windows.UI.Xaml.Media;12using Windows.UI.Xaml.Media.Imaging;13using Windows.UI.Xaml.Controls.Primitives;14using Windows.UI.Xaml.Shapes;15using Windows.UI;16using Windows.UI.Xaml.Input;17using Windows.UI.Xaml.Data;18using Windows.UI.Xaml.Documents;19using Windows.UI.Xaml.Markup;20using Windows.UI.Xaml.Hosting;21using Windows.UI.Composition;22using Windows.UI.Xaml.Media.Animation;23using Windows.Foundation;24using Windows.UI.Xaml.Automation.Peers;25using Windows.UI.Xaml.Automation;26using Windows.UI.Xaml.Automation.Provider;27using Windows.UI.Popups;28using System.Collections.ObjectModel;29using System.ComponentModel;30using Windows.Foundation.Metadata;31using Windows.UI.ViewManagement;32using Windows.System;33using Windows.ApplicationModel;34using Windows.UI.Xaml.Media.Animation;35using Windows.UI.Xaml.Media.Media3D;36using Windows.UI.Xaml.Navigation;37using Windows.UI.Xaml.Printing;38using Windows.UI.Xaml.Controls.Primitives;39using Windows.UI.Xaml.Controls;40using Windows.UI.Xaml;41using Windows.UI.Xaml.Media;42using Windows.UI.Xaml.Media.Imaging;43using Windows.UI.Xaml.Controls.Primitives;44using Windows.UI.Xaml.Shapes;45using Windows.UI;46using Windows.UI.Xaml.Input;47using Windows.UI.Xaml.Data;48using Windows.UI.Xaml.Documents;49using Windows.UI.Xaml.Markup;50using Windows.UI.Xaml.Hosting;51using Windows.UI.Composition;52using Windows.UI.Xaml.Media.Animation;53using Windows.Foundation;54using Windows.UI.Xaml.Automation.Peers;55using Windows.UI.Xaml.Automation;56using Windows.UI.Xaml.Automation.Provider;57using Windows.UI.Popups;58using System.Collections.ObjectModel;59using System.ComponentModel;60using Windows.Foundation.Metadata;61using Windows.UI.ViewManagement;62using Windows.System;63using Windows.ApplicationModel;64using Windows.UI.Xaml.Media.Animation;65using Windows.UI.Xaml.Media.Media3D;66using Windows.UI.Xaml.Navigation;67using Windows.UI.Xaml.Printing;68using Windows.UI.Xaml.Controls.Primitives;69using Windows.UI.Xaml.Controls;70using Windows.UI.Xaml;71using Windows.UI.Xaml.Media;72using Windows.UI.Xaml.Media.Imaging;73using Windows.UI.Xaml.Controls.Primitives;74using Windows.UI.Xaml.Shapes;75using Windows.UI;76using Windows.UI.Xaml.Input;77using Windows.UI.Xaml.Data;78using Windows.UI.Xaml.Documents;79using Windows.UI.Xaml.Markup;80using Windows.UI.Xaml.Hosting;81using Windows.UI.Composition;

Full Screen

Full Screen

ControlInfoDocLink

Using AI Code Generation

copy

Full Screen

1using System;2using System.Windows;3using System.Windows.Controls;4using AppUIBasics.Data;5{6 {7 public ControlInfoPage()8 {9 InitializeComponent();10 }11 private void ControlInfoDocLink_Click(object sender, RoutedEventArgs e)12 {13 HyperlinkButton button = sender as HyperlinkButton;14 ControlInfoDataItem dataItem = button.DataContext as ControlInfoDataItem;15 string docLink = dataItem.ControlInfoDocLink;16 }17 }18}19using System;20using System.Windows;21using System.Windows.Controls;22using AppUIBasics.Data;23{24 {25 public ControlInfoPage()26 {27 InitializeComponent();28 }29 private void ControlInfoSampleCode_Click(object sender, RoutedEventArgs e)30 {31 HyperlinkButton button = sender as HyperlinkButton;32 ControlInfoDataItem dataItem = button.DataContext as ControlInfoDataItem;33 string sampleCode = dataItem.ControlInfoSampleCode;34 }35 }36}37using System;38using System.Windows;39using System.Windows.Controls;40using AppUIBasics.Data;41{42 {43 public ControlInfoPage()44 {45 InitializeComponent();46 }47 private void ControlInfoSampleCodeFile_Click(object sender, RoutedEventArgs e)48 {49 HyperlinkButton button = sender as HyperlinkButton;50 ControlInfoDataItem dataItem = button.DataContext as ControlInfoDataItem;51 string sampleCodeFile = dataItem.ControlInfoSampleCodeFile;52 }53 }54}

Full Screen

Full Screen

ControlInfoDocLink

Using AI Code Generation

copy

Full Screen

1using System;2using System.Collections.Generic;3using System.Linq;4using System.Text;5using System.Threading.Tasks;6using AppUIBasics.Data;7using Windows.UI.Xaml.Controls;8using Windows.UI.Xaml.Navigation;9{10 {11 public ControlInfoDocLink()12 {13 this.InitializeComponent();14 }15 protected override void OnNavigatedTo(NavigationEventArgs e)16 {17 ControlInfoDataItem control = e.Parameter as ControlInfoDataItem;18 string link = control.ControlInfoDocLink;19 webView.Source = new Uri(link);20 }21 }22}

Full Screen

Full Screen

Automation Testing Tutorials

Learn to execute automation testing from scratch with LambdaTest Learning Hub. Right from setting up the prerequisites to run your first automation test, to following best practices and diving deeper into advanced test scenarios. LambdaTest Learning Hubs compile a list of step-by-step guides to help you be proficient with different test automation frameworks i.e. Selenium, Cypress, TestNG etc.

LambdaTest Learning Hubs:

YouTube

You could also refer to video tutorials over LambdaTest YouTube channel to get step by step demonstration from industry experts.

Run WinAppDriver automation tests on LambdaTest cloud grid

Perform automation testing on 3000+ real desktop and mobile devices online.

Try LambdaTest Now !!

Get 100 minutes of automation test minutes FREE!!

Next-Gen App & Browser Testing Cloud

Was this article helpful?

Helpful

NotHelpful