Rock.Model.DataViewService.GetNewFromTemplate C# (CSharp) Méthode

GetNewFromTemplate() public méthode

Create a new non-persisted Data View using an existing Data View as a template.
public GetNewFromTemplate ( int dataViewId ) : DataView
dataViewId int The identifier of a Data View to use as a template for the new Data View.
Résultat DataView
        public DataView GetNewFromTemplate( int dataViewId )
        {
            var item = this.Queryable()
                           .AsNoTracking()
                           .Include( x => x.DataViewFilter )
                           .FirstOrDefault( x => x.Id == dataViewId );

            if ( item == null )
            {
                throw new Exception( string.Format( "GetNewFromTemplate method failed. Template Data View ID \"{0}\" could not be found.", dataViewId ) );
            }

            // Deep-clone the Data View and reset the properties that connect it to the permanent store.
            var newItem = (DataView)( item.Clone( true ) );

            newItem.Id = 0;
            newItem.Guid = Guid.NewGuid();
            newItem.ForeignId = null;
            newItem.ForeignGuid = null;
            newItem.ForeignKey = null;

            newItem.DataViewFilterId = 0;

            this.ResetPermanentStoreIdentifiers( newItem.DataViewFilter );

            return newItem;
        }

Usage Example

        /// <summary>
        /// Handles the Click event of the Copy button control.
        /// </summary>
        /// <param name="sender">The source of the event.</param>
        /// <param name="e">The <see cref="EventArgs" /> instance containing the event data.</param>
        protected void btnCopy_Click( object sender, EventArgs e )
        {
            // Create a new Data View using the current item as a template.
            var id = int.Parse( hfDataViewId.Value );

            var dataViewService = new DataViewService( new RockContext() );

            var newItem = dataViewService.GetNewFromTemplate( id );

            if (newItem == null)
                return;

            newItem.Name += " (Copy)";

            // Reset the stored identifier for the active Data View.
            hfDataViewId.Value = "0";

            ShowEditDetails( newItem );
        }