protected internal async virtual void ExecuteItemAction(string id) { _selectedResult = _results.FirstOrDefault(ri => ri.Id == id); if (_selectedResult == null) { return; } //Either we open a project and then create the item or //we download the item and then create a project from it. //MapPackage is a special case. We download it, create //a project and then add the map package to it. VisibleList = Visibility.Collapsed; VisibleText = Visibility.Visible; StatusTitle = $@"{_selectedResult.LinkText}: {_selectedResult.Title}"; switch (_selectedResult.PortalItemType) { case PortalItemType.WebMap: { await Project.CreateAsync(new CreateProjectSettings() { Name = System.IO.Path.GetFileNameWithoutExtension(_selectedResult.Name) }); var currentItem = ItemFactory.Instance.Create(_selectedResult.Id, ItemFactory.ItemType.PortalItem); if (MapFactory.Instance.CanCreateMapFrom(currentItem)) { await QueuedTask.Run(() => { var newMap = MapFactory.Instance.CreateMapFromItem(currentItem); FrameworkApplication.Panes.CreateMapPaneAsync(newMap); }); } } break; case PortalItemType.Layer: { var ps = new CreateProjectSettings() { Name = System.IO.Path.GetFileNameWithoutExtension(_selectedResult.Name), LocationPath = ConfigWithStartWizardModule.DefaultFolder(), TemplatePath = ConfigWithStartWizardModule.GetDefaultTemplates()[0] //Scene }; _eventToken = ArcGIS.Desktop.Mapping.Events.MapViewInitializedEvent.Subscribe((args) => { Item currentItem = ItemFactory.Instance.Create(_selectedResult.Id, ItemFactory.ItemType.PortalItem); if (LayerFactory.Instance.CanCreateLayerFrom(currentItem)) { QueuedTask.Run(() => LayerFactory.Instance.CreateLayer(currentItem, args.MapView.Map)); } ArcGIS.Desktop.Mapping.Events.MapViewInitializedEvent.Unsubscribe(_eventToken); _eventToken = null; }); try { await Project.CreateAsync(ps); } catch (Exception ex) { Status = $@"Error occurred: {ex.ToString()}"; System.Diagnostics.Debug.WriteLine(ex.ToString()); } } break; default: var query = new OnlineQuery(_activePortalUri); query.ConfigureData("", _selectedResult.Id, _selectedResult.Name); Status = "Downloading"; await new SubmitQuery().DownloadFileAsync(query); Status = "Opening"; //Project package if (_selectedResult.PortalItemType == PortalItemType.ProjectPackage) { await Project.OpenAsync(query.DownloadFileName); } //Project Template else if (_selectedResult.PortalItemType == PortalItemType.MapTemplate) { var ps = new CreateProjectSettings() { Name = System.IO.Path.GetFileNameWithoutExtension(_selectedResult.Name), LocationPath = ConfigWithStartWizardModule.DefaultFolder(), TemplatePath = query.DownloadFileName }; try { await Project.CreateAsync(ps); } catch (Exception ex) { System.Diagnostics.Debug.WriteLine(ex.ToString()); Status = $@"Error occurred: {ex.ToString()}"; } } //Map Package else if (_selectedResult.PortalItemType == PortalItemType.MapPackage) { await Project.CreateAsync(new CreateProjectSettings() { Name = System.IO.Path.GetFileNameWithoutExtension(_selectedResult.Name) }); try { var mapPackage = ItemFactory.Instance.Create(query.DownloadFileName); MapFactory.Instance.CreateMapFromItem(mapPackage); } catch (Exception ex) { System.Diagnostics.Debug.WriteLine(ex.ToString()); Status = $@"Error occurred: {ex.ToString()}"; } } break; } }
public async void ContentSnippets2() { #region Create new project using Pro's default settings //Get Pro's default project settings. var defaultProjectSettings = Project.GetDefaultProjectSettings(); //Create a new project using the default project settings await Project.CreateAsync(defaultProjectSettings); #endregion #region New project using a custom template file //Settings used to create a new project CreateProjectSettings projectSettings = new CreateProjectSettings() { //Sets the project's name Name = "New Project", //Path where new project will be stored in LocationPath = @"C:\Data\NewProject", //Sets the project template that will be used to create the new project TemplatePath = @"C:\Data\MyProject1\CustomTemplate.aptx" }; //Create the new project await Project.CreateAsync(projectSettings); #endregion #region Create project using template available with ArcGIS Pro //Settings used to create a new project CreateProjectSettings proTemplateSettings = new CreateProjectSettings() { //Sets the project's name Name = "New Project", //Path where new project will be stored in LocationPath = @"C:\Data\NewProject", //Select which Pro template you like to use TemplateType = TemplateType.Catalog //TemplateType = TemplateType.LocalScene //TemplateType = TemplateType.GlobalScene //TemplateType = TemplateType.Map }; //Create the new project await Project.CreateAsync(proTemplateSettings); #endregion #region Open project //Opens an existing project or project package await Project.OpenAsync(@"C:\Data\MyProject1\MyProject1.aprx"); #endregion #region Current project //Gets the current project var project = Project.Current; #endregion #region Get location of current project //Gets the location of the current project; that is, the path to the current project file (*.aprx) string projectPath = Project.Current.URI; #endregion #region Get the project's default gdb path var projGDBPath = Project.Current.DefaultGeodatabasePath; #endregion #region Save project //Saves the project await Project.Current.SaveAsync(); #endregion #region SaveAs project //Saves a copy of the current project file (*.aprx) to the specified location with the specified file name, //then opens the new project file await Project.Current.SaveAsAsync(@"C:\Data\MyProject1\MyNewProject1.aprx"); #endregion #region Close project //A project cannot be closed using the ArcGIS Pro API. //A project is only closed when another project is opened, a new one is created, or the application is shutdown. #endregion #region Adds item to the current project //Adding a folder connection string folderPath = "@C:\\myDataFolder"; var folder = await QueuedTask.Run(() => { //Create the folder connection project item var item = ItemFactory.Instance.Create(folderPath) as IProjectItem; //If it is succesfully added to the project, return it otherwise null return(Project.Current.AddItem(item) ? item as FolderConnectionProjectItem : null); }); //Adding a Geodatabase: string gdbPath = "@C:\\myDataFolder\\myData.gdb"; var newlyAddedGDB = await QueuedTask.Run(() => { //Create the File GDB project item var item = ItemFactory.Instance.Create(gdbPath) as IProjectItem; //If it is succesfully added to the project, return it otherwise null return(Project.Current.AddItem(item) ? item as GDBProjectItem : null); }); #endregion #region How to add a new map to a project await QueuedTask.Run(() => { //Note: see also MapFactory in ArcGIS.Desktop.Mapping var map = MapFactory.Instance.CreateMap("New Map", MapType.Map, MapViewingMode.Map, Basemap.Oceans); ProApp.Panes.CreateMapPaneAsync(map); }); #endregion #region Check if project needs to be saved //The project's dirty state indicates changes made to the project have not yet been saved. bool isProjectDirty = Project.Current.IsDirty; #endregion #region Get all the project items IEnumerable <Item> allProjectItems = Project.Current.GetItems <Item>(); foreach (var pi in allProjectItems) { //Do Something } #endregion #region Gets all the "MapProjectItems" IEnumerable <MapProjectItem> newMapItemsContainer = project.GetItems <MapProjectItem>(); await QueuedTask.Run(() => { foreach (var mp in newMapItemsContainer) { //Do Something with the map. For Example: Map myMap = mp.GetMap(); } }); #endregion #region Gets a specific "MapProjectItem" MapProjectItem mapProjItem = Project.Current.GetItems <MapProjectItem>().FirstOrDefault(item => item.Name.Equals("EuropeMap")); #endregion #region Gets all the "StyleProjectItems" IEnumerable <StyleProjectItem> newStyleItemsContainer = null; newStyleItemsContainer = Project.Current.GetItems <StyleProjectItem>(); foreach (var styleItem in newStyleItemsContainer) { //Do Something with the style. } #endregion #region Gets a specific "StyleProjectItem" var container = Project.Current.GetItems <StyleProjectItem>(); StyleProjectItem testStyle = container.FirstOrDefault(style => (style.Name == "ArcGIS 3D")); StyleItem cone = null; if (testStyle != null) { cone = testStyle.LookupItem(StyleItemType.PointSymbol, "Cone_Volume_3"); } #endregion #region Gets all the "GDBProjectItems" IEnumerable <GDBProjectItem> newGDBItemsContainer = null; newGDBItemsContainer = Project.Current.GetItems <GDBProjectItem>(); foreach (var GDBItem in newGDBItemsContainer) { //Do Something with the GDB. } #endregion #region Gets a specific "GDBProjectItem" GDBProjectItem GDBProjItem = Project.Current.GetItems <GDBProjectItem>().FirstOrDefault(item => item.Name.Equals("myGDB")); #endregion #region Gets all the "ServerConnectionProjectItem" IEnumerable <ServerConnectionProjectItem> newServerConnections = null; newServerConnections = project.GetItems <ServerConnectionProjectItem>(); foreach (var serverItem in newServerConnections) { //Do Something with the server connection. } #endregion #region Gets a specific "ServerConnectionProjectItem" ServerConnectionProjectItem serverProjItem = Project.Current.GetItems <ServerConnectionProjectItem>().FirstOrDefault(item => item.Name.Equals("myServer")); #endregion #region Gets all folder connections in a project //Gets all the folder connections in the current project var projectFolders = Project.Current.GetItems <FolderConnectionProjectItem>(); foreach (var FolderItem in projectFolders) { //Do Something with the Folder connection. } #endregion #region Gets a specific folder connection //Gets a specific folder connection in the current project FolderConnectionProjectItem myProjectFolder = Project.Current.GetItems <FolderConnectionProjectItem>().FirstOrDefault(folderPI => folderPI.Name.Equals("myDataFolder")); #endregion #region Remove a specific folder connection // Remove a folder connection from a project; the folder stored on the local disk or the network is not deleted FolderConnectionProjectItem folderToRemove = Project.Current.GetItems <FolderConnectionProjectItem>().FirstOrDefault(myfolder => myfolder.Name.Equals("PlantSpecies")); if (folderToRemove != null) { Project.Current.RemoveItem(folderToRemove as IProjectItem); } #endregion #region Gets a specific "LayoutProjectItem" LayoutProjectItem layoutProjItem = Project.Current.GetItems <LayoutProjectItem>().FirstOrDefault(item => item.Name.Equals("myLayout")); #endregion #region Gets all layouts in a project: //Gets all the layouts in the current project var projectLayouts = Project.Current.GetItems <LayoutProjectItem>(); foreach (var layoutItem in projectLayouts) { //Do Something with the layout } #endregion #region Gets a specific "GeoprocessingProjectItem" GeoprocessingProjectItem GPProjItem = Project.Current.GetItems <GeoprocessingProjectItem>().FirstOrDefault(item => item.Name.Equals("myToolbox")); #endregion #region Gets all GeoprocessingProjectItems in a project: //Gets all the GeoprocessingProjectItem in the current project var GPItems = Project.Current.GetItems <GeoprocessingProjectItem>(); foreach (var tbx in GPItems) { //Do Something with the toolbox } #endregion #region Search project for a specific item List <Item> _mxd = new List <Item>(); //Gets all the folder connections in the current project var allFoldersItem = Project.Current.GetItems <FolderConnectionProjectItem>(); if (allFoldersItem != null) { //iterate through all the FolderConnectionProjectItems found foreach (var folderItem in allFoldersItem) { //Search for mxd files in that folder connection and add it to the List<T> //Note:ArcGIS Pro automatically creates and dynamically updates a searchable index as you build and work with projects. //Items are indexed when they are added to a project. //The first time a folder or database is indexed, indexing may take a while if it contains a large number of items. //While the index is being created, searches will not return any results. _mxd.AddRange(folderItem.GetItems()); } } #endregion #region Get the Default Project Folder var defaultProjectPath = System.IO.Path.Combine( System.Environment.GetFolderPath( Environment.SpecialFolder.MyDocuments), @"ArcGIS\Projects"); #endregion }
/// <summary> /// Creates a new project using the supplied name from a project template. /// </summary> /// <remarks>Exercise 3: This exercise creates a new project from a project template (*.aptx) using Pro SDK. This exercise introduces the /// CreateProjectSettings class used in project creation.</remarks> /// <param name="projectName">Name to be used for the new project.</param> /// <param name="locationPath">Location for the new project</param> /// <param name="templatePath">Template to use</param> /// <returns>A Task representing CreateProjectFromTemplate.</returns> private async Task CreateProjectFromTemplate(string projectName, string locationPath, string templatePath) { try { // Set project creation settings var createProjectSettings = new CreateProjectSettings { Name = projectName, LocationPath = locationPath, TemplatePath = templatePath }; // Create project var newProject = await Project.CreateAsync(createProjectSettings); // ... and continue to do stuff //await ChangeSettings(); // Save Project //await Project.Current.SaveAsync(); // ... and/or continue to do stuff but allow user to continue to work with Pro } catch (Exception ex) { MessageBox.Show("Error importing mxd: " + ex.ToString()); } }