Object that describes the destination container when a Sheet or Folder is moved, or when a Sheet, Folder, or Workspace is copied.
        public void TestSheetCopyResources()
        {
            string accessToken = ConfigurationManager.AppSettings["accessToken"];

            SmartsheetClient smartsheet = new SmartsheetBuilder().SetAccessToken(accessToken).Build();
            // Before
            // Sheet
            // Folder

            // After
            // Sheet
            // Folder-----SheetCopy
            long folderId = CreateFolderInHome(smartsheet, "Folder1");

            long sheetId = CreateSheet(smartsheet);

            ContainerDestination destination = new ContainerDestination
            {
                DestinationId = folderId,
                DestinationType = DestinationType.FOLDER,
                NewName = "SheetCopy"
            };
            Sheet newCopiedSheet = smartsheet.SheetResources.CopySheet(sheetId, destination, new SheetCopyInclusion[] { SheetCopyInclusion.ALL });

            Assert.IsTrue(newCopiedSheet.Name == "SheetCopy");

            long copiedSheetId = newCopiedSheet.Id.Value;

            Sheet copiedSheet = smartsheet.SheetResources.GetSheet(copiedSheetId, null, null, null, null, null, null, null);
            Assert.IsTrue(copiedSheet.Name == "SheetCopy");

            DeleteFolders(smartsheet, folderId);
            smartsheet.SheetResources.DeleteSheet(sheetId);
        }
        public void TestFolderCopyResources()
        {
            string accessToken = ConfigurationManager.AppSettings["accessToken"];

            SmartsheetClient smartsheet = new SmartsheetBuilder().SetAccessToken(accessToken).Build();
            // Before
            // Folder1-----SubFolder1
            // Folder2

            // After
            // Folder1-----SubFolder1
            // Folder2-----SubFolder1Copy
            long createdFolderInHomeId1 = CreateFolderInHome(smartsheet, "Folder1");
            long createdFolderInHomeId2 = CreateFolderInHome(smartsheet, "Folder2");

            long createdFolderInFolderId = CreateFolderInFolder(smartsheet, createdFolderInHomeId1, "SubFolder1");

            ContainerDestination destination = new ContainerDestination
            {
                DestinationId = createdFolderInHomeId2,
                DestinationType = DestinationType.FOLDER,
                NewName = "SubFolder1Copy"
            };
            Folder newCopiedFolder = smartsheet.FolderResources.CopyFolder(createdFolderInFolderId, destination, new FolderCopyInclusion[] { FolderCopyInclusion.ALL }, new FolderRemapExclusion[] { FolderRemapExclusion.CELL_LINKS });

            Assert.IsTrue(newCopiedFolder.Name == "SubFolder1Copy");

            long copiedFolderId = newCopiedFolder.Id.Value;

            Folder copiedFolder = smartsheet.FolderResources.GetFolder(copiedFolderId, null);
            Assert.IsTrue(copiedFolder.Name == "SubFolder1Copy");

            DeleteFolders(smartsheet, createdFolderInHomeId1, createdFolderInHomeId2);
        }
        public void TestSheetMoveResources()
        {
            string accessToken = ConfigurationManager.AppSettings["accessToken"];

            SmartsheetClient smartsheet = new SmartsheetBuilder().SetAccessToken(accessToken).Build();
            // Before
            // Sheet
            // Folder

            // After
            //
            // Folder-----SheetCopy
            long folderId = CreateFolderInHome(smartsheet, "Folder1");

            long sheetId = CreateSheet(smartsheet);

            ContainerDestination destination = new ContainerDestination
            {
                DestinationId = folderId,
                DestinationType = DestinationType.FOLDER,
                //NewName = "hello"
            };
            Sheet newMovedSheet = smartsheet.SheetResources.MoveSheet(sheetId, destination);

            Assert.IsTrue(newMovedSheet.Name == "new sheet");

            long movedSheetId = newMovedSheet.Id.Value;

            Sheet movedSheet = smartsheet.SheetResources.GetSheet(movedSheetId, null, null, null, null, null, null, null);
            Assert.IsTrue(movedSheet.Name == "new sheet");

            //Deleting the folder will also delete the sheet.
            DeleteFolders(smartsheet, folderId);
        }
        public void TestFolderMoveResources()
        {
            string accessToken = ConfigurationManager.AppSettings["accessToken"];

            SmartsheetClient smartsheet = new SmartsheetBuilder().SetAccessToken(accessToken).Build();
            // Before
            // Folder1-----SubFolder1
            // Folder2

            // After
            // Folder1
            // Folder2-----SubFolder1
            long createdFolderInHomeId1 = CreateFolderInHome(smartsheet, "Folder1");
            long createdFolderInHomeId2 = CreateFolderInHome(smartsheet, "Folder2");

            long createdFolderInFolderId = CreateFolderInFolder(smartsheet, createdFolderInHomeId1, "SubFolder1");

            ContainerDestination destination = new ContainerDestination
            {
                DestinationId = createdFolderInHomeId2,
                DestinationType = DestinationType.FOLDER,
                //NewName = "NotSupported"
            };
            Folder newMovedFolder = smartsheet.FolderResources.MoveFolder(createdFolderInFolderId, destination);

            Assert.IsTrue(newMovedFolder.Name == "SubFolder1");

            long movedFolderId = newMovedFolder.Id.Value;

            Folder movedFolder = smartsheet.FolderResources.GetFolder(movedFolderId, null);
            Assert.IsTrue(movedFolder.Name == "SubFolder1");

            // Assert the Folder which use to contain the moved Folder is now empty.
            PaginatedResult<Folder> foldersResult = smartsheet.FolderResources.ListFolders(createdFolderInHomeId1, null);
            Assert.IsTrue(foldersResult.Data.Count == 0);

            DeleteFolders(smartsheet, createdFolderInHomeId1, createdFolderInHomeId2);
        }
        public void TestWorkspaceCopyResources()
        {
            string accessToken = ConfigurationManager.AppSettings["accessToken"];

            SmartsheetClient smartsheet = new SmartsheetBuilder().SetAccessToken(accessToken).Build();
            // Before
            // Workspace1
            // Folder2

            // After
            // Workspace1
            // Folder2-----Workspace1Copy

            Workspace workspace = smartsheet.WorkspaceResources.CreateWorkspace(new Workspace.CreateWorkspaceBuilder("Workspace1").Build());
            long workspaceId = workspace.Id.Value;

            long createdFolderInHomeId2 = CreateFolderInHome(smartsheet, "Folder2");

            ContainerDestination destination = new ContainerDestination
            {
                //DestinationId = createdFolderInHomeId2,
                //DestinationType = DestinationType.FOLDER,
                NewName = "Workspace1Copy"
            };
            Folder newCopiedWorkspace = smartsheet.WorkspaceResources.CopyWorkspace(workspaceId, destination, new WorkspaceCopyInclusion[] { WorkspaceCopyInclusion.ALL }, new WorkspaceRemapExclusion[] { WorkspaceRemapExclusion.CELL_LINKS });

            Assert.IsTrue(newCopiedWorkspace.Name == "Workspace1Copy");

            long copiedWorkspaceId = newCopiedWorkspace.Id.Value;

            Workspace copiedWorkspace = smartsheet.WorkspaceResources.GetWorkspace(copiedWorkspaceId, null, null);
            Assert.IsTrue(copiedWorkspace.Name == "Workspace1Copy");

            DeleteFolders(smartsheet, createdFolderInHomeId2);
            smartsheet.WorkspaceResources.DeleteWorkspace(workspaceId);
        }
 /// <summary>
 /// <para>Creates a copy of the specified Sight.</para>
 /// <para>It mirrors To the following Smartsheet REST API method:<br />
 /// POST /sights/{sightId}/copy</para>
 /// </summary>
 /// <param name="sightId"> the sightId </param>
 /// <param name="destination"> the destination to copy to </param>
 /// <returns>Result object containing a Sight for the newly created Sight, limited to the following attributes:
 ///		id, name, accessLevel, permalink.</returns>
 /// <exception cref="System.InvalidOperationException"> if any argument is null or empty string </exception>
 /// <exception cref="InvalidRequestException"> if there is any problem with the REST API request </exception>
 /// <exception cref="AuthorizationException"> if there is any problem with  the REST API authorization (access token) </exception>
 /// <exception cref="ResourceNotFoundException"> if the resource cannot be found </exception>
 /// <exception cref="ServiceUnavailableException"> if the REST API service is not available (possibly due To rate limiting) </exception>
 /// <exception cref="SmartsheetException"> if there is any other error during the operation </exception>
 public virtual Sight CopySight(long sightId, ContainerDestination destination)
 {
     return this.CreateResource<RequestResult<Sight>, ContainerDestination>("sights/" + sightId + "/copy", destination).Result;
 }
 /// <summary>
 /// <para>Moves the specified sheet to a new location.</para>
 /// <para>It mirrors To the following Smartsheet REST API method:<br />
 /// POST /sheets/{sheetId}/move</para>
 /// </summary>
 /// <param name="sheetId"> the sheet Id </param>
 /// <param name="destination"> the destination to copy to </param>
 /// <returns> the moved sheet </returns>
 /// <exception cref="System.InvalidOperationException"> if any argument is null or empty string </exception>
 /// <exception cref="InvalidRequestException"> if there is any problem with the REST API request </exception>
 /// <exception cref="AuthorizationException"> if there is any problem with  the REST API authorization (access token) </exception>
 /// <exception cref="ResourceNotFoundException"> if the resource cannot be found </exception>
 /// <exception cref="ServiceUnavailableException"> if the REST API service is not available (possibly due To rate limiting) </exception>
 /// <exception cref="SmartsheetException"> if there is any other error during the operation </exception>
 public virtual Sheet MoveSheet(long sheetId, ContainerDestination destination)
 {
     return this.CreateResource<RequestResult<Sheet>, ContainerDestination>("sheets/" + sheetId + "/move", destination).Result;
 }
 /// <summary>
 /// <para>Creates a copy of the specified Sheet.</para>
 /// <para>It mirrors To the following Smartsheet REST API method:<br />
 /// POST /sheets/{sheetId}/copy</para>
 /// </summary>
 /// <param name="sheetId"> the sheet Id </param>
 /// <param name="destination"> the destination to copy to </param>
 /// <param name="include"> the elements to copy. Note: Cell history will not be copied, regardless of which include parameter values are specified.</param>
 /// <returns> the created folder </returns>
 /// <exception cref="System.InvalidOperationException"> if any argument is null or empty string </exception>
 /// <exception cref="InvalidRequestException"> if there is any problem with the REST API request </exception>
 /// <exception cref="AuthorizationException"> if there is any problem with  the REST API authorization (access token) </exception>
 /// <exception cref="ResourceNotFoundException"> if the resource cannot be found </exception>
 /// <exception cref="ServiceUnavailableException"> if the REST API service is not available (possibly due To rate limiting) </exception>
 /// <exception cref="SmartsheetException"> if there is any other error during the operation </exception>
 public virtual Sheet CopySheet(long sheetId, ContainerDestination destination, IEnumerable<SheetCopyInclusion> include)
 {
     IDictionary<string, string> parameters = new Dictionary<string, string>();
     if (include != null)
     {
         parameters.Add("include", QueryUtil.GenerateCommaSeparatedList(include));
     }
     return this.CreateResource<RequestResult<Sheet>, ContainerDestination>(QueryUtil.GenerateUrl("sheets/" + sheetId + "/copy", parameters), destination).Result;
 }
        public static void SampleCode()
        {
            // Set the Access Token
            Token token = new Token();
            token.AccessToken = "YOUR_TOKEN";

            // Use the Smartsheet Builder to create a Smartsheet
            SmartsheetClient smartsheet = new SmartsheetBuilder().SetAccessToken(token.AccessToken).Build();

            #pragma warning disable 0162
            if (false)
            {
                // List all contents (specify 'include' parameter with value of "source").
                Home home = smartsheet.HomeResources.GetHome(new HomeInclusion[] { HomeInclusion.SOURCE });

                // List folders in "Sheets" folder (specify 'includeAll' parameter with value of "true").
                IList<Folder> homeFolders = home.Folders;
                foreach (Folder tmpFolder in homeFolders)
                {
                    Console.WriteLine("folder:" + tmpFolder.Name);
                }

                // List sheets (omit 'include' parameter and pagination parameters).
                PaginatedResult<Sheet> homeSheetsResult = smartsheet.SheetResources.ListSheets(null, null);
                foreach (Sheet tmpSheet in homeSheetsResult.Data)
                {
                    Console.WriteLine("sheet:" + tmpSheet.Name);
                }

                // Create folder in home
                Folder folder = new Folder.CreateFolderBuilder("New Folder").Build();
                folder = smartsheet.HomeResources.FolderResources.CreateFolder(folder);
                Console.WriteLine("Folder ID:" + folder.Id + ", Folder Name:" + folder.Name);
                //=========================================
            }

            // Setup text Column Object
            Column textColumn = new Column.CreateSheetColumnBuilder("To Do List", true, ColumnType.TEXT_NUMBER).Build();

            // Setup checkbox Column Object
            Column checkboxColumn = new Column.CreateSheetColumnBuilder("Finished", false, ColumnType.CHECKBOX).Build();

            // Add the 2 Columns (flag & text) to a new Sheet Object
            Sheet sheet = new Sheet.CreateSheetBuilder("New Sheet", new Column[] { textColumn, checkboxColumn }).Build();
            // Send the request to create the sheet @ Smartsheet
            sheet = smartsheet.SheetResources.CreateSheet(sheet);
            //=========================================
            // Example: Add two rows
            Func<string, Row> addRowHelper = primaryColVal =>
            {
                var cells = new Cell[] { new Cell.AddCellBuilder(sheet.GetColumnByIndex(0).Id, primaryColVal).Build() };
                var rows = new Row[] { new Row.AddRowBuilder(true, null, null, null, null).SetCells(cells).Build() };
                return smartsheet.SheetResources.RowResources.AddRows(sheet.Id.Value, rows)[0];
            };

            var rowA = addRowHelper("a");
            var rowB = addRowHelper("b");

            // Example: Move rowB above rowA
            var updateRowRequest = new Row.UpdateRowBuilder(rowB.Id)
                    .SetSiblingId(rowA.Id)
                    .SetAbove(true)
                    .Build();
            var updateRowResponse = smartsheet.SheetResources.RowResources.UpdateRows(sheet.Id.Value, new Row[] { updateRowRequest });

            //Indent rowA under rowB
            updateRowRequest = new Row.UpdateRowBuilder(rowA.Id)
                    .SetParentId(rowB.Id)
                    .Build();
            updateRowResponse = smartsheet.SheetResources.RowResources.UpdateRows(sheet.Id.Value, new Row[] { updateRowRequest });

            //=========================================
            // Example: Add two rows
            PaginatedResult<Sheet> sheetsSince = smartsheet.SheetResources.ListSheets(null, null, DateTime.UtcNow.AddDays(-5));

            PaginatedResult<Sheet> orgSheetsSince = smartsheet.UserResources.SheetResources.ListOrgSheets(null, DateTime.UtcNow.AddDays(-10));

            PaginatedResult<Report> reportsSince = smartsheet.ReportResources.ListReports(null, DateTime.UtcNow.AddDays(-5));

            PaginatedResult<Sight> sightsSince = smartsheet.SightResources.ListSights(null, DateTime.Now.AddDays(-5));

            //=========================================
            // Example: setup a webhook
            Webhook webhook = new Webhook();
            webhook.Name = "Test webhook";
            webhook.CallbackUrl = "https://someurl.com";
            webhook.Scope = "sheet";
            webhook.ScopeObjectId = 6810644029695876L;
            IList<string> events = new List<string>();
            events.Add("*.*");
            webhook.Events = events;
            webhook.Version = 1;
            webhook = smartsheet.WebhookResources.CreateWebhook(webhook);

            PaginatedResult<Webhook> webhooks = smartsheet.WebhookResources.ListWebhooks(null);

            //// Update the shared secret
            webhook = smartsheet.WebhookResources.GetWebhook(webhooks.Data[0].Id.Value);

            Webhook update_webhook = new Webhook();
            update_webhook.Enabled = true;
            update_webhook.Id = webhooks.Data[0].Id;
            update_webhook = smartsheet.WebhookResources.UpdateWebhook(update_webhook);

            WebhookSharedSecret shared = smartsheet.WebhookResources.ResetSharedSecret(update_webhook.Id.Value);

            smartsheet.WebhookResources.DeleteWebhook(update_webhook.Id.Value);

            //=========================================
            // Example: sights example
            PaginatedResult<Sight> sights = smartsheet.SightResources.ListSights(null);

            if (sights.TotalCount > 0)
            {
                Sight sight = smartsheet.SightResources.GetSight(sights.Data[0].Id.Value);

                ContainerDestination dest = new ContainerDestination();
                dest.DestinationType = DestinationType.FOLDER;
                dest.DestinationId = 3167806247200644L;
                dest.NewName = "My New Sight";

                sight = smartsheet.SightResources.CopySight(sights.Data[0].Id.Value, dest);

                Sight newsight = new Sight();
                newsight.Id = sight.Id;
                newsight.Name = "My New New Sight";
                smartsheet.SightResources.UpdateSight(newsight);

                ContainerDestination destToo = new ContainerDestination();
                destToo.DestinationType = DestinationType.FOLDER;
                destToo.DestinationId = 3110683182163844L;
                sight = smartsheet.SightResources.MoveSight(sight.Id.Value, destToo);

                smartsheet.SightResources.DeleteSight(sight.Id.Value);

                PaginatedResult<Share> sightShares = smartsheet.SightResources.ShareResources.ListShares(sights.Data[0].Id.Value, null, ShareScope.Workspace);
            }

            //=========================================
            // Example: cell images and partial success
            Sheet imageSheet = smartsheet.SheetResources.GetSheet(6810644029695876L, null, null, null, null, null, null, null);

            Cell[] cellsA = new Cell[] { new Cell.AddCellBuilder(imageSheet.Columns[0].Id.Value, true).Build(), new Cell.AddCellBuilder(imageSheet.Columns[1].Id.Value, "Foobar").Build() };
            rowA = new Row.AddRowBuilder(true, null, null, null, null).SetCells(cellsA).Build();

            Cell[] cellsB = new Cell[] { new Cell.AddCellBuilder(imageSheet.Columns[1].Id.Value, true).Build(), new Cell.AddCellBuilder(imageSheet.Columns[1].Id.Value, "Barfoo").Build() };
            rowB = new Row.AddRowBuilder(true, null, null, null, null).SetCells(cellsB).Build();

            BulkItemRowResult bulkAddResult = smartsheet.SheetResources.RowResources.AddRowsAllowPartialSuccess(6810644029695876L, new Row[] { rowA, rowB });

            Cell[] cellsC = new Cell[] { new Cell.AddCellBuilder(imageSheet.Columns[0].Id.Value, true).Build(), new Cell.AddCellBuilder(imageSheet.Columns[1].Id.Value, "FoobarII").Build() };
            Row rowC = new Row.UpdateRowBuilder(imageSheet.Rows[2].Id.Value).SetCells(cellsC).Build();

            Cell[] cellsD = new Cell[] { new Cell.AddCellBuilder(imageSheet.Columns[1].Id.Value, true).Build(), new Cell.AddCellBuilder(imageSheet.Columns[1].Id.Value, "BarfooII").Build() };
            Row rowD = new Row.UpdateRowBuilder(imageSheet.Rows[1].Id.Value).SetCells(cellsD).Build();

            BulkItemRowResult bulkUpdateResult = smartsheet.SheetResources.RowResources.UpdateRowsAllowPartialSuccess(6810644029695876L, new Row[] { rowC, rowD });

            ImageUrl imageUrl = new ImageUrl.ImageUrlBuilder("aVbWbXMsD5KsOu2 - CWtwSA").Build();
            IList<ImageUrl> imageUrls = new List<ImageUrl>();
            imageUrls.Add(imageUrl);

            ImageUrlMap imageUrlMap = smartsheet.ImageUrlResources.GetImageUrls(imageUrls);

            smartsheet.SheetResources.RowResources.CellResources.AddImageToCell(6810644029695876L, imageSheet.Rows[0].Id.Value, imageSheet.Columns[1].Id.Value,
                "d:\\Smartsheet\\vHepGiJaeL6GPOX3wAx8yaxD75ym5eAbk0GB-MSz0gc.png", "image/png");

            //=========================================
            //// Update two cells on a row
            //IList<Cell> cells = new Cell.UpdateRowCellsBuilder().AddCell(5111621270955908L, "test11", false).
            //		AddCell(2859821457270660L, "test22").Build();
            //smartsheet.Rows().UpdateCells(6497447011739524L, cells);
            ////=========================================

            //// Create a row and sheet level discussion with an initial comment
            //Comment comment = new Comment.AddCommentBuilder().SetText("Hello World").Build();
            //Discussion discussion = new Discussion.CreateDiscussionBuilder().SetTitle("New Discussion").
            //	SetComment(comment).Build();
            //smartsheet.Rows().Discussions().CreateDiscussion(6497447011739524L, discussion);
            //smartsheet.Sheets().Discussions().CreateDiscussion(7370846613333892L, discussion);
            ////=========================================

            //// Update a folder name
            //folder = new Folder.UpdateFolderBuilder().SetName("A Brand New New Folder").SetID(2545279862892420L).Build();
            //smartsheet.Folders().UpdateFolder(folder);
            ////=========================================

            //// Create 3 users to share a sheet with
            //IList<User> users = new List<User>();
            //User user = new User();
            //user.Email = "*****@*****.**";
            //users.Add(user);

            //User user1 = new User();
            //user1.Email = "*****@*****.**";
            //users.Add(user1);

            //User user2 = new User();
            //user2.Email = "*****@*****.**";
            //users.Add(user2);

            //// Add the message, subject & users to share with
            //MultiShare multiShare = new MultiShare.ShareToManyBuilder().SetMessage("Here is the sheet I am sharing with you").
            //	SetAccessLevel(AccessLevel.VIEWER).SetSubject("Sharing a Smartsheet with you").SetUsers(users).Build();

            //// Share the specified sheet with the users.
            //smartsheet.Sheets().Shares().ShareTo(7370846613333892L, multiShare, true);
            ////=========================================

            //// Create a single share to a specified email address with the specified access level
            //Share share = new Share.ShareToOneBuilder().SetEmail("*****@*****.**").SetAccessLevel(AccessLevel.VIEWER)
            //		.Build();
            //// Add the share to a specific sheet
            //smartsheet.Sheets().Shares().ShareTo(7370846613333892L, share);
            ////=========================================

            //// Create a share with the specified access level
            //share = new Share.UpdateShareBuilder().SetAccessLevel(AccessLevel.VIEWER).Build();
            //// Update the share permission on the specified sheet for the specified user.
            //smartsheet.Sheets().Shares().UpdateShare(7370846613333892L, 3433212006426500L, share);
            ////=========================================

            //// Create 3 cells
            //Cell cell = new Cell();
            //cell.Value = "Cell1";
            //cell.Strict = false;
            //cell.ColumnId = 5111621270955908L;
            //Cell cell2 = new Cell();
            //cell2.Value = "Cell2";
            //cell2.ColumnId = 2859821457270660L;
            //Cell cell3 = new Cell();
            //cell3.Value = "cell3";
            //cell3.ColumnId = 7877251644581764L;

            //// Store the cells in a list
            //List<Cell> cells1 = new List<Cell>();
            //cells1.Add(cell);
            //cells1.Add(cell2);
            //cells1.Add(cell3);

            //// Create a row and add the list of cells to the row
            //Row row = new Row();
            //row.Cells = cells1;

            //// Add two rows to a list of rows.
            //List<Row> rows = new List<Row>();
            //rows.Add(row);
            //rows.Add(row);

            //// Add the rows to the row wrapper and set the location to insert the rows
            //RowWrapper rowWrapper = new RowWrapper.InsertRowsBuilder().SetRows(rows).SetToBottom(true).Build();

            //// Add the rows to the specified sheet
            //smartsheet.Sheets().Rows().InsertRows(7370846613333892L, rowWrapper);

            //// Setup a row to be moved to the top of a sheet
            //RowWrapper rowWrapper1 = new RowWrapper.MoveRowBuilder().SetToTop(true).Build();
            //// Move the specified row
            //smartsheet.Rows().MoveRow(5701744190613380L, rowWrapper1);
            ////=========================================

            //// Create a sheet that is a copy of a template
            //Sheet sheet1 = new Sheet.CreateFromTemplateOrSheetBuilder().SetFromId(7370846613333892L).
            //	SetName("Copy of a Template").Build();
            //// Create the new sheet from the template
            //smartsheet.Sheets().CreateSheetFromExisting(sheet1, new ObjectInclusion[] { ObjectInclusion.DATA,
            //	ObjectInclusion.ATTACHMENTS, ObjectInclusion.DISCUSSIONS });
            ////=========================================

            //// Setup a sheet with a new name
            //Sheet sheet2 = new Sheet.UpdateSheetBuilder().SetName("TESTING123").SetID(7370846613333892L).Build();

            //// Update the sheet with the new name
            //smartsheet.Sheets().UpdateSheet(sheet2);
            ////=========================================

            //// Setup a publishing status to give a rich version of the sheet as read only
            //SheetPublish publish = new SheetPublish.PublishStatusBuilder().SetReadOnlyFullEnabled(true).
            //	SetReadOnlyLiteEnabled(false).SetIcalEnabled(false).SetReadWriteEnabled(false).Build();
            //// Setup the specified sheet with the new publishing status
            //smartsheet.Sheets().UpdatePublishStatus(7370846613333892L, publish);
            ////=========================================

            //// Setup a user with an email address and full permission
            //User user3 = new User.AddUserBuilder().SetEmail("*****@*****.**").SetAdmin(true).
            //		SetLicensedSheetCreator(true).Build();
            //// Create the user account
            //smartsheet.Users().AddUser(user3);
            ////=========================================

            //// Setup a user with new privileges
            //User user4 = new User.UpdateUserBuilder().SetAdmin(false).SetLicensedSheetCreator(false).
            //	SetID(4187958019417988L).Build();
            //// Send the request to update the users account with the new privileges
            //smartsheet.Users().UpdateUser(user4);
            ////=========================================

            //// Create a workspace with a specific name and ID
            //Workspace workspace = new Workspace.UpdateWorkspaceBuilder().SetName("Workspace Name1").
            //	SetID(8257948486002564L).Build();
            //// Update the workspace with the new name.
            //smartsheet.Workspaces().UpdateWorkspace(workspace);
            ////=========================================

            //smartsheet.Sheets().Attachments().AttachFile(4844590336370564L,
            //	@"../../../TestSDK/resources/getPDF.pdf", "application/pdf");

            //Attachment attach = new Attachment();
            //attach.Name = "Test";
            //attach.Url = "http://google.com";
            //attach.AttachmentType = AttachmentType.LINK;
            //smartsheet.Sheets().Attachments().AttachURL(4844590336370564L, attach);
        }
 /// <summary>
 /// <para>Creates a copy of the specified Workspace.</para>
 /// <para>It mirrors To the following Smartsheet REST API method:<br />
 /// POST /workspaces/{workspaceId}/copy</para>
 /// </summary>
 /// <param name="workspaceId"> the workspace Id </param>
 /// <param name="destination"> the destination to copy to </param>
 /// <param name="include"> the elements to copy. Note: Cell history will not be copied, regardless of which include parameter values are specified.</param>
 /// <param name="skipRemap"> the references to NOT re-map for the newly created folder
 /// <para>
 /// If "cellLinks" is specified in the skipRemap parameter value, the cell links within the newly created folder will continue to point to the original source sheets.
 /// If "reports" is specified in the skipRemap parameter value, the reports within the newly created folder will continue to point to the original source sheets.
 /// </para>
 /// </param>
 /// <returns> the created workspace </returns>
 /// <exception cref="System.InvalidOperationException"> if any argument is null or empty string </exception>
 /// <exception cref="InvalidRequestException"> if there is any problem with the REST API request </exception>
 /// <exception cref="AuthorizationException"> if there is any problem with  the REST API authorization (access token) </exception>
 /// <exception cref="ResourceNotFoundException"> if the resource cannot be found </exception>
 /// <exception cref="ServiceUnavailableException"> if the REST API service is not available (possibly due To rate limiting) </exception>
 /// <exception cref="SmartsheetException"> if there is any other error during the operation </exception>
 public virtual Workspace CopyWorkspace(long workspaceId, ContainerDestination destination, IEnumerable<WorkspaceCopyInclusion> include, IEnumerable<WorkspaceRemapExclusion> skipRemap)
 {
     IDictionary<string, string> parameters = new Dictionary<string, string>();
     if (include != null)
     {
         parameters.Add("include", QueryUtil.GenerateCommaSeparatedList(include));
     }
     if (skipRemap != null)
     {
         parameters.Add("skipRemap", QueryUtil.GenerateCommaSeparatedList(skipRemap));
     }
     return this.CreateResource<RequestResult<Workspace>, ContainerDestination>(QueryUtil.GenerateUrl("workspaces/" + workspaceId + "/copy", parameters), destination).Result;
 }