We created a Plug In for RTC 5.0.2, as port of the plug in there is an XSD that describes the configuration of the plug in.The configuration XML is inserted on the process configuration source as a follow up action
but the XML Editor do not show proposals for some elements. We use several choose in the work-item-element section because none of the elements inside are required but at least one must be use. The XML file is like this:
<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns="cio.jazz.rtcext.workitem.extensions.slack.service/server/slackNotification_v3"
targetNamespace="cio.jazz.rtcext.workitem.extensions.slack.service/server/slackNotification_v3"
xmlns:process="http://com.ibm.team.process"
attributeFormDefault="unqualified" elementFormDefault="qualified">
<xsd:annotation>
<xsd:documentation xml:lang="en">
Licensed Materials - Property of IBM
(c) Copyright IBM Corporation 2010. All Rights Reserved.
Note to U.S. Government Users Restricted Rights: Use,
duplication or disclosure restricted by GSA ADP Schedule
Contract with IBM Corp.
</xsd:documentation>
<xsd:documentation>
This file contains type definitions for the send data to
slack channel operation participant. It defines the triggerType
to define its trigger work item type, state and other changes and
the slackType to contain the target slack channel information.
</xsd:documentation>
</xsd:annotation>
<xsd:import namespace="http://com.ibm.team.process" schemaLocation="platform:/plugin/com.ibm.team.process.common/schema/ProcessSettings.xsd"/>
<xsd:element name="followup-action" substitutionGroup="process:followup-action" type="sendDatatoSlackType"/>
<xsd:complexType name="sendDatatoSlackType">
<xsd:annotation>
<xsd:documentation>
This type defines the Send Data to Slack type. It is a
subtype of the abstract process:followupActionType. This
restriction, along with the substitutionGroup specification
above, makes it possible to add configuration of the participant
to a project or team area's process configuration. Note the
forward references to the trigger and slack types defined below.
Take particular note of the id attribute. It is required and has
a fixed value that points to our operation participant extension.
</xsd:documentation>
</xsd:annotation>
<xsd:complexContent>
<xsd:restriction base="process:followupActionType">
<xsd:sequence>
<xsd:element name="configuration-area" type="configurationAreaType" minOccurs="1" maxOccurs="unbounded" use="required" />
</xsd:sequence>
<xsd:attribute name="id" type="xsd:string" use="required" fixed="cio.jazz.rtcext.workitem.extensions.slack.SlackNotificationPlugInV3"/>
</xsd:restriction>
</xsd:complexContent>
</xsd:complexType>
<xsd:complexType name="triggerType">
<xsd:annotation>
<xsd:documentation>
This type defines the work item type to be monitored and
the work item state that should trigger the operation
participant.
</xsd:documentation>
</xsd:annotation>
<xsd:sequence>
<xsd:element name="work-item-element" type="workItemDefinitionType" minOccurs="1" maxOccurs="unbounded"/>
</xsd:sequence>
<xsd:attribute name="send-default-if-not-found" type="xsd:boolean" use="required"/>
</xsd:complexType>
<xsd:complexType name="workItemSearchDefinitionType">
<xsd:choice>
<xsd:element ref="work-item-severity" minOccurs="1" maxOccurs="1"/>
<xsd:sequence>
<xsd:element ref="work-item-state" minOccurs="1" maxOccurs="1"/>
<xsd:element ref="work-item-severity" minOccurs="0" maxOccurs="1"/>
</xsd:sequence>
<xsd:sequence>
<xsd:element ref="work-item-operation" minOccurs="1" maxOccurs="1"/>
<xsd:element ref="work-item-state" minOccurs="0" maxOccurs="1"/>
<xsd:element ref="work-item-severity" minOccurs="0" maxOccurs="1"/>
</xsd:sequence>
<xsd:sequence>
<xsd:element ref="work-item-priority" minOccurs="1" maxOccurs="1"/>
<xsd:element ref="work-item-operation" minOccurs="0" maxOccurs="1"/>
<xsd:element ref="work-item-state" minOccurs="0" maxOccurs="1"/>
<xsd:element ref="work-item-severity" minOccurs="0" maxOccurs="1"/>
</xsd:sequence>
<xsd:sequence>
<xsd:element ref="work-item-type" minOccurs="1" maxOccurs="1"/>
<xsd:element ref="work-item-priority" minOccurs="0" maxOccurs="1"/>
<xsd:element ref="work-item-operation" minOccurs="0" maxOccurs="1"/>
<xsd:element ref="work-item-state" minOccurs="0" maxOccurs="1"/>
<xsd:element ref="work-item-severity" minOccurs="0" maxOccurs="1"/>
</xsd:sequence>
</xsd:choice>
</xsd:complexType>
<xsd:simpleType name="StrNotEmptyType">
<xsd:restriction base="xsd:string">
<xsd:pattern value="(\s)a-zA-Z0-9(\s)"/>
</xsd:restriction>
</xsd:simpleType>
<xsd:element name="work-item-type" type="StrNotEmptyType"/>
<xsd:element name="work-item-priority" type="StrNotEmptyType"/>
<xsd:element name="work-item-operation" type="StrNotEmptyType"/>
<xsd:element name="work-item-state" type="StrNotEmptyType"/>
<xsd:element name="work-item-severity" type="StrNotEmptyType"/>
<xsd:complexType name="workItemMessageCustomizationType">
<xsd:choice>
<xsd:sequence>
<xsd:element ref="emoji-header" minOccurs="1" maxOccurs="1"/>
<xsd:element ref="bar-color" minOccurs="0" maxOccurs="1"/>
</xsd:sequence>
<xsd:element ref="bar-color" minOccurs="1" maxOccurs="1"/>
</xsd:choice>
</xsd:complexType>
<xsd:element name="bar-color">
<xsd:simpleType>
<xsd:restriction base="xsd:string">
<xsd:pattern value="#[ABCDEF0-9]{6}"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:element>
<xsd:element name="emoji-header" default = ":rtc: :robot_face: :mailbox_with_mail:">
<xsd:simpleType>
<xsd:restriction base="xsd:string">
<xsd:pattern value="(\s(:[a-z0-9-_]+:)+\s)+"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:element>
<xsd:complexType name="workItemInfoType">
<xsd:choice maxOccurs="1" minOccurs="1">
<xsd:sequence>
<xsd:element ref="id" minOccurs="1" maxOccurs="1"/>
<xsd:element ref="comment" minOccurs="0" maxOccurs="1"/>
<xsd:element ref="type" minOccurs="0" maxOccurs="1"/>
<xsd:element ref="severity" minOccurs="0" maxOccurs="1"/>
<xsd:element ref="priority" minOccurs="0" maxOccurs="1"/>
<xsd:element ref="summary" minOccurs="0" maxOccurs="1"/>
<xsd:element ref="owned-by" minOccurs="0" maxOccurs="1"/>
<xsd:element ref="filed-against" minOccurs="0" maxOccurs="1"/>
<xsd:element ref="planned-for" minOccurs="0" maxOccurs="1"/>
<xsd:element ref="description" minOccurs="0" maxOccurs="1"/>
</xsd:sequence>
<xsd:sequence>
<xsd:element ref="comment" minOccurs="1" maxOccurs="1"/>
<xsd:element ref="type" minOccurs="0" maxOccurs="1"/>
<xsd:element ref="severity" minOccurs="0" maxOccurs="1"/>
<xsd:element ref="priority" minOccurs="0" maxOccurs="1"/>
<xsd:element ref="summary" minOccurs="0" maxOccurs="1"/>
<xsd:element ref="owned-by" minOccurs="0" maxOccurs="1"/>
<xsd:element ref="filed-against" minOccurs="0" maxOccurs="1"/>
<xsd:element ref="planned-for" minOccurs="0" maxOccurs="1"/>
<xsd:element ref="description" minOccurs="0" maxOccurs="1"/>
</xsd:sequence>
<xsd:sequence>
<xsd:element ref="type" minOccurs="1" maxOccurs="1"/>
<xsd:element ref="severity" minOccurs="0" maxOccurs="1"/>
<xsd:element ref="priority" minOccurs="0" maxOccurs="1"/>
<xsd:element ref="summary" minOccurs="0" maxOccurs="1"/>
<xsd:element ref="owned-by" minOccurs="0" maxOccurs="1"/>
<xsd:element ref="filed-against" minOccurs="0" maxOccurs="1"/>
<xsd:element ref="planned-for" minOccurs="0" maxOccurs="1"/>
<xsd:element ref="description" minOccurs="0" maxOccurs="1"/>
</xsd:sequence>
<xsd:sequence>
<xsd:element ref="severity" minOccurs="1" maxOccurs="1"/>
<xsd:element ref="priority" minOccurs="0" maxOccurs="1"/>
<xsd:element ref="summary" minOccurs="0" maxOccurs="1"/>
<xsd:element ref="owned-by" minOccurs="0" maxOccurs="1"/>
<xsd:element ref="filed-against" minOccurs="0" maxOccurs="1"/>
<xsd:element ref="planned-for" minOccurs="0" maxOccurs="1"/>
<xsd:element ref="description" minOccurs="0" maxOccurs="1"/>
</xsd:sequence>
<xsd:sequence>
<xsd:element ref="priority" minOccurs="1" maxOccurs="1"/>
<xsd:element ref="summary" minOccurs="0" maxOccurs="1"/>
<xsd:element ref="owned-by" minOccurs="0" maxOccurs="1"/>
<xsd:element ref="filed-against" minOccurs="0" maxOccurs="1"/>
<xsd:element ref="planned-for" minOccurs="0" maxOccurs="1"/>
<xsd:element ref="description" minOccurs="0" maxOccurs="1"/>
</xsd:sequence>
<xsd:sequence>
<xsd:element ref="summary" minOccurs="1" maxOccurs="1"/>
<xsd:element ref="owned-by" minOccurs="0" maxOccurs="1"/>
<xsd:element ref="filed-against" minOccurs="0" maxOccurs="1"/>
<xsd:element ref="planned-for" minOccurs="0" maxOccurs="1"/>
<xsd:element ref="description" minOccurs="0" maxOccurs="1"/>
</xsd:sequence>
<xsd:sequence>
<xsd:element ref="owned-by" minOccurs="1" maxOccurs="1"/>
<xsd:element ref="filed-against" minOccurs="0" maxOccurs="1"/>
<xsd:element ref="planned-for" minOccurs="0" maxOccurs="1"/>
<xsd:element ref="description" minOccurs="0" maxOccurs="1"/>
</xsd:sequence>
<xsd:sequence>
<xsd:element ref="filed-against" minOccurs="1" maxOccurs="1"/>
<xsd:element ref="planned-for" minOccurs="0" maxOccurs="1"/>
<xsd:element ref="description" minOccurs="0" maxOccurs="1"/>
</xsd:sequence>
<xsd:sequence>
<xsd:element ref="planned-for" minOccurs="1" maxOccurs="1"/>
<xsd:element ref="description" minOccurs="0" maxOccurs="1"/>
</xsd:sequence>
<xsd:element ref="description" minOccurs="1" maxOccurs="1"/>
</xsd:choice>
</xsd:complexType>
<xsd:element name="id" type="showInfoType"/>
<xsd:element name="comment" type="showInfoType"/>
<xsd:element name="type" type="showInfoType"/>
<xsd:element name="severity" type="showInfoType"/>
<xsd:element name="priority" type="showInfoType"/>
<xsd:element name="summary" type="showInfoType"/>
<xsd:element name="owned-by" type="showInfoType"/>
<xsd:element name="filed-against" type="showInfoType"/>
<xsd:element name="planned-for" type="showInfoType"/>
<xsd:element name="description" type="showInfoType"/>
<xsd:complexType name="showInfoType">
<xsd:attribute name="active" type="xsd:boolean" default="false" use="optional"/>
</xsd:complexType>
<xsd:complexType name="workItemCustomInfoType">
<xsd:sequence>
<xsd:element name="custom-attribute-id" minOccurs="1" maxOccurs="unbounded">
<xsd:simpleType>
<xsd:restriction base="xsd:string">
<xsd:pattern value="(\s)(a-zA-Z0-9)(\s)"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
<xsd:complexType name="workItemDefinitionType">
<xsd:annotation>
<xsd:documentation>
This type defines which element are show as part of the message
</xsd:documentation>
</xsd:annotation>
<xsd:choice>
<xsd:element ref="work-item-custom-info" minOccurs="1"/>
<xsd:sequence>
<xsd:element ref="work-item-standard-info" minOccurs="1"/>
<xsd:element ref="work-item-custom-info" minOccurs="0"/>
</xsd:sequence>
<xsd:sequence>
<xsd:element ref="work-item-customization" minOccurs="1"/>
<xsd:element ref="work-item-standard-info" minOccurs="0"/>
<xsd:element ref="work-item-custom-info" minOccurs="0"/>
</xsd:sequence>
<xsd:sequence>
<xsd:element ref="work-item-definition" minOccurs="1"/>
<xsd:element ref="work-item-customization" minOccurs="0"/>
<xsd:element ref="work-item-standard-info" minOccurs="0"/>
<xsd:element ref="work-item-custom-info" minOccurs="0"/>
</xsd:sequence>
</xsd:choice>
<xsd:attribute name="send-only-when-created" type="xsd:boolean" use="required"/>
</xsd:complexType>
<xsd:element name="work-item-definition" type="workItemSearchDefinitionType"/>
<xsd:element name="work-item-customization" type="workItemMessageCustomizationType"/>
<xsd:element name="work-item-standard-info" type="workItemInfoType"/>
<xsd:element name="work-item-custom-info" type="workItemCustomInfoType"/>
<xsd:complexType name="slackType">
<xsd:annotation>
<xsd:documentation>
This type defines the slack settings for Project Area.
It defines the slack channel name and the Webhook URL.
</xsd:documentation>
</xsd:annotation>
<xsd:all>
<xsd:element name="slack-channel" minOccurs="1" maxOccurs="1">
<xsd:complexType>
<xsd:attribute name="id" use="required">
<xsd:simpleType>
<xsd:restriction base="xsd:string">
<xsd:pattern value="#([a-z0-9:_.-]{1,22})"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:attribute>
</xsd:complexType>
</xsd:element>
<xsd:element name="slack-webhook-url" minOccurs="1" maxOccurs="1">
<xsd:complexType>
<xsd:attribute name="id" use="required">
<xsd:simpleType>
<xsd:restriction base="xsd:string">
<xsd:pattern value="(\s)(https:\/\/hooks.slack.com\/services\/([a-zA-Z0-9]+)\/([a-zA-Z0-9]+)\/([a-zA-Z0-9]+))(\s)"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:attribute>
</xsd:complexType>
</xsd:element>
</xsd:all>
</xsd:complexType>
<xsd:complexType name="configurationAreaType">
<xsd:annotation>
<xsd:documentation>
This type defines the slack settings for a particular Filed
Against category. It defines the slack channel name and the
Webhook URL.
</xsd:documentation>
</xsd:annotation>
<xsd:sequence>
<xsd:element name="slack" type="slackType" minOccurs="1" maxOccurs="1"/>
<xsd:element name="trigger" type="triggerType" minOccurs="0" maxOccurs="1"/>
</xsd:sequence>
<xsd:attribute name="name" use="required">
<xsd:simpleType>
<xsd:restriction base="xsd:string">
<xsd:minLength value="1"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:attribute>
<xsd:attribute name="team-area">
<xsd:simpleType>
<xsd:restriction base="xsd:string">
<xsd:pattern value="(\s)(a-zA-Z0-9)(\s)"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:attribute>
<xsd:attribute name="category">
<xsd:simpleType>
<xsd:restriction base="xsd:string">
<xsd:pattern value="(\s)(a-zA-Z0-9)(\s)"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:attribute>
</xsd:complexType>
</xsd:schema>