/// <summary> /// Get the WorkFlow Template Item By specified Name /// </summary> /// <param name="templateName">A parameter represents the template name which will be used to find out the template item</param> /// <param name="templateData">A parameter represents response of GetTemplatesForItem operation.</param> /// <returns>A return represents the template item data.</returns> public static TemplateDataWorkflowTemplate GetWorkFlowTemplateItemByName(string templateName, TemplateData templateData) { if (string.IsNullOrEmpty(templateName) || null == templateData) { string errMsg = string.Format( "All Parameters should not be null or empty: templateName[{0}] getTemplatesForItemResult[{1}]", string.IsNullOrEmpty(templateName) ? "NullOrEmpty" : "Valid", null == templateData ? "Null" : "Valid"); throw new ArgumentException(errMsg); } if (null == templateData.WorkflowTemplates) { site.Assert.Fail("Could not get the valid TemplateData from the response of GetTemplatesForItem operation."); } TemplateDataWorkflowTemplate[] templates = templateData.WorkflowTemplates; var expectedTemplateItems = from templateItem in templates where templateItem.Name.Equals(templateName, StringComparison.OrdinalIgnoreCase) select templateItem; TemplateDataWorkflowTemplate matchTemplateItem = null; int itemsCounter = expectedTemplateItems.Count(); if (1 < itemsCounter) { site.Assert.Fail("The response of GetTemplatesForItem operation should contain only one matched TemplateData item."); } else if (0 == itemsCounter) { return matchTemplateItem; } else { matchTemplateItem = expectedTemplateItems.ElementAt(0); } return matchTemplateItem; }
/// <summary> /// Get the association data from specified templateItem in response of GetTemplatesForItem operation. /// </summary> /// <param name="templateName">A parameter represents the template name which will be used to find out the template item</param> /// <param name="templateData">A parameter represents response of GetTemplatesForItem operation which contains the association data.</param> /// <returns>A return represents the association data.</returns> public static XmlNode GetAssociationDataFromTemplateItem(string templateName, TemplateData templateData) { TemplateDataWorkflowTemplate currentWorkflowTemplateItem = GetWorkFlowTemplateItemByName(templateName, templateData); if (null == currentWorkflowTemplateItem) { site.Assert.Fail( "The response of getTemplatesForItem operation should contain template item with expected name[{0}]", templateName); } return currentWorkflowTemplateItem.AssociationData; }
/// <summary> /// This method is used to capture the TemplateData related requirements. /// </summary> /// <param name="templateData">A parameter represents the template data get from SUT.</param> private void CaptureTemplateDataRelatedRequirements(TemplateData templateData) { // The schema has been validated by full WSDL. // If it returns success, the schema is valid, capture related requirements. isSuccess = SchemaValidation.ValidationResult == ValidationResult.Success; // Verify MS-WWSP requirement: MS-WWSP_R34 Site.CaptureRequirementIfIsTrue( isSuccess, 34, @"[In TemplateData][The TemplateData schema is:] <s:element name=""TemplateData"" > <s:complexType> <s:sequence> <s:element name=""Web"" minOccurs=""1"" maxOccurs=""1"" > <s:complexType> <s:attribute name=""Title"" type=""s:string"" use=""required"" /> <s:attribute name=""Url"" type=""s:string"" use=""required"" /> </s:complexType> </s:element> <s:element name=""List"" minOccurs=""1"" maxOccurs=""1"" > <s:complexType> <s:attribute name=""Title"" type=""s:string"" use=""required"" /> <s:attribute name=""Url"" type=""s:string"" use=""required"" /> </s:complexType> </s:element> <s:element name=""WorkflowTemplates"" > <s:complexType> <s:sequence> <s:element name=""WorkflowTemplate"" minOccurs=""0"" maxOccurs=""unbounded""> <s:complexType> <s:sequence> <s:element name=""WorkflowTemplateIdSet"" minOccurs=""1"" maxOccurs=""1""> <s:complexType> <s:attribute name=""TemplateId"" type=""s1:guid"" use=""required"" /> <s:attribute name=""BaseId"" type=""s1:guid"" use=""required"" /> </s:complexType> </s:element> <s:element name=""AssociationData"" minOccurs=""0"" maxOccurs=""1"" > <s:complexType> <s:sequence> <s:any/> </s:sequence> </s:complexType> </s:element> <s:element name=""Metadata"" minOccurs=""1"" maxOccurs=""1""> <s:complexType> <s:all> <s:element name=""InitiationCategories"" minOccurs=""0"" maxOccurs=""1""> <s:complexType> <s:sequence> <s:any/> </s:sequence> </s:complexType> </s:element> <s:element name=""Instantiation_FormURN"" minOccurs=""0"" maxOccurs=""1""> <s:complexType> <s:sequence> <s:any/> </s:sequence> </s:complexType> </s:element> <s:element name=""Instantiation_FormURI"" minOccurs=""0"" maxOccurs=""1""> <s:complexType> <s:sequence> <s:any/> </s:sequence> </s:complexType> </s:element> <s:element name=""AssignmentStagesName"" minOccurs=""0"" maxOccurs=""1""> <s:complexType> <s:sequence> <s:any/> </s:sequence> </s:complexType> </s:element> <s:element name=""SigClientSettings"" minOccurs=""0"" maxOccurs=""1""> <s:complexType> <s:sequence> <s:any/> </s:sequence> </s:complexType> </s:element> </s:all> </s:complexType> </s:element> </s:sequence> <s:attribute name=""Name"" type=""s:string"" use=""required"" /> <s:attribute name=""Description"" type=""s:string"" use=""required"" /> <s:attribute name=""InstantiationUrl"" type=""s:string"" /> </s:complexType> </s:element> </s:sequence> </s:complexType> </s:element> </s:sequence> </s:complexType> </s:element>"); // Capture R421 if (Common.IsRequirementEnabled(421, this.Site)) { var instantiationFormURIElements = from workflowTemplateItem in templateData.WorkflowTemplates where workflowTemplateItem.Metadata.Instantiation_FormURI != null && !string.IsNullOrEmpty(workflowTemplateItem.Metadata.Instantiation_FormURI.InnerText) select workflowTemplateItem.Metadata.Instantiation_FormURI; int numberOfexistingElements = instantiationFormURIElements.Count(); this.Site.Log.Add( LogEntryKind.Debug, @"The actual value: instantiationFormURI Elements' number[{0}] for requirement #R421", numberOfexistingElements); this.Site.CaptureRequirementIfAreNotEqual( 0, numberOfexistingElements, 421, @"[In Appendix B: Product Behavior]Implementation does support this[Instantiation_FormURI] element.(Microsoft® SharePoint® Foundation 2010 and above follow this behavior.)"); } // Get the association data which is included in current used workflow association item. string expectedworkflowTemplateName = Common.GetConfigurationPropertyValue("WorkflowAssociationName", Site); XmlNode currentAssociationData = AdapterHelper.GetAssociationDataFromTemplateItem(expectedworkflowTemplateName, templateData); // Verify the association data relate requirements. this.CaptureWorkflowAssociation(currentAssociationData); }