3 Steps for Organizational Change Management

By Sara Weber

Change Management Tool Kit


Navigating a new ERP software implementation can be a complicated and difficult process. Meeting the needs of the business users and understanding the emotional needs of the organization as they make this transition requires careful planning. Interpersonal management of the change is often overlooked in implementation projects. 

In this article we’ll break down how to succeed at organizational change management in three simple steps 

Step 1 – Prepare: Readiness Assessment & Project Team

Start your preparation with a Readiness Assessment. The readiness assessment will help the leadership team to both evaluate the change from an organizational perspective and provide consistent messaging when the leadership team communicates the change to the organization. It demonstrates that they have thought through the impact to team members and alignment of this change to the organization’s overall strategy. Those two key components will instill both respect and confidence in moving this change forward.  

The assessment should answer the following questions about the change. 

  • What is the purpose behind the change? 
  • Why is the change important from an organizational standpoint? 
  • Which groups will be affected by the change? 
  • Where are there possible risks, potential resistance? 
  • When will the change take affect? 

Now that your Readiness Assessment is complete, you need to build your Project Team. You may be a small organization where you are team, or you may have a 30-person team. The key is that the team is committed to the success of the change, strong communication (frequent communication and is open about ideas and concerns alike), and well defined and executed role-based communication to get the rest of the company on-board. 

Step 2 – Manage: Change Management Strategy 

It takes effort to effectively manage organizational changeConsider defining and documenting what your definition of success looks like for this change. Maybe it’s 100% user adoption, or maybe it’s user satisfaction rating of 90% or greater; either way, it’s important to choose and agree upon a metric that will help to define your goal.   

A Change Management Strategy is a great place to document the “Who, What, Why, When” for communications surrounding the change. Most people who would consider themselves adverse to change isn’t because of the change itself, but rather the uncertainty around the change. You can help your organization reduce that uncertainty bdefining and executing regular, targeted communications.  Here is a sample of what a targeting communication plan inside the change management strategy document might look like for an ERP implementation: 

Step 3 – Reinforce: Change Management Checklist

The change has been implemented, but you’re not quite done yet.  If you look at our ERP example above, you can see that there are at least 4 points in this example where we continue to communicate even after the change is put in place. That is because the key to truly successfully organization change management is to reinforcing the change.  Here are some tips on how to do that! 

  • Listen to and collect individual feedback very soon after implementing the change 
  • Audit individual compliance 
  • Manage and respond to resistance very quickly to avoid growth 
  • Implement corrective action 
  • Most importantly – take the time to Celebrate your Success  

Organizational change management is achievable. With a little planning, and a lot of communication, you can go from an organization that fights change to an organization that handles change with ease. After all, as the Greek philosopher Heraclitus one wrote, “change is only constant in life”. 

Below is a checklist of our tips from above that you can take and use in your own organization:

Sage Intacct

Sage Intacct 2019 Release 2 Highlights

By Sadie Arneson

Sage Intacct just launched the latest version—Sage Intacct 2019 Release 2.

R2 is an important release offering new capabilities that help users save time and reduce risk and fraud. Below we highlight the new UI, the new bank reconciliation tool, and enhancements to contracts in the projects module.

For a complete overview, please see the 2019R2 notes on Community.

Action UI

Default UI Switches to Action UI
Things might be looking a little different. The Action UI becomes the default user interface a few weeks after Release 2 goes live. More users will use the power of the Action UI—the new user interface that shaves seconds from navigation you perform hundreds of times a day, personalizes the way you work, and enables access to new innovations to drive productivity and growth across your organization. Please note you will be able to opt out of Action UI, if you would like.

Entity Picker
If you’re part of a large, global organization and often switch between business entities to perform your work, the latest enhancements to the entity picker save time and reduce errors.

  • Save seconds on every entity change with recently used entities and type ahead in search. No more scrolling through a long list of entities to find what you need.
  • Reduce errors associated with being in the wrong entity with unlimited entity colors to cue you at a glance that you’re in the right place.
  • Take advantage of entity colors without the redundant setting of preferences across Sage Intacct users. Set preferences once at the company level instead of each user setting it themselves.

Company Preferences
Eliminate the redundant setting of preferences across Sage Intacct users with the ability to set entity colors and application order at the company level. Entity colors provide visual cues at a glance that you’re in the right entity. Application order speeds navigation by organizing to the way your company works. So, all users can take advantage of the time savings and error reduction immediately upon setup.

Bank Reconciliations

Segregation of Duties
Catch errors and prevent fraud with segregation of duties in bank reconciliations. Separate permissions for viewing and matching, reconciling, and reporting ensure you only access the functionality you need for your role. This allows for improved oversight to check for errors and identify potential fraud.

Match Reversed and Voided Payments in Import
Eliminate an additional reconciliation for reversed and voided payments. Now you can select and match these transactions even if there isn’t a corresponding transaction in your bank file. You shave minutes from your reconciliations.

Enhanced Contracts with Projects

Step Billing on Percent Complete
Billing on percent of project completion allows you to bring cash into your business as the project progresses. For instance, if your contract allows, you can bill up to 50% once you reach the 25% project complete threshold. When coupled with the collection of payment before work is started, you bring cash into the business even sooner and reduce the risk of not getting paid.

Project Time Deferred Revenue
Automate compliance with ASC 606 requirements for service-based variable considerations. Now you can estimate and defer revenue for expected timesheet billings on contracts. When project timesheet hours are approved and invoiced, billings are automatically aggregated, and revenue is recognized based on actual timesheet values. You eliminate the manual effort, saving hours of complex spreadsheet calculations and re-entry into Sage Intacct.

Sage Intacct

What is new in Sage Intacct Release 4?

By Sadie Arneson

Sage Intacct just launched their latest version—Sage Intacct 2018 Release 4.

Complexity in our modern world is everywhere. Some might argue that Accounting and Finance have more than their fair share of it. We love simplicity, but we don’t want to be restricted. Sage Intacct was built to take the hard-to-do nature of accounting and make it simple. Over time, we’ve added capabilities to make it comprehensive, auditable and scalable.

Complexity can keep you from focusing on more important things, such as:

  • Planning future growth
  • Reporting on your business in real-time
  • Getting an accurate picture of profitability
  • Complying with regulations
  • Managing the operations of your business

Read on to learn how Release 4 provides more simplicity in your close, operational, and day to day activities so that you can focus on the important, strategic decisions that help grow your business.

Release 4 Highlights

Sage Intacct Budgeting and Planning

To achieve business goals, you need financial budgeting and planning that’s effective, collaborative, and strategic. Spreadsheets work great when your business is small and uncomplicated. But, as you grow, so do your needs for collaboration, security, and scenario planning. Unfortunately, until now most budgeting and planning solutions have been built to handle the needs of large companies. Budgeting and planning systems built for larger companies require big company budgets and resources to deploy, integrate, and maintain. This makes them unsuitable small to midsize organizations.

Sage Intacct Budgeting and Planning is a modern cloud solution that was built for small to midsize businesses. It’s powerful, yet easy to use and deploy. Here are some of the benefits:

  • Fast deployment – Use your chart of accounts, dimensions, and actuals from Sage Intacct to get up and running in a few days.
  • Collaboration across the organization – Easily work with department heads on a common version of the budget and securely share departmental budgets and details.
  • Seamless workflow with financials – Get actuals from your financials into your budgets and plans with just a few clicks.

Report Writer

Interactive Custom Report Writer

Operational reporting allows you to manage everyday needs from tactical execution to strategic decision making. For instance, you might need to pull a list of invoices for a customer or track employee time on projects. Release 4 introduces the new Interactive Custom Report Writer, a modern visual reporting tool, that delivers ease and speed of report creation, an enhanced user experience, and the power to address complex reporting needs.

  • You can build basic reports quickly and easily with live report data, hierarchical field selection, drag and drop, and automated formatting of subtotals. Data is personalized to your visibility and permissions.
  • The modern look and feel will please your users. The reports are easier to consume with aggregated and summarized information and conditional formatting to draw attention to important data. Interactivity enables users to drill, pivot, filter, sort, and expand for more precise answers to their business questions.
  • You have new levels of power to address complex needs with advanced features such as calculated columns with calendar and math functions, conditional logic with case and if statements, rolling sums and aggregations, and pivot tables.

Dynamic Allocations

Dynamic Allocations

Allocating indirect revenue and expenditures, such as facilities or shared services, allows you to get a more accurate understanding of the performance of departments, products, projects, or other key dimensions of your business. Sage Intacct has long had transactional allocations that allow you to spread payments, receivables, or general ledger transactions as you’re entering them. But, if you wanted to spread the amounts after the transaction was already complete, you had to gather the amounts to be spread and create an often-lengthy journal entry. These calculations were often done in spreadsheets outside of Sage Intacct, making it challenging to go back and understand the initial amounts and the method used if the backup data wasn’t attached.

With Release 4, you can generate allocations based on cumulative activity. With the new Dynamic Allocations module, you set up the source pool, basis (how you want to allocate), and the target once. Then for every period after, you just press a button to dynamically generate them. They’re consistently processed every time, right inside of Sage Intacct. And, a verification page provides snapshots of the before and after for transparency into how the allocations were processed and their impact. So, you save time on your close activities, reduce errors, and streamline your audits.
Allocations Activity

Revenue Recognition for Nonprofits

Nonprofits with revenue streams that cross over year-end or advance payments need to be mindful of the ASU 2018-18 accounting standard changes pertaining to revenue recognition. For example:

  • Conditional grants – You need to plan how to track deferred vs. recognized revenue as conditions are met.
  • Events, tuitions or dues that cross fiscal years – You need to state your deferred vs recognized revenue at year end.

Some nonprofits are actively trying to change their policies on collecting revenue to avoid dealing with the new standard because it is viewed as cumbersome. For example, they structure the sale of memberships or tuition so that they are only for the current year. But that might not be optimal for operations. Other organizations plan to track everything in external spreadsheets and then convert them into large year-end journal entries. This decreases your efficiency and increases the risk of error. It may also result in added time and increased cost during the audit process.

Release 4 introduces Nonprofit Revenue Recognition. The new module automates revenue recognition for the different revenue streams you receive and centralizes tracking inside your accounting system. You can automate your revenue recognition inside of Sage Intacct without the need for external spreadsheets. You can collect revenue up front across fiscal years without the fear of extra work. Coupled with Grant Tracking and Billing, you can track progress on conditions required for recognition of your grants. Consistent treatment of revenues by source will reduce errors. And with everything documented in one place, reporting to management, the board, and auditors is dramatically simpler.
Inventory Sage Intacct

Inventory Landed Costs and Replenishment

Whether you work in wholesale distribution, or maintain inventory to serve clients, knowing the value of that inventory is essential to understanding your organization’s financial health. With Landed Costs you can calculate the value based on your business requirements and capture added costs such as shipping or value adds so that you can get to a true cost of goods.

Maintaining healthy inventory levels requires a balance between serving customers and avoiding tying up excessive capital. In Release 4, you can manage inventory across multiple locations and warehouses while using Inventory Replenishment to automate reorder policies by inventory levels and even the time of year.

To Learn More

Release 4 is available now. Existing customers can check out the Release 4 Release Notes or talk with their Customer Account Manager for more information.

Not yet using Sage Intacct? Attend a coffee break demo to learn more about how Sage Intacct helps you drive improved business performance—throughout your organization.


Sage Intacct

Forward Thinking: Choosing Sage Intacct

By Eric Ward

The speed at which technology improves and the number of options available can make selecting a software solution seem like a gamble. However, selecting a product that displays innovation and a strong product direction saves companies real money and allows them to scale and grow smoothly. Implementing the right software with the right partner avoids costly mistakes and product turnover.

While seeking a new financial management product offering for our clients, product direction was a top priority. As Sockeye evaluated modern accounting systems, Sage Intacct stood out to our team as a product that we were confident would benefit our clients immediately and continue to offer innovative solutions.

Below I will discuss areas that Sage Intacct has improved how finance teams interact with their tools.

Continuous Consolidation Across Multiple Companies 

Sage Intacct’s integrated multi-entity accounting software enables companies to keep master data consistent across entities and allows them to easily perform intercompany transactions and eliminations. The software platform provides an integrated accounting system that continuously consolidates multiple and global entities, streamlines planning cycles, and improves business intelligence with greater visibility.

  • A single version of truth to manage global accounting processes based on current and future regulatory requirements and in multiple currencies
  • Seamlessly control master records such as chart of accounts
  • Work across entities on the same projects
  • Slice multi-entity data in reports based on departments, projects, customers, lines of business, etc.

New Revenue Recognition Standards 

With so many allocation variables muddling the new compliance standards, knowing how to modify your processes can reduce errors. With Sage Intacct’s deep functionality, it is easy to adapt to the new ASC 606 standards and future changes in regulation.

  • Deep automation to detail out contracts, track revenues easily (in both 606 and 605 standards at the same time with the same contract)
  • Decouple revenue recognition from billing processes
  • Automate revenue recognition recalculation after contract changes
  • Track compliance compatible documentation per contract

Meaningful Dashboards 

No more wasting time trying to compile data from disparate sources and systems to create reports and close. Sage Intacct can consume operational, statistical data and bring it right onto the financial reports. This allows calculations combining financial performance with operational metrics.

  • Shared dimensional chart of accounts facilitates automation and consolidated reporting
  • Real-time dashboard analytics including financial and operational reporting
  • Improved data accuracy, integrity, and transparency decreases compliance risk exposure and costs
  • Dashboards can be created and maintained by anyone with knowledge of the chart of accounts

Sockeye brings the tools, flexibility, and award-winning innovation to your organization to optimize accounting processes, provide greater visibility to metrics that matter, and help meet ever-changing compliance needs.

Sage Intacct

Sockeye Named to 2018 Sage Intacct President’s Club

By Sadie Arneson

Sockeye is pleased to announce it has achieved membership in the 2018 Sage Intacct President’s Club. This coveted sales and customer satisfaction award is given annually by Sage Intacct to its top-performing channel partners. This recognizes Value Added Resellers (VARs) and Sage Intacct Accountants Program firms (SIAPs) for their success in helping clients migrate to Sage Intacct’s Cloud Financial Management Solutions. Sage Intacct’s network of partners delivers comprehensive, high-quality services, support, and software to help companies get maximum value from their Sage Intacct investment.

Sockeye partners with Sage Intacct to provide cloud-based financial solutions. We are focused on streamlining the organizational process, informing strategic decisions, meeting regulatory requirements, and providing guided services for our clients.

“We are proud to be apart of Sage Intacct Presidents Club,” said Nick Brorson, Sockeye’s CEO.  “Our mission is to provide best in class technology and counsel to our clients.  We selected Sage Intacct for the forward-thinking product direction and the incredible reporting power it puts in the hands of finance professionals.  Our partnership with Sage Intacct has accelerated our business growth and we look forward to continuing to build this partnership.”

“Helping our partners build sustainable excellence, achieve remarkable growth year after year, and deliver new levels of success for our joint customers, is the driving force behind the Sage Intacct partner program,” said Taylor Macdonald, Senior Vice President of Channel Sales for Sage Intacct. “The high-quality organizations that are included in the Sage Intacct channel consistently see the value-add in our solution for their businesses and that of their customers. Congratulations to our top partners earning membership in this year’s Sage Intacct President’s Club — we look forward to each firm’s continued growth.”

About Sage Intacct

Sage Intacct is the innovation and customer satisfaction leader in cloud financial management software. As the preferred provider of financial applications for AICPA business solutions and a solution in Sage Business Cloud, we enable organizations from startups to public companies to improve company performance and make finance more productive. Our award-winning accounting software delivers deep functionality that automates even complex business processes and surfaces the richest financial and operational insights to help accelerate growth.

For more information on Sage Intacct, please visit


Local Tech Company Builds Software for National Problem

Sockeye Developed TRUULI, Sexual Assault Kit Tracking Software

ANCHORAGE, Alaska – The backlog of sexual assault kits across the nation has received increased attention in the last few years. In 2016, The Bureau of Justice Assistance launched the Sexual Assault Kit Initiative to aid in the process of testing the growing number of untested sexual assault kits across the country. Knowing they could provide a solution, the Anchorage-based tech company, Sockeye Business Solutions, Inc (Sockeye), developed TRUULI, a Sexual Assault Kit Tracking Software.

“This is a rewarding project to build, this software is needed to create change and I’m proud to be a part of the solution to end the backlog,” stated Elissa Williams, Sockeye’s Senior Software Architect.

Sockeye announced the launch of TRUULI in Montana this month. Montana’s implementation of TRUULI allows for over 230 entities across the state to manage kits through a secure web portal. Law enforcement, case managers, attorneys, hospitals, and labs each have unique access to the information pertaining to their job.

“Montana is just one state; we hope to continue to implement across the country and increase visibility for legislators, law enforcement, and survivors. Building out a system this sensitive requires a lot of empathy as a developer,” explains Williams. “There are many stakeholders, each with different stresses and needs— high-level visibility for the legislature, quick access for a nurse at a collection site, and anonymity for the survivor.”

Each kit is assigned a tracking number and barcoded. Tracking starts when kits are distributed to collection sites; primarily medical facilities. Every kit is tracked as it moves from collection site to law enforcement facilities, labs, and storage providing a full audit trail of where each kit is and has been.

“Our company has pride when we talk about TRUULI,” said Nick Brorson, CEO of Sockeye. “Sockeye develops systems to solve business problems, so developing software for a social issue has built a more emotional connection to the project. Being from Alaska, a state with staggering sexual assault statistics and a backlog, it is close to our hearts. This system brings the visibility and reporting needed to end the backlog and prevent it from ever occurring again.”



TRUULI is built on the Microsoft Dynamics 365 platform and utilizes the security of the Microsoft Government Cloud, compliant with Criminal Justice Information Service Standards. Time to process, location, and demographics build powerful analytics for real time reporting. Each entity has a unique portal type for law enforcement, case managers, attorneys, hospitals, and labs granting access to only information pertaining to each type. Each user has a unique login and all actions are logged for the administrator with a full audit trail. TRUULI was built by Sockeye for the sole purpose of tracking sexual assault kits as they change custody and status.

About Sockeye

Sockeye’s expertise is in solving complex business challenges. Our services include software development, implementation services, business intelligence/reporting, training and support, project management, and business process analysis. Over time we have encountered numerous organizations in need of a flexible software product for their niche industry. We have extensive experience in consulting with clients to understand their business processes and offer services to match those processes with the best possible product for implementation, configuration, support, and success.


Montana Launches TRUULI, Sockeye’s Sexual Assault Kit Tracking Software

Montana’s Kit Tracking System Goes Live

ANCHORAGE, Alaska — Sockeye is proud to announce the launch of TRUULI, Sexual Assault Kit Tracking Software, in Montana. In 2015, the Sexual Assault Kit Initiative provided resources to implement rape kit reform for testing and tracking. Since then the State has moved forward to reform kit processes and implement a database.

“The state received a $284,500 federal National Institute of Justice grant to build a kit tracking database. We have worked for a year to record untested kits and implement our software,” stated Justin Stolp, Project Manager for the Montana Department of Justice. “We are now live and managing the accumulation of untested kits.”

Each kit is assigned a tracking number and barcoded. Tracking starts when kits are distributed to collection sites, primarily medical facilities. Each kit is tracked as it moves from collection site, to law enforcement facilities, labs, and storage providing a full audit trail of where each kit is and has been.

“We are proud of the strides Montana has taken toward recording untested kits, the work of the Department of Justice, and the system we have implemented with Sockeye,” stated Stolp. “This tracking system brings the visibility and reporting needed to end the backlog in Montana and prevent it from ever occurring again.”

Montana’s implementation of TRUULI allows for over 230 entities across the state to manage kits through a highly secure website built upon the Microsoft Dynamics 365 platform. Montana is currently implementing the ability to have survivors check the status of their kit online.



TRUULI is built on the Microsoft Dynamics 365 platform and utilizes the security of the Microsoft Government Cloud, compliant with Criminal Justice Information Service Standards. Time to process, location, and demographics build powerful analytics for real time reporting. Each entity has a unique portal type for law enforcement, case managers, attorneys, hospitals, and labs granting access to only information pertaining to each type. Each user has a unique login and all actions are logged for the administrator with a full audit trail. TRUULI was built by Sockeye for the sole purpose of tracking sexual assault kits as they change custody and status.

About Sockeye

Sockeye’s expertise is in solving complex business challenges. Our services include software development, implementation services, business intelligence/reporting, training and support, project management, and business process analysis. Over time we have encountered numerous organizations in need of a flexible software product for their niche industry. We have extensive experience in consulting with clients to understand their business processes and offer services to match those processes with the best possible product for implementation, configuration, support, and success.

Microsoft CRM & Sharepoint

CRM SharePoint Integration - Bulk Document Import

By Martin Lundell


The problem this post addresses is how to pre-load SharePoint with folders and files that CRM will detect when it integrates with SharePoint.  In order to do this, we need to understand how CRM names folders in SharePoint, and when it creates Document Location records.

The Basics

For those unfamiliar with CRM/SharePoint integration, Microsoft provides ample documentation.  Here is a good starting point:   The basic concept is that when the integration is set up, a user in CRM can view/upload/download documents from SharePoint from within the CRM user interface.   An entity in CRM (e.g. contact), must be selected during the integration set up in order for a user to manage documents from that entity.  Once on the entity record itself, a user can browse to the Documents tab.  If no SharePoint folder exists for this entity, CRM will prompt the user if they want to create one.


Example CRM prompt to create folder in SharePoint

If the user confirms the create, CRM will create a folder in SharePoint for that entity.  It will also create a Document Location record in CRM to keep track of that folder.  (A Document Location entity in CRM  stores a reference to the CRM entity and stores the URL to the SharePoint folder where the entity’s documents will be kept.)  Users are now able to upload and retrieve files from CRM.

Generating Folder Names in SharePoint

But, as mentioned earlier, what if we want to pre-populate folders and files in SharePoint so CRM users immediately see those files when they click on the Documents tab of an entity?

In order to do this, we need to understand how CRM names folders in SharePoint, and when it creates Document Location records.  When a CRM user clicks on the documents tab of an entity, CRM looks at SharePoint to see if a folder already exists with the correct name.  If the folder exists, CRM will create a Document Location record “on the fly” for that entity (if one didn’t exist previously) and immediately show the files in that folder to the CRM user.

Let’s use the contact entity as an example.  If we have set up document management on the contact entity, CRM will have created a contact folder in SharePoint at the following location: http://sharepointsiteurl/contact/.  When CRM creates a Document Location for a particular contact, it creates a folder in SharePoint with a name that is a combination of the contact entity’s fullname field, followed by an underscore, followed by the contact’s GUID (e.g. John Doe_4BECE72A534DE71181155065F38A4BA1).  If CRM finds that the folder already exists, it will not attempt to create a folder, but instead will use the existing folder.  The resulting Document Location record will have a reference to John Doe’s contact entity and the link to its folder in SharePoint at http://sharepointsiteurl/contact/John Doe_4BECE72A534DE71181155065F38A4BA1/.

Case Study:

A few weeks ago we were working with a client to move them from a legacy system to CRM and SharePoint.  We had a requirement to migrate a large number of documents to SharePoint and have them be immediately accessible to users in CRM under their contact entity.  From the legacy system, we exported users’ documents into folders that were named with their legacy id (sockeye_integrationid in CRM).


Exported files and folder structure from legacy system
Exported files and folder structure from legacy system

Example CRM Contact record
Example CRM Contact record

In order to generate the correct name for the SharePoint folders, we queried the contact entity for the full name (fullname) and the Guid (contactid).  We also needed the id of the legacy system (sockeye_integrationid in CRM) in order to map the documents belonging to users from the old system to CRM contacts.  These records are retrieved by the GetContacts method below.

private static EntityCollection GetContacts()
    CrmServiceClient crmConn = new CrmServiceClient(ConfigurationManager.ConnectionStrings["CRM"].ConnectionString);
    IOrganizationService crmService = crmConn.OrganizationServiceProxy;

    string fetch = @"<fetch version='1.0' output-format='xml-platform' mapping='logical' distinct='false'>
                          <entity name='contact'>
                            <attribute name='fullname' />
                            <attribute name='contactid' />
                            <attribute name='sockeye_integrationid' />
                            <order attribute='fullname' descending='false' />

    FetchExpression exp = new FetchExpression(fetch);
    EntityCollection results = crmService.RetrieveMultiple(exp);
    return results;

Once we retrieved the contacts, we were ready to generate folders with the correct names, and copy the correct documents into them from the legacy system.

The CopyFiles method below takes two arguments. The first argument is the path to the exported files from the legacy system. The second argument is a path to where we want to place the folders and files that are made ready for moving into SharePoint.

In the CopyFiles method, we iterate over the folders that hold the exported files.  These folders are named with the legacy users’ ids (see image above).  We grabbed the folder name and retrieved the contact from our contacts EntityCollection where sockeye_integrationid matched the folder name.  We then created a new folder with the correct CRM Document Location name and copied the files from the exported folder to the new one.

private static void CopyFiles(string pathToExport, string pathToNewDirectory)
    var directories = Directory.GetDirectories(pathToExport);
    EntityCollection contacts = GetContacts();

    foreach (var dir in directories)
        string folder = Path.GetFileName(dir);
        Entity contact= contacts.Entities.Where(x => x.GetAttributeValue("sockeye_integrationid") == folder).FirstOrDefault();
        if (contact != null)
            string id = contact.Id.ToString().Replace("-", "");
            string fullname = contact.GetAttributeValue("fullname");
            fullname = SharePointifyFolderName(fullname);
            string folderName = string.Format("{0}_{1}", fullname, id);

            string directory = string.Format("{0}\\{1}", pathToNewDirectory, folderName);
            if (!Directory.Exists(directory))

            string[] files = Directory.GetFiles(Path.Combine(pathToExport, dir));

            foreach (string file in files)
                string fileName = Path.GetFileNameWithoutExtension(file);
                string extension = Path.GetExtension(file);
                fileName = SharePointifyFileName(fileName);
                string destFile = Path.Combine(directory, fileName + extension);
                File.Copy(file, destFile, true);

When using the contact’s fullname field to generate the SharePoint file name, we had to account for special characters that aren’t allowed.  CRM replaces the “illegal” characters with a dash.  We replicated that functionality in the method SharePointifyFolderName.  Similarly, SharePoint has rules regarding file names, so we replaced illegal characters in the file name with an underscore in the SharePointifyFileName method.

public static string SharePointifyFolderName(string folderName)
    string[] illegalChars = new string[] { "~", "#", "%", "&", "*", "[", "]", @"\", ":", "<", ">", "?", "/", "|", "\"", "." };

    foreach (string s in illegalChars)
        if (folderName.Contains(s))
            folderName = folderName.Replace(s, "-");
    return folderName;


public static string SharePointifyFileName(string fileName)
    string[] illegalChars = new string[] { "~", "#", "%", "&", "*", "[", "]", @"\", ":", "<", ">", "?", "/", "|", "\"", "." };

    foreach (string s in illegalChars)
        if (fileName.Contains(s))
            fileName = fileName.Replace(s, "_");

    string extension = Path.GetExtension(fileName);
    string filenameOnly = Path.GetFileNameWithoutExtension(fileName);
    if (filenameOnly.Contains('.'))
        //remove "." from within the file name (excluding extension) as sharepoint does not allow it.
        filenameOnly = filenameOnly.Replace(".", "-");

    return filenameOnly + extension;


Once we generated folders with the correct names and files, it was time to move them into SharePoint.  There are several ways to do this.  The way we chose was a simple copy-paste with windows explorer.  In IE, when browsing to http://sharepointsiteurl/contact, you can open windows explorer from that page by clicking on the Library tab and choosing “Open with Explorer”, as shown below, and copying files as you would in your file system.   A caveat when using this method is that you are limited to copying 5000 files at a time.

Open with Explorer Sharepoint


Microsoft Flow and Teams

By Joel Headdings

I wish I had enough free time to go over all of the available configurations in Microsoft Flow, but you can do almost anything you would like inside of Microsoft Flow. At the time of this writing there are 95 free services and 32 premium services. The services that will be covered in this article will be Microsoft Dynamics 365 and Microsoft Teams.


The following Flow details how to alert a Microsoft Teams Channel every time a Case is created in Dynamics 365. We also alert the different Channels in Teams based on who the Customer on the Case is.

Starting with Microsoft Flow

Creating your first flow is not very difficult, there are really only two options; you either choose to “Create From Template” or “Create From Blank”. The one you choose will depend on the goal you are trying to achieve.  Sometimes you can find a template that does most of what you are trying to do and use it as a starting point, but like always, no one has done exactly what you want. For this example we are going to start with “Create From Blank”.

Creating a Trigger

Every Flow starts out the same, by creating a Trigger. (This tells your Flow when to run) There are Triggers for many different services, most notably for CRM are Create, Update, and Delete. This Flow will run on Create of a Case. To setup the Trigger you need to select “When a record is created” for the Dynamics 365 service, and select the Organization Name and the Entity.

Retrieving Records

When we are alerting the Microsoft Team Channel we want to show information that is not readily available on the Case record (Account Name, Account NumberCreated By User FullName). The records we want to retrieve are the associated Account record and the associated System User record. Retrieving these records will allow us to display any fields from either of those records in any of following steps.

To retrieve a record in Microsoft Flow, we create an Action by clicking the + Button and selecting “Add an Action”. This opens up a dialog that allows us to search by service or action. To retrieve a record from Dynamics 365 we type in “Get Record” and select “Dynamics 365 – Get Record“. After the Action is created, we need to provide the Organization Name, the Entity, and the Item Identifier. In Dynamics 365, the Item Identifier will be the GUID of the record we are looking for and we can utilize the Trigger to grab to values of the created record and input them into our Get Record Action.

Retrieving the User

In the newly created Get Record Action, we will provide the Organization Name, and the Entity Name (Users). When we click into the Item Identifier field for the Get Record Action, we will see a Dynamic Content menu appear. This pane will display available values from the previous steps. (Just know that it displays a small list to start and you have to click “See More” to view/search all the available fields.) From this pane we will select Created By which will return the GUID value of the Lookup in Dynamics 365.

Retrieving the Account (Parallel Branch)

To retrieve the Account Record, we will add a “Parallel Branch” above the Get User Record Action. This will allow our Flow to retrieve these values simultaneously, as opposed to doing one retrieve and then another.

Once our parallel branch has been created we can follow the previous steps to retrieve the Account record, but with the appropriate values.

Adding Conditions

Now that we have all the information we are looking for, we can begin to add some logic to our Flow. Our scenario is to alert different Microsoft Teams Channel’s depending on the Customer (Account) the Case has been created for, and to achieve this, we will add a “Switch Case” as our next step in the Flow instead of an Action.

This will present us with three blank steps:

  1. The first is the On value, which will be the basis of our Switch Case.
  2. The second will be an empty Case statement.
  3. The last will be our default Case statement.


The Switch Step will contain the the On value that will hold the value that each Case will compare against to decide if it should perform the action. The On value will be the Account Number which we can select from the Get Records Account Action from inside the Dynamic Content pane.


Inside the first Case Step we will fill in the Equals value with a string value for the Account Number. In our example we have “ACCT001”, but this will depend on the Account Number you wish to specify an Alert in Teams for.

We can add more Case Steps by selecting the + symbol between the Default Case and First Case. In our example, we have two Case Steps and one Default Case Step.

Alerting the Team

Inside of each Case Step we will add an Action to Alert our first Team Channel,  by searching “Alert Team” and then select “Microsoft Teams – Alert the team“. After you have added the Action Step, the Message parameter can utilize the Dynamic Content from all the previously retrieved records.

Running Your Flow

Now that you have created your Flow, you will want to see it in action! You will want to make sure your Flow is turned On. (You can see this from the My Flows area) Then you will need to navigate to the Dynamics 365 instance that you have the Trigger hooked up to, create a Case, and watch the magic!


For more information I highly suggest digging into Microsoft’s Getting Started Guide, as it has pretty good documentation on a lot of the different services.

Microsoft Dynamics CRM

Transfer Views in Dynamics CRM: Using Sockeye’s View Transfer Plugin for the Xrm Toolbox

By Joel Headdings

Why use Sockeye.ViewTransfer?

Sockeye.ViewTransfer is an XrmToolBox plugin developed to transfer views (user defined or system) in a number of different scenarios. This tool was originally developed as a console application for moving views that were defined on a client’s instance of CRM(Test) back to our instance of CRM(Dev), so that they could be used as the new system views for that entity. This was useful for letting the client create what they want to see for the views at whatever security role they were at, without giving them System Administrator or System Customizer roles.

How to use Sockeye.ViewTransfer?

Step 1: Install XrmToolBox

The first thing you need to do for this guide is Install XrmToolBox. If you haven’t installed the XrmToolBox, I highly recommend it for anyone who is customizing or configuring Dynamics CRM. Not only is it highly recommended, but it is a requirement for anyone who wants to follow along with this guide.

Step 2: Install Sockeye.ViewTransfer

Inside of the XrmToolBox, navigate to the Plugin Store and install “Sockeye.ViewTransfer”. If your version of the XrmToolBox does not have the Plugin Store, then you will need to download the newest version. (refer to step 1)

Step 3: Launch Sockeye.ViewTransfer

After you have installed Sockeye.ViewTransfer, you will navigate to the Home tab in XrmToolBox and launch the plugin.

Step 4: Fill in Configuration Options


Transfer View Not Connected

Not Connected Example

Transfer View Connected

Connected Example

There are 5 fields that need values before you can being loading the views and migrating them:

1. Source Connection

If you decline to select an Organization to connect to onload of the plugin, you must select two different Organizations. If you pick one onload of the plugin, it will use that connection as the Source Organization. To select a Source Organization, you will click the “Set” button inside the Source area. This will allow you to select an Organization Connection that you have saved in the XrmToolBox. After selecting a Source Connection, the label beside the button will display the name of the connection in green.

2. Source View Type

You will either select User View or System View. This will determine what views you would like to migrate FROM. If you select User View, the list of views to migrate from will populate with the User Views for the selected Entity Filter.

3. Entity Filter

Entity Filter determines what Entity you are going to be migrating views for. If you select “account” you will only see views for the Account entity.

4. Target Connection

To select a Target Organization, you will click the “Set” button inside the Target area. This will allow you to select an Organization Connection that you have saved in the XrmToolBox. After selecting a Source Connection, the label beside the button will display the name of the connection in green.

5. Target View Type

You will either select User View or System View. This will determine what views you would like to migrate TO. If User View is selected, the drop down list of views to migrate to will  populate with the User Views for the selected Entity Filter.

Step 5: Load & Transfer Views

Account Loaded Vews Transfer View

Accpimt Loaded Views Example

Account Migrated Transfer View

Account Migrated Views Example

After you select all the configuration options, you will click Load Views. Clicking this will load the desired views into the grid view. Once you have selected the following values, you will click Migrate Selected to actually transfer views.

The grid view has 4 columns listed:

1. Copy

This is an editable checkbox. Whatever row has the Copy checkbox checked will migrate to the Target Organization.

2. Source

This is a read only text field that represents the name of each view in the Source Organization.

3. Target

This is an editable drop down list of the available views in the Target Organization, as well as an option to CREATE NEW. This will need to be populated with a value for the Migration to succeed. If you select an existing view, it will overwrite the existing view with the source view, but will not rename it.

When selecting the CREATE NEW option, it will name the newly created target view the same as the selected source view.

4. Result

This is a read only text field that displays the result of the migration. Possible values are: Updated, Created, and Error.


At this point you are finished with migrating the views you want. Always confirm that the views your are expecting to be transferred have been transferred, and always make sure that you have selected the correct views to transfer before clicking Migrate Selected.

Enjoy the Transferred Views