Deployment Report
Accessibility | Internal |
Visible | False |
RT.CategoryFormat | Category : {0} | |
RT.ComputerTitle | Computer | |
RT.ApprovedTitle | Approved | |
RT.DeadlineTitle | Deadline | |
RT.Detail.ReportTitle | Reports | |
RT.Detail.HardwareInventory | Hardware Inventory | |
RT.Detail.SoftwareInventory | Software Inventory | |
RF.State.Unknown | Unknown | |
RF.State.NotApplicable | NotApplicable | |
RF.State.NotInstalled | NotInstalled | |
RF.State.Downloaded | Downloaded | |
RF.State.Installed | Installed | |
RF.State.Failed | Failed | |
RF.State.InstalledPendingReboot | Pending Reboot |
<Report ID="Microsoft.SystemCenter.Essentials.Report.Deployment" Accessibility="Internal" Visible="false">
<Definition>
<Report xmlns:rd="http://schemas.microsoft.com/SQLServer/reporting/reportdesigner" xmlns="http://schemas.microsoft.com/sqlserver/reporting/2008/01/reportdefinition">
<DataSources>
<DataSource Name="WSUSDatabase">
<DataSourceReference>WSUS Database</DataSourceReference>
<rd:DataSourceID>abd09461-a57b-4d0e-b1e6-24da724f8fbb</rd:DataSourceID>
<rd:SecurityType>None</rd:SecurityType>
</DataSource>
<DataSource Name="DataWarehouseMain">
<DataSourceReference>Data Warehouse Main</DataSourceReference>
<rd:DataSourceID>e4235c51-407f-4065-8519-a1e57374bc45</rd:DataSourceID>
<rd:SecurityType>None</rd:SecurityType>
</DataSource>
</DataSources>
<DataSets>
<DataSet Name="LT_Table_Query">
<Fields>
<Field Name="ValueXml">
<DataField>XML_F52E2B61-18A1-11d1-B105-00805F49916B</DataField>
</Field>
<Field Name="ValueName">
<Value>="LT"</Value>
</Field>
</Fields>
<Query>
<DataSourceName>DataWarehouseMain</DataSourceName>
<CommandType>StoredProcedure</CommandType>
<CommandText>ReportDisplayStringGet</CommandText>
<QueryParameters>
<QueryParameter Name="@ManagementGroupGuid">
<Value>=Code.GetCallingManagementGroupId()</Value>
</QueryParameter>
<QueryParameter Name="@ManagementPackSystemName">
<Value>Microsoft.SystemCenter.Essentials.Report.Library</Value>
</QueryParameter>
<QueryParameter Name="@ReportSystemName">
<Value>Microsoft.SystemCenter.Essentials.Report.Deployment</Value>
</QueryParameter>
<QueryParameter Name="@LanguageCode">
<Value>=Code.GetReportLocLanguageCode()</Value>
</QueryParameter>
<QueryParameter Name="@Scope">
<Value>RT.%</Value>
</QueryParameter>
</QueryParameters>
</Query>
</DataSet>
<DataSet Name="LT_Format_Query">
<Fields>
<Field Name="ValueXml">
<DataField>XML_F52E2B61-18A1-11d1-B105-00805F49916B</DataField>
</Field>
<Field Name="ValueName">
<Value>="LT"</Value>
</Field>
</Fields>
<Query>
<DataSourceName>DataWarehouseMain</DataSourceName>
<CommandType>StoredProcedure</CommandType>
<CommandText>ReportDisplayStringGet</CommandText>
<QueryParameters>
<QueryParameter Name="@ManagementGroupGuid">
<Value>=Code.GetCallingManagementGroupId()</Value>
</QueryParameter>
<QueryParameter Name="@ManagementPackSystemName">
<Value>Microsoft.SystemCenter.Essentials.Report.Library</Value>
</QueryParameter>
<QueryParameter Name="@ReportSystemName">
<Value>Microsoft.SystemCenter.Essentials.Report.Deployment</Value>
</QueryParameter>
<QueryParameter Name="@LanguageCode">
<Value>=Code.GetReportLocLanguageCode()</Value>
</QueryParameter>
<QueryParameter Name="@Scope">
<Value>RF.%</Value>
</QueryParameter>
</QueryParameters>
</Query>
</DataSet>
<DataSet Name="GroupList">
<Fields>
<Field Name="Name">
<DataField>Name</DataField>
<rd:TypeName>System.String</rd:TypeName>
</Field>
<Field Name="ComputerTargetGroupId">
<DataField>ComputerTargetGroupId</DataField>
<rd:TypeName>System.Guid</rd:TypeName>
</Field>
</Fields>
<Query>
<DataSourceName>WSUSDatabase</DataSourceName>
<CommandText>SELECT Name, ComputerTargetGroupId
FROM PUBLIC_VIEWS.vComputerTargetGroup
WHERE Name <> 'EssentialsAgentDeploymentGroup_1907F5F0-F427-4716-B0A0-6370FAA5559B'
ORDER BY Name</CommandText>
</Query>
</DataSet>
<DataSet Name="SUSDB">
<Fields>
<Field Name="ComputerTargetId">
<DataField>ComputerTargetId</DataField>
<rd:TypeName>System.String</rd:TypeName>
</Field>
<Field Name="ComputerName">
<DataField>ComputerName</DataField>
<rd:TypeName>System.String</rd:TypeName>
</Field>
<Field Name="StateName">
<DataField>StateName</DataField>
<rd:TypeName>System.String</rd:TypeName>
</Field>
<Field Name="Deadline">
<DataField>Deadline</DataField>
<rd:TypeName>System.DateTime</rd:TypeName>
</Field>
<Field Name="ApprovalDate">
<DataField>ApprovalDate</DataField>
<rd:TypeName>System.DateTime</rd:TypeName>
</Field>
<Field Name="UpdateId">
<DataField>UpdateId</DataField>
<rd:TypeName>System.Guid</rd:TypeName>
</Field>
<Field Name="UpdateTitle">
<DataField>UpdateTitle</DataField>
<rd:TypeName>System.String</rd:TypeName>
</Field>
<Field Name="UpdateDescription">
<DataField>UpdateDescription</DataField>
<rd:TypeName>System.String</rd:TypeName>
</Field>
<Field Name="UpdateClassificationTitle">
<DataField>UpdateClassificationTitle</DataField>
<rd:TypeName>System.String</rd:TypeName>
</Field>
<Field Name="UpdateType">
<DataField>UpdateType</DataField>
<rd:TypeName>System.String</rd:TypeName>
</Field>
</Fields>
<Query>
<DataSourceName>WSUSDatabase</DataSourceName>
<CommandText>
IF @UpdateClassification = 1
BEGIN
SELECT
i.ComputerTargetId,
cmp.[Name] AS ComputerName,
map.[Name] AS StateName,
a.Deadline,
a.CreationDate AS ApprovalDate,
u.UpdateId,
ISNULL(ut.Title, u.DefaultTitle) AS UpdateTitle,
ISNULL(ut.Description, u.DefaultDescription) AS UpdateDescription,
ISNULL(ct.Title, c.DefaultTitle) AS UpdateClassificationTitle,
u.UpdateType
FROM
PUBLIC_VIEWS.vUpdateInstallationInfo i
JOIN PUBLIC_VIEWS.vComputerTarget cmp ON i.ComputerTargetId = cmp.ComputerTargetId
JOIN PUBLIC_VIEWS.vComputerGroupMembership g ON cmp.ComputerTargetId = g.ComputerTargetId
JOIN PUBLIC_VIEWS.vUpdateEffectiveApprovalPerComputer ae ON i.UpdateId = ae.UpdateId AND ae.ComputerTargetId = cmp.ComputerTargetId
JOIN PUBLIC_VIEWS.vUpdateApproval a ON a.UpdateApprovalId = ae.UpdateApprovalId
JOIN PUBLIC_VIEWS.fnUpdateInstallationStateMap() map ON i.State = map.id
JOIN
(SELECT UpdateId,
ClassificationId,
DefaultTitle,
DefaultDescription,
UpdateType,
ArrivalDate,
CASE UpdateType WHEN 'SoftwareApplication' THEN 1 ELSE 0 END AS UpdateClass
FROM PUBLIC_VIEWS.vUpdate) u ON i.UpdateId = u.UpdateId AND (u.ClassificationId = '0fa1201d-4330-4fa8-8ae9-b877473b6441' Or u.ClassificationId = 'e6cf1350-c01b-414d-a61f-263d14d133b4') AND u.ArrivalDate >= @UpdateArrivalDate
JOIN PUBLIC_VIEWS.vClassification c ON u.ClassificationId = c.ClassificationId
LEFT JOIN PUBLIC_VIEWS.vUpdateText ut ON u.UpdateId = ut.UpdateId AND ut.LocaleId = @Locale
LEFT JOIN PUBLIC_VIEWS.vClassificationText ct ON u.ClassificationId = ct.ClassificationId AND ct.LocaleId = @Locale
WHERE
g.ComputerTargetGroupId = @ComputerGroupId AND
map.[Name] in (@Status) AND
u.UpdateClass = @UpdateClass
END
ELSE
BEGIN
SELECT
i.ComputerTargetId,
cmp.[Name] AS ComputerName,
map.[Name] AS StateName,
a.Deadline,
a.CreationDate AS ApprovalDate,
u.UpdateId,
ISNULL(ut.Title, u.DefaultTitle) AS UpdateTitle,
ISNULL(ut.Description, u.DefaultDescription) AS UpdateDescription,
ISNULL(ct.Title, c.DefaultTitle) AS UpdateClassificationTitle,
u.UpdateType
FROM
PUBLIC_VIEWS.vUpdateInstallationInfo i
JOIN PUBLIC_VIEWS.vComputerTarget cmp ON i.ComputerTargetId = cmp.ComputerTargetId
JOIN PUBLIC_VIEWS.vComputerGroupMembership g ON cmp.ComputerTargetId = g.ComputerTargetId
JOIN PUBLIC_VIEWS.vUpdateEffectiveApprovalPerComputer ae ON i.UpdateId = ae.UpdateId AND ae.ComputerTargetId = cmp.ComputerTargetId
JOIN PUBLIC_VIEWS.vUpdateApproval a ON a.UpdateApprovalId = ae.UpdateApprovalId
JOIN PUBLIC_VIEWS.fnUpdateInstallationStateMap() map ON i.State = map.id
JOIN
(SELECT UpdateId,
ClassificationId,
DefaultTitle,
DefaultDescription,
UpdateType,
ArrivalDate,
CASE UpdateType WHEN 'SoftwareApplication' THEN 1 ELSE 0 END AS UpdateClass
FROM PUBLIC_VIEWS.vUpdate) u ON i.UpdateId = u.UpdateId AND u.ArrivalDate >= @UpdateArrivalDate
JOIN PUBLIC_VIEWS.vClassification c ON u.ClassificationId = c.ClassificationId
LEFT JOIN PUBLIC_VIEWS.vUpdateText ut ON u.UpdateId = ut.UpdateId AND ut.LocaleId = @Locale
LEFT JOIN PUBLIC_VIEWS.vClassificationText ct ON u.ClassificationId = ct.ClassificationId AND ct.LocaleId = @Locale
WHERE
g.ComputerTargetGroupId = @ComputerGroupId AND
map.[Name] in (@Status) AND
u.UpdateClass = @UpdateClass
END</CommandText>
<QueryParameters>
<QueryParameter Name="@UpdateClassification">
<Value>=Parameters!UpdateClassification.Value</Value>
</QueryParameter>
<QueryParameter Name="@Locale">
<Value>=Code.GetReportLCID()</Value>
</QueryParameter>
<QueryParameter Name="@ComputerGroupId">
<Value>=Parameters!ComputerGroupId.Value</Value>
</QueryParameter>
<QueryParameter Name="@Status">
<Value>=Parameters!Status.Value</Value>
</QueryParameter>
<QueryParameter Name="@UpdateClass">
<Value>=Parameters!UpdateClass.Value</Value>
</QueryParameter>
<QueryParameter Name="@UpdateArrivalDate">
<Value>=Code.GetUpdateArrivalDate(Parameters!IsSuperTuesdayReport.Value)</Value>
</QueryParameter>
</QueryParameters>
<rd:UseGenericDesigner>true</rd:UseGenericDesigner>
</Query>
</DataSet>
<DataSet Name="StatusList">
<Fields>
<Field Name="Id">
<DataField>Id</DataField>
<rd:TypeName>System.Byte</rd:TypeName>
</Field>
<Field Name="Name">
<DataField>Name</DataField>
<rd:TypeName>System.String</rd:TypeName>
</Field>
<Field Name="DisplayName">
<Value>=Code.GetLocTable("LT_Format").GetString("RF.State." + Fields!Name.Value, "[" +Fields!Name.Value+ "]")</Value>
</Field>
</Fields>
<Query>
<DataSourceName>WSUSDatabase</DataSourceName>
<CommandText>SELECT Id, Name
FROM PUBLIC_VIEWS.fnUpdateInstallationStateMap()</CommandText>
</Query>
</DataSet>
</DataSets>
<Body>
<ReportItems>
<Tablix Name="StateList">
<TablixBody>
<TablixColumns>
<TablixColumn>
<Width>7.85in</Width>
</TablixColumn>
</TablixColumns>
<TablixRows>
<TablixRow>
<Height>2.05in</Height>
<TablixCells>
<TablixCell>
<CellContents>
<Rectangle Name="StateList_Contents">
<ReportItems>
<Textbox Name="textbox3">
<CanGrow>true</CanGrow>
<DataElementStyle>Attribute</DataElementStyle>
<KeepTogether>true</KeepTogether>
<Paragraphs>
<Paragraph>
<TextRuns>
<TextRun>
<Value>=Code.GetLocTable("LT_Format").GetString("RF.State." + Fields!StateName.Value, "[" +Fields!StateName.Value+ "]")</Value>
<Style>
<FontFamily>Tahoma</FontFamily>
<FontWeight>Bold</FontWeight>
</Style>
</TextRun>
</TextRuns>
<Style/>
</Paragraph>
</Paragraphs>
<rd:DefaultName>textbox3</rd:DefaultName>
<Top>0.15in</Top>
<Left>0.1in</Left>
<Height>0.25in</Height>
<Width>7.6in</Width>
<DataElementName>Status</DataElementName>
<DataElementOutput>Output</DataElementOutput>
<Style>
<Border>
<Color>DimGray</Color>
</Border>
<BottomBorder>
<Style> Double</Style>
</BottomBorder>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
</Textbox>
<Tablix Name="UpdateList">
<TablixBody>
<TablixColumns>
<TablixColumn>
<Width>7.45in</Width>
</TablixColumn>
</TablixColumns>
<TablixRows>
<TablixRow>
<Height>1.65in</Height>
<TablixCells>
<TablixCell>
<CellContents>
<Rectangle Name="UpdateList_Contents">
<ReportItems>
<Textbox Name="UpdateTitleBox">
<CanGrow>true</CanGrow>
<DataElementStyle>Element</DataElementStyle>
<KeepTogether>true</KeepTogether>
<Paragraphs>
<Paragraph>
<TextRuns>
<TextRun>
<Value>=Fields!UpdateTitle.Value</Value>
<Style>
<FontSize>8pt</FontSize>
<FontWeight>Bold</FontWeight>
</Style>
</TextRun>
</TextRuns>
<Style/>
</Paragraph>
</Paragraphs>
<Top>0.1in</Top>
<Height>0.25in</Height>
<Width>7.45in</Width>
<DocumentMapLabel>=Fields!UpdateTitle.Value</DocumentMapLabel>
<DataElementName>Title</DataElementName>
<DataElementOutput>Output</DataElementOutput>
<Style>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
</Textbox>
<Textbox Name="textbox5">
<CanGrow>true</CanGrow>
<DataElementStyle>Element</DataElementStyle>
<KeepTogether>true</KeepTogether>
<Paragraphs>
<Paragraph>
<TextRuns>
<TextRun>
<Value>=Code.FormatString(Code.GetLocTable("LT_Table").GetString("RT.CategoryFormat", "[Category : {0}]"), Fields!UpdateClassificationTitle.Value)</Value>
<Style>
<FontSize>8pt</FontSize>
</Style>
</TextRun>
</TextRuns>
<Style/>
</Paragraph>
</Paragraphs>
<rd:DefaultName>textbox5</rd:DefaultName>
<Top>0.35in</Top>
<Left>0.25in</Left>
<Height>0.2in</Height>
<Width>7.2in</Width>
<ZIndex>1</ZIndex>
<Visibility>
<Hidden>true</Hidden>
<ToggleItem>UpdateTitleBox</ToggleItem>
</Visibility>
<DataElementName>Category</DataElementName>
<DataElementOutput>Output</DataElementOutput>
<Style>
<Border>
<Color>DarkGray</Color>
<Style> Solid</Style>
</Border>
<BackgroundColor>Gainsboro</BackgroundColor>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
</Textbox>
<Textbox Name="textbox6">
<CanGrow>true</CanGrow>
<DataElementStyle>Element</DataElementStyle>
<KeepTogether>true</KeepTogether>
<Paragraphs>
<Paragraph>
<TextRuns>
<TextRun>
<Value>=Fields!UpdateDescription.Value</Value>
<Style>
<FontSize>8pt</FontSize>
</Style>
</TextRun>
</TextRuns>
<Style/>
</Paragraph>
</Paragraphs>
<Top>0.55in</Top>
<Left>0.25in</Left>
<Height>0.2in</Height>
<Width>7.2in</Width>
<ZIndex>2</ZIndex>
<Visibility>
<Hidden>true</Hidden>
<ToggleItem>UpdateTitleBox</ToggleItem>
</Visibility>
<DataElementName>Description</DataElementName>
<DataElementOutput>Output</DataElementOutput>
<Style>
<Border>
<Color>DarkGray</Color>
<Style> Solid</Style>
</Border>
<BackgroundColor>Gainsboro</BackgroundColor>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
</Textbox>
<Tablix Name="ComputerTable">
<TablixBody>
<TablixColumns>
<TablixColumn>
<Width>3.95in</Width>
</TablixColumn>
<TablixColumn>
<Width>1.65in</Width>
</TablixColumn>
<TablixColumn>
<Width>1.6in</Width>
</TablixColumn>
</TablixColumns>
<TablixRows>
<TablixRow>
<Height>0.2in</Height>
<TablixCells>
<TablixCell>
<CellContents>
<Textbox Name="textbox4">
<CanGrow>true</CanGrow>
<UserSort>
<SortExpression>=Fields!ComputerName.Value</SortExpression>
<SortExpressionScope>ComputerTable_Details_Group</SortExpressionScope>
<SortTarget>ComputerTable</SortTarget>
</UserSort>
<KeepTogether>true</KeepTogether>
<Paragraphs>
<Paragraph>
<TextRuns>
<TextRun>
<Value>=Code.GetLocTable("LT_Table").GetString("RT.ComputerTitle", "[Computer]")</Value>
<Style>
<FontFamily>Tahoma</FontFamily>
<FontSize>8pt</FontSize>
</Style>
</TextRun>
</TextRuns>
<Style/>
</Paragraph>
</Paragraphs>
<rd:DefaultName>textbox4</rd:DefaultName>
<ZIndex>6</ZIndex>
<DataElementOutput>NoOutput</DataElementOutput>
<Style>
<Border>
<Color>DarkGray</Color>
<Style> Solid</Style>
</Border>
<BackgroundColor>Gainsboro</BackgroundColor>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
</Textbox>
</CellContents>
</TablixCell>
<TablixCell>
<CellContents>
<Textbox Name="textbox8">
<CanGrow>true</CanGrow>
<UserSort>
<SortExpression>=Fields!ApprovalDate.Value</SortExpression>
<SortExpressionScope>ComputerTable_Details_Group</SortExpressionScope>
<SortTarget>ComputerTable</SortTarget>
</UserSort>
<KeepTogether>true</KeepTogether>
<Paragraphs>
<Paragraph>
<TextRuns>
<TextRun>
<Value>=Code.GetLocTable("LT_Table").GetString("RT.ApprovedTitle", "[Approved]")</Value>
<Style>
<FontFamily>Tahoma</FontFamily>
<FontSize>8pt</FontSize>
</Style>
</TextRun>
</TextRuns>
<Style>
<TextAlign>Center</TextAlign>
</Style>
</Paragraph>
</Paragraphs>
<ZIndex>5</ZIndex>
<DataElementOutput>NoOutput</DataElementOutput>
<Style>
<Border>
<Color>DarkGray</Color>
<Style> Solid</Style>
</Border>
<BackgroundColor>Gainsboro</BackgroundColor>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
</Textbox>
</CellContents>
</TablixCell>
<TablixCell>
<CellContents>
<Textbox Name="textbox7">
<CanGrow>true</CanGrow>
<UserSort>
<SortExpression>=Fields!Deadline.Value</SortExpression>
<SortExpressionScope>ComputerTable_Details_Group</SortExpressionScope>
<SortTarget>ComputerTable</SortTarget>
</UserSort>
<KeepTogether>true</KeepTogether>
<Paragraphs>
<Paragraph>
<TextRuns>
<TextRun>
<Value>=Code.GetLocTable("LT_Table").GetString("RT.DeadlineTitle", "[Deadline]")</Value>
<Style>
<FontFamily>Tahoma</FontFamily>
<FontSize>8pt</FontSize>
</Style>
</TextRun>
</TextRuns>
<Style>
<TextAlign>Center</TextAlign>
</Style>
</Paragraph>
</Paragraphs>
<rd:DefaultName>textbox7</rd:DefaultName>
<ZIndex>4</ZIndex>
<DataElementOutput>NoOutput</DataElementOutput>
<Style>
<Border>
<Color>DarkGray</Color>
<Style> Solid</Style>
</Border>
<BackgroundColor>Gainsboro</BackgroundColor>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
</Textbox>
</CellContents>
</TablixCell>
</TablixCells>
</TablixRow>
<TablixRow>
<Height>0.2in</Height>
<TablixCells>
<TablixCell>
<CellContents>
<Textbox Name="ComputerBox">
<CanGrow>true</CanGrow>
<DataElementStyle>Element</DataElementStyle>
<KeepTogether>true</KeepTogether>
<Paragraphs>
<Paragraph>
<TextRuns>
<TextRun>
<Value>=Fields!ComputerName.Value</Value>
<Style>
<FontFamily>Tahoma</FontFamily>
<FontSize>8pt</FontSize>
</Style>
</TextRun>
</TextRuns>
<Style/>
</Paragraph>
</Paragraphs>
<ZIndex>3</ZIndex>
<DataElementName>Name</DataElementName>
<DataElementOutput>Output</DataElementOutput>
<Style>
<Border>
<Color>DarkGray</Color>
<Style> Solid</Style>
</Border>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
</Textbox>
</CellContents>
</TablixCell>
<TablixCell>
<CellContents>
<Textbox Name="textbox12">
<CanGrow>true</CanGrow>
<DataElementStyle>Element</DataElementStyle>
<KeepTogether>true</KeepTogether>
<Paragraphs>
<Paragraph>
<TextRuns>
<TextRun>
<Value>=IIF(IsNothing(Min(Fields!ApprovalDate.Value)), Nothing, Code.FormatDateTime("G", Code.ToReportDate(CDate(Min(Fields!ApprovalDate.Value)).ToUniversalTime())))</Value>
<Style>
<FontFamily>Tahoma</FontFamily>
<FontSize>8pt</FontSize>
</Style>
</TextRun>
</TextRuns>
<Style>
<TextAlign>Center</TextAlign>
</Style>
</Paragraph>
</Paragraphs>
<ZIndex>2</ZIndex>
<DataElementName>Approved</DataElementName>
<DataElementOutput>Output</DataElementOutput>
<Style>
<Border>
<Color>DarkGray</Color>
<Style> Solid</Style>
</Border>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
</Textbox>
</CellContents>
</TablixCell>
<TablixCell>
<CellContents>
<Textbox Name="textbox11">
<CanGrow>true</CanGrow>
<DataElementStyle>Element</DataElementStyle>
<KeepTogether>true</KeepTogether>
<Paragraphs>
<Paragraph>
<TextRuns>
<TextRun>
<Value>=IIF(IsNothing(Min(Fields!Deadline.Value)), Nothing, Code.FormatDateTime("G", Code.ToReportDate(CDate(Min(Fields!Deadline.Value)).ToUniversalTime())))</Value>
<Style>
<FontFamily>Tahoma</FontFamily>
<FontSize>8pt</FontSize>
</Style>
</TextRun>
</TextRuns>
<Style>
<TextAlign>Center</TextAlign>
</Style>
</Paragraph>
</Paragraphs>
<rd:DefaultName>textbox11</rd:DefaultName>
<ZIndex>1</ZIndex>
<DataElementName>Deadline</DataElementName>
<DataElementOutput>Output</DataElementOutput>
<Style>
<Border>
<Color>DarkGray</Color>
<Style> Solid</Style>
</Border>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
</Textbox>
</CellContents>
</TablixCell>
</TablixCells>
</TablixRow>
<TablixRow>
<Height>0.44167in</Height>
<TablixCells>
<TablixCell>
<CellContents>
<Rectangle Name="rectangle18">
<ReportItems>
<Textbox Name="textbox47">
<CanGrow>true</CanGrow>
<KeepTogether>true</KeepTogether>
<Paragraphs>
<Paragraph>
<TextRuns>
<TextRun>
<Value>=Code.GetLocTable("LT_Table").GetString("RT.Detail.ReportTitle", "[Reports]")</Value>
<Style>
<FontFamily>Tahoma</FontFamily>
<FontSize>8pt</FontSize>
</Style>
</TextRun>
</TextRuns>
<Style/>
</Paragraph>
</Paragraphs>
<Top>0.05in</Top>
<Left>0.5in</Left>
<Height>0.2in</Height>
<Width>0.74896in</Width>
<Style>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
</Textbox>
<Textbox Name="textbox46">
<CanGrow>true</CanGrow>
<KeepTogether>true</KeepTogether>
<Paragraphs>
<Paragraph>
<TextRuns>
<TextRun>
<Value>=Code.GetLocTable("LT_Table").GetString("RT.Detail.HardwareInventory", "[Hardware Inventory]")</Value>
<Style>
<FontFamily>Tahoma</FontFamily>
<FontSize>8pt</FontSize>
<Color>Blue</Color>
</Style>
</TextRun>
</TextRuns>
<Style/>
</Paragraph>
</Paragraphs>
<ActionInfo>
<Actions>
<Action>
<Drillthrough>
<ReportName>Microsoft.SystemCenter.Essentials.Report.HardwareInventory</ReportName>
<Parameters>
<Parameter Name="ComputerTargetId">
<Value>=Fields!ComputerTargetId.Value</Value>
</Parameter>
</Parameters>
</Drillthrough>
</Action>
</Actions>
</ActionInfo>
<Top>0.05in</Top>
<Left>1.45in</Left>
<Height>0.2in</Height>
<Width>3.05in</Width>
<ZIndex>1</ZIndex>
<Style>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
</Textbox>
<Textbox Name="textbox42">
<CanGrow>true</CanGrow>
<KeepTogether>true</KeepTogether>
<Paragraphs>
<Paragraph>
<TextRuns>
<TextRun>
<Value>=Code.GetLocTable("LT_Table").GetString("RT.Detail.SoftwareInventory", "[Software Inventory]")</Value>
<Style>
<FontFamily>Tahoma</FontFamily>
<FontSize>8pt</FontSize>
<Color>Blue</Color>
</Style>
</TextRun>
</TextRuns>
<Style/>
</Paragraph>
</Paragraphs>
<ActionInfo>
<Actions>
<Action>
<Drillthrough>
<ReportName>Microsoft.SystemCenter.Essentials.Report.SoftwareInventory</ReportName>
<Parameters>
<Parameter Name="ComputerTargetId">
<Value>=Fields!ComputerTargetId.Value</Value>
</Parameter>
</Parameters>
</Drillthrough>
</Action>
</Actions>
</ActionInfo>
<Top>0.25in</Top>
<Left>1.45104in</Left>
<Height>0.19167in</Height>
<Width>3.04896in</Width>
<ZIndex>2</ZIndex>
<Style>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
</Textbox>
<Image Name="image1">
<Source>External</Source>
<Value>../reports_icon.png</Value>
<Top>0.05in</Top>
<Left>0.25in</Left>
<Height>0.2in</Height>
<Width>0.2in</Width>
<ZIndex>3</ZIndex>
<Style/>
</Image>
</ReportItems>
<DataElementOutput>NoOutput</DataElementOutput>
<Style>
<Border>
<Color>DarkGray</Color>
<Style> Solid</Style>
</Border>
<BackgroundColor>Gainsboro</BackgroundColor>
</Style>
</Rectangle>
<ColSpan>3</ColSpan>
</CellContents>
</TablixCell>
<TablixCell/>
<TablixCell/>
</TablixCells>
</TablixRow>
</TablixRows>
</TablixBody>
<TablixColumnHierarchy>
<TablixMembers>
<TablixMember/>
<TablixMember/>
<TablixMember/>
</TablixMembers>
</TablixColumnHierarchy>
<TablixRowHierarchy>
<TablixMembers>
<TablixMember>
<KeepWithGroup>After</KeepWithGroup>
<RepeatOnNewPage>true</RepeatOnNewPage>
<KeepTogether>true</KeepTogether>
</TablixMember>
<TablixMember>
<Group Name="ComputerTable_Details_Group">
<GroupExpressions>
<GroupExpression>=Fields!ComputerTargetId.Value</GroupExpression>
</GroupExpressions>
<DataElementName>Detail</DataElementName>
</Group>
<TablixMembers>
<TablixMember/>
<TablixMember>
<Visibility>
<Hidden>true</Hidden>
<ToggleItem>ComputerBox</ToggleItem>
</Visibility>
</TablixMember>
</TablixMembers>
<DataElementName>Detail_Collection</DataElementName>
<DataElementOutput>Output</DataElementOutput>
<KeepTogether>true</KeepTogether>
</TablixMember>
</TablixMembers>
</TablixRowHierarchy>
<Top>0.8in</Top>
<Left>0.25in</Left>
<Height>0.84167in</Height>
<Width>7.2in</Width>
<ZIndex>3</ZIndex>
<DataElementName>Target</DataElementName>
<DataElementOutput>Output</DataElementOutput>
<Style>
<FontSize>8pt</FontSize>
</Style>
</Tablix>
</ReportItems>
<KeepTogether>true</KeepTogether>
<Style/>
</Rectangle>
</CellContents>
</TablixCell>
</TablixCells>
</TablixRow>
</TablixRows>
</TablixBody>
<TablixColumnHierarchy>
<TablixMembers>
<TablixMember/>
</TablixMembers>
</TablixColumnHierarchy>
<TablixRowHierarchy>
<TablixMembers>
<TablixMember>
<Group Name="UpdateList_Details_Group">
<GroupExpressions>
<GroupExpression>=Fields!UpdateId.Value</GroupExpression>
</GroupExpressions>
<DataElementName>Package</DataElementName>
</Group>
<SortExpressions>
<SortExpression>
<Value>=Fields!UpdateTitle.Value</Value>
</SortExpression>
</SortExpressions>
<DataElementOutput>Output</DataElementOutput>
<KeepTogether>true</KeepTogether>
</TablixMember>
</TablixMembers>
</TablixRowHierarchy>
<DataSetName>SUSDB</DataSetName>
<Top>0.4in</Top>
<Left>0.25in</Left>
<Height>1.65in</Height>
<Width>7.45in</Width>
<ZIndex>1</ZIndex>
<DataElementName>Packages</DataElementName>
<DataElementOutput>Output</DataElementOutput>
<Style/>
</Tablix>
</ReportItems>
<KeepTogether>true</KeepTogether>
<Style/>
</Rectangle>
</CellContents>
</TablixCell>
</TablixCells>
</TablixRow>
</TablixRows>
</TablixBody>
<TablixColumnHierarchy>
<TablixMembers>
<TablixMember/>
</TablixMembers>
</TablixColumnHierarchy>
<TablixRowHierarchy>
<TablixMembers>
<TablixMember>
<Group Name="StateList_Details_Group">
<DocumentMapLabel>=Code.GetLocTable("LT_Format").GetString("RF.State." + Fields!StateName.Value, "[" +Fields!StateName.Value+ "]")</DocumentMapLabel>
<GroupExpressions>
<GroupExpression>=Fields!StateName.Value</GroupExpression>
</GroupExpressions>
<DataElementName>DeploymentStatusGroup</DataElementName>
</Group>
<SortExpressions>
<SortExpression>
<Value>=Code.GetLocTable("LT_Format").GetString("RF.State." + Fields!StateName.Value, "[" +Fields!StateName.Value+ "]")</Value>
</SortExpression>
</SortExpressions>
<DataElementOutput>Output</DataElementOutput>
<KeepTogether>true</KeepTogether>
</TablixMember>
</TablixMembers>
</TablixRowHierarchy>
<DataSetName>SUSDB</DataSetName>
<Left>0.45in</Left>
<Height>2.05in</Height>
<Width>7.85in</Width>
<DataElementName>DeploymentStatusGroups</DataElementName>
<DataElementOutput>Output</DataElementOutput>
<Style/>
</Tablix>
<CustomReportItem Name="ForceYukonEngine">
<Type>ForceYukonEngine</Type>
<CustomData>
<DataSetName>StatusList</DataSetName>
<DataColumnHierarchy>
<DataMembers>
<DataMember/>
</DataMembers>
</DataColumnHierarchy>
<DataRowHierarchy>
<DataMembers>
<DataMember/>
</DataMembers>
</DataRowHierarchy>
<DataRows>
<DataRow>
<DataCell>
<DataValue>
<Value>1</Value>
</DataValue>
</DataCell>
</DataRow>
</DataRows>
</CustomData>
<Top>0mm</Top>
<Left>0mm</Left>
<Height>0.01mm</Height>
<Width>0.01mm</Width>
<ZIndex>1</ZIndex>
<Visibility>
<Hidden>true</Hidden>
</Visibility>
<Style/>
</CustomReportItem>
</ReportItems>
<Height>2.05in</Height>
<Style/>
</Body>
<ReportParameters>
<ReportParameter Name="LT_Table">
<DataType>String</DataType>
<DefaultValue>
<DataSetReference>
<DataSetName>LT_Table_Query</DataSetName>
<ValueField>ValueXml</ValueField>
</DataSetReference>
</DefaultValue>
<Hidden>true</Hidden>
<ValidValues>
<DataSetReference>
<DataSetName>LT_Table_Query</DataSetName>
<ValueField>ValueXml</ValueField>
<LabelField>ValueName</LabelField>
</DataSetReference>
</ValidValues>
</ReportParameter>
<ReportParameter Name="LT_Format">
<DataType>String</DataType>
<DefaultValue>
<DataSetReference>
<DataSetName>LT_Format_Query</DataSetName>
<ValueField>ValueXml</ValueField>
</DataSetReference>
</DefaultValue>
<Hidden>true</Hidden>
<ValidValues>
<DataSetReference>
<DataSetName>LT_Format_Query</DataSetName>
<ValueField>ValueXml</ValueField>
<LabelField>ValueName</LabelField>
</DataSetReference>
</ValidValues>
</ReportParameter>
<ReportParameter Name="Status">
<DataType>String</DataType>
<DefaultValue>
<DataSetReference>
<DataSetName>StatusList</DataSetName>
<ValueField>Name</ValueField>
</DataSetReference>
</DefaultValue>
<Prompt>[Status]</Prompt>
<ValidValues>
<DataSetReference>
<DataSetName>StatusList</DataSetName>
<ValueField>Name</ValueField>
<LabelField>DisplayName</LabelField>
</DataSetReference>
</ValidValues>
<MultiValue>true</MultiValue>
</ReportParameter>
<ReportParameter Name="ComputerGroupId">
<DataType>String</DataType>
<Prompt>[Computer Group]</Prompt>
<ValidValues>
<DataSetReference>
<DataSetName>GroupList</DataSetName>
<ValueField>ComputerTargetGroupId</ValueField>
<LabelField>Name</LabelField>
</DataSetReference>
</ValidValues>
</ReportParameter>
<ReportParameter Name="UpdateClass">
<DataType>Integer</DataType>
<Prompt>UpdateClass</Prompt>
<ValidValues>
<ParameterValues>
<ParameterValue>
<Value>0</Value>
<Label>Update</Label>
</ParameterValue>
<ParameterValue>
<Value>1</Value>
<Label>Software</Label>
</ParameterValue>
</ParameterValues>
</ValidValues>
</ReportParameter>
<ReportParameter Name="UpdateClassification">
<DataType>Integer</DataType>
<AllowBlank>true</AllowBlank>
<Prompt>UpdateClassification</Prompt>
<ValidValues>
<ParameterValues>
<ParameterValue>
<Value>0</Value>
<Label>All</Label>
</ParameterValue>
<ParameterValue>
<Value>1</Value>
<Label>CriticalAndSecurity</Label>
</ParameterValue>
<ParameterValue>
<Value>2</Value>
<Label>NewUpdates</Label>
</ParameterValue>
</ParameterValues>
</ValidValues>
</ReportParameter>
<ReportParameter Name="IsSuperTuesdayReport">
<DataType>Boolean</DataType>
<DefaultValue>
<Values>
<Value>False</Value>
</Values>
</DefaultValue>
<Prompt>IsSuperTuesdayReport</Prompt>
</ReportParameter>
</ReportParameters>
<Code>
Const LocTableStringQuery As String = "R/S[@N='{0}']/text()"
Const TimeZoneParameterName As String = "TimeZone"
Const SD_BaseTypeParameterName As String = "StartDate_BaseType"
Const SD_BaseValueParameterName As String = "StartDate_BaseValue"
Const SD_OffsetTypeParameterName As String = "StartDate_OffsetType"
Const SD_OffsetValueParameterName As String = "StartDate_OffsetValue"
Const ED_BaseTypeParameterName As String = "EndDate_BaseType"
Const ED_BaseValueParameterName As String = "EndDate_BaseValue"
Const ED_OffsetTypeParameterName As String = "EndDate_OffsetType"
Const ED_OffsetValueParameterName As String = "EndDate_OffsetValue"
Const IsRelativeTimeSupported As Boolean = False
Const TimeTypeParameterName As String = "TimeType"
Const TimeWeekMapParameterName As String = "TimeWeekMap"
Dim LocTables As System.Collections.Generic.Dictionary(Of String, Microsoft.EnterpriseManagement.Reporting.XmlStringTable)
Dim ReportTimeZone As Microsoft.EnterpriseManagement.Reporting.TimeZoneCoreInformation = Microsoft.EnterpriseManagement.Reporting.TimeZoneInformation.Current
Dim ReportStartDate As DateTime = DateTime.MinValue
Dim ReportEndDate As DateTime = DateTime.MinValue
Dim ReportTime As Microsoft.EnterpriseManagement.Reporting.ParameterProcessor.RelativeTime
Dim ReportCulture As System.Globalization.CultureInfo
Dim ParameterProcessor As Microsoft.EnterpriseManagement.Reporting.ParameterProcessor
Dim TargetList As String
Public Function GetLocTables() As System.Collections.Generic.Dictionary(Of String, Microsoft.EnterpriseManagement.Reporting.XmlStringTable)
If IsNothing(LocTables) Then LocTables = new System.Collections.Generic.Dictionary(Of String, Microsoft.EnterpriseManagement.Reporting.XmlStringTable)()
Return LocTables
End Function
Public Function GetReportCulture() As System.Globalization.CultureInfo
If IsNothing(ReportCulture) Then ReportCulture = System.Globalization.CultureInfo.GetCultureInfo(Report.User("Language"))
Return ReportCulture
End Function
Public Function GetParameterProcessor() As Microsoft.EnterpriseManagement.Reporting.ParameterProcessor
If IsNothing(ParameterProcessor) Then ParameterProcessor = New Microsoft.EnterpriseManagement.Reporting.ParameterProcessor(GetReportCulture())
Return ParameterProcessor
End Function
Public Function GetCallingManagementGroupId() As String
Return Microsoft.EnterpriseManagement.Reporting.ReportingConfiguration.ManagementGroupId
End Function
Public Function GetReportLocLanguageCode() As String
Return GetReportCulture().ThreeLetterWindowsLanguageName
End Function
Public Function GetReportLCID() As Integer
Return GetReportCulture().LCID
End Function
Public Function GetLocTable(Name As String) As Microsoft.EnterpriseManagement.Reporting.XmlStringTable
Dim LocTable As Microsoft.EnterpriseManagement.Reporting.XmlStringTable
If Not GetLocTables().TryGetValue(Name, LocTable) Then
LocTable = New Microsoft.EnterpriseManagement.Reporting.XmlStringTable(LocTableStringQuery, Report.Parameters(Name).Value)
LocTables.Add(Name, LocTable)
End If
Return LocTable
End Function
Public Function GetReportTimeZone() As Microsoft.EnterpriseManagement.Reporting.TimeZoneCoreInformation
If IsNothing(ReportTimeZone) Then ReportTimeZone = Microsoft.EnterpriseManagement.Reporting.TimeZoneCoreInformation.FromValueString(Report.Parameters(TimeZoneParameterName).Value)
Return ReportTimeZone
End Function
Public Function GetUpdateArrivalDate(ByVal isSuperTuesdayReport As Boolean) As DateTime
Dim todayDate As DateTime
Dim returnDate As DateTime
'Sql doesn't like DateTime.MinValue (it's min DateTime value is in year 1793
'Set something reasonably good
returnDate = New DateTime(1900, 1, 1)
If isSuperTuesdayReport Then
todayDate = DateTime.Now
returnDate = New DateTime(todayDate.Year, todayDate.Month, 1, 0, 0, 0)
returnDate = GetNthTuesday(returnDate, 2)
If returnDate > DateTime.Now Then
returnDate = New DateTime(todayDate.Year, todayDate.Month, 1, 0, 0, 0)
returnDate = returnDate.AddMonths(-1)
returnDate = GetNthTuesday(returnDate, 2)
End If
End If
Return returnDate
End Function
Public Function GetNthTuesday(ByVal startDate As DateTime, ByVal nthTuesday As Integer) As DateTime
Dim returnDate As DateTime
returnDate = startDate
Dim dateFound As Boolean
dateFound = False
While dateFound = False
If returnDate.DayOfWeek = DayOfWeek.Tuesday Then
dateFound = True
Else
returnDate = returnDate.AddDays(1)
End If
End While
If nthTuesday > 1 Then
returnDate = returnDate.AddDays(7 * (nthTuesday - 1))
End If
Return returnDate
End Function
Public Function ToDbDate(ByVal DateValue As DateTime) As DateTime
return GetReportTimeZone().ToUniversalTime(DateValue)
End Function
Public Function ToReportDate(ByVal DateValue As DateTime) As DateTime
return GetReportTimeZone().ToLocalTime(DateValue)
End Function
Public Function GetReportStartDate() As DateTime
If (ReportStartDate = DateTime.MinValue) Then
If (IsRelativeTimeSupported) Then
ReportStartDate = ParameterProcessor.GetDateTime(ToReportDate(DateTime.UtcNow), Report.Parameters(SD_BaseTypeParameterName).Value, Report.Parameters(SD_BaseValueParameterName).Value, Report.Parameters(SD_OffsetTypeParameterName).Value, Report.Parameters(SD_OffsetValueParameterName).Value, Report.Parameters(TimeTypeParameterName).Value)
Else
ReportStartDate = ParameterProcessor.GetDateTime(ToReportDate(DateTime.UtcNow), Report.Parameters(SD_BaseTypeParameterName).Value, Report.Parameters(SD_BaseValueParameterName).Value, Report.Parameters(SD_OffsetTypeParameterName).Value, Report.Parameters(SD_OffsetValueParameterName).Value)
End if
End If
return ReportStartDate
End Function
Public Function GetReportEndDate() As DateTime
If (ReportEndDate = DateTime.MinValue) Then
If (IsRelativeTimeSupported) Then
ReportEndDate = ParameterProcessor.GetDateTime(ToReportDate(DateTime.UtcNow), Report.Parameters(ED_BaseTypeParameterName).Value, Report.Parameters(ED_BaseValueParameterName).Value, Report.Parameters(ED_OffsetTypeParameterName).Value, Report.Parameters(ED_OffsetValueParameterName).Value, Report.Parameters(TimeTypeParameterName).Value)
If IsBusinessHours(GetReportTimeFilter()) Then ReportEndDate = GetReportCulture().Calendar.AddDays(ReportEndDate, 1)
Else
ReportEndDate = ParameterProcessor.GetDateTime(ToReportDate(DateTime.UtcNow), Report.Parameters(ED_BaseTypeParameterName).Value, Report.Parameters(ED_BaseValueParameterName).Value, Report.Parameters(ED_OffsetTypeParameterName).Value, Report.Parameters(ED_OffsetValueParameterName).Value)
End if
End If
return ReportEndDate
End Function
Public Function GetReportTimeFilter() As Microsoft.EnterpriseManagement.Reporting.ParameterProcessor.RelativeTime
If IsNothing(ReportTime) Then ReportTime = New Microsoft.EnterpriseManagement.Reporting.ParameterProcessor.RelativeTime(Report.Parameters(TimeTypeParameterName).Value, Report.Parameters(SD_BaseValueParameterName).Value, Report.Parameters(ED_BaseValueParameterName).Value, CStr(Join(Report.Parameters(TimeWeekMapParameterName).Value, ",")))
return ReportTime
End Function
Public Function IsBusinessHours(Value As Microsoft.EnterpriseManagement.Reporting.ParameterProcessor.RelativeTime) As Boolean
return (Not IsNothing(Value)) And (Value.TimeType = Microsoft.EnterpriseManagement.Reporting.ParameterProcessor.RelativeTimeType.Business)
End Function
Public Function FormatDateTime(Format As String, Value As DateTime) As String
return Value.ToString(Format, GetReportCulture())
End Function
Public Function FormatNumber(Format As String, Value As Decimal) As String
return Value.ToString(Format, GetReportCulture())
End Function
Public Function FormatString(Format As String, ParamArray Values() as Object) As String
return String.Format(GetReportCulture(), Format, Values)
End Function
Public Function NullFormatString(Format As String, Value as String) As String
return IIF(String.IsNullOrEmpty(Value), String.Empty, String.Format(GetReportCulture(), Format, Value))
End Function
Public Function FormatBusinessHours(Format As String, Value As Microsoft.EnterpriseManagement.Reporting.ParameterProcessor.RelativeTime) As String
Dim result As String
If IsBusinessHours(Value) Then
Dim firstDay As DayOfWeek
Dim days As System.Collections.Generic.List(Of String)
firstDay = GetReportCulture().DateTimeFormat.FirstDayOfWeek
days = new System.Collections.Generic.List(Of String)()
For loopDay As DayOfWeek = DayOfWeek.Sunday To DayOfWeek.Saturday
Dim day As DayOfWeek
day = CType((CInt(loopDay) + CInt(firstDay)) Mod 7, DayOfWeek)
If value.WeekMap.Contains(day) Then days.Add(GetReportCulture().DateTimeFormat.GetAbbreviatedDayName(day))
Next loopDay
result = FormatString(Format, DateTime.Today.Add(Value.StartTime).ToString(GetReportCulture().DateTimeFormat.ShortTimePattern), DateTime.Today.Add(Value.EndTime).ToString(GetReportCulture().DateTimeFormat.ShortTimePattern), String.Join(",", days.ToArray()))
Else
result = String.Empty
End if
return result
End Function
Public Function BuildXmlValueList(ByVal ValueList() As Object) As String
Return Microsoft.EnterpriseManagement.Reporting.MultiValueParameter.ToXml("Data", "Value", ValueList)
End Function
REM -------------------------------------------------
Dim ReportFormatList As System.Collections.Generic.Dictionary(Of String, IDataFormatter)
Const FormatListParameterName As String = "DataFormat"
REM -------------------------------------------------
Public Interface IDataFormatter
Function FormatData(ByVal Value As String) As String
End Interface
Public Class RankDataFormatter
Implements IDataFormatter
Private Series As System.Collections.Generic.SortedDictionary(Of Decimal, String)
Private Culture As System.Globalization.CultureInfo
Public Sub New(ByVal Config As System.Xml.XmlNode, ByVal ReportCulture As System.Globalization.CultureInfo)
Culture = ReportCulture
Series = New System.Collections.Generic.SortedDictionary(Of Decimal, String)()
For Each SeriesXml As System.Xml.XmlNode In Config.ChildNodes
Series.Add(Decimal.Parse(SeriesXml.Attributes("Rank").Value), SeriesXml.Attributes("Format").Value)
Next
End Sub
Public Function FormatData(ByVal Value As String) As String Implements IDataFormatter.FormatData
Dim Result As String = CDec(Value).ToString("G", Culture)
For Each FormatItem As System.Collections.Generic.KeyValuePair(Of Decimal, String) In Series
Dim RunningValue As Decimal = Math.Round(Value / FormatItem.Key)
If RunningValue > 0 Then
Result = String.Format(Culture, FormatItem.Value, RunningValue.ToString("G", Culture))
Else
Exit For
End If
Next
Return Result
End Function
End Class
Public Class LookupDataFormatter
Implements IDataFormatter
Private MappingTable As System.Collections.Generic.IDictionary(Of String, String)
Public Sub New(ByVal Config As System.Xml.XmlNode)
MappingTable = New System.Collections.Generic.Dictionary(Of String, String)(StringComparer.OrdinalIgnoreCase)
For Each SeriesXml As System.Xml.XmlNode In Config.ChildNodes
MappingTable.Add(Decimal.Parse(SeriesXml.Attributes("Value").Value), SeriesXml.Attributes("Label").Value)
Next
End Sub
Public Function FormatData(ByVal Value As String) As String Implements IDataFormatter.FormatData
Dim Result As String
If MappingTable.ContainsKey(Value) Then
Result = MappingTable(Value)
Else
Result = Value
End If
Return Result
End Function
End Class
Public Function GetReportFormatList() As System.Collections.Generic.Dictionary(Of String, IDataFormatter)
If IsNothing(ReportFormatList) Then
Dim Xml As System.Xml.XmlDocument = New System.Xml.XmlDocument()
Xml.LoadXml(Report.Parameters(FormatListParameterName).Value)
ReportFormatList = New System.Collections.Generic.Dictionary(Of String, IDataFormatter)(StringComparer.OrdinalIgnoreCase)
For Each Node As System.Xml.XmlNode In Xml.DocumentElement.ChildNodes
Dim Formatter As IDataFormatter = Nothing
Select Case Node.Attributes("Type").Value.ToUpper()
Case "RANK"
Formatter = New RankDataFormatter(Node, GetReportCulture())
Case "LOOKUP"
Formatter = New LookupDataFormatter(Node)
End Select
If Not IsNothing(Formatter) Then
ReportFormatList.Add(Node.Attributes("Name").Value, Formatter)
End If
Next
End If
Return ReportFormatList
End Function
Public Function FormatData(ByVal FormatName As String, ByVal DataType As String, ByVal Value As String)
Dim FormatList As System.Collections.Generic.Dictionary(Of String, IDataFormatter) = GetReportFormatList()
If Not String.IsNullOrEmpty(FormatName) And Not IsNothing(FormatList) Then
If FormatList.ContainsKey(FormatName) Then
Return FormatList(FormatName).FormatData(Value)
End If
End If
If Not String.IsNullOrEmpty(DataType) Then
If DataType = "DateTime" Then
Return FormatDateTime("g", CDate(Value))
ElseIf DataType.StartsWith("UInt") Then
Return FormatNumber("G", Value)
End If
End If
Return Value
End Function
REM ----------------------------------------
Public Dim CurrentObjectList As String
Public Function InitList(ByRef List As String) As String
List = String.Empty
Return List
End Function
Public Function AddListItem(ByRef List As String, Item as String) As String
List = List + Item
Return List
End Function
Public Function GetObjectList(ByVal OptionsXml As String) As String()
Dim Xml As System.Xml.XmlDocument
Xml = New System.Xml.XmlDocument()
Xml.LoadXml(OptionsXml)
Dim Result As System.Collections.Generic.List(Of String)
Result = New System.Collections.Generic.List(Of String)
For Each ObjectNode As System.Xml.XmlNode In Xml.SelectNodes("/Value/Object")
If Not Result.Contains(ObjectNode.InnerText) Then
Result.Add(ObjectNode.InnerText)
End If
Next
Return Result.ToArray()
End Function
</Code>
<Width>8.5in</Width>
<Page>
<Style/>
</Page>
<Language>en-US</Language>
<CodeModules>
<CodeModule>Microsoft.EnterpriseManagement.Reporting.Code, Version=6.0.0.0, Culture=neutral</CodeModule>
<CodeModule>System.Xml, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</CodeModule>
</CodeModules>
<ConsumeContainerWhitespace>true</ConsumeContainerWhitespace>
<DataElementStyle>Element</DataElementStyle>
<rd:ReportID>ab518a51-343d-46c4-b1f8-4ec65faafd95</rd:ReportID>
<rd:ReportUnitType>Inch</rd:ReportUnitType>
</Report>
</Definition>
<ReportStrings>
<ReportString ID="RT.CategoryFormat"/>
<ReportString ID="RT.ComputerTitle"/>
<ReportString ID="RT.ApprovedTitle"/>
<ReportString ID="RT.DeadlineTitle"/>
<ReportString ID="RT.Detail.ReportTitle"/>
<ReportString ID="RT.Detail.HardwareInventory"/>
<ReportString ID="RT.Detail.SoftwareInventory"/>
<ReportString ID="RF.State.Unknown"/>
<ReportString ID="RF.State.NotApplicable"/>
<ReportString ID="RF.State.NotInstalled"/>
<ReportString ID="RF.State.Downloaded"/>
<ReportString ID="RF.State.Installed"/>
<ReportString ID="RF.State.Failed"/>
<ReportString ID="RF.State.InstalledPendingReboot"/>
</ReportStrings>
</Report>