Операции

Система Юниверс предоставляет возможность создания собственных системных или пакетных операций. Для этого используется фреймворк SpringBatch.

Примечание

Все константы заданы в классе com.universe.mdm.sdk.spring.configuration.SDKSpringConfiguration

Зависимости

  • Модуль с операцией нуждается в зависимостях:

'org.unidata.mdm:org.unidata.mdm.core:6.9.0-RELEASE'
'org.springframework.batch'
  • Также необходимо указать зависимости в имплементации модуля dependencies:

@Override
public Collection<Dependency> getDependencies() {
    return Arrays.asList(
        // system
        new Dependency("org.unidata.mdm.core", "6.0"),
    );
}

Составляющие

Параметры, которые используются в операциях и доступны к просмотру/изменению задаются классом org.unidata.mdm.core.type.job.JobParameterDescriptor

Первый шаг при создании операции - задать бин org.unidata.mdm.core.service.impl.job.JobDescriptorFactoryBean

Примечание

В JobDescriptorFactoryBean задается имя бина операции. в примере SDK_OPERATION_NAME

@Bean
public JobDescriptorFactoryBean sdkDescriptorFactoryBean(TextService textService){
    final JobParameterDescriptor<?>[] params = {
            // параметры
    }

    JobDescriptorFactoryBean fb = new JobDescriptorFactoryBean();
    fb.setJobName(SDK_OPERATION_NAME);
    fb.setDisplayName(() -> textService.getText(SDK_OPERATION_DISPLAY_NAME));
    fb.setDescription(() -> textService.getText(SDK_OPERATION_DESCRIPTION));
    fb.setParameter(params);

    return fb;
}

Параметры JobParameterDescriptor описываются в классе org.unidata.mdm.core.type.job.JobParameterType могут быть разных типов: строковый, целочисленный, булевый, etc. Одинарный или массив.

JobParameterDescriptor.integer()
                .name(SDK_RECORD_JOB_BATCH_SIZE)
                .displayName(() -> textService.getText(SDK_RECORD_JOB_BATCH_SIZE_DISPLAY_NAME))
                .description(() -> textService.getText(SDK_RECORD_JOB_BATCH_SIZE_DESCRIPTION))
                .defaultSingle(500L)
                .required(false)
                .build()

Далее задать логику путем реализации необходимых интерфейсов из пакета org.springframework.batch.item

@Bean(name = SDK_JOB_READER)
@StepScope
public ItemReader<String> sdkJobReader() {
    return new SDKJobReader();
}
@Bean(name = SDK_OPERATION_NAME)
public Job ldapIntegrationJob(
        JobRepository jobRepository,
        JobBuilderFactory jobBuilderFactory,
        // listener, steps, etc
        ) {
    return jobBuilderFactory.get(SDK_OPERATION_NAME)
            .repository(jobRepository)
            // start, next, listener, etc
            .build();