Final submission

Our idea with this solution is to provide to our customer a user friendly support solution, so they can easily contact us whenever they need.

A couple things to stress:

  1. The requests get stored in a single Azure SQL database, serving every customer
  2. The admin interface you see in the video connects to that database is not couple to any customer tenant. The admin interface has been integrated with the Azure AD to allow for seamless login between the admin interface and the SharePoint site for administration (see point 3).
  3. When creating a support ticket, the customer has to pick an area. These areas are unique for every customer. We can create a FAQ entry for each entry per customer. These FAQ entries are stored in an SharePoint list that is hosted in our admin site collection. The Arctic Support Requests App connects to both the customer tenant -AND- to our admin tenant. The FAQ entries are retrieved in real time from our admin tenant, while we retrieve identity information from the customer tenant.
  4. We synchronize customer and area information between Azure SQL server and our SharePoint admin site using an OfficeDev PnP TimerJob and the OfficeDev PnP TimerService. This information is used in the FAQ lists in the admin site to map an FAQ entry to a customer. The information is synchronized every 2 minutes.
  5. The app is generic, and has no hardcoded values tying it to a specific customer. We determine unique customer identities based on tenant information.
  6. When the user adds an app to the site an entry will be added to the Settings menu of a site collection from which the customer can create a new ticket.
  7. We don’t like IE

We have provide you a demo for this solution, so enjoy:

 

Head to Head SSO

  1. We picked a free identity provider, as we don’t have a 3rd party identity provider available
  2. We picked OneLogin simply for the ease of configuration.

Here is a short video on how’s work.

Ballmer peak

Our CEO decided a code stop on thurday evning after the dinner to make sure that everyone in the team does have a good time.

Instead of heading to the “code-room” we was heading to the bar. The team gathering together to have a great evning together. With beer and many good laugh we all was ready and looking forward for Friday the “hard-work” day and Saturday the “final-delivery” day.

We also had some great chat with Marie who join us too later in the evning, and of course our frustration pig was less frustrated after this evning!

IMG_0142


Aiming for:

Badge-TeamSpirit

Sharing is caring!

UPDATE! I bring up this post since we didn’t get any bagde or comment about this yesterday.

In the Arctic Support Requests solution we are building, we use the timerservice and a job to synchronize an Azure SQL database table to a SharePoint Online list.

SharePoint Online / O365 does not support the concept of the SharePoint timerjobs as we all used in on-prem farms. OfficeDev PnP build an equivalent,
called the TimerJob class which is available from https://github.com/OfficeDev/PnP/tree/dev/OfficeDevPnP.Core/OfficeDevPnP.Core/Framework/TimerJobs

We build a timerservice that can run on-prem or on a VM in the cloud which allows you to schedule timerjobs through a simple XML file. The service acts similar to
the SPTimerV4 service that ships with SharePoint On-Prem.

Adding jobs is just a matter of adding an entry to the XML file, creating a new job is simple a matter of creating an assembly that has a class that implements
the TimerJob class from the OfficeDev PnP project.

The timerservice will be part of the OfficeDev PnP offering in the future, and the code can be viewed already here: https://github.com/erwinvanhunen/PnP/tree/TimerService/Solutions/Core.TimerService

timerjob1

timerjob3

timerjob2


 Aiming for:
Badge-SharingCaring

Less is more.

Since we have customers with different knowledge in IT, we understand that we have to make this solution so user friendly as possible.
With this in mind, we have created a support site that we will call for “understanding by looking”.
We provide only what we need and nothing more. With this we are sure that no user will get frustrated or “get lost” in our site only to seek for help.

1

s2 s3

 

The same concept was implemented to our Admin site. What we wants is only the functions and informations that are neccessarly to solved the problem.
No extra functions are added just to fill out the site, and by doing this we can make sure that we can help our customers much faster.

a1

 

Since we and our customers might not always sitting beside a computer, our solution is also responsive so it would fit to other
devices like mobiles or tablets.

a2a3

With technologies like HTML5, CSS3, AngularJS and PnP we aslo manage to make our solutions smooth, responsive and userfriendly for our customers and for us administrator.


Aiming for:
Badge-HighFive Badge-GlossyPixels Badge-Hipster Badge-Salsa

Never miss any open tickets again!

If we only create a great support product and don’t actually spend time to solved the customers issue, the product will be (in our opinion) totally useless.
That’s why we decided to spend some time to create our “boss”. The main reason for this product is to make sure that we at any given moment can see if we
have any unsolved tickets or not.

Our boss is created based on the Windows 8 app downloaded on The Sphero homepage. To make it work with our soultion we had to create a web service
that is hosted on our SharePoint App. For every 2 seconds the boss send a call to get the status from our SQL Database hosted in Azure.

Based on the statuses it reacts in different ways:

Ok: It will turns green
NotOk: it turns blue
Bad: it turns red
VeryBad: it turns red and start to move like crazy.

To get the app to start pooling data the user punches the Check status. This start a task in the runs in a while loop and checks the status.

This method handles the click event and start or stops the puling the status. It Calls the webServiceCollor method

  private void CheckStatus_Click(object sender, RoutedEventArgs e)
        {
            var spUrl = txtSpUrl.Text;
            var userName = txtUserName.Text;
            var pw = pwBox.Password;
            stopTask = !stopTask;
            if (!stopTask && !taskIsRunning)
            {
                var task = System.Threading.Tasks.Task.Run(async delegate
                {
                    taskIsRunning = true;
                    while (!stopTask)
                    {
                        await Task.Delay(2000);
                        webServiceColor();

                    }
                    
                    try
                    {
                        m_robot.Roll(0, 0.0f);
                    }
                    catch (Exception ex)
                    {
                        errorMessage = "Unable to stop Sphero" + ex.Message;
                    }
                    errorMessage = "";
                    taskIsRunning = false;

                });
            }
        }

 

Here it calls the service and based on the response it calls sets that color of the ball and the Roll (this is how you tell the ball to move fist parameter is the angle the second is the speed where 1.0 is the top speed).

private async void webServiceColor()
        {
            
            var c = "";
            if (m_robot != null)
            {
                try
                {
                    var clint = new TestService.StatusClient(TestService.StatusClient.EndpointConfiguration.BasicHttpBinding_IStatus);

                    c = await clint.GetStatusAsync();
                }
                catch (Exception ex)
                {
                    
                    errorMessage = "Unable to connecto to the web service: " + ex.Message;
                    return;
                }

                try
                {
                    if (c.Equals("NotOk", StringComparison.CurrentCultureIgnoreCase))
                    {
                        m_robot.SetRGBLED(0, 255, 255);
                        m_robot.Roll(0, 0.0f);
                    }
                    if (c.Equals("Ok", StringComparison.CurrentCultureIgnoreCase))
                    {
                        m_robot.SetRGBLED(0, 255, 0);
                        m_robot.Roll(0, 0.0f);
                    }
                    if (c.Equals("Bad", StringComparison.CurrentCultureIgnoreCase))
                   {
                        m_robot.SetRGBLED(255, 0, 0);
                        m_robot.Roll(0, 0.0f);
                    }
                    if (c.Equals("VeryBad", StringComparison.CurrentCultureIgnoreCase))
                    {
                        m_robot.SetRGBLED(255, 0, 0);
                        m_joystick.moveForwardThenBack();
                    }
                }
                catch (Exception ex)
                {
                    errorMessage = "unable to communicate with sphero: " + ex.Message;
                    return;
                }
            }
        }

 

This one handles the very bad situation by starting moving forward in half a second then turn 90 decrees to the right and runs for half a second etc..

  private const float speed = 0.3f;
  private const int movementDefaultDelay = 500;
  
  public async void moveForwardThenBack()
        {

            m_sphero.Roll(0, speed);
            await Task.Delay(movementDefaultDelay);
            m_sphero.Roll(90, speed);
            await Task.Delay(movementDefaultDelay);
            m_sphero.Roll(180, speed);
            await Task.Delay(movementDefaultDelay);
            m_sphero.Roll(270, speed);
            await Task.Delay(movementDefaultDelay);

        }

 

sphero

Feel free to come to us to get a demo.


Aiming for:
Badge-GoNative

Badge-StairwayToHeaven

Badge-Thief

The story of Arctic Support Requests.

About KnowITAll
Is a company with five employees that are specialized in all Microsoft products.

Our team include
Erwin aka. CEO – The man who controls this company with only two words “YES” and “NO”.
Peder, Robin and Morten aka. Technicians specialist –  People behind all our great products and solutions (Front-end, Back-end, Side-end, Up-down-end developer).
Nicholas aka. User Xperience and Communications management – The person who care more about the look than the code.

Introduction to our product
Too many companies delivered products with no or really poor support. Most of the cases is that when the project is closed, the communication between the consultant/company and the customer also disappear.

KnowITAll thinks that support is an important part to have a great bond with our customer.

With great products, we also need great support!

With this in mind our company has decided to create a new and better support solution for all our customer. We called it for the Arctic Support Requests.

How our product work (overview)
knowitAllSandT

After a project is closed, we will install an Sharepoint app in our customers Sharepoint environment. With this app, our customers can easily search in our FAQ database and submit new tickets if neccessarly.

Our team will have access to the admin panel where we can see all the submitted tickets and the description of their problem, we can then together with our customer solved their problems.

Bonus! Sometimes it’s hard to keep track on all our tickets, that’s why we have invested in the Sphero aka. the Boss. Our boss is only in good mood if there is no open tickets, but when there is unsolved tickets or too many it will be … To be continued!


Aiming for:

Badge-ShowNTell