Community
Toggle navigation
Community
Q&A
Recipes
Ideas & Core Changes
Chat
Get Involved
Blog
Podcast
Learn
Ask Chip
Manuals
Lava
Styling
Rock U
Classes
Subscriptions
Developer Resources
Rock Community
Manuals
Search Results
Log In
Search Results
Universal Search
Go
Refine Search
The Administration Screen - Checking-out Check-in
OK, ready to get a little more technical? Let’s take a look at the Administration Screen. The Administration screen is where you choose your check-in options for the kiosk device you're starting. Check-in Administration Screen The Administration screen is the first screen you come to when you launch the check-in system. From this screen you can configure the check-in session by selecting: Check-in Theme Kiosk Device Check-in Configuration Areas The Check-in Theme field is where you select which look and feel you want to use for the check-in screens at that kiosk. You can learn more about the themes that ship with Rock in the Themes chapter below. The Kiosk Device field is where you choose which kiosk device to set this kiosk to. Among other things, this sets the location for the kiosk, determining which location-matching groups can check in here. The Check-in Configuration field allows you to select which check-in configuration you want to use for the kiosk. The Area(s) and Additional Area(s) checkboxes are where you identify which check-in areas you want to enable for the kiosk. Rock’s check-in system will allow checking into any area from any number of configurations at the same time, but it can only use one type of configuration settings at a time. Area(s) are all of the areas in the selected configuration that are allowed to check in based on their location matching the location setting of the kiosk device. Additional Area(s) are any other areas also configured to use the...
Attendance Self Entry - Checking-out Check-in
With the advancement of online services, getting accurate engagement data can be a challenge. To address this need, Rock lets attendees report their own attendance from your external site. All a person needs to do is check a few boxes to indicate who’s watching the service with them. Attendance Self Entry Pictured above, Ted is watching the service at home with Cindy and Alex. Noah is at grandma’s house this weekend, so isn’t selected. Below the family you can see Jim and Sarah Simmons are over at the Decker house watching the service too. With everyone in the room accounted for, all Ted needs to do now is click the Check-in button near the bottom of the page to have their attendance recorded. Using with Moments The Attendance Self Entry feature pairs very nicely with Church Online Platform’s “Moments” feature. Check out the details here to learn more. Attendance Self Entry In Detail In the above example, Ted was logged in to the external website. That’s how Rock was able to find him and his family. There’s a little more to the process if Rock doesn’t know who the person is. In this section, we’ll walk through the full attendance self-entry process for Alisha. Alisha is new to the organization and is watching an online service with her family for the first time. Rock can’t track attendance for someone who’s not in the system, so we’ll ask her for some basic information to get started. Attendance Self Entry - Person...
What's The Use? - Blasting Off With Workflows
Workflows. That word can be confusing. So, let's simplify it. Workflows are a series of steps that can be automated. We all know computers are better at repetitive tasks than humans. Rock workflows provide a framework for getting computers to do what they're good at so we can focus on what we humans do best - relationships. So, what can Rock do? We’re glad you asked! Request Systems: One common use for Rock workflows is to create request systems that can take information from a person and provide automated flow based on their input. An HR Position Request or IT Request are good examples of these functions. Data Changes: Workflows can be launched in response to data changes in Rock. For instance, you could configure a workflow to be launched whenever a group is added to the system. This workflow could email an administrator, or even prevent that creation if certain information about the group is not provided. Background Tasks: By using a Rock Job, you can enable a workflow to run on a specified schedule. When you're done with this manual, we think you'll see how workflows empower you to create powerful application logic without needing to become a programmer. Once you understand the basics, your mind will start racing with all of the ways you can put them to use. These are just the tip of the iceberg of how workflows can be used within an organization. Our fear is the list above will pigeonhole your thinking of...
Launching Workflows - Blasting Off With Workflows
Once you have your workflow types configured, you're ready to start using them. There are several ways you can launch a workflow. Each method is discussed in detail below. Workflow Entry Block Many workflows will start with a person filling out a form. This is certainly the case with workflows like IT requests, facility operations requests, HR approvals, etc. There are a couple of ways you can launch these types of workflows. Workflow Category Browser Workflow Category Browser Rock ships with a workflow entry page under Tools Workflows. This page displays a list of workflow categories with the ability to expand the category to view its workflows. Clicking on a workflow will launch it and show its first entry screen. You can configure which categories are displayed by modifying the block's settings. Category and workflow security will also be used to personalize the display to the specific rights of the person viewing the page. Direct Workflow Entry There may be times when you'd like to place a specific page in the navigation that takes you directly to a workflow entry screen. An example of this is the Contact Us page on the external website. This page has been configured with the Workflow Entry block. One of the block settings of this block type allows you to define a specific workflow type to launch when the page loads. This is a great way to include links to important workflows into your internal and external sites. The magic of this technique is...
Managing Workflow Instances - Blasting Off With Workflows
Not all workflows run and complete immediately. In fact, most take several hours or days to complete as they wait for input from people or other external events to occur. There are several blocks to help you manage workflows and see them to completion. Managing Workflows Manage Workflow Link On the workflow entry screens you may have noticed a Manage link to the right of the workflow name. You’ll only see this link if you have Edit access to the workflow type. Clicking this link will take you to a grid of all the workflows for this workflow type. This grid allows you to filter the workflows by several different criteria including: Workflow Name Initiator Status Text Activation Date (the date it was launched) Completion Date State (is it currently active or completed) Clicking on a workflow will show you its details. Manage Workflow You might have noticed the Delete button near the bottom of the grid in the screen pictured above. You can select one or more workflows from the list and use this button to delete them all at once. Keep in mind that because deleting workflows can take some time, the delete is performed in the background. Viewing Workflow Details After clicking a workflow from the grid above you’ll see the details of the workflow instance. From here you can see the state of all of the workflow attributes as well as all the activities that are in process or have completed. Workflow Details View 1 Workflow...
Workflow Notes - Blasting Off With Workflows
Workflows are a powerful tool to automate your organization's processes. When you're building them, you'll want to pay close attention to how individuals interact with them. You especially want people to be able to interpret the current state of the workflow and a history of events that have occurred. To help with that we've created workflow notes. Let's look at a few ways that notes can be integrated into your workflows. Adding Notes From the Workflow Details When looking at the details of a workflow you'll notice that you have the option to add notes. This is a great way to be able to provide context or additional information at any time (even after a workflow has been completed). Adding Notes From the Workflow Details Adding Notes From Entry Forms Another way to add notes is from entry forms. You'll notice on the Form action there is a setting to Enable Note Entry. When it's set, you'll see the note entry form next to the selected form fields. Adding Notes From Entry Forms Adding Notes From Workflow Actions The final way to add workflow notes is using workflow actions. This allows you, the workflow author, to automatically create notes about the workflow processes. Adding Notes From Workflow Actions 1 Note This is the text of the note. Be sure to use Lava for extra power. 2 Note Type When you add notes using actions, you can style the note in several different ways with Note Types. These note types are...
Webhook to Workflow - Blasting Off With Workflows
Now that you're a workflow guru, let's turn up the volume to 11. As you've seen, there are several ways that you can launch workflows built into Rock. But what if we told you you could launch workflows from Twitter, Wufoo, Formstack, Dropbox, Evernote, Email, or... basically any modern web service? That's the power of Webhooks to Workflows. Most modern Web Services use the concept of webhooks. This allows the service to make calls out to other systems when certain events occur. For instance, Formstack can call out to Rock, using a webhook, every time a form is completed. There are also services like Zapier or Flow that help to manage the flow of webhooks from service to service. Configuring a Webhook to a Workflow You configure the linkage from a webhook to a workflow using a Defined Value. These are configured under Admin Tools General Settings Defined Types Workflow Webhook. Each webhook that comes in will go through this list to determine which workflow types to launch. That determination is made by evaluating the Lava in the Process Request attribute of the Defined Value. If the Lava returns 'True' a workflow of that type will be started. All of the Defined Values will be considered for each webhook that is called. All of the defined values whose Process Request Lava returns 'True' will run. It's important that this template is very discerning in making sure that only the correct workflow types are launched. One way to simplify this matching...
Workflow Import/Export - Blasting Off With Workflows
Sometimes a workflow you create is worth sharing with those outside of your organization to other community members using Rock! You can do this by using the workflow export option. Navigate to Admin Tools Power Tools Workflow Import/Export. Import/Export Details Now we all know that workflows can be complex and very specific to your organization. In the event that you have a workflow that isn’t so custom, this ability can be a game changer for those in the Rock community. Below is a general overview of the Export/Import page. Some workflows may not export correctly Complex workflows may have issues being exported! Be sure to always double check your export before sharing it. Feel free to use the Rock Demo site to test it out if you'd like! Workflow Import/Export 1 Workflow Type This dropdown will populate with all of the currently available workflows. Navigate through the options to find yours to export. 2 File If you are the one receiving a workflow, click the upload button to find the .json file to Import. 3 Category Choose the desired category the imported workflow will load to. 4 Test Only You can avoid any surprises that might come up during your import by first importing in Test Only mode. This will run through the import process without actually importing the workflow so you can spot issues in advance.
A Basic Block - 101 - Launchpad
When you look at Rock you're basically viewing a collection of blocks on a page. This was described a bit in the Designing and Building Websites guide. A well-built block can be used over and over again for slightly different situations. Let's get started with the basics. A block is simply a small, reusable chunk of functionality, and it can do nearly anything you can dream up. It can be added to one or more pages, and depending how it's designed, it can be added multiple times to the same page. In ASP.NET terms, a block is really just a User Control and it is comprised of a file containing the HTML/markup (*.ascx) and a file containing some code (*.ascx.cs). Example of a block's markup file <%@ Control Language="C#" AutoEventWireup="true" CodeFile="HelloWorld.ascx.cs" Inherits="RockWeb.Plugins.org_RockSolidChurch.Utility.HelloWorld" %> <h1>Hello World</h1> Example of a block's code-behind file. using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; namespace RockWeb.Plugins.org_RockSolidChurch.Utility { [DisplayName( "Hello World" )] [Category( "org_RockSolidChurch > Utility" )] [Description( "This is where you put your block's description." )] public partial class Plugins_org_RockSolidChurch_HelloWorld : Rock.Web.UI.RockBlock { protected void Page_Load(object sender, EventArgs e) { // This is where your code normally goes. // Don't use this as an example block! Try looking at the // StarkDetail block under the Blocks\Utility folder. } } // more code would be here... } As seen in the QuickStart Tutorials, all custom Rock blocks inherit from the Rock.Web.UI.RockBlock base class. This allows them to be used on a page...
Using the Grid and GridFilter - 101 - Launchpad
Although the Rock Grid and GridFilter are just two reusable UI controls out of more than a hundred we created for you, they are worth mentioning here since you'll probably use them pretty often. The markup for a Grid is simple but you also have many other rock controls that can be bound in your grid columns. Here's an example from the SiteList block: <div class="grid grid-panel"> <Rock:Grid ID="gSites" runat="server" AllowSorting="true" OnRowSelected="gSites_Edit"> <Columns> <Rock:RockBoundField DataField="Name" HeaderText="Name" SortExpression="Name" /> <Rock:RockBoundField HeaderText="Description" DataField="Description" SortExpression="Description" /> <Rock:RockTemplateField HeaderText="Domain(s)"> <ItemTemplate><%# GetDomains( (int)Eval("Id") ) %></ItemTemplate> </Rock:RockTemplateField> <Rock:RockBoundField HeaderText="Theme" DataField="Theme" SortExpression="Theme" /> <Rock:BoolField DataField="IsSystem" HeaderText="System" SortExpression="IsSystem" /> <Rock:SecurityField TitleField="Name" /> <Rock:DeleteField OnClick="gSites_Delete" /> </Columns> </Rock:Grid> </div> In your code you bind the grid's DataSource to a set of data as seen below. As you'll see, we're also using the Grid's SortProperty to sort the data: SiteService siteService = new SiteService( new RockContext() ); SortProperty sortProperty = gSites.SortProperty; var qry = siteService.Queryable(); if ( sortProperty != null ) { gSites.DataSource = qry.Sort(sortProperty).ToList(); } else { gSites.DataSource = qry.OrderBy( s = s.Name ).ToList(); } gSites.DataBind(); When it's rendered it looks like this: Example of a rendered Rock Grid Tip! You'll typically want to wrap your Grid in a div with the grid grid-panel classes for proper grid styling. Filter Options If your grid potentially has too much data, you'll want to include a GridFilter control above your grid. Inside the GridFilter add any controls you'll use to collect filtering criteria from the user. Here is an example as...
The Block Configuration Slide Out Bar - 101 - Launchpad
Your Own Edit Button To use the edit button in the slide-out bar that opens when you click on the Block Configuration toolbar you can extend the RockBlockCustomSettings class instead of the usual RockBlock class. Once you do this, you only need to override and implement your own ShowSettings() method. That method will be called by Rock when a person with edit access clicks the edit button. The Side-Out Bar 1 Slide-Out Bar Shows a custom edit icon element added into the slide-out bar. This example code from the DynamicReport block illustrates the concept. Here the block loads some data, binds some filters and then calls the Show() method of a model where all the custom stuff exists. protected override void ShowSettings() { pnlConfigure.Visible = true; LoadDropDowns(); ddlReport.SetValue( this.GetAttributeValue( "Report" ).AsGuidOrNull() ); txtResultsTitle.Text = this.GetAttributeValue( "ResultsTitle" ); txtResultsIconCssClass.Text = this.GetAttributeValue( "ResultsIconCssClass" ); txtFilterTitle.Text = this.GetAttributeValue( "FilterTitle" ); txtFilterIconCssClass.Text = this.GetAttributeValue( "FilterIconCssClass" ); BindDataFiltersGrid( false ); ddlPersonIdField.SetValue( this.GetAttributeValue( "PersonIdField" ) ); mdConfigure.Show(); } Additionally, any block property you've given a category of CustomSetting will be hidden in the normal block settings. This is handy when you want to do something beyond the basics provided by the normal block settings area. Heads-up! Changes coming in Rock McKinley 3.0 will make this even easier. -- I Need More Control, Captain! If you need more than a single edit pencil button, you can insert your own controls into the slide-out bar by overriding the GetAdministrateControls() method. This is exactly how the RockBlockCustomSettings class did...
Saving Custom Data - 202 - Ignition
There's so much more we can do with just blocks, but we suspect you want to create your own custom entities that can be saved to the database. Since Rock uses Microsoft's Entity Framework we'll show you how simple this is with a "code first" approach. Prerequisites Although what we're about to do is pretty simple, we can't turn you into an experienced C# web-developer. You should have a basic understanding of ASP.NET Web Forms otherwise you'll probably be a bit lost in this chapter. Referral Agency Sample Project The Rockit SDK comes with a reference project called "Sample Project". It includes a custom entity called ReferralAgency and also included in your plugin folder are two custom blocks, one to list existing referral agencies and one to add/edit/view the details of a referral agency. In this section we'll walk you through the code for the custom ReferralAgency entity that belongs to the generic org.rocksolidchurch.SampleProject so you have a solid foundation for creating your own custom entities. Let's say we want to keep track of agencies that your church/organization refers people to. We are going to create a ReferralAgency class that models an agency with its properties and a very simple ReferralAgencyService to act as our liason with the database. These classes will rely on the base Rock classes but We won't go too deeply into those inner workings so we can keep this chapter simple. Then we're going to create two blocks to help us manage our ReferralAgency items. Rock...
Common Entities - 202 - Ignition
Now that we've got some of the inner workings out of the way, let's learn a little about each of the primary entities in Rock. This section might seem a bit tricky because entities often refer to other entities that we haven't explained yet -- please bear with us. If you read something that's not quite making sense, just keep reading and it should become clear. Help Us Help Everyone If you think we've missed the mark trying to explain something, please let us know. Use the little megaphone "Improve" feature (available online on the right side of the page) and give us the details on how you might write it. We love it when you help us help everyone. Person What can we tell you about this that you don't already know? This is a pretty straightforward entity except perhaps its relationship to the PersonAlias that we touched on in the last book. The PersonAlias is almost always the glue that connects other entities to the Person entity. You'll do well to not forget this tidbit. Here the more commonly used properties you should consider when working with people in your code: FirstName, NickName, LastName, FullName, FullNameFormal, FullNameReversed - You get the drift. These are their various names in various formats. Many of these are virtual properties that are just computed from the first and last name properties. EmailPreference - Tells you whether when it's ok or not ok to use their email (ok, never, or no mass/bulk emails,...
Advanced Entity Guide - 202 - Ignition
Now let's look at several entities that are a little less common or a little more obscure than the day to day entities. Attendance This represents an instance where a person attended or was scheduled to attend a group or event. An attendance will essentially always have the following properties: PersonAliasId - The alias id of the person who did/was to attend. StartDateTime - The date and time the person checked in. RSVP - An enum indicating whether or not the person had RSVP'd. (0 = No, 1 = Yes, 2 = Maybe) DidAttend - A Boolean indicating whether or not the person attended. ScheduleId - The Schedule Id for which the person did/was to attend. GroupId - The Group Id for which the person was related to when the check-in occurred. SundayDate - The date of the Sunday for the week the attendance occurred. This represents an instance where a person attended or was scheduled to attend a group or event. An attendance will essentially always have the following properties: AttendanceCodeId - The Id to the AttendanceCode that has the security token that was created for the attendance record. LocationId - The Location Id where the person did/was to attend. DeviceId - The device the person used when they checked in. CampusId - The campus where the attendance occurred. DidNotOccur - a Boolean which will be set to true if the event for which the person was to attend did not occur. Attribute & AttributeValue As mentioned elsewhere, nearly...
Fetching Data - QuickStart Tutorials
Now that you've seen your code run in Rock, let's actually fetch some existing data from Rock. We're going to build a block that lists all the names of everyone in the database. A block that fetches data Step 1 - Copy sample block Let's create a new block but this time let's save some time by starting with the example Stark block that comes shipped with Rock. Create a new Tutorials folder in RockWeb\Plugins\org_rocksolidchurch\ and copy the StarkDetail.ascx file (along with its .ascx.cs file) from the RockWeb\Blocks\Utility\ into it. Rename the StarkDetail.ascx file HelloWorldFetchingData. Tip: We're using a "Tutorials" folder to keep our related code blocks nice and organized. It's a good idea to organize your associated blocks together in a common folder and project name. Step 2 - Update classname/namespace Now let's make this our own. We need to edit the classname and namespaces so that our code does not collide with any other existing code. Edit the HelloWorldFetchingData.ascx file and change the Inherits="RockWeb.Blocks.Utility.StarkDetail" to Inherits="RockWeb.Plugins.org_rocksolidchurch.Tutorials.HelloWorldFetchingData", remembering to replace org_rocksolidchurch with our own organization's namespace. HelloWorldFetchingData.ascx Similarly, update the namespace in the HelloWorldFetchingData.ascx.cs from RockWeb.Blocks.Utility to RockWeb.Plugins.org_rocksolidchurch.Tutorials and update the class name from StarkDetail to HelloWorldFetchingData. You'll also need to ensure that the code has the following using statements: using System; using System.ComponentModel; using System.Linq; using System.Web.UI; using System.Web.UI.WebControls; using Rock.Data; using Rock.Model; using Rock.Attribute; You probably noticed the three lines just above the class definition called DisplayName, Category, and Description. These class decorator attributes are used to...
Configurable Blocks - QuickStart Tutorials
You're making great progress. Now let's continue with the previous tutorial and show you how to make the block configurable using Block Attributes. Reviewing Your Options The grid we created might list thousands of records. Perhaps we should limit it to include only males? You could hardcode that logic into a Where clause like this: var items = new PersonService( new RockContext() ).Queryable() .Where( p => p.Gender == Gender.Male ).ToList(); However, it would be smarter to make the gender choice a configurable setting. This is where Block Attributes come in handy. They are one of Rock's amazingly powerful features. Let's see how easy it is to add a configuration setting to the block. Step 1 - Add an Attribute Edit the HelloWorldFetchingData.ascx.cs file and add a CustomRadioListField attribute just above the class definition like this: using Rock.Attribute; // ... [CustomRadioListField( "Gender Filter", "Select in order to list only records for that gender", "1^Male,2^Female", required: false )] public partial class HelloWorldFetchingData : Rock.Web.UI.RockBlock { //... Note: The using Rock.Attribute; gives you access to all kinds of different block attributes in Rock. Adding the CustomRadioListField allows the administrator to optionally pick either Male or Female in the block property settings. It's optional because we've set the 'required' parameter to false. In a few minutes once you're done and the block is on a page, you can access these settings by clicking the (Block Configuration) button in the Admin Toolbar followed by the (Block Properties) button from the block's fly-out menu. HelloWorldFetchingData.ascx But...
Connecting Blocks - QuickStart Tutorials
It would be nice if our block would take you to the person's details when you click a name, right? Let's make that happen. Step 1 - Add an event handler to the grid First we'll set an event handler named gPeople_RowSelected for the OnRowSelected property of the grid. We also need to let the grid know that the Id property of an item in the grid represents the key/identifier for the item in each row. We do this by adding DataKeyNames="Id" to the grid's markup. We'll use the key value when we handle the OnRowSelected event in our code. <Rock:Grid ID="gPeople" runat="server" AllowSorting="true" OnRowSelected="gPeople_RowSelected" DataKeyNames="Id"> Step 2 - Handle that event in code Now we can write code to do something when a particular row is clicked. Since Rock already has a page with a named route "~/Person/{0}" for viewing a person's details, all we need to do is take the person's Id (for the selected row's key) and redirect to the route. Edit the *.cs file and add this event handler: protected void gPeople_RowSelected( object sender, RowEventArgs e ) { int personId = (int)e.RowKeyValues["Id"]; Response.Redirect( string.Format( "~/Person/{0}", personId ), false ); // prevents .NET from quietly throwing ThreadAbortException Context.ApplicationInstance.CompleteRequest(); return; } That's all there is to it! That was a bit too easy. What will you do when there is no named route available? Let's try a different, configuration based approach for those cases. Yep, you guessed it. Another block property attribute to the rescue. Step 2 redux...
Customizing and Securing Blocks - QuickStart Tutorials
Sometimes you want to show certain features only to certain people or people with a certain role. Let's add a standard Add button to the bottom of the grid that only shows up for people who are authorized with "Edit" rights to our block. Enabled Add button on grid Step 1 - Check the user's authorization Use the IsUserAuthorized() method by passing it the name of an action. That method returns true if the person viewing the block is authorized for that action. When true, we'll set the grid's Action bar to show the Add button. Add the using Rock.Security; in the top section of your block to get access to the Authorization class and add the authorization check to the OnInit method like this: using Rock.Security; // ... protected override void OnInit( EventArgs e ) { base.OnInit( e ); if ( IsUserAuthorized( Authorization.EDIT ) ) { gPeople.Actions.ShowAdd = true; } // ... Note If it makes more sense for the authorization check to be based on the page where the block lives, you can do a page authorization check like this: var currentPage = Rock.Web.Cache.PageCache.Read( RockPage.PageId ); currentPage.IsAuthorized( Authorization.EDIT, CurrentPerson ); Step 2 - Handle the button click Let's wrap this up by handling the click action for your new Add button. We'll register a click handler called gPeople_Addin the OnInit() method and then create the handler method in the appropriate code region. protected override void OnInit( EventArgs e ) { base.OnInit( e ); if ( IsUserAuthorized( Authorization.EDIT )...
Saving Custom Data - QuickStart Tutorials
There's so much more we can do with just blocks, but we suspect you want to create your own custom data that can be saved to the database. Since Rock uses Microsoft's Entity Framework we'll show you how simple this is with a "code first" approach. Prerequisites Although what we're about to do is pretty simple, we can't turn you into an experienced C# web-developer. You should have a basic understanding of ASP.NET Web Forms otherwise you'll probably be a bit lost in this chapter. Let's say we want to keep track of agencies that your church/organization refers people to. We are going to create a ReferralAgency class that models an agency with its properties and a very simple ReferralAgencyService to act as our liason with the database. These classes will rely on the base Rock classes and base reference classes of your Rockit SampleProject. (We won't go too deeply into those other pieces so we can keep this tutorial simple.) Then we're going to create two blocks to help us manage our ReferralAgency items. Rock Groups Rock Depending on your exact needs you might be able to use Rock's super-flexible Groups system along with Rock's general purpose Attributes system. If so, it will mean you won't have to write any code. However for the purpose of this tutorial we'll pretend you really needed to create your own custom model. Step 1 - Add a Project Let's create a class library project to hold our model classes. Make sure nothing...
Hosting Credit for Non-Profits - Rock Solid Azure Hosting
So you've heard about Microsoft Azure's $3,500 annual hosting credit for non-profits, and you'd like to give it a try? Good news; those who have gone before you have marked the path to success. First, though, let's go over a few things we need to know up front. How Do I Receive My Credit? The $3,500 credit allows you to "spend" up to $291 per month with approved Azure products, and you'll be able to track your usage and the remaining balance in regular statements. Although the program expires one year after you set it up, Azure for Nonprofits has stated that they plan to do an "annualized refresh," turning this into a perpetual donation. Thanks, Microsoft! Prerequisites Yes, prerequisites. While Azure's hosting credit is an exciting prospect and a good fit for many organizations, it may not work for all. Take a look at this short list to see if it will work for you. Organizations must be nonprofit or non-governmental organizations with 501(c)(3) status under the United States Internal Revenue Code. Religious organizations are allowed. What does that mean? It essentially means that you must be licensed as a 501(c)(3) or NGO and you must be a US-based organization. To sign up for the 501(c)(3) grant for $3,500 annually you will need to: Register for TechSoup. Register for Microsoft Philanthropies. Below we have the links and steps on registering for both of these. -- To sign up for the 501(c)(3) grant for $3,500 annually you will need to...
«
0
1
2
3
4
5
6
7
8
»
Error