Represents the webhook object.
Inheritance: NamedModel
 /// <summary>
 /// <para>Updates the Webhook specified in the URL.</para>
 /// The request body is limited to the name, events, callbackUrl, enabled and version attributes.</para>
 /// <para>It mirrors To the following Smartsheet REST API method: PUT /webhooks/{webhookId}</para>
 /// </summary>
 /// <param name="webhook"> the webhook To update </param>
 /// <returns> the updated webhook </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 Webhook UpdateWebhook(Webhook webhook)
 {
     return this.UpdateResource("webhooks/" + webhook.Id, typeof(Webhook), webhook);
 }
 /// <summary>
 /// <para>Creates a new Webhook.</para>
 /// <para>The request body is limited to name(required), callbackUrl (required), scope (required)
 /// scopeObjectId (required), events(required), version(required)</para>
 /// <para>It mirrors To the following Smartsheet REST API method:POST /webhooks</para>
 /// </summary>
 /// <param name="webhook"> the webhook to be created </param>
 /// <returns> the created webhook </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 Webhook CreateWebhook(Webhook webhook)
 {
     return this.CreateResource("webhooks", typeof(Webhook), webhook);
 }
        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);
        }