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.