<?xml version="1.0" encoding="utf-8"?>
<rss xmlns:atom="https://www.w3.org/2005/Atom" xmlns:sy="https://purl.org/rss/1.0/modules/syndication/" xmlns:dc="https://purl.org/dc/elements/1.1/" xmlns:content="https://purl.org/rss/1.0/modules/content/" xmlns:wfw="https://wellformedweb.org/CommentAPI/" xmlns:slash="https://purl.org/rss/1.0/modules/slash/"
  version="2.0">
  <channel>
    <title>System Center Service Manager From the Field</title>
    <atom:link
      href="https://docs.microsoft.com/archive/blogs/scsmfromthefield/feed.xml"
      rel="self"
      type="application/rss+xml" />
    <link>https://docs.microsoft.com/archive/blogs/scsmfromthefield/feed.xml</link>
    <description>Stuff that makes System Center Service Manager life easier</description>
    <lastBuildDate>Tue, 16 Apr 2019 06:16:26 GMT</lastBuildDate>
    <language>en-US</language>
    <sy:updatePeriod>hourly</sy:updatePeriod>
    <sy:updateFrequency>1</sy:updateFrequency>
    <item>
      <title>SCSM 2016 and 1801 Authoring Tool</title>
      <link>https://docs.microsoft.com/archive/blogs/scsmfromthefield/scsm-2016-and-1801-authoring-tool</link>
      <pubDate>Tue, 15 May 2018 08:36:20 GMT</pubDate>
      <dc:creator><![CDATA[Chris Howie - MSFT]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.technet.microsoft.com/scsmfromthefield/?p=135</guid>
      <description><![CDATA[If you've tried to install the SCSM 2016 and 1801 authoring tool, you have probably been looking for...]]></description>
      <content:encoded><![CDATA[If you've tried to install the SCSM 2016 and 1801 authoring tool, you have probably been looking for a place to download the <strong>Visual Studio 2008 Shell Redist</strong> because the link in the prereq check is broken. The product group has recently re-released the authoring tool with these bits included so that customers do not have to go hunt for it on the internet. :) The downloads to the authoring tools are below:

&nbsp;

2016: <a href="https://www.microsoft.com/download/details.aspx?id=54059">https://www.microsoft.com/download/details.aspx?id=54059</a>

1801: <a href="https://www.microsoft.com/download/details.aspx?id=56561">https://www.microsoft.com/download/details.aspx?id=56561</a>]]></content:encoded>
    </item>
    <item>
      <title>SCSM Roadmap and Future</title>
      <link>https://docs.microsoft.com/archive/blogs/scsmfromthefield/scsm-roadmap-and-future</link>
      <pubDate>Fri, 03 Nov 2017 06:46:58 GMT</pubDate>
      <dc:creator><![CDATA[Chris Howie - MSFT]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.technet.microsoft.com/scsmfromthefield/?p=115</guid>
      <description><![CDATA[Hello, everyone. I thought it was important to take some time to discuss a question that I get asked...]]></description>
      <content:encoded><![CDATA[Hello, everyone. I thought it was important to take some time to discuss a question that I get asked very frequently: "What is the current SCSM roadmap?" This is actually a simple answer, but it isn't as clearly stated as I would like it to be if I were a customer. <strong>So, here's my response to anyone with this question:</strong>

When System Center Configuration Manager was moved to a shorter semi-annual release cycle 2 years ago or so, it gave the PG the ability to develop features on a much shorter timeline so that the product could be compatible with new Windows client features. I think this made sense to most people. However, there was a lot of confusion about the remaining components of System Center and their supportability with Configuration Manager moving into this new release cadence on its own (e.g., which versions of Configuration Manager were compatible with each version of Service Manager).  So, a few months ago Microsoft announced that the remaining components of System Center (Including DPM, VMM, SCOM, SCSM and Orchestrator) would also be moving to a semi-annual release cycle, along with Windows Server. Here's the official release statement for 1801: <a href="https://azure.microsoft.com/en-us/blog/first-system-center-semi-annual-channel-release-now-available">https://azure.microsoft.com/en-us/blog/first-system-center-semi-annual-channel-release-now-available</a>

<strong>Why is this important?</strong> By releasing these products more frequently, the rest of System Center can now leverage the development agility that Configuration Manager has - meaning additional features and fixes released more frequently. On the flip side of that, this means the roadmap fundamentally changes as well. If features and fixes are being released semi-annually, it makes sense that the next set of features have about the same visibility. This means that the days of 3 year roadmaps for any System Center product are gone.

<strong>What does this mean for you?</strong> System Center Service Manager and Orchestrator are still being developed and are part of this new release cycle along with the rest of System Center. Contrary to what some have said, they are definitely not currently in End of Life and currently have no forecasted EOL. Some semi-annual updates will only have fixes and some will have additional functionality. The features that get added to the entire suite each cycle will depend on customer demand and will be prioritized as such.  The products which receive enhancements will likely vary each time. All products are therefore still fully supported.

Like many on-prem product groups, the SCSM team is currently working on incorporating more Azure and cloud service components into SCSM. Look at the service management connector for example: <a href="https://docs.microsoft.com/en-us/azure/log-analytics/log-analytics-itsmc-overview">https://docs.microsoft.com/en-us/azure/log-analytics/log-analytics-itsmc-overview</a>

&nbsp;

Hope this helps. :)]]></content:encoded>
    </item>
    <item>
      <title>Pre-Upgrade tasks for SCSM 2012 R2 to 2016</title>
      <link>https://docs.microsoft.com/archive/blogs/scsmfromthefield/pre-upgrade-tasks-for-scsm-2012-r2-to-2016</link>
      <pubDate>Fri, 09 Jun 2017 16:03:44 GMT</pubDate>
      <dc:creator><![CDATA[Chris Howie - MSFT]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.technet.microsoft.com/scsmfromthefield/?p=105</guid>
      <description><![CDATA[I thought I would share a few things I do before upgrading a 2012 R2 environment to 2016.

For...]]></description>
      <content:encoded><![CDATA[I thought I would share a few things I do before upgrading a 2012 R2 environment to 2016.

For reference, the upgrade steps for SCSM 2016 are here: <a href="https://docs.microsoft.com/system-center/scsm/upgrade-environment">https://docs.microsoft.com/system-center/scsm/upgrade-environment</a>. However, before you upgrade to SCSM 2016, I highly recommend you check a few things so that you try to catch something that may cause the upgrade to fail. The first, is what is discussed here: <a href="https://blogs.technet.microsoft.com/servicemanager/2016/08/03/scsm-2016-upgrade-steps-for-custom-development/">https://blogs.technet.microsoft.com/servicemanager/2016/08/03/scsm-2016-upgrade-steps-for-custom-development/</a> This outlines what needs to be changed in custom solutions for them to work in SCSM 2016. I did this recently for a solution from the TechNet Gallery and it was pretty simple. Make sure that you plan for each of your custom add-ons to SCSM, as every free tool, portal and custom solution will need to be upgraded. Check with the developers of your tools (if not yourself) and see if they have a 2016-compatible version (most do).

After verifying that you have the updated tools available, I usually run a few SQL Queries to see if anything in the ServiceManager database or DWStagingAndConfig is stuck. If there is a problem now, it will get worse with an upgrade (general rule of thumb). If you have a result from any of these, figure out why. Either post a comment, look it up online, or open a case.

Run these queries against the ServiceManager database and DWStagingAndConfig database:

&nbsp;

<span style="color: #0000ff;font-family: Consolas;font-size: medium">Select</span><span style="font-family: Consolas;font-size: medium"> </span><span style="color: #808080;font-family: Consolas;font-size: medium">*</span><span style="font-family: Consolas;font-size: medium"> </span><span style="color: #0000ff;font-family: Consolas;font-size: medium">from</span><span style="font-family: Consolas;font-size: medium"> DeploySequenceView </span><span style="color: #0000ff;font-family: Consolas;font-size: medium">where</span><span style="font-family: Consolas;font-size: medium"> DeploymentStatusId </span><span style="color: #808080;font-family: Consolas;font-size: medium">!=</span><span style="font-family: Consolas;font-size: medium">6</span>

<span style="color: #0000ff;font-family: Consolas;font-size: medium">Select</span><span style="font-family: Consolas;font-size: medium"> </span><span style="color: #808080;font-family: Consolas;font-size: medium">*</span><span style="font-family: Consolas;font-size: medium"> </span><span style="color: #0000ff;font-family: Consolas;font-size: medium">from</span><span style="font-family: Consolas;font-size: medium"> DeploySequenceStaging</span>

<span style="color: #0000ff;font-family: Consolas;font-size: medium">select</span><span style="font-family: Consolas;font-size: medium"> </span><span style="color: #808080;font-family: Consolas;font-size: medium">*</span><span style="font-family: Consolas;font-size: medium"> </span><span style="color: #0000ff;font-family: Consolas;font-size: medium">from</span><span style="font-family: Consolas;font-size: medium"> DeployItemStaging</span>

<span style="color: #0000ff;font-family: Consolas;font-size: medium">Select</span><span style="font-family: Consolas;font-size: medium"> </span><span style="color: #808080;font-family: Consolas;font-size: medium">*</span><span style="font-family: Consolas;font-size: medium"> </span><span style="color: #0000ff;font-family: Consolas;font-size: medium">from</span><span style="font-family: Consolas;font-size: medium"> infra</span><span style="color: #808080;font-family: Consolas;font-size: medium">.</span><span style="font-family: Consolas;font-size: medium">process p </span>

<span style="color: #808080;font-family: Consolas;font-size: medium">left</span><span style="font-family: Consolas;font-size: medium"> </span><span style="color: #808080;font-family: Consolas;font-size: medium">join</span><span style="font-family: Consolas;font-size: medium"> infra</span><span style="color: #808080;font-family: Consolas;font-size: medium">.</span><span style="font-family: Consolas;font-size: medium">Batch b </span><span style="color: #0000ff;font-family: Consolas;font-size: medium">on</span><span style="font-family: Consolas;font-size: medium"> p</span><span style="color: #808080;font-family: Consolas;font-size: medium">.</span><span style="font-family: Consolas;font-size: medium">ProcessId </span><span style="color: #808080;font-family: Consolas;font-size: medium">=</span><span style="font-family: Consolas;font-size: medium"> b</span><span style="color: #808080;font-family: Consolas;font-size: medium">.</span><span style="font-family: Consolas;font-size: medium">ProcessId</span>

<span style="color: #808080;font-family: Consolas;font-size: medium">left</span><span style="font-family: Consolas;font-size: medium"> </span><span style="color: #808080;font-family: Consolas;font-size: medium">join</span><span style="font-family: Consolas;font-size: medium"> infra</span><span style="color: #808080;font-family: Consolas;font-size: medium">.</span><span style="font-family: Consolas;font-size: medium">WorkItem w </span><span style="color: #0000ff;font-family: Consolas;font-size: medium">on</span><span style="font-family: Consolas;font-size: medium"> w</span><span style="color: #808080;font-family: Consolas;font-size: medium">.</span><span style="font-family: Consolas;font-size: medium">BatchId </span><span style="color: #808080;font-family: Consolas;font-size: medium">=</span><span style="font-family: Consolas;font-size: medium"> b</span><span style="color: #808080;font-family: Consolas;font-size: medium">.</span><span style="font-family: Consolas;font-size: medium">BatchId </span>

<span style="color: #0000ff;font-family: Consolas;font-size: medium">where</span><span style="font-family: Consolas;font-size: medium"> w</span><span style="color: #808080;font-family: Consolas;font-size: medium">.</span><span style="font-family: Consolas;font-size: medium">StatusId </span><span style="color: #808080;font-family: Consolas;font-size: medium">NOT</span><span style="font-family: Consolas;font-size: medium"> </span><span style="color: #808080;font-family: Consolas;font-size: medium">IN</span><span style="color: #0000ff;font-family: Consolas;font-size: medium"> </span><span style="color: #808080;font-family: Consolas;font-size: medium">(</span><span style="font-family: Consolas;font-size: medium">3</span><span style="color: #808080;font-family: Consolas;font-size: medium">,</span><span style="font-family: Consolas;font-size: medium">6</span><span style="color: #808080;font-family: Consolas;font-size: medium">)</span>

&nbsp;

After checking the DB, check the OperationsManager event log on the workflow server. If you see errors like 33880 or 33333, figure out why they are happening. These and several other errors can indicate there is something corrupt in SCSM (like an SLO that hasn't been created through the console). Address these errors before upgrading. Lastly, MAKE SURE YOU HAVE YOUR RECOVERY KEYS!!!!!

Hopefully this will help a few companies who would have otherwise had to implement a disaster recovery because the upgrade failed.

-Chris Howie]]></content:encoded>
    </item>
    <item>
      <title>SCSM Reports have enum values for lists!</title>
      <link>https://docs.microsoft.com/archive/blogs/scsmfromthefield/scsm-reports-have-enum-values-for-lists</link>
      <pubDate>Tue, 15 Nov 2016 10:33:15 GMT</pubDate>
      <dc:creator><![CDATA[Chris Howie - MSFT]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.technet.microsoft.com/scsmfromthefield/?p=95</guid>
      <description><![CDATA[I want to start this post by thanking our customers who were willing to vet this process and Antoni...]]></description>
      <content:encoded><![CDATA[I want to start this post by thanking our customers who were willing to vet this process and <a href="https://blogs.technet.microsoft.com/antoni/">Antoni Hanus </a>who helped take my raw process and turn it into a more friendly version. :)

SCSM has an ETL (extract, transform and load) process which synchronizes the data from the operational database (ServiceManager) to the final data resting place (DWDataMart). Along the way, there are several tasks that the jobs take to help ensure they don't fail. One of these tasks is when the ETL moves list items through the DW, specifically within the transform job. List values are made up of their displaystring values and the GUIDs which represent them. What can happen is the GUID (enumeration id) can get to the transform job before the display string value. When this occurs, rather than failing, the transform job adds the enumeration id as both the id and the display string value. This helps, right? Well, not really, because we now have enum.GUID values in our reports. :(

There are a few ways to address this issue. First, you could manually override the 'listname.value' column in the affected outrigger with whatever the value is supposed to be. This method works well if there are only a few affected values.  Unfortunately, there are typically many affected tables with many incorrect values. Versus trying to do all of these manually, this process below will resync all of them.

<strong>BEFORE YOU START:</strong>

This process can irreparably damage your data warehouse so be sure to backup all databases and follow this process <span style="text-decoration: underline">exactly</span>. This process is technically not supported unless a Microsoft engineer is on the phone. So, if you have an issue, you will need to restore the DBs and start over with a support case. PLEASE use this process at your own risk. I am publishing things like this because I know many people struggle with these issues. However, anything mentioned in this blog has no warranties, and is subject to the defined terms and conditions for TechNet blog content.

With all of that said, you have been sufficiently warned :) Now, let's get to the good part!

<strong><u>RESET ENUM PROCEDURE</u></strong>

In summary, the high-level process is:
<ol>
 	<li>Backup databases</li>
 	<li>Disable the ETL job schedules so that the jobs do not try to run while we are performing this process</li>
 	<li>Delete the old extracted data from the inbound tables</li>
 	<li>Reset the job module watermarks for the ETL that are related to enumeration values</li>
 	<li>Run the ETL process</li>
 	<li>Verify all of the data is correct</li>
 	<li>Enable all of the schedules so that the jobs can resume</li>
</ol>
&nbsp;

<strong><u>STEP 1 Backup all of the Databases FIRST! </u></strong>

Although changes will be made to only the DWStagingAndConfig database, it is wise to ensure all databases (ServiceManager, DWRepository, DWStagingAndConfig, DWDataMart, CMDWDataMart, OMDWDataMart are backed up to allow for any restore scenario / sync possibility that may need to be performed.

&nbsp;

<strong><u>STEP 2 In PowerShell, disable the data warehouse job schedules so that they do not run until you want them to. </u></strong>

<strong>On the DW Management Server, import the service manager warehouse cmdlets.</strong>

<strong>Navigate to Service Manager installation directory</strong> e.g.

<em>Cd “C:\Program Files\Microsoft System Center 2012 R2\Service Manager”</em>

<strong>Once navigated to the appropriate directory, run the following command:</strong>

<em>import-module ".\Microsoft.EnterpriseManagement.Warehouse.Cmdlets.psd1"</em>

<strong>Run the following to get the schedules and set them to the $jslist variable:</strong>

<em>$jslist = Get-SCDWJobSchedule</em>

<strong>Run the following command to disable all job schedules:</strong>

<em>foreach($obj in $JSList) {Write-Host "Disabling Schedule for Job: " $obj.Name; Disable-SCDWJobSchedule -JobName $obj.Name;}</em>

&nbsp;

<strong><u>STEP 3 Verify all the jobs are in a status of ‘Not Started’ </u></strong>

<strong>Run the following command and ensure all the job schedules are disabled:</strong>

<em>get-scdwjobschedule | format-table</em>

<strong>Also, be sure that none of them are running before starting. (This is huge! If you do this process while the jobs are running the DW jobs could get irreparably stuck)</strong>

<em>get-scdwjob | format-table</em>

<span style="text-decoration: underline">NOTE:</span> 3 or ‘Not Started’ is what you should see for all of the jobs prior to continuing. Once you have disabled the schedules, the jobs will not rerun after they complete their current execution. For documentation's sake, below are all of the job and module statuses that are used in the DW and their numerical value. This is especially beneficial when you are looking in the infra.process, infra.batch, and infra.workitem tables in the DWStagingandConfig DB.

&nbsp;
<table>
<tbody>
<tr>
<td width="41">1</td>
<td width="90">Success</td>
</tr>
<tr>
<td width="41">2</td>
<td width="90">Failed</td>
</tr>
<tr>
<td width="41">3</td>
<td width="90">Not Started</td>
</tr>
<tr>
<td width="41">4</td>
<td width="90">Running</td>
</tr>
<tr>
<td width="41">5</td>
<td width="90">Stopped</td>
</tr>
<tr>
<td width="41">6</td>
<td width="90">Completed</td>
</tr>
<tr>
<td width="41">7</td>
<td width="90">Waiting</td>
</tr>
</tbody>
</table>
&nbsp;

<strong><u>STEP 4 Query Number of Display Strings in Service Manager DB</u></strong>

<strong>Check and note the number of rows in the display string view in the SCSM DB, by using the following command.</strong>

<em>Use ServiceManager</em>

<em>select count(DisplayName) from ServiceManager.dbo.DisplayStringView</em>

This should output the total number of display strings in the Service Manager database (should be around 210k). This will be the number we will check for after each execution of the extract job in Step 7.

&nbsp;

<strong><u>STEP</u></strong><u> <strong>5: In the DWStagingAndConfig DB, Clear the inbound tables for enum values and validate they are empty: </strong></u>

To prepare for the data reset, we need to clear everything related to enumerations that was previously extracted so that we can do a full resync.

<strong>Run this against the DWStagingandConfig DB:</strong>

<em>Use DWStagingAndConfig</em>

<em>delete from inbound.EnumType</em>

<em>delete from inbound.DisplayString</em>

<strong>Verify they are now empty with these commands:</strong>

<em>select * from inbound.EnumType</em>

<em>select * from inbound.DisplayString</em>

&nbsp;

<strong><u>STEP 6 : In the DWStagingAndConfig DB, Reset the Extract watermarks for the enums and display strings so that all of them can be resynced from SCSM:</u></strong>

<strong>The first step in the ETL process is Extract. So, we start by resetting the extract job module watermarks which are related to enumeration values:</strong>

<em>Use DWStagingAndConfig</em>

<em>update etl.WarehouseModuleDependency</em>

<em>set WaterMark = '2009-01-31 00:38:11.753'</em>

<em>where WarehouseEntityId IN (select WarehouseEntityId from DWStagingandConfig.etl.WarehouseEntity</em>

<em>where  (WarehouseEntityName like '%enumtype%' or WarehouseEntityName like '%displaystring%') and SourceId = 3 and WarehouseEntityTypeId = 6)</em>

<strong>IMPORTANT: It is fine to use the date shown above for the query.</strong>

&nbsp;

<strong><u>STEP 7: Run the Extract Job manually via PowerShell commands</u></strong>

<strong>Back in PowerShell on the Data Warehouse Management Server, Run the Main Management Group’s Extract Job (This will be Extract_ManagementGroupName not the Extract_DW_ManagementGroupName)</strong>

NOTE: In the command below change Extract_ManagementGroupName to the name of your extract job (run get-scdwjob if needed to determine the job name).

<em>Start-SCDWJOB -JobName Extract_ManagementGroupName</em>

<strong>Then run a get-scdwjob to ensure it shows as status = Running (or 4):</strong>

<em>get-scdwjob | format-table</em>

<strong>Re-run the get-scdwjob every 5 / 10 minutes or so until it changes to ‘Not Started’.</strong>

&nbsp;

<strong><u>STEP 8: Verify Count of rows in Inbound.displayString table</u></strong>

<strong>Run this Query in the DWstagingandConfig database:</strong>

<em>Use DwStagingAndConfig</em>

<em>select count(DisplayName) from DWStagingAndConfig.inbound.DisplayString</em>

This typically is around 50,000 / 52.000 after 1 extract job (this is predictable, due to the number of records we process per batch.)

&nbsp;

<strong><u>STEP 9: Repeat Steps 7 and 8 until the result in Step 8 matches that which you noted in STEP 4</u></strong>

<strong>Repeat Steps 7 and 8 running the extract, verifying the number in SQL until the number in SQL matches the number that was recorded in Step 4. </strong>

<strong>This will typically take a total of 5 runs of the extract job to get to that point.</strong>

&nbsp;

<strong><u>STEP 10 Reset the Transform and Load watermarks for all outriggers</u></strong>

Now that the data is in the DWStagingandConfig DB, it is time to transform and load it into the DWRepository and DWDataMart.

<strong>Run the following SQL statements 1 by one to reset the Transform and load watermarks for all outriggers:</strong>

<em>Use DWStagingAndConfig</em>

<em>update etl.WarehouseModuleDependency</em>

<em>set WMBatchId  = 0</em>

<em>where ModuleId IN (select ModuleId from etl.WarehouseEntity Entity</em>

<em>inner join etl.WarehouseModule module on module.TargetWarehouseEntityId= Entity.WarehouseEntityId</em>

<em>where  Entity.WarehouseEntityTypeId = 3)</em>

&nbsp;

<em>Use DWStagingAndConfig</em>

<em>update etl.WarehouseModuleDependency</em>

<em>set CompletedBatchId  = 0</em>

<em>where ModuleId IN (select ModuleId from etl.WarehouseEntity Entity</em>

<em>inner join etl.WarehouseModule module on module.TargetWarehouseEntityId= Entity.WarehouseEntityId</em>

<em>where  Entity.WarehouseEntityTypeId = 3)</em>

&nbsp;

<em>Use DWStagingAndConfig</em>

<em>update etl.WarehouseModuleDependency</em>

<em>set WaterMark = '2009-01-31 00:38:11.753'</em>

<em>where ModuleId IN (select ModuleId from etl.WarehouseEntity Entity</em>

<em>inner join etl.WarehouseModule module on module.TargetWarehouseEntityId= Entity.WarehouseEntityId</em>

<em>where  Entity.WarehouseEntityTypeId = 3)</em>

&nbsp;

<strong><u>STEP 11 : Manually Execute Transform.Common Job</u></strong>

<strong>Back in PowerShell on the Data Warehouse Management Server, Run the Transform.Common Job:</strong>

<em>Start-SCDWJOB -JobName Transform.common</em>

<strong>Then run a get-scdwjob to ensure it shows as status = Running (or 4)</strong>

<em>get-scdwjob | format-table</em>

Re-run the get-scdwjob  command every 5  minutes or so until it changes to ‘Not Started’.

&nbsp;

<strong><u>STEP 12: Verify the enum values are no longer in the DWRepository</u></strong>

<strong>The schema in the DWRepository is the same as the DWDataMart. So - after the transform job has run, you should be able to check one of the affected outriggers and verify that the enum values are no longer present. I like to do this before running the load job because there isn't a point in doing that if the values aren't fixed in the DWRepository.</strong>

&nbsp;

<strong><u>STEP 13: Manually Execute Load.Common Job</u></strong>

<strong>Back in PowerShell on the Data Warehouse Management Server, Run the Load.Common Job:</strong>

<em>Start-SCDWJOB -JobName Load.common</em>

<strong>Then run a get-scdwjob to ensure it shows as status = Running (or 4)</strong>

<em>get-scdwjob | format-table</em>

<strong>Re-run the get-scdwjob every 5 / 10 minutes or so until it changes to ‘Not Started’.</strong>

&nbsp;

<strong><u>STEP 14: Verify outriggers in the DWDataMart </u></strong>

<strong>Check the outriggers in the DWDataMart and ensure their values no longer contain enumeration ids. For any enums that exist in the DWDataMart but no longer exist in the ServiceManager DB, these will remain until manually cleaned out of the DWDataMart Database. If they are still used on workitems, you will need to do a manual update on the value in the outrigger or write them out of your reports using a NOT LIKE or something similar in the WHERE portion of your queries. </strong>

&nbsp;

<strong><u>STEP 15: Re-enable job schedule for MPSyncJob</u></strong>

<strong>It is important to turn the MPSyncJob and DWMaintenance jobs back on by themselves. If they try to run together, the DW jobs can get stuck.</strong>

<strong>Back on the Data Warehouse Management Server, Enable the MPSyncJob schedule and run it:</strong>

<em>Enable-SCDWJobSchedule -JobName MPSyncJob</em>

<em>Start-SCDWJob -JobName MPSyncJob</em>

<strong>Then run a get-scdwjob to ensure it shows as status = Running (or 4)</strong>

<em>get-scdwjob | format-table</em>

<strong>Re-run the get-scdwjob every 5 / 10 minutes or so until it changes to ‘Not Started’.</strong>

&nbsp;

<strong><u>STEP 16: Re-enable job schedule for DWMaintenance</u></strong>

<strong>Back on the Data Warehouse Management Server, Enable the DWMaintenance schedule and run it:</strong>

<em>Enable-SCDWJobSchedule -JobName DWMaintenance</em>

<em>Start-SCDWJob -JobName DWMaintenance</em>

<strong>Then run a get-scdwjob to ensure it shows as status = Running (or 4)</strong>

<em>get-scdwjob | format-table</em>

<strong>Re-run the get-scdwjob every 5 / 10 minutes or so until it changes to ‘Not Started’.</strong>

&nbsp;

<strong><u>STEP 17: Re-enable the remaining Job Schedules</u></strong>

<strong>Run the following to get the schedules and set them to the $jslist variable:</strong>

<em>$jslist = Get-SCDWJobSchedule</em>

foreach($obj in $JSList) {Write-Host "Enabling Schedule for Job: " $obj.Name; Enable-SCDWJobSchedule -JobName $obj.Name;}

&nbsp;

<strong><u>STEP 17 Create Test Incident (or work item) to monitor and ensure syncing is back to normal. </u></strong>

<strong>Create a test incident so you can ensure data is syncing across normally as expected.</strong>

Data should be synced all the way through from the live ServiceManager DB to DWDataMart in no more than 2 hours. You can also run the ETL manually to push things along.

<strong>The following query can be run to easily observe the most recent incidents:</strong>

<em>Use DWDataMart</em>

<em>select * from incidentdimvw order by createddate desc</em>

&nbsp;

YOU'RE FINISHED! :) I hope this helps some folks that are struggling with this.

&nbsp;

&nbsp;

&nbsp;

&nbsp;]]></content:encoded>
    </item>
    <item>
      <title>SCSM HTML 5 SSP Cache Settings</title>
      <link>https://docs.microsoft.com/archive/blogs/scsmfromthefield/scsm-html-5-ssp-cache-settings</link>
      <pubDate>Thu, 27 Oct 2016 10:44:22 GMT</pubDate>
      <dc:creator><![CDATA[Chris Howie - MSFT]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.technet.microsoft.com/scsmfromthefield/?p=65</guid>
      <description><![CDATA[The new HTML5 self-service portal has a caching system. While this portal is exponentially better...]]></description>
      <content:encoded><![CDATA[The new HTML5 self-service portal has a caching system. While this portal is exponentially better than the old Silverlight portal, this particular feature does introduce a delay when you are making portal modifications. To overcome this wait time, most people will do an IISReset. However, this does temporarily take down the site, which is undesirable for many scenarios.

Luckily, the product group made it simple to manage the cache and many other settings from within IIS manager. To do so, open IIS Manager and navigate to the site hosting the new HTML5 portal. Then, double-click the Application Settings for the site to open the Application Settings configuration pane. For the cache, you can modify the DataCacheTimeOut or the UserCacheTimeOut settings as necessary. The default DataCacheTimOut is 30 minutes (1800 seconds), which is a long time if you are doing a lot of tweaking. Keep in mind that if you set the value too low, it may cause performance issues so keep the values realistic. Per the documentation, this is what each setting is for:

&nbsp;
<table summary="table">
<tbody>
<tr>
<td><strong>UserCacheTimeout</strong>

&nbsp;</td>
<td>The portal uses a caching infrastructure to provide a swift user experience. The value of this key defines the timeout, in seconds, to cache user-specific details of the signed-in user.

&nbsp;</td>
</tr>
<tr>
<td><strong>DataCacheTimeout</strong>

&nbsp;</td>
<td>The portal uses a caching infrastructure to provide a swift user experience. The value of this key defines the timeout, in seconds, to cache generic data which can be shared among different users.

&nbsp;</td>
</tr>
</tbody>
</table>
&nbsp;

For information about all the other configurable portal settings, see https://technet.microsoft.com/en-us/library/mt622142(v=sc.12).aspx

Hope this helps!]]></content:encoded>
    </item>
    <item>
      <title>Get the most recent Assigned To User or any other relationship with one-to-many cardinality!</title>
      <link>https://docs.microsoft.com/archive/blogs/scsmfromthefield/get-the-most-recent-assigned-to-user-or-any-other-relationship-with-one-to-many-cardinality</link>
      <pubDate>Wed, 26 Oct 2016 16:27:14 GMT</pubDate>
      <dc:creator><![CDATA[Chris Howie - MSFT]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.technet.microsoft.com/scsmfromthefield/?p=25</guid>
      <description><![CDATA[Hello, everyone! My name is Chris Howie, Microsoft PFE and current Technology Manager for SCSM in...]]></description>
      <content:encoded><![CDATA[<span style="margin: 0px;color: #333333;font-family: 'Georgia',serif">Hello, everyone! My name is Chris Howie, Microsoft PFE and current Technology Manager for SCSM in the United States. For nearly the past two years, I have funneled my bloggable content through other PFEs (primarily Brian Barrington and Antoni Hanus), mostly because they already had established blogs and I of course did not. Now, we are all so busy that I am going to have to carry my own weight in this regard. :) In summary, I have been putting off blogging for too long and am ready to get going on my own.</span>

<span style="margin: 0px;color: #333333;font-family: 'Georgia',serif">Anyone that has had an onsite or remote engagement with me knows my passion around reporting in SCSM. Unfortunately, there are few out-of-the-box reports and they of course do not accommodate customizations, which most customers do, which results in me doing a TON of custom reporting. For my first post, I am going to address an issue which has plagued many customers who are attempting to retrieve the most recent instance of a relationship which is one-to-many. </span>

<b><span style="margin: 0px;color: #333333;font-family: 'Georgia',serif">First, we must level-set on some terminology and concepts. </span></b><span style="margin: 0px;color: #333333;font-family: 'Georgia',serif">Everything in SCSM is an object of a class (i.e. an Incident, Service Request, Windows Computer, etc.). These classes are related to each other via relationships. In the case of an Incident being related to a User, there is an Incident object and a User object and they are related to each other in a specific way through a relationship identifier (i.e. Assigned To User, Created By User, Affected User, Resolved By User). Some relationships can be many-to-many, such as <strong><span style="margin: 0px;font-family: 'Georgia',serif">About Configuration Item</span></strong>, which is the affected configuration items on work items, or one-to-many such as <strong><span style="margin: 0px;font-family: 'Georgia',serif">Assigned To User</span></strong>. </span>

<span style="margin: 0px;color: #333333;font-family: 'Georgia',serif"><span style="text-decoration: underline">Note:</span> If you ever wanted to know the cardinality for a specific relationship, you can always look it up by running <strong>SELECT * FROM RelationshipType</strong> against the ServiceManager Database. There you will find the minimum and maximum cardinality settings for every relationship in SCSM.</span>

<span style="margin: 0px;color: #333333;font-family: 'Georgia',serif">With many-to-many relationships, there can be multiple objects related to multiple others. For example, you can have multiple configuration items on an Incident, and those configuration items can also be related to multiple incidents. Alternatively, with one-to-many relationships such as Assigned To User, there can only be one active Assigned To User on an Incident, but that Assigned To User can be assigned to multiple Incidents. To maintain this single cardinality on work items, the existing relationship must be destroyed/deleted to allow the new one to exist. Keep this concept in your mind for the next section. :) </span>

<strong><span style="margin: 0px;color: #333333;font-family: 'Georgia',serif">So - why did I just tell you all of this?</span></strong><span style="margin: 0px;color: #333333;font-family: 'Georgia',serif"> It is important to understand the two different relationship concepts in reporting because it ultimately determines how you need to consume the data in the data mart. In the DWDataMart, we keep relationship changes in the fact tables which hold them. For example, in the case of WorkitemAssignedToUserFactvw, if a work item was reassigned multiple times then there are multiple entries. This can be a good or bad thing, depending on the type of report you are wanting to write. For example, if you are wanting to include all of the people who were involved in a work item's life, then you would simply join to include all of them and move on. However, if you want the <u>last</u> assigned to user, or the last of any other one-to-many relationship, you have to do some determination. </span>

<span style="margin: 0px;color: #333333;font-family: 'Georgia',serif">When viewing the WorkItemAssignedToUserFactvw and other fact views, you will likely notice that there is a DeletedDate column. This column is populated with the date/time of when the destroy process occurs for an existing one-to-many relationship that we previously discussed. So - the active (last) relationship should have a value of <strong><span style="margin: 0px;font-family: 'Georgia',serif">NULL</span></strong> when it has not yet been deleted, right? Well - yes and no. When the work item still exists in SCSM, the active relationship still exists also, therefore having a DeletedDate of NULL. However, when the work item is groomed, that relationship is also deleted, and therefore has a DeletedDate equal to the date/time it was groomed. Unfortunately, the OOB reports in 2012R2 and most customers' reports expect the <strong><span style="margin: 0px;font-family: 'Georgia',serif">DeletedDate = NULL</span></strong> to identify the last relationship. This means that as work items are groomed, the reports will no longer show the Assigned To User because the DeletedDate is now populated. </span>

<strong><span style="margin: 0px;color: #333333;font-family: 'Georgia',serif">Now what? </span></strong><span style="margin: 0px;color: #333333;font-family: 'Georgia',serif">Now that you understand the fundamental problem, you understand that we cannot simply use DeletedDate = NULL nor can we simply Max() the DeletedDate column because we would not include the NULL values on the active work items. To achieve the best of both worlds, I have come up with an interesting way to get the most recent assigned to user in both scenarios within a single query. First, I use the SQL functions <strong>Coalesce</strong>(which replaces NULL with a value) and <strong>GETDATE</strong>(which gets the current date/time) to convert the NULL DeletedDate values to the current date/time (which would make them the most recent). Then, I use the <strong>Max</strong> function to get the most recent date/time for each work item. This ensures that I have the last Assigned To User, whether it is active and NULL or it has been groomed. Below is an example of using this concept. </span>

&nbsp;

<span style="margin: 0px;color: #333333;font-family: 'Georgia',serif">--This query retrieves the last Assigned To User on all Work Items in the DWDataMart</span>

<span style="margin: 0px;color: #333333;font-family: 'Georgia',serif"><span style="color: #000000;font-family: Times New Roman">
</span> SELECT
WI.Id AS [WorkItem ID],
AssignedInfo.DisplayName AS [Assigned To User]
FROM WorkItemDimvw WI
LEFT JOIN (Select Max(COALESCE(DeletedDate,getdate())) as [max deleted date],WorkItemDimKey from WorkItemAssignedToUserFactvw assignedFact group by WorkItemDimKey) assignedfact on wi.WorkItemDimKey = assignedfact.WorkItemDimKey
LEFT JOIN WorkItemAssignedToUserFactvw assignedfact2 on WI.WorkItemDimKey = assignedfact2.WorkItemDimKey AND Coalesce(assignedfact2.DeletedDate,GETDATE()) = assignedfact.[max deleted date]
LEFT JOIN UserDimvw AssignedInfo on AssignedFact2.WorkItemAssignedToUser_UserDimKey = AssignedInfo.UserDimKey
where WI.Id IS NOT NULL</span>

<span style="margin: 0px;color: #333333;font-family: 'Georgia',serif"> </span>

<span style="margin: 0px;color: #333333;font-family: 'Georgia',serif">Thanks for reading, I hope this makes sense and helps those who are writing custom reports for SCSM! </span>

<strong><span style="margin: 0px;color: #333333;font-family: 'Georgia',serif">Have any ideas for me or the other PFEs to blog about? </span></strong><span style="margin: 0px;color: #333333;font-family: 'Georgia',serif">If so, please put them in the comments and we will do our best to get the knowledge out there!! :) </span>

<span style="margin: 0px;color: #333333;font-family: 'Georgia',serif">-Chris Howie</span>

&nbsp;

&nbsp;

This is provided "AS IS" with no warranties, and confers no rights. Use of included script samples are subject to the terms specified in the Terms of Use.]]></content:encoded>
    </item>
  </channel>
</rss>