This readme describes how to configure Micro Focus Connect Silk Central Connector. Refer to the Micro Focus community and to the Micro Focus Connect Help Center for additional configuration instructions.
The Micro Focus Silk Central Connector for Micro Focus Connect (Micro Focus Silk Central Connector) lets you synchronize Silk Central assets like requirements and tests with assets in other Micro Focus Connectors, for example assets found in the Micro Focus Azure DevOps Connector.
Copyright 2018 - 2025 Open Text.
The only warranties for products and services of Open Text and its affiliates and licensors ("Open Text") are as may be set forth in the express warranty statements accompanying such products and services. Nothing herein should be construed as constituting an additional warranty. Open Text shall not be liable for technical or editorial errors or omissions contained herein. The information contained herein is subject to change without notice.
Except as specifically indicated otherwise, this document contains confidential information and a valid license is required for possession, use or copying. If this work is provided to the U.S. Government, consistent with FAR 12.211 and 12.212, Commercial Computer Software, Computer Software Documentation, and Technical Data for Commercial Items are licensed to the U.S. Government under vendor's standard commercial license.
| Contents | ||
|---|---|---|
| Installation and Upgrade Information | Technical Notes | |
| Prerequisites | Known Issues | Need assistance with the product? |
This version of Connector is certified with Silk Central 21.1.
Unless otherwise specified, for any given MF Connect connector from OpenText, all versions of the connector product that are officially released and supported by it's vendor both four months before the time of the release of the connector as well as at the time of using the connector, are supported by OpenText. Not all product versions will be tested and validated by OpenText for each connector release. Instead, OpenText chooses a subset of versions that we deem representative or most important to run validation and certification tests against. These selected versions are mentioned in the respective connector read-me, clearly identifying them as "validated" or "certified". As stated above, this does not mean that Micro Focus Connect does not support other product versions - it only means that no validation test cycle was executed for the other versions.
This version of Connector supports requirement, test, and issue-related asset types.
For Silk Central 20.5 and earlier, only requirement-related and test-related asset types are supported, as well as issues assigned to tests.
This connector requires at least build 25.2 of Micro Focus Connect and can be configured using the Micro Focus Connect UI.
Copy the file thesaurus.properties to the folder AppData\data on the Micro Focus Connect machine.
This version of Connector is an update to previous versions.
If a previous version of Connector is already installed, replace the following .jar file with the provided .jar file:
AppData\connectors\mfcConnectorSCTM\mfcConnectorSCTM*.jar
For Silk Central 20.6, it is no longer required to configure the following parameters. These are now optional. However, to use Silk Central Connector with older versions, make sure to configure the following three reports in Silk Central:
To do so, follow these steps:
SELECT
edr.ExecDefRunID_pk_fk PlanRunId, tde.TestDefExecID_pk_fk Id,tde.TestDefID_fk TestId, tde.TestDefName TestName, tde.TestDefDescription Description, tde.Status, sn.StatusName, sr.ReasonText StatusReason,
COALESCE(mtr.IsBlocked, 0) IsBlocked, tde.Duration, CAST(DATEDIFF(s, '1970-01-01', tde.ExecutionTimestamp) AS BIGINT)*1000 ExecutionTimestamp,
edr.ProductName, edr.VersionName, edr.BuildName, mtr.ChangedBy ExecutedBy, CAST(DATEDIFF(s, '1970-01-01', tde.DbChangedAt) AS BIGINT)*1000 ChangedAt
FROM TM_TestDefExecutions tde
INNER JOIN TM_ExecDefinitionRuns edr ON tde.ExecDefRunID_fk = edr.ExecDefRunID_pk_fk
INNER JOIN TM_TestDefStatusNames sn ON tde.Status = sn.StatusID_pk
LEFT JOIN TM_ManualTestResults mtr ON (mtr.TestDefExecID_pk_fk = tde.TestDefExecID_pk_fk AND mtr.ChangedAt > mtr.CreatedAt)
LEFT JOIN TM_StatusReasons sr On tde.StatusReasonID_fk = sr.StatusReasonID_pk
WHERE tde.TestDefID_fk IS NOT NULL AND edr.ProjectID_fk = ${$PROJECTID}
SELECT
edr.ExecDefRunID_pk_fk PlanRunId, tde.TestDefExecID_pk_fk Id, tde.TestDefID_fk TestId, tde.TestDefName TestName, tde.TestDefDescription Description, tde.Status, sn.StatusName, sr.ReasonText StatusReason,
COALESCE(mtr.IsBlocked, 0) IsBlocked, tde.Duration,
extract(day from(tde.ExecutionTimestamp - to_timestamp('1970-01-01', 'YYYY-MM-DD'))) * 86400000 + to_number(to_char(tde.ExecutionTimestamp, 'SSSSSFF3')) ExecutionTimestamp,
edr.ProductName, edr.VersionName, edr.BuildName, mtr.ChangedBy ExecutedBy,
extract(day from(tde.DbChangedAt - to_timestamp('1970-01-01', 'YYYY-MM-DD'))) * 86400000 + to_number(to_char(tde.DbChangedAt, 'SSSSSFF3')) ChangedAt
FROM TM_TestDefExecutions tde
INNER JOIN TM_ExecDefinitionRuns edr ON tde.ExecDefRunID_fk = edr.ExecDefRunID_pk_fk
INNER JOIN TM_TestDefStatusNames sn ON tde.Status = sn.StatusID_pk
LEFT JOIN TM_ManualTestResults mtr ON (mtr.TestDefExecID_pk_fk = tde.TestDefExecID_pk_fk AND mtr.ChangedAt > mtr.CreatedAt)
LEFT JOIN TM_StatusReasons sr On tde.StatusReasonID_fk = sr.StatusReasonID_pk
WHERE
tde.TestDefID_fk IS NOT NULL AND edr.ProjectID_fk = ${$PROJECTID}
WITH ExecPaths(ExecTreeNodeID, PathString, Level)
AS
(
SELECT
NodeID_pk, CONVERT(NVARCHAR(500), '') PathString, 1 AS Level
FROM
TM_ExecTreeNodes
WHERE
ParentFolderID_fk IS NULL AND ProjectID_fk IS NOT NULL
UNION ALL
SELECT
etn.NodeID_pk, CONVERT(NVARCHAR(500), PathString + '/' + etn.NodeName) AS PathString, Level + 1
FROM
TM_ExecTreeNodes etn
INNER JOIN ExecPaths ep ON ep.ExecTreeNodeID = etn.ParentFolderID_fk
WHERE
Level < 100
)
SELECT
etn.NodeID_pk Id, etn.NodeName Name, etn.Description, paths.PathString Path, at.AssignedTests,
enu.UserID_pk_fk ManualTester, c.Name Configuration, tc.Name TestContainer,
CAST(DATEDIFF(s, '1970-01-01', cycleConfigSuite.CycleStartDate) AS BIGINT)*1000 CycleStartDate,
CAST(DATEDIFF(s, '1970-01-01', cycleConfigSuite.CycleEndDate) AS BIGINT)*1000 CycleEndDate,
cycleConfigSuite.AvailableTimeInCycle,
CASE WHEN cycleConfigSuite.AvailableTimeInCycle IS NULL THEN NULL ELSE CASE WHEN edr.ExecDefID_fk IS NULL THEN 0 ELSE 1 END END CycleIsStarted,
CASE WHEN cycleConfigSuite.AvailableTimeInCycle IS NULL THEN NULL ELSE CASE WHEN edr.Status = 7 THEN 0 ELSE 1 END END CycleIsFinished,
enp.ParameterValue AS bc_testplan_iteration,
CAST(DATEDIFF(s, '1970-01-01', etn.CreatedAt) AS BIGINT)*1000 CreatedAt,
etn.CreatedBy,
CAST(DATEDIFF(s, '1970-01-01', etn.ChangedAt) AS BIGINT)*1000 ChangedAt,
etn.ChangedBy
FROM
TM_ExecutionDefinitions ed
INNER JOIN TM_ExecTreeNodes etn ON ed.ExecDefID_pk_fk = etn.NodeID_pk
LEFT JOIN TM_Configurations c ON ed.ConfigurationID_fk = c.ConfigurationID_pk
INNER JOIN TM_TestPlanNodes tc ON ed.TestContainerID_fk = tc.NodeID_pk
INNER JOIN TM_ExecTreeNodes cycleConfigSuite ON etn.ParentFolderID_fk = cycleConfigSuite.NodeID_pk
LEFT JOIN TM_ExecNodes_Users enu ON ed.ExecDefID_pk_fk = enu.ExecNodeID_pk_fk AND cycleConfigSuite.AvailableTimeInCycle IS NOT NULL
LEFT JOIN (SELECT ExecDefID_fk, Status
FROM TM_ExecDefinitionRuns) edr ON edr.ExecDefID_fk = CASE WHEN cycleConfigSuite.AvailableTimeInCycle IS NULL THEN NULL ELSE ed.ExecDefID_pk_fk END
LEFT JOIN TM_ExecNodeParameters enp ON enp.ExecNodeID_fk = ed.ExecDefID_pk_fk AND enp.ParameterName = 'bc_testplan_iteration'
INNER JOIN ExecPaths paths ON etn.ParentFolderID_fk = paths.ExecTreeNodeID
LEFT JOIN (SELECT DISTINCT tn.ExecNodeID,
(
SELECT (CONVERT(NVARCHAR(MAX), TestDefID_pk_fk)) + ','
FROM TM_V_ExecNodes_TestDefs edtd
WHERE edtd.ExecNodeID = tn.ExecNodeID
ORDER BY edtd.PositionNumber
FOR XML PATH('')
) AssignedTests
FROM
TM_V_ExecNodes_TestDefs tn) at ON ed.ExecDefID_pk_fk = at.ExecNodeID
WHERE
etn.ProjectID_fk = ${$PROJECTID}
SELECT
etn.NodeID_pk Id, etn.NodeName Name, etn.Description, paths.PathString Path, at.AssignedTests,
enu.UserID_pk_fk ManualTester, c.Name Configuration, tc.Name TestContainer,
extract(day from(cycleConfigSuite.CycleStartDate - to_timestamp('1970-01-01', 'YYYY-MM-DD'))) * 86400000 + to_number(to_char(cycleConfigSuite.CycleStartDate, 'SSSSSFF3')) CycleStartDate,
extract(day from(cycleConfigSuite.CycleEndDate - to_timestamp('1970-01-01', 'YYYY-MM-DD'))) * 86400000 + to_number(to_char(cycleConfigSuite.CycleEndDate, 'SSSSSFF3')) CycleEndDate,
cycleConfigSuite.AvailableTimeInCycle,
CASE WHEN cycleConfigSuite.AvailableTimeInCycle IS NULL THEN NULL ELSE CASE WHEN edr.ExecDefID_fk IS NULL THEN 0 ELSE 1 END END CycleIsStarted,
CASE WHEN cycleConfigSuite.AvailableTimeInCycle IS NULL THEN NULL ELSE CASE WHEN edr.Status = 7 THEN 0 ELSE 1 END END CycleIsFinished,
enp.ParameterValue AS bc_testplan_iteration,
extract(day from(etn.CreatedAt - to_timestamp('1970-01-01', 'YYYY-MM-DD'))) * 86400000 + to_number(to_char(etn.CreatedAt, 'SSSSSFF3')) CreatedAt,
etn.CreatedBy,
extract(day from(etn.ChangedAt - to_timestamp('1970-01-01', 'YYYY-MM-DD'))) * 86400000 + to_number(to_char(etn.ChangedAt, 'SSSSSFF3')) ChangedAt,
etn.ChangedBy
FROM
TM_ExecutionDefinitions ed
INNER JOIN TM_ExecTreeNodes etn ON ed.ExecDefID_pk_fk = etn.NodeID_pk
LEFT JOIN TM_Configurations c ON ed.ConfigurationID_fk = c.ConfigurationID_pk
INNER JOIN TM_TestPlanNodes tc ON ed.TestContainerID_fk = tc.NodeID_pk
INNER JOIN TM_ExecTreeNodes cycleConfigSuite ON etn.ParentFolderID_fk = cycleConfigSuite.NodeID_pk
LEFT JOIN TM_ExecNodes_Users enu ON ed.ExecDefID_pk_fk = enu.ExecNodeID_pk_fk AND cycleConfigSuite.AvailableTimeInCycle IS NOT NULL
LEFT JOIN (SELECT ExecDefID_fk, Status
FROM TM_ExecDefinitionRuns) edr ON edr.ExecDefID_fk = CASE WHEN cycleConfigSuite.AvailableTimeInCycle IS NULL THEN NULL ELSE ed.ExecDefID_pk_fk END
LEFT JOIN TM_ExecNodeParameters enp ON enp.ExecNodeID_fk = ed.ExecDefID_pk_fk AND enp.ParameterName = 'bc_testplan_iteration'
LEFT JOIN (SELECT NodeID_pk, SYS_CONNECT_BY_PATH(REPLACE(etn.NodeName, '/', '-'), '/') AS PathString FROM TM_ExecTreeNodes etn
WHERE
etn.ISLEAF = 0 START WITH etn.ParentFolderID_fk IS NULL
CONNECT BY PRIOR NodeID_pk = ParentFolderID_fk) paths ON paths.NodeID_pk = etn.ParentFolderID_fk
LEFT JOIN (SELECT ExecNodeID, xmlagg (xmlelement(e, TestDefID_pk_fk || ',')).extract ('//text()').GetClobVal()AssignedTests
FROM TM_V_ExecNodes_TestDefs
INNER JOIN TM_ExecTreeNodes ON ExecNodeID = NodeID_pk
WHERE ProjectID_fk = ${$PROJECTID}
GROUP BY ExecNodeID) at ON ed.ExecDefID_pk_fk = at.ExecNodeID
WHERE etn.ProjectID_fk = ${$PROJECTID}
SELECT
edr.ExecDefRunID_pk_fk Id, edr.ExecDefID_fk testplanid, edr.BuildID_fk, edr.PassedCount, edr.FailedCount, edr.NotExecutedCount, edr.OverallCount,
CAST(DATEDIFF(s, '1970-01-01', edr.ExecutionTimestamp) AS BIGINT)*1000 ExecutionTimestamp,
CAST(DATEDIFF(s, '1970-01-01', edr.DbChangedAt) AS BIGINT)*1000 ChangedAt,
edr.Duration, edr.Status, edr.Starter, p.ParameterValue AS bc_testplan_iteration
FROM
TM_ExecDefinitionRuns edr
LEFT JOIN (select DISTINCT tde.ExecDefRunID_fk, eip.ParameterValue
FROM TM_TestDefExecutions tde
INNER JOIN TM_ExecInputParameters eip ON tde.TestDefExecID_pk_fk = eip.ExecutionID_pk_fk
WHERE eip.ParameterName_pk = 'bc_testplan_iteration') p ON p.ExecDefRunID_fk = edr.ExecDefRunID_pk_fk
where ProjectID_fk = ${$PROJECTID}
SELECT
edr.ExecDefRunID_pk_fk Id, edr.ExecDefID_fk testplanid, edr.BuildID_fk, edr.PassedCount, edr.FailedCount, edr.NotExecutedCount, edr.OverallCount,
extract(day from(edr.ExecutionTimestamp - to_timestamp('1970-01-01', 'YYYY-MM-DD'))) * 86400000 + to_number(to_char(edr.ExecutionTimestamp, 'SSSSSFF3')) ExecutionTimestamp,
extract(day from(edr.DbChangedAt - to_timestamp('1970-01-01', 'YYYY-MM-DD'))) * 86400000 + to_number(to_char(edr.DbChangedAt, 'SSSSSFF3')) ChangedAt,
edr.Duration, edr.Status, edr.Starter, p.ParameterValue AS bc_testplan_iteration
FROM
TM_ExecDefinitionRuns edr
LEFT JOIN (select DISTINCT tde.ExecDefRunID_fk, eip.ParameterValue
FROM TM_TestDefExecutions tde
INNER JOIN TM_ExecInputParameters eip ON tde.TestDefExecID_pk_fk = eip.ExecutionID_pk_fk
WHERE eip.ParameterName_pk = 'bc_testplan_iteration') p ON p.ExecDefRunID_fk = edr.ExecDefRunID_pk_fk
WHERE ProjectID_fk = ${$PROJECTID}
This section provides additional notes regarding installation. It does not replace the usual installation and upgrade process.
To be able to use this Connector, collect and enter the following information in the Micro Focus Connect user interface:
Custom enumerated requirement fields are exposed as strings. Future versions may discriminate between enums and strings
If you use custom fields for any supported Silk Central asset, the configured data source project will request the information of these custom fields. The configuration is project-specific, therefore you cannot configure multiple projects for one connection. The configured project must be identical to the project of the data source.
When selecting a fallback user a message will state there are no users.
Get support enables you to open a support incident or to submit a bug. You can also browse many helpful support resources.