New SCSM CodePlex Project: SCSM Facade

Published Feb 15 2019 05:00 AM 93 Views
First published on TECHNET on Feb 08, 2011
Gary Davidson, the Chief Software Architect at Interclick , has created a new SCSM CodePlex project called SCSM Façade.  The intention of the SCSM Façade project is to make programming against the SCSM SDK a little less abstract.  Because SCSM is a configuration driven platform all of the APIs are abstract.  For example – we don’t have a GetIncidents() method.  We only have a GetObjectReader() method which gets you objects that match the criteria you specify.  The criteria is what tells SCSM to return incidents instead of change requests.  So – in pseudocode you do something like this Incidents = GetObjectReader(Incident) instead of Incidents = GetIncidents().

The SCSM Façade CodePlex project tries to obscure some of the complexity of dealing with abstract APIs by exposing more concrete APIs.  This is a great example from Gary’s blog .

This is an example of how to write the code using the SCSM SDK APIs to get an incident by ID:

EnterpriseManagementGroup emg = new EnterpriseManagementGroup(Registry.GetValue( @"HKEY_CURRENT_USERSoftwareMicrosoftSystem Center2010Service ManagerConsoleUser Settings" ,

"SDKServiceMachine" , "localhost" ).ToString());

// what guid is it?

ManagementPackTypeProjection typeProjection = emg.EntityTypes.GetTypeProjection( new Guid( "285CB0A2-F276-BCCB-563E-BB721DF7CDEC" ));

// try remembering all this

var criteriaXml = "<Criteria xmlns=" http://Microsoft.EnterpriseManagement.Core.Criteria/ "> <Reference Id="System.WorkItem.Incident.Library" Version="7.0.6555.0" PublicKeyToken="31bf3856ad364e35" Alias="IncidentMP" /><Expression><SimpleExpression><ValueExpressionLeft><Property>$Target/Property[Type='IncidentMP!System.WorkItem.Incident']/Id/Property></ValueExpressionLeft><Operator>Equal</Operator><ValueExpressionRight><Value>IR201</Value></ValueExpressionRight></SimpleExpression></Expression></Criteria>" ;

ObjectProjectionCriteria criteria = new ObjectProjectionCriteria(criteriaXml, typeProjection, emg);

var incidentProjection = emg.EntityObjects.GetObjectProjectionReader< EnterpriseManagementObject>(criteria, ObjectQueryOptions.Default);



With SCSM Façade you just need to do this:

var incidentProjection = SCSMIncident.GetIncident( "IR201" );



Nice!

Thanks for starting up this project Gary!  Anyone who would like to contribute to the project can contact me or Gary via the CodePlex site.

http://scsmfacade.codeplex.com/

%3CLINGO-SUB%20id%3D%22lingo-sub-342539%22%20slang%3D%22en-US%22%3ENew%20SCSM%20CodePlex%20Project%3A%20SCSM%20Facade%3C%2FLINGO-SUB%3E%3CLINGO-BODY%20id%3D%22lingo-body-342539%22%20slang%3D%22en-US%22%3E%0A%20%26lt%3Bmeta%20http-equiv%3D%22Content-Type%22%20content%3D%22text%2Fhtml%3B%20charset%3DUTF-8%22%20%2F%26gt%3B%3CSTRONG%3EFirst%20published%20on%20TECHNET%20on%20Feb%2008%2C%202011%20%3C%2FSTRONG%3E%20%3CBR%20%2F%3E%20Gary%20Davidson%2C%20the%20Chief%20Software%20Architect%20at%20%3CA%20href%3D%22http%3A%2F%2Fwww.interclick.com%22%20target%3D%22_blank%22%20rel%3D%22nofollow%20noopener%20noreferrer%22%3E%20Interclick%20%3C%2FA%3E%20%2C%20has%20created%20a%20new%20SCSM%20CodePlex%20project%20called%20SCSM%20Fa%C3%A7ade.%26nbsp%3B%20The%20intention%20of%20the%20SCSM%20Fa%C3%A7ade%20project%20is%20to%20make%20programming%20against%20the%20SCSM%20SDK%20a%20little%20less%20abstract.%26nbsp%3B%20Because%20SCSM%20is%20a%20configuration%20driven%20platform%20all%20of%20the%20APIs%20are%20abstract.%26nbsp%3B%20For%20example%20%E2%80%93%20we%20don%E2%80%99t%20have%20a%20GetIncidents()%20method.%26nbsp%3B%20We%20only%20have%20a%20GetObjectReader()%20method%20which%20gets%20you%20objects%20that%20match%20the%20criteria%20you%20specify.%26nbsp%3B%20The%20criteria%20is%20what%20tells%20SCSM%20to%20return%20incidents%20instead%20of%20change%20requests.%26nbsp%3B%20So%20%E2%80%93%20in%20pseudocode%20you%20do%20something%20like%20this%20Incidents%20%3D%20GetObjectReader(Incident)%20instead%20of%20Incidents%20%3D%20GetIncidents().%20%3CBR%20%2F%3E%20%3CBR%20%2F%3E%20The%20SCSM%20Fa%C3%A7ade%20CodePlex%20project%20tries%20to%20obscure%20some%20of%20the%20complexity%20of%20dealing%20with%20abstract%20APIs%20by%20exposing%20more%20concrete%20APIs.%26nbsp%3B%20This%20is%20a%20great%20example%20from%20%3CA%20href%3D%22http%3A%2F%2Fgarydavidson.net%2F%22%20target%3D%22_blank%22%20rel%3D%22nofollow%20noopener%20noreferrer%22%3E%20Gary%E2%80%99s%20blog%20%3C%2FA%3E%20.%20%3CBR%20%2F%3E%20%3CBR%20%2F%3E%20This%20is%20an%20example%20of%20how%20to%20write%20the%20code%20using%20the%20SCSM%20SDK%20APIs%20to%20get%20an%20incident%20by%20ID%3A%20%3CBR%20%2F%3E%20%3CBR%20%2F%3E%3CBLOCKQUOTE%3E%0A%20%20%20%3CCODE%3E%0A%20%20%20%20EnterpriseManagementGroup%20emg%20%3D%0A%20%20%20%3C%2FCODE%3E%0A%20%20%20%3CCODE%3E%0A%20%20%20%20new%0A%20%20%20%3C%2FCODE%3E%0A%20%20%20%3CCODE%3E%0A%20%20%20%20EnterpriseManagementGroup(Registry.GetValue(%0A%20%20%20%3C%2FCODE%3E%0A%20%20%20%3CCODE%3E%0A%20%20%20%20%40%22HKEY_CURRENT_USERSoftwareMicrosoftSystem%20Center2010Service%20ManagerConsoleUser%20Settings%22%0A%20%20%20%3C%2FCODE%3E%0A%20%20%20%3CCODE%3E%0A%20%20%20%20%2C%0A%20%20%20%3C%2FCODE%3E%0A%20%20%20%3CP%3E%0A%20%20%20%3C%2FP%3E%0A%20%20%20%3CP%3E%0A%20%20%20%20%3CCODE%3E%0A%20%20%20%20%20%22SDKServiceMachine%22%0A%20%20%20%20%3C%2FCODE%3E%0A%20%20%20%20%3CCODE%3E%0A%20%20%20%20%20%2C%0A%20%20%20%20%3C%2FCODE%3E%0A%20%20%20%20%3CCODE%3E%0A%20%20%20%20%20%22localhost%22%0A%20%20%20%20%3C%2FCODE%3E%0A%20%20%20%20%3CCODE%3E%0A%20%20%20%20%20).ToString())%3B%0A%20%20%20%20%3C%2FCODE%3E%0A%20%20%20%3C%2FP%3E%0A%20%20%20%3CP%3E%0A%20%20%20%20%3CCODE%3E%0A%20%20%20%20%3C%2FCODE%3E%0A%20%20%20%3C%2FP%3E%0A%20%20%20%3CP%3E%0A%20%20%20%20%3CCODE%3E%0A%20%20%20%20%20%2F%2F%20what%20guid%20is%20it%3F%0A%20%20%20%20%3C%2FCODE%3E%0A%20%20%20%3C%2FP%3E%0A%20%20%20%3CP%3E%0A%20%20%20%20%3CCODE%3E%0A%20%20%20%20%20ManagementPackTypeProjection%20typeProjection%20%3D%20emg.EntityTypes.GetTypeProjection(%0A%20%20%20%20%3C%2FCODE%3E%0A%20%20%20%20%3CCODE%3E%0A%20%20%20%20%20new%0A%20%20%20%20%3C%2FCODE%3E%0A%20%20%20%20%3CCODE%3E%0A%20%20%20%20%20Guid(%0A%20%20%20%20%3C%2FCODE%3E%0A%20%20%20%20%3CCODE%3E%0A%20%20%20%20%20%22285CB0A2-F276-BCCB-563E-BB721DF7CDEC%22%0A%20%20%20%20%3C%2FCODE%3E%0A%20%20%20%20%3CCODE%3E%0A%20%20%20%20%20))%3B%0A%20%20%20%20%3C%2FCODE%3E%0A%20%20%20%3C%2FP%3E%0A%20%20%20%3CP%3E%0A%20%20%20%20%3CCODE%3E%0A%20%20%20%20%3C%2FCODE%3E%0A%20%20%20%3C%2FP%3E%0A%20%20%20%3CP%3E%0A%20%20%20%20%3CCODE%3E%0A%20%20%20%20%20%2F%2F%20try%20remembering%20all%20this%0A%20%20%20%20%3C%2FCODE%3E%0A%20%20%20%3C%2FP%3E%0A%20%20%20%3CP%3E%0A%20%20%20%20%3CCODE%3E%0A%20%20%20%20%20var%20criteriaXml%20%3D%0A%20%20%20%20%3C%2FCODE%3E%0A%20%20%20%20%3CCODE%3E%0A%20%20%20%20%20%22%3CCRITERIA%20xmlns%3D%22%0A%20%20%20%20%20%26lt%3BA%20href%3D%22%3E%0A%20%20%20%20%20%20%3CA%20href%3D%22http%3A%2F%2FMicrosoft.EnterpriseManagement.Core.Criteria%2F%22%20target%3D%22_blank%22%20rel%3D%22nofollow%20noopener%20noreferrer%22%3Ehttp%3A%2F%2FMicrosoft.EnterpriseManagement.Core.Criteria%2F%3C%2FA%3E%0A%20%20%20%20%20%0A%20%20%20%20%20%22%26gt%3B%20%3CREFERENCE%20id%3D%22System.WorkItem.Incident.Library%22%20version%3D%227.0.6555.0%22%20publickeytoken%3D%2231bf3856ad364e35%22%20alias%3D%22IncidentMP%22%3E%3C%2FREFERENCE%3E%3CEXPRESSION%3E%3CSIMPLEEXPRESSION%3E%3CVALUEEXPRESSIONLEFT%3E%3CPROPERTY%3E%24Target%2FProperty%5BType%3D'IncidentMP!System.WorkItem.Incident'%5D%2FId%2FProperty%26gt%3B%3C%2FPROPERTY%3E%3COPERATOR%3EEqual%3C%2FOPERATOR%3E%3CVALUEEXPRESSIONRIGHT%3E%3CVALUE%3EIR201%3C%2FVALUE%3E%3C%2FVALUEEXPRESSIONRIGHT%3E%3C%2FVALUEEXPRESSIONLEFT%3E%3C%2FSIMPLEEXPRESSION%3E%3C%2FEXPRESSION%3E%22%0A%20%20%20%20%3C%2FCRITERIA%3E%3C%2FCODE%3E%0A%20%20%20%20%3CCODE%3E%0A%20%20%20%20%20%3B%0A%20%20%20%20%3C%2FCODE%3E%0A%20%20%20%3C%2FP%3E%0A%20%20%20%3CP%3E%0A%20%20%20%20%3CCODE%3E%0A%20%20%20%20%3C%2FCODE%3E%0A%20%20%20%3C%2FP%3E%0A%20%20%20%3CP%3E%0A%20%20%20%20%3CCODE%3E%0A%20%20%20%20%20ObjectProjectionCriteria%20criteria%20%3D%0A%20%20%20%20%3C%2FCODE%3E%0A%20%20%20%20%3CCODE%3E%0A%20%20%20%20%20new%0A%20%20%20%20%3C%2FCODE%3E%0A%20%20%20%20%3CCODE%3E%0A%20%20%20%20%20ObjectProjectionCriteria(criteriaXml%2C%20typeProjection%2C%20emg)%3B%0A%20%20%20%20%3C%2FCODE%3E%0A%20%20%20%3C%2FP%3E%0A%20%20%20%3CP%3E%0A%20%20%20%20%3CCODE%3E%0A%20%20%20%20%3C%2FCODE%3E%0A%20%20%20%3C%2FP%3E%0A%20%20%20%3CP%3E%0A%20%20%20%20%3CCODE%3E%0A%20%20%20%20%20var%20incidentProjection%20%3D%20emg.EntityObjects.GetObjectProjectionReader%26lt%3B%0A%20%20%20%20%3C%2FCODE%3E%0A%20%20%20%20%3CCODE%3E%0A%20%20%20%20%20EnterpriseManagementObject%26gt%3B(criteria%2C%20ObjectQueryOptions.Default)%3B%0A%20%20%20%20%3C%2FCODE%3E%0A%20%20%20%3C%2FP%3E%0A%20%20%3C%2FBLOCKQUOTE%3E%0A%20%20%3CBR%20%2F%3E%0A%20%20%3CBR%20%2F%3E%0A%20%20%3CP%3E%0A%20%20%20%3CCODE%3E%0A%20%20%20%20With%20SCSM%20Fa%C3%A7ade%20you%20just%20need%20to%20do%20this%3A%0A%20%20%20%3C%2FCODE%3E%0A%20%20%20%3CBR%20%2F%3E%0A%20%20%20%3CBR%20%2F%3E%0A%20%20%3C%2FP%3E%0A%20%20%3CBLOCKQUOTE%3E%0A%20%20%20%3CCODE%3E%0A%20%20%20%20var%20incidentProjection%20%3D%20SCSMIncident.GetIncident(%0A%20%20%20%3C%2FCODE%3E%0A%20%20%20%3CCODE%3E%0A%20%20%20%20%22IR201%22%0A%20%20%20%3C%2FCODE%3E%0A%20%20%20%3CCODE%3E%0A%20%20%20%20)%3B%0A%20%20%20%3C%2FCODE%3E%0A%20%20%20%3CP%3E%0A%20%20%20%3C%2FP%3E%0A%20%20%3C%2FBLOCKQUOTE%3E%0A%20%20%3CBR%20%2F%3E%0A%20%20%3CBR%20%2F%3E%0A%20%20%3CP%3E%0A%20%20%20%3CCODE%3E%0A%20%20%20%20Nice!%0A%20%20%20%3C%2FCODE%3E%0A%20%20%20%3CBR%20%2F%3E%0A%20%20%20%3CBR%20%2F%3E%0A%20%20%20%3CCODE%3E%0A%20%20%20%20Thanks%20for%20starting%20up%20this%20project%20Gary!%26nbsp%3B%20Anyone%20who%20would%20like%20to%20contribute%20to%20the%20project%20can%20contact%20me%20or%20Gary%20via%20the%20CodePlex%20site.%0A%20%20%20%3C%2FCODE%3E%0A%20%20%20%3CBR%20%2F%3E%0A%20%20%20%3CBR%20%2F%3E%0A%20%20%3C%2FP%3E%0A%20%20%3CP%3E%0A%20%20%20%3CA%20href%3D%22http%3A%2F%2Fscsmfacade.codeplex.com%2F%22%20title%3D%22http%3A%2F%2Fscsmfacade.codeplex.com%2F%22%20target%3D%22_blank%22%20rel%3D%22nofollow%20noopener%20noreferrer%22%3E%0A%20%20%20%20http%3A%2F%2Fscsmfacade.codeplex.com%2F%0A%20%20%20%3C%2FA%3E%0A%20%20%3C%2FP%3E%0A%20%0A%3C%2FLINGO-BODY%3E%3CLINGO-TEASER%20id%3D%22lingo-teaser-342539%22%20slang%3D%22en-US%22%3EFirst%20published%20on%20TECHNET%20on%20Feb%2008%2C%202011%20Gary%20Davidson%2C%20the%20Chief%20Software%20Architect%20at%20Interclick%2C%20has%20created%20a%20new%20SCSM%20CodePlex%20project%20called%20SCSM%20Fa%C3%A7ade.%3C%2FLINGO-TEASER%3E%3CLINGO-LABS%20id%3D%22lingo-labs-342539%22%20slang%3D%22en-US%22%3E%3CLINGO-LABEL%3ESystem%20Center%20Service%20Manager%3C%2FLINGO-LABEL%3E%3C%2FLINGO-LABS%3E
Version history
Last update:
‎Mar 11 2019 08:39 AM
Updated by: