Beispiel: Synchronisierung von Funktionen mit einem bestimmten benutzerdefinierten Feldwert
Wenn ein Feature das benutzerdefinierte Feld "Jira-Projektschlüssel" erhält, wird es an Jira übertragen
const workSharing = context.getService("workSharing/v2");
const jiraApi = workSharing.getProxy(args.targetTool);
const apiV2 = context.getService("targetprocess/api/v2");
const customFieldName = 'Jira Project Key';
const entityType = 'Feature'
//filter isuse by entityType
const features = args.entities.filter(f => f.entityType.toLowerCase() === entityType.toLowerCase());
if (!features.length) { return [] }
//Fetch JiraProjectKeys for Features
const featuresJiraProjectKeys = await Promise.all(features.map(async e => {
const [query] = await apiV2.queryAsync(e.entityType, {
select: ___PROTECTED_1___,
where: ___PROTECTED_2___
})
return query;
}
));
if (!featuresJiraProjectKeys.length) { return [] }
//Fetch unique Jira projects asynchronously
const projectIds = await Promise.all([...new Set(featuresJiraProjectKeys.filter(v => !!v && v.jpk)
.map(issue => issue.jpk))]
.map(async key => {
try {
return await jiraApi.getAsync(___PROTECTED_3___)
}
catch (e) {
console.warn(e);
}
}));
//mapping JiraProject KEY:ID
const jiraKeyIdMapping = new Map(
projectIds.filter(v => !!v)
.map(project => [
project.key.toUpperCase(),
project.id,
])
);
const cmds = featuresJiraProjectKeys.reduce((acc, cv) => {
const prKey = (cv && cv.jpk || '').toUpperCase();
if (jiraKeyIdMapping.has(prKey)) {
acc.push(
{
entity: { ...cv.entity, sourceId: cv.entity.sourceId.toString() },
targetScope: { kind: 'project', sourceId: jiraKeyIdMapping.get(prKey).toString() }
}
)
}
return acc;
}, []);
const emptyJiraKeys = featuresJiraProjectKeys.filter(v=> !v.jpk);
emptyJiraKeys.length && console.warn(___PROTECTED_4___);
return cmds;
Weitere Beispiele finden Sie in GitHub der Bibliothek mit Beispielen für JS-Zuordnungen und -Routings.