08-12-2022

This commit is contained in:
Jonathan Jenne 2022-12-08 16:43:22 +01:00
parent 7b7147eeee
commit 0a25b0925c
43 changed files with 1740 additions and 378 deletions

View File

@ -5,7 +5,6 @@
<xsd:import namespace="http://DigitalData.Services.EDMIService" />
<xsd:import namespace="http://schemas.microsoft.com/2003/10/Serialization/" />
<xsd:import namespace="http://schemas.datacontract.org/2004/07/ECM.JobRunner.Windows" />
<xsd:import namespace="http://schemas.datacontract.org/2004/07/ECM.JobRunner.Common" />
<xsd:import namespace="http://schemas.microsoft.com/2003/10/Serialization/Arrays" />
</xsd:schema>
</wsdl:types>
@ -27,6 +26,12 @@
<wsdl:message name="IEDMIService_UpdateJob_OutputMessage">
<wsdl:part name="parameters" element="tns:UpdateJobResponse" />
</wsdl:message>
<wsdl:message name="IEDMIService_UpdateProfile_InputMessage">
<wsdl:part name="parameters" element="tns:UpdateProfile" />
</wsdl:message>
<wsdl:message name="IEDMIService_UpdateProfile_OutputMessage">
<wsdl:part name="parameters" element="tns:UpdateProfileResponse" />
</wsdl:message>
<wsdl:message name="IEDMIService_GetJobConfig_InputMessage">
<wsdl:part name="parameters" element="tns:GetJobConfig" />
</wsdl:message>
@ -46,6 +51,10 @@
<wsdl:input wsaw:Action="http://DigitalData.Services.EDMIService/IEDMIService/UpdateJob" message="tns:IEDMIService_UpdateJob_InputMessage" />
<wsdl:output wsaw:Action="http://DigitalData.Services.EDMIService/IEDMIService/UpdateJobResponse" message="tns:IEDMIService_UpdateJob_OutputMessage" />
</wsdl:operation>
<wsdl:operation name="UpdateProfile">
<wsdl:input wsaw:Action="http://DigitalData.Services.EDMIService/IEDMIService/UpdateProfile" message="tns:IEDMIService_UpdateProfile_InputMessage" />
<wsdl:output wsaw:Action="http://DigitalData.Services.EDMIService/IEDMIService/UpdateProfileResponse" message="tns:IEDMIService_UpdateProfile_OutputMessage" />
</wsdl:operation>
<wsdl:operation name="GetJobConfig">
<wsdl:input wsaw:Action="http://DigitalData.Services.EDMIService/IEDMIService/GetJobConfig" message="tns:IEDMIService_GetJobConfig_InputMessage" />
<wsdl:output wsaw:Action="http://DigitalData.Services.EDMIService/IEDMIService/GetJobConfigResponse" message="tns:IEDMIService_GetJobConfig_OutputMessage" />

View File

@ -39,6 +39,20 @@
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="UpdateProfile">
<xs:complexType>
<xs:sequence>
<xs:element xmlns:q4="http://schemas.datacontract.org/2004/07/ECM.JobRunner.Windows" minOccurs="0" name="pData" nillable="true" type="q4:UpdateProfile.UpdateProfileRequest" />
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="UpdateProfileResponse">
<xs:complexType>
<xs:sequence>
<xs:element xmlns:q5="http://schemas.datacontract.org/2004/07/ECM.JobRunner.Windows" minOccurs="0" name="UpdateProfileResult" nillable="true" type="q5:UpdateProfile.UpdateProfileResponse" />
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="GetJobConfig">
<xs:complexType>
<xs:sequence />
@ -47,7 +61,7 @@
<xs:element name="GetJobConfigResponse">
<xs:complexType>
<xs:sequence>
<xs:element xmlns:q4="http://schemas.datacontract.org/2004/07/ECM.JobRunner.Windows" minOccurs="0" name="GetJobConfigResult" nillable="true" type="q4:GetJobConfig.GetJobConfigResponse" />
<xs:element xmlns:q6="http://schemas.datacontract.org/2004/07/ECM.JobRunner.Windows" minOccurs="0" name="GetJobConfigResult" nillable="true" type="q6:GetJobConfig.GetJobConfigResponse" />
</xs:sequence>
</xs:complexType>
</xs:element>

View File

@ -0,0 +1,10 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
This file is automatically generated by Visual Studio .Net. It is
used to store generic object data source configuration information.
Renaming the file extension or editing the content of this file may
cause the file to be unrecognizable by the program.
-->
<GenericObjectDataSource DisplayName="UpdateProfileUpdateProfileResponse" Version="1.0" xmlns="urn:schemas-microsoft-com:xml-msdatasource">
<TypeInfo>ECM.JobRunner.Common.JobRunnerReference.UpdateProfileUpdateProfileResponse, Connected Services.JobRunnerReference.Reference.vb.dll, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</TypeInfo>
</GenericObjectDataSource>

View File

@ -1,84 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<xs:schema xmlns:tns="http://schemas.datacontract.org/2004/07/ECM.JobRunner.Common" xmlns:ser="http://schemas.microsoft.com/2003/10/Serialization/" elementFormDefault="qualified" targetNamespace="http://schemas.datacontract.org/2004/07/ECM.JobRunner.Common" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:import namespace="http://schemas.microsoft.com/2003/10/Serialization/" />
<xs:import namespace="http://schemas.microsoft.com/2003/10/Serialization/Arrays" />
<xs:complexType name="ArrayOfHistoryItem">
<xs:sequence>
<xs:element minOccurs="0" maxOccurs="unbounded" name="HistoryItem" nillable="true" type="tns:HistoryItem" />
</xs:sequence>
</xs:complexType>
<xs:element name="ArrayOfHistoryItem" nillable="true" type="tns:ArrayOfHistoryItem" />
<xs:complexType name="HistoryItem">
<xs:sequence>
<xs:element minOccurs="0" name="CreatedAt" type="xs:dateTime" />
<xs:element minOccurs="0" name="ErrorMessage" nillable="true" type="xs:string" />
<xs:element minOccurs="0" name="JobName" nillable="true" type="xs:string" />
<xs:element minOccurs="0" name="Message" nillable="true" type="xs:string" />
<xs:element minOccurs="0" name="Successful" type="xs:boolean" />
</xs:sequence>
</xs:complexType>
<xs:element name="HistoryItem" nillable="true" type="tns:HistoryItem" />
<xs:complexType name="ArrayOfStatusItem">
<xs:sequence>
<xs:element minOccurs="0" maxOccurs="unbounded" name="StatusItem" nillable="true" type="tns:StatusItem" />
</xs:sequence>
</xs:complexType>
<xs:element name="ArrayOfStatusItem" nillable="true" type="tns:ArrayOfStatusItem" />
<xs:complexType name="StatusItem">
<xs:sequence>
<xs:element minOccurs="0" name="CompleteTime" type="xs:dateTime" />
<xs:element minOccurs="0" name="Executing" type="xs:boolean" />
<xs:element minOccurs="0" name="ExecutionTime" type="ser:duration" />
<xs:element minOccurs="0" name="Id" nillable="true" type="xs:string" />
<xs:element minOccurs="0" name="Name" nillable="true" type="xs:string" />
<xs:element minOccurs="0" name="ProgressCurrent" type="xs:int" />
<xs:element minOccurs="0" name="ProgressTotal" type="xs:int" />
<xs:element minOccurs="0" name="StartTime" type="xs:dateTime" />
</xs:sequence>
</xs:complexType>
<xs:element name="StatusItem" nillable="true" type="tns:StatusItem" />
<xs:complexType name="JobDefinition">
<xs:sequence>
<xs:element minOccurs="0" name="Active" type="xs:boolean" />
<xs:element minOccurs="0" name="CronSchedule" nillable="true" type="xs:string" />
<xs:element minOccurs="0" name="Id" type="xs:int" />
<xs:element minOccurs="0" name="Name" nillable="true" type="xs:string" />
<xs:element minOccurs="0" name="Type" nillable="true" type="tns:JobType" />
<xs:element minOccurs="0" name="TypeId" type="xs:int" />
</xs:sequence>
</xs:complexType>
<xs:element name="JobDefinition" nillable="true" type="tns:JobDefinition" />
<xs:complexType name="JobType">
<xs:sequence>
<xs:element minOccurs="0" name="Active" type="xs:boolean" />
<xs:element minOccurs="0" name="Id" type="xs:int" />
<xs:element minOccurs="0" name="Name" nillable="true" type="xs:string" />
</xs:sequence>
</xs:complexType>
<xs:element name="JobType" nillable="true" type="tns:JobType" />
<xs:complexType name="ArrayOfJobDefinition">
<xs:sequence>
<xs:element minOccurs="0" maxOccurs="unbounded" name="JobDefinition" nillable="true" type="tns:JobDefinition" />
</xs:sequence>
</xs:complexType>
<xs:element name="ArrayOfJobDefinition" nillable="true" type="tns:ArrayOfJobDefinition" />
<xs:complexType name="ArrayOfJobType">
<xs:sequence>
<xs:element minOccurs="0" maxOccurs="unbounded" name="JobType" nillable="true" type="tns:JobType" />
</xs:sequence>
</xs:complexType>
<xs:element name="ArrayOfJobType" nillable="true" type="tns:ArrayOfJobType" />
<xs:complexType name="ArrayOfObjectType">
<xs:sequence>
<xs:element minOccurs="0" maxOccurs="unbounded" name="ObjectType" nillable="true" type="tns:ObjectType" />
</xs:sequence>
</xs:complexType>
<xs:element name="ArrayOfObjectType" nillable="true" type="tns:ArrayOfObjectType" />
<xs:complexType name="ObjectType">
<xs:sequence>
<xs:element xmlns:q1="http://schemas.microsoft.com/2003/10/Serialization/Arrays" minOccurs="0" name="Indexes" nillable="true" type="q1:ArrayOfstring" />
<xs:element minOccurs="0" name="Name" nillable="true" type="xs:string" />
</xs:sequence>
</xs:complexType>
<xs:element name="ObjectType" nillable="true" type="tns:ObjectType" />
</xs:schema>

View File

@ -1,12 +1,13 @@
<?xml version="1.0" encoding="utf-8"?>
<xs:schema xmlns:tns="http://schemas.datacontract.org/2004/07/ECM.JobRunner.Windows" elementFormDefault="qualified" targetNamespace="http://schemas.datacontract.org/2004/07/ECM.JobRunner.Windows" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:import namespace="http://schemas.datacontract.org/2004/07/ECM.JobRunner.Common" />
<xs:schema xmlns:tns="http://schemas.datacontract.org/2004/07/ECM.JobRunner.Windows" xmlns:ser="http://schemas.microsoft.com/2003/10/Serialization/" elementFormDefault="qualified" targetNamespace="http://schemas.datacontract.org/2004/07/ECM.JobRunner.Windows" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:import namespace="http://schemas.microsoft.com/2003/10/Serialization/" />
<xs:import namespace="http://schemas.microsoft.com/2003/10/Serialization/Arrays" />
<xs:complexType name="GetJobStatus.GetJobStatusResponse">
<xs:complexContent mixed="false">
<xs:extension base="tns:Base.BaseResponse">
<xs:sequence>
<xs:element xmlns:q1="http://schemas.datacontract.org/2004/07/ECM.JobRunner.Common" minOccurs="0" name="HistoryItems" nillable="true" type="q1:ArrayOfHistoryItem" />
<xs:element xmlns:q2="http://schemas.datacontract.org/2004/07/ECM.JobRunner.Common" minOccurs="0" name="StatusItems" nillable="true" type="q2:ArrayOfStatusItem" />
<xs:element minOccurs="0" name="HistoryItems" nillable="true" type="tns:ArrayOfHistoryItem" />
<xs:element minOccurs="0" name="StatusItems" nillable="true" type="tns:ArrayOfStatusItem" />
</xs:sequence>
</xs:extension>
</xs:complexContent>
@ -20,10 +21,45 @@
</xs:sequence>
</xs:complexType>
<xs:element name="Base.BaseResponse" nillable="true" type="tns:Base.BaseResponse" />
<xs:complexType name="ArrayOfHistoryItem">
<xs:sequence>
<xs:element minOccurs="0" maxOccurs="unbounded" name="HistoryItem" nillable="true" type="tns:HistoryItem" />
</xs:sequence>
</xs:complexType>
<xs:element name="ArrayOfHistoryItem" nillable="true" type="tns:ArrayOfHistoryItem" />
<xs:complexType name="HistoryItem">
<xs:sequence>
<xs:element minOccurs="0" name="CreatedAt" type="xs:dateTime" />
<xs:element minOccurs="0" name="ErrorMessage" nillable="true" type="xs:string" />
<xs:element minOccurs="0" name="JobName" nillable="true" type="xs:string" />
<xs:element minOccurs="0" name="Message" nillable="true" type="xs:string" />
<xs:element minOccurs="0" name="Successful" type="xs:boolean" />
</xs:sequence>
</xs:complexType>
<xs:element name="HistoryItem" nillable="true" type="tns:HistoryItem" />
<xs:complexType name="ArrayOfStatusItem">
<xs:sequence>
<xs:element minOccurs="0" maxOccurs="unbounded" name="StatusItem" nillable="true" type="tns:StatusItem" />
</xs:sequence>
</xs:complexType>
<xs:element name="ArrayOfStatusItem" nillable="true" type="tns:ArrayOfStatusItem" />
<xs:complexType name="StatusItem">
<xs:sequence>
<xs:element minOccurs="0" name="CompleteTime" type="xs:dateTime" />
<xs:element minOccurs="0" name="Executing" type="xs:boolean" />
<xs:element minOccurs="0" name="ExecutionTime" type="ser:duration" />
<xs:element minOccurs="0" name="Id" nillable="true" type="xs:string" />
<xs:element minOccurs="0" name="Name" nillable="true" type="xs:string" />
<xs:element minOccurs="0" name="ProgressCurrent" type="xs:int" />
<xs:element minOccurs="0" name="ProgressTotal" type="xs:int" />
<xs:element minOccurs="0" name="StartTime" type="xs:dateTime" />
</xs:sequence>
</xs:complexType>
<xs:element name="StatusItem" nillable="true" type="tns:StatusItem" />
<xs:complexType name="UpdateJob.UpdateJobRequest">
<xs:sequence>
<xs:element minOccurs="0" name="Action" type="tns:UpdateJob.UpdateJobRequest.UpdateJobAction" />
<xs:element xmlns:q3="http://schemas.datacontract.org/2004/07/ECM.JobRunner.Common" minOccurs="0" name="Job" nillable="true" type="q3:JobDefinition" />
<xs:element minOccurs="0" name="Job" nillable="true" type="tns:JobDefinition" />
</xs:sequence>
</xs:complexType>
<xs:element name="UpdateJob.UpdateJobRequest" nillable="true" type="tns:UpdateJob.UpdateJobRequest" />
@ -35,6 +71,25 @@
</xs:restriction>
</xs:simpleType>
<xs:element name="UpdateJob.UpdateJobRequest.UpdateJobAction" nillable="true" type="tns:UpdateJob.UpdateJobRequest.UpdateJobAction" />
<xs:complexType name="JobDefinition">
<xs:sequence>
<xs:element minOccurs="0" name="Active" type="xs:boolean" />
<xs:element minOccurs="0" name="CronSchedule" nillable="true" type="xs:string" />
<xs:element minOccurs="0" name="Id" type="xs:int" />
<xs:element minOccurs="0" name="Name" nillable="true" type="xs:string" />
<xs:element minOccurs="0" name="Type" nillable="true" type="tns:JobType" />
<xs:element minOccurs="0" name="TypeId" type="xs:int" />
</xs:sequence>
</xs:complexType>
<xs:element name="JobDefinition" nillable="true" type="tns:JobDefinition" />
<xs:complexType name="JobType">
<xs:sequence>
<xs:element minOccurs="0" name="Active" type="xs:boolean" />
<xs:element minOccurs="0" name="Id" type="xs:int" />
<xs:element minOccurs="0" name="Name" nillable="true" type="xs:string" />
</xs:sequence>
</xs:complexType>
<xs:element name="JobType" nillable="true" type="tns:JobType" />
<xs:complexType name="UpdateJob.UpdateJobResponse">
<xs:complexContent mixed="false">
<xs:extension base="tns:Base.BaseResponse">
@ -43,16 +98,141 @@
</xs:complexContent>
</xs:complexType>
<xs:element name="UpdateJob.UpdateJobResponse" nillable="true" type="tns:UpdateJob.UpdateJobResponse" />
<xs:complexType name="UpdateProfile.UpdateProfileRequest">
<xs:sequence>
<xs:element minOccurs="0" name="Action" type="tns:UpdateProfile.UpdateProfileRequest.UpdateProfileAction" />
<xs:element minOccurs="0" name="ImportProfile" nillable="true" type="tns:ImportProfile" />
</xs:sequence>
</xs:complexType>
<xs:element name="UpdateProfile.UpdateProfileRequest" nillable="true" type="tns:UpdateProfile.UpdateProfileRequest" />
<xs:simpleType name="UpdateProfile.UpdateProfileRequest.UpdateProfileAction">
<xs:restriction base="xs:string">
<xs:enumeration value="Create" />
<xs:enumeration value="Update" />
<xs:enumeration value="Delete" />
</xs:restriction>
</xs:simpleType>
<xs:element name="UpdateProfile.UpdateProfileRequest.UpdateProfileAction" nillable="true" type="tns:UpdateProfile.UpdateProfileRequest.UpdateProfileAction" />
<xs:complexType name="ImportProfile">
<xs:complexContent mixed="false">
<xs:extension base="tns:BaseProfile">
<xs:sequence>
<xs:element minOccurs="0" name="Active" type="xs:boolean" />
<xs:element minOccurs="0" name="BackupFolder" nillable="true" type="xs:string" />
<xs:element minOccurs="0" name="DeleteFiles" type="xs:boolean" />
<xs:element minOccurs="0" name="FileExcludeRegex" nillable="true" type="xs:string" />
<xs:element minOccurs="0" name="Id" type="xs:int" />
<xs:element minOccurs="0" name="IncludeSubfolders" type="xs:boolean" />
<xs:element minOccurs="0" name="JobId" type="xs:int" />
<xs:element minOccurs="0" name="ObjectTypeName" nillable="true" type="xs:string" />
<xs:element minOccurs="0" name="SourceFolder" nillable="true" type="xs:string" />
<xs:element minOccurs="0" name="Steps" nillable="true" type="tns:ArrayOfImportProfileStep" />
<xs:element minOccurs="0" name="SubfolderDateFormat" nillable="true" type="xs:string" />
<xs:element minOccurs="0" name="TargetFolder" nillable="true" type="xs:string" />
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:element name="ImportProfile" nillable="true" type="tns:ImportProfile" />
<xs:complexType name="BaseProfile">
<xs:sequence>
<xs:element minOccurs="0" name="Job" nillable="true" type="tns:JobDefinition" />
</xs:sequence>
</xs:complexType>
<xs:element name="BaseProfile" nillable="true" type="tns:BaseProfile" />
<xs:complexType name="ArrayOfImportProfileStep">
<xs:sequence>
<xs:element minOccurs="0" maxOccurs="unbounded" name="ImportProfileStep" nillable="true" type="tns:ImportProfileStep" />
</xs:sequence>
</xs:complexType>
<xs:element name="ArrayOfImportProfileStep" nillable="true" type="tns:ArrayOfImportProfileStep" />
<xs:complexType name="ImportProfileStep">
<xs:sequence>
<xs:element minOccurs="0" name="Active" type="xs:boolean" />
<xs:element minOccurs="0" name="Argument1" nillable="true" type="xs:string" />
<xs:element minOccurs="0" name="Argument2" nillable="true" type="xs:string" />
<xs:element minOccurs="0" name="Argument3" nillable="true" type="xs:string" />
<xs:element minOccurs="0" name="Id" type="xs:int" />
<xs:element minOccurs="0" name="IndexName" nillable="true" type="xs:string" />
<xs:element minOccurs="0" name="Method" type="tns:ImportProfileStep.StepMethod" />
<xs:element minOccurs="0" name="ProfileId" type="xs:int" />
<xs:element minOccurs="0" name="Scope" type="tns:ImportProfileStep.StepScope" />
</xs:sequence>
</xs:complexType>
<xs:element name="ImportProfileStep" nillable="true" type="tns:ImportProfileStep" />
<xs:simpleType name="ImportProfileStep.StepMethod">
<xs:restriction base="xs:string">
<xs:enumeration value="SUBSTRING" />
<xs:enumeration value="REGEX" />
<xs:enumeration value="SPLIT" />
<xs:enumeration value="ALL" />
<xs:enumeration value="VALUE" />
</xs:restriction>
</xs:simpleType>
<xs:element name="ImportProfileStep.StepMethod" nillable="true" type="tns:ImportProfileStep.StepMethod" />
<xs:simpleType name="ImportProfileStep.StepScope">
<xs:restriction base="xs:string">
<xs:enumeration value="FILE" />
<xs:enumeration value="FOLDER" />
</xs:restriction>
</xs:simpleType>
<xs:element name="ImportProfileStep.StepScope" nillable="true" type="tns:ImportProfileStep.StepScope" />
<xs:complexType name="UpdateProfile.UpdateProfileResponse">
<xs:complexContent mixed="false">
<xs:extension base="tns:Base.BaseResponse">
<xs:sequence />
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:element name="UpdateProfile.UpdateProfileResponse" nillable="true" type="tns:UpdateProfile.UpdateProfileResponse" />
<xs:complexType name="GetJobConfig.GetJobConfigResponse">
<xs:complexContent mixed="false">
<xs:extension base="tns:Base.BaseResponse">
<xs:sequence>
<xs:element xmlns:q4="http://schemas.datacontract.org/2004/07/ECM.JobRunner.Common" minOccurs="0" name="JobDefinitions" nillable="true" type="q4:ArrayOfJobDefinition" />
<xs:element xmlns:q5="http://schemas.datacontract.org/2004/07/ECM.JobRunner.Common" minOccurs="0" name="JobTypes" nillable="true" type="q5:ArrayOfJobType" />
<xs:element xmlns:q6="http://schemas.datacontract.org/2004/07/ECM.JobRunner.Common" minOccurs="0" name="WindreamObjectTypes" nillable="true" type="q6:ArrayOfObjectType" />
<xs:element minOccurs="0" name="JobDefinitions" nillable="true" type="tns:ArrayOfJobDefinition" />
<xs:element minOccurs="0" name="JobTypes" nillable="true" type="tns:ArrayOfJobType" />
<xs:element minOccurs="0" name="ProfileDefinitions" nillable="true" type="tns:GetJobConfig.GetJobConfigResponse.ProfileDefinitionConfig" />
<xs:element minOccurs="0" name="WindreamObjectTypes" nillable="true" type="tns:ArrayOfObjectType" />
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:element name="GetJobConfig.GetJobConfigResponse" nillable="true" type="tns:GetJobConfig.GetJobConfigResponse" />
<xs:complexType name="ArrayOfJobDefinition">
<xs:sequence>
<xs:element minOccurs="0" maxOccurs="unbounded" name="JobDefinition" nillable="true" type="tns:JobDefinition" />
</xs:sequence>
</xs:complexType>
<xs:element name="ArrayOfJobDefinition" nillable="true" type="tns:ArrayOfJobDefinition" />
<xs:complexType name="ArrayOfJobType">
<xs:sequence>
<xs:element minOccurs="0" maxOccurs="unbounded" name="JobType" nillable="true" type="tns:JobType" />
</xs:sequence>
</xs:complexType>
<xs:element name="ArrayOfJobType" nillable="true" type="tns:ArrayOfJobType" />
<xs:complexType name="GetJobConfig.GetJobConfigResponse.ProfileDefinitionConfig">
<xs:sequence>
<xs:element minOccurs="0" name="ImportProfiles" nillable="true" type="tns:ArrayOfImportProfile" />
</xs:sequence>
</xs:complexType>
<xs:element name="GetJobConfig.GetJobConfigResponse.ProfileDefinitionConfig" nillable="true" type="tns:GetJobConfig.GetJobConfigResponse.ProfileDefinitionConfig" />
<xs:complexType name="ArrayOfImportProfile">
<xs:sequence>
<xs:element minOccurs="0" maxOccurs="unbounded" name="ImportProfile" nillable="true" type="tns:ImportProfile" />
</xs:sequence>
</xs:complexType>
<xs:element name="ArrayOfImportProfile" nillable="true" type="tns:ArrayOfImportProfile" />
<xs:complexType name="ArrayOfObjectType">
<xs:sequence>
<xs:element minOccurs="0" maxOccurs="unbounded" name="ObjectType" nillable="true" type="tns:ObjectType" />
</xs:sequence>
</xs:complexType>
<xs:element name="ArrayOfObjectType" nillable="true" type="tns:ArrayOfObjectType" />
<xs:complexType name="ObjectType">
<xs:sequence>
<xs:element xmlns:q1="http://schemas.microsoft.com/2003/10/Serialization/Arrays" minOccurs="0" name="Indexes" nillable="true" type="q1:ArrayOfstring" />
<xs:element minOccurs="0" name="Name" nillable="true" type="xs:string" />
</xs:sequence>
</xs:complexType>
<xs:element name="ObjectType" nillable="true" type="tns:ObjectType" />
</xs:schema>

View File

@ -27,7 +27,6 @@
<MetadataFile FileName="DigitalData.Services.EDMIService.xsd" MetadataType="Schema" ID="d9797fa8-53bb-4228-a77d-4f795d7e7595" SourceId="1" SourceUrl="net.tcp://172.24.12.39:9001/DigitalData/Services/JobRunner/mex" />
<MetadataFile FileName="service.xsd" MetadataType="Schema" ID="82f08b96-e901-43fd-b34f-8c5660ef7b9d" SourceId="1" SourceUrl="net.tcp://172.24.12.39:9001/DigitalData/Services/JobRunner/mex" />
<MetadataFile FileName="ECM.JobRunner.Windows.xsd" MetadataType="Schema" ID="767808c0-aa74-46cc-af21-73a1ccedb8e9" SourceId="1" SourceUrl="net.tcp://172.24.12.39:9001/DigitalData/Services/JobRunner/mex" />
<MetadataFile FileName="ECM.JobRunner.Common.xsd" MetadataType="Schema" ID="56dce723-cc20-4004-bb74-65f4f89e0f21" SourceId="1" SourceUrl="net.tcp://172.24.12.39:9001/DigitalData/Services/JobRunner/mex" />
<MetadataFile FileName="Arrays.xsd" MetadataType="Schema" ID="908086d3-61bf-4869-9efb-ca4e72ed984a" SourceId="1" SourceUrl="net.tcp://172.24.12.39:9001/DigitalData/Services/JobRunner/mex" />
</Metadata>
<Extensions>

View File

@ -21,6 +21,7 @@ Namespace JobRunnerReference
System.Runtime.Serialization.DataContractAttribute(Name:="Base.BaseResponse", [Namespace]:="http://schemas.datacontract.org/2004/07/ECM.JobRunner.Windows"), _
System.SerializableAttribute(), _
System.Runtime.Serialization.KnownTypeAttribute(GetType(JobRunnerReference.UpdateJobUpdateJobResponse)), _
System.Runtime.Serialization.KnownTypeAttribute(GetType(JobRunnerReference.UpdateProfileUpdateProfileResponse)), _
System.Runtime.Serialization.KnownTypeAttribute(GetType(JobRunnerReference.GetJobConfigGetJobConfigResponse)), _
System.Runtime.Serialization.KnownTypeAttribute(GetType(JobRunnerReference.GetJobStatusGetJobStatusResponse))> _
Partial Public Class BaseBaseResponse
@ -106,6 +107,14 @@ Namespace JobRunnerReference
Inherits JobRunnerReference.BaseBaseResponse
End Class
<System.Diagnostics.DebuggerStepThroughAttribute(), _
System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0"), _
System.Runtime.Serialization.DataContractAttribute(Name:="UpdateProfile.UpdateProfileResponse", [Namespace]:="http://schemas.datacontract.org/2004/07/ECM.JobRunner.Windows"), _
System.SerializableAttribute()> _
Partial Public Class UpdateProfileUpdateProfileResponse
Inherits JobRunnerReference.BaseBaseResponse
End Class
<System.Diagnostics.DebuggerStepThroughAttribute(), _
System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0"), _
System.Runtime.Serialization.DataContractAttribute(Name:="GetJobConfig.GetJobConfigResponse", [Namespace]:="http://schemas.datacontract.org/2004/07/ECM.JobRunner.Windows"), _
@ -119,6 +128,9 @@ Namespace JobRunnerReference
<System.Runtime.Serialization.OptionalFieldAttribute()> _
Private JobTypesField() As JobRunnerReference.JobType
<System.Runtime.Serialization.OptionalFieldAttribute()> _
Private ProfileDefinitionsField As JobRunnerReference.GetJobConfigGetJobConfigResponse.ProfileDefinitionConfig
<System.Runtime.Serialization.OptionalFieldAttribute()> _
Private WindreamObjectTypesField() As JobRunnerReference.ObjectType
@ -148,6 +160,19 @@ Namespace JobRunnerReference
End Set
End Property
<System.Runtime.Serialization.DataMemberAttribute()> _
Public Property ProfileDefinitions() As JobRunnerReference.GetJobConfigGetJobConfigResponse.ProfileDefinitionConfig
Get
Return Me.ProfileDefinitionsField
End Get
Set
If (Object.ReferenceEquals(Me.ProfileDefinitionsField, value) <> true) Then
Me.ProfileDefinitionsField = value
Me.RaisePropertyChanged("ProfileDefinitions")
End If
End Set
End Property
<System.Runtime.Serialization.DataMemberAttribute()> _
Public Property WindreamObjectTypes() As JobRunnerReference.ObjectType()
Get
@ -160,6 +185,52 @@ Namespace JobRunnerReference
End If
End Set
End Property
<System.Diagnostics.DebuggerStepThroughAttribute(), _
System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0"), _
System.Runtime.Serialization.DataContractAttribute(Name:="GetJobConfig.GetJobConfigResponse.ProfileDefinitionConfig", [Namespace]:="http://schemas.datacontract.org/2004/07/ECM.JobRunner.Windows"), _
System.SerializableAttribute()> _
Partial Public Class ProfileDefinitionConfig
Inherits Object
Implements System.Runtime.Serialization.IExtensibleDataObject, System.ComponentModel.INotifyPropertyChanged
<System.NonSerializedAttribute()> _
Private extensionDataField As System.Runtime.Serialization.ExtensionDataObject
<System.Runtime.Serialization.OptionalFieldAttribute()> _
Private ImportProfilesField() As JobRunnerReference.ImportProfile
Public Property ExtensionData() As System.Runtime.Serialization.ExtensionDataObject Implements System.Runtime.Serialization.IExtensibleDataObject.ExtensionData
Get
Return Me.extensionDataField
End Get
Set
Me.extensionDataField = value
End Set
End Property
<System.Runtime.Serialization.DataMemberAttribute()> _
Public Property ImportProfiles() As JobRunnerReference.ImportProfile()
Get
Return Me.ImportProfilesField
End Get
Set
If (Object.ReferenceEquals(Me.ImportProfilesField, value) <> true) Then
Me.ImportProfilesField = value
Me.RaisePropertyChanged("ImportProfiles")
End If
End Set
End Property
Public Event PropertyChanged As System.ComponentModel.PropertyChangedEventHandler Implements System.ComponentModel.INotifyPropertyChanged.PropertyChanged
Protected Sub RaisePropertyChanged(ByVal propertyName As String)
Dim propertyChanged As System.ComponentModel.PropertyChangedEventHandler = Me.PropertyChangedEvent
If (Not (propertyChanged) Is Nothing) Then
propertyChanged(Me, New System.ComponentModel.PropertyChangedEventArgs(propertyName))
End If
End Sub
End Class
End Class
<System.Diagnostics.DebuggerStepThroughAttribute(), _
@ -204,7 +275,7 @@ Namespace JobRunnerReference
<System.Diagnostics.DebuggerStepThroughAttribute(), _
System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0"), _
System.Runtime.Serialization.DataContractAttribute(Name:="HistoryItem", [Namespace]:="http://schemas.datacontract.org/2004/07/ECM.JobRunner.Common"), _
System.Runtime.Serialization.DataContractAttribute(Name:="HistoryItem", [Namespace]:="http://schemas.datacontract.org/2004/07/ECM.JobRunner.Windows"), _
System.SerializableAttribute()> _
Partial Public Class HistoryItem
Inherits Object
@ -315,7 +386,7 @@ Namespace JobRunnerReference
<System.Diagnostics.DebuggerStepThroughAttribute(), _
System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0"), _
System.Runtime.Serialization.DataContractAttribute(Name:="StatusItem", [Namespace]:="http://schemas.datacontract.org/2004/07/ECM.JobRunner.Common"), _
System.Runtime.Serialization.DataContractAttribute(Name:="StatusItem", [Namespace]:="http://schemas.datacontract.org/2004/07/ECM.JobRunner.Windows"), _
System.SerializableAttribute()> _
Partial Public Class StatusItem
Inherits Object
@ -474,7 +545,7 @@ Namespace JobRunnerReference
<System.Diagnostics.DebuggerStepThroughAttribute(), _
System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0"), _
System.Runtime.Serialization.DataContractAttribute(Name:="JobDefinition", [Namespace]:="http://schemas.datacontract.org/2004/07/ECM.JobRunner.Common"), _
System.Runtime.Serialization.DataContractAttribute(Name:="JobDefinition", [Namespace]:="http://schemas.datacontract.org/2004/07/ECM.JobRunner.Windows"), _
System.SerializableAttribute()> _
Partial Public Class JobDefinition
Inherits Object
@ -601,7 +672,7 @@ Namespace JobRunnerReference
<System.Diagnostics.DebuggerStepThroughAttribute(), _
System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0"), _
System.Runtime.Serialization.DataContractAttribute(Name:="JobType", [Namespace]:="http://schemas.datacontract.org/2004/07/ECM.JobRunner.Common"), _
System.Runtime.Serialization.DataContractAttribute(Name:="JobType", [Namespace]:="http://schemas.datacontract.org/2004/07/ECM.JobRunner.Windows"), _
System.SerializableAttribute()> _
Partial Public Class JobType
Inherits Object
@ -680,7 +751,7 @@ Namespace JobRunnerReference
<System.Diagnostics.DebuggerStepThroughAttribute(), _
System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0"), _
System.Runtime.Serialization.DataContractAttribute(Name:="ObjectType", [Namespace]:="http://schemas.datacontract.org/2004/07/ECM.JobRunner.Common"), _
System.Runtime.Serialization.DataContractAttribute(Name:="ObjectType", [Namespace]:="http://schemas.datacontract.org/2004/07/ECM.JobRunner.Windows"), _
System.SerializableAttribute()> _
Partial Public Class ObjectType
Inherits Object
@ -741,6 +812,460 @@ Namespace JobRunnerReference
End Sub
End Class
<System.Diagnostics.DebuggerStepThroughAttribute(), _
System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0"), _
System.Runtime.Serialization.DataContractAttribute(Name:="ImportProfile", [Namespace]:="http://schemas.datacontract.org/2004/07/ECM.JobRunner.Windows"), _
System.SerializableAttribute()> _
Partial Public Class ImportProfile
Inherits JobRunnerReference.BaseProfile
<System.Runtime.Serialization.OptionalFieldAttribute()> _
Private ActiveField As Boolean
<System.Runtime.Serialization.OptionalFieldAttribute()> _
Private BackupFolderField As String
<System.Runtime.Serialization.OptionalFieldAttribute()> _
Private DeleteFilesField As Boolean
<System.Runtime.Serialization.OptionalFieldAttribute()> _
Private FileExcludeRegexField As String
<System.Runtime.Serialization.OptionalFieldAttribute()> _
Private IdField As Integer
<System.Runtime.Serialization.OptionalFieldAttribute()> _
Private IncludeSubfoldersField As Boolean
<System.Runtime.Serialization.OptionalFieldAttribute()> _
Private JobIdField As Integer
<System.Runtime.Serialization.OptionalFieldAttribute()> _
Private ObjectTypeNameField As String
<System.Runtime.Serialization.OptionalFieldAttribute()> _
Private SourceFolderField As String
<System.Runtime.Serialization.OptionalFieldAttribute()> _
Private StepsField() As JobRunnerReference.ImportProfileStep
<System.Runtime.Serialization.OptionalFieldAttribute()> _
Private SubfolderDateFormatField As String
<System.Runtime.Serialization.OptionalFieldAttribute()> _
Private TargetFolderField As String
<System.Runtime.Serialization.DataMemberAttribute()> _
Public Property Active() As Boolean
Get
Return Me.ActiveField
End Get
Set
If (Me.ActiveField.Equals(value) <> true) Then
Me.ActiveField = value
Me.RaisePropertyChanged("Active")
End If
End Set
End Property
<System.Runtime.Serialization.DataMemberAttribute()> _
Public Property BackupFolder() As String
Get
Return Me.BackupFolderField
End Get
Set
If (Object.ReferenceEquals(Me.BackupFolderField, value) <> true) Then
Me.BackupFolderField = value
Me.RaisePropertyChanged("BackupFolder")
End If
End Set
End Property
<System.Runtime.Serialization.DataMemberAttribute()> _
Public Property DeleteFiles() As Boolean
Get
Return Me.DeleteFilesField
End Get
Set
If (Me.DeleteFilesField.Equals(value) <> true) Then
Me.DeleteFilesField = value
Me.RaisePropertyChanged("DeleteFiles")
End If
End Set
End Property
<System.Runtime.Serialization.DataMemberAttribute()> _
Public Property FileExcludeRegex() As String
Get
Return Me.FileExcludeRegexField
End Get
Set
If (Object.ReferenceEquals(Me.FileExcludeRegexField, value) <> true) Then
Me.FileExcludeRegexField = value
Me.RaisePropertyChanged("FileExcludeRegex")
End If
End Set
End Property
<System.Runtime.Serialization.DataMemberAttribute()> _
Public Property Id() As Integer
Get
Return Me.IdField
End Get
Set
If (Me.IdField.Equals(value) <> true) Then
Me.IdField = value
Me.RaisePropertyChanged("Id")
End If
End Set
End Property
<System.Runtime.Serialization.DataMemberAttribute()> _
Public Property IncludeSubfolders() As Boolean
Get
Return Me.IncludeSubfoldersField
End Get
Set
If (Me.IncludeSubfoldersField.Equals(value) <> true) Then
Me.IncludeSubfoldersField = value
Me.RaisePropertyChanged("IncludeSubfolders")
End If
End Set
End Property
<System.Runtime.Serialization.DataMemberAttribute()> _
Public Property JobId() As Integer
Get
Return Me.JobIdField
End Get
Set
If (Me.JobIdField.Equals(value) <> true) Then
Me.JobIdField = value
Me.RaisePropertyChanged("JobId")
End If
End Set
End Property
<System.Runtime.Serialization.DataMemberAttribute()> _
Public Property ObjectTypeName() As String
Get
Return Me.ObjectTypeNameField
End Get
Set
If (Object.ReferenceEquals(Me.ObjectTypeNameField, value) <> true) Then
Me.ObjectTypeNameField = value
Me.RaisePropertyChanged("ObjectTypeName")
End If
End Set
End Property
<System.Runtime.Serialization.DataMemberAttribute()> _
Public Property SourceFolder() As String
Get
Return Me.SourceFolderField
End Get
Set
If (Object.ReferenceEquals(Me.SourceFolderField, value) <> true) Then
Me.SourceFolderField = value
Me.RaisePropertyChanged("SourceFolder")
End If
End Set
End Property
<System.Runtime.Serialization.DataMemberAttribute()> _
Public Property Steps() As JobRunnerReference.ImportProfileStep()
Get
Return Me.StepsField
End Get
Set
If (Object.ReferenceEquals(Me.StepsField, value) <> true) Then
Me.StepsField = value
Me.RaisePropertyChanged("Steps")
End If
End Set
End Property
<System.Runtime.Serialization.DataMemberAttribute()> _
Public Property SubfolderDateFormat() As String
Get
Return Me.SubfolderDateFormatField
End Get
Set
If (Object.ReferenceEquals(Me.SubfolderDateFormatField, value) <> true) Then
Me.SubfolderDateFormatField = value
Me.RaisePropertyChanged("SubfolderDateFormat")
End If
End Set
End Property
<System.Runtime.Serialization.DataMemberAttribute()> _
Public Property TargetFolder() As String
Get
Return Me.TargetFolderField
End Get
Set
If (Object.ReferenceEquals(Me.TargetFolderField, value) <> true) Then
Me.TargetFolderField = value
Me.RaisePropertyChanged("TargetFolder")
End If
End Set
End Property
End Class
<System.Diagnostics.DebuggerStepThroughAttribute(), _
System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0"), _
System.Runtime.Serialization.DataContractAttribute(Name:="BaseProfile", [Namespace]:="http://schemas.datacontract.org/2004/07/ECM.JobRunner.Windows"), _
System.SerializableAttribute(), _
System.Runtime.Serialization.KnownTypeAttribute(GetType(JobRunnerReference.ImportProfile))> _
Partial Public Class BaseProfile
Inherits Object
Implements System.Runtime.Serialization.IExtensibleDataObject, System.ComponentModel.INotifyPropertyChanged
<System.NonSerializedAttribute()> _
Private extensionDataField As System.Runtime.Serialization.ExtensionDataObject
<System.Runtime.Serialization.OptionalFieldAttribute()> _
Private JobField As JobRunnerReference.JobDefinition
<Global.System.ComponentModel.BrowsableAttribute(false)> _
Public Property ExtensionData() As System.Runtime.Serialization.ExtensionDataObject Implements System.Runtime.Serialization.IExtensibleDataObject.ExtensionData
Get
Return Me.extensionDataField
End Get
Set
Me.extensionDataField = value
End Set
End Property
<System.Runtime.Serialization.DataMemberAttribute()> _
Public Property Job() As JobRunnerReference.JobDefinition
Get
Return Me.JobField
End Get
Set
If (Object.ReferenceEquals(Me.JobField, value) <> true) Then
Me.JobField = value
Me.RaisePropertyChanged("Job")
End If
End Set
End Property
Public Event PropertyChanged As System.ComponentModel.PropertyChangedEventHandler Implements System.ComponentModel.INotifyPropertyChanged.PropertyChanged
Protected Sub RaisePropertyChanged(ByVal propertyName As String)
Dim propertyChanged As System.ComponentModel.PropertyChangedEventHandler = Me.PropertyChangedEvent
If (Not (propertyChanged) Is Nothing) Then
propertyChanged(Me, New System.ComponentModel.PropertyChangedEventArgs(propertyName))
End If
End Sub
End Class
<System.Diagnostics.DebuggerStepThroughAttribute(), _
System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0"), _
System.Runtime.Serialization.DataContractAttribute(Name:="ImportProfileStep", [Namespace]:="http://schemas.datacontract.org/2004/07/ECM.JobRunner.Windows"), _
System.SerializableAttribute()> _
Partial Public Class ImportProfileStep
Inherits Object
Implements System.Runtime.Serialization.IExtensibleDataObject, System.ComponentModel.INotifyPropertyChanged
<System.NonSerializedAttribute()> _
Private extensionDataField As System.Runtime.Serialization.ExtensionDataObject
<System.Runtime.Serialization.OptionalFieldAttribute()> _
Private ActiveField As Boolean
<System.Runtime.Serialization.OptionalFieldAttribute()> _
Private Argument1Field As String
<System.Runtime.Serialization.OptionalFieldAttribute()> _
Private Argument2Field As String
<System.Runtime.Serialization.OptionalFieldAttribute()> _
Private Argument3Field As String
<System.Runtime.Serialization.OptionalFieldAttribute()> _
Private IdField As Integer
<System.Runtime.Serialization.OptionalFieldAttribute()> _
Private IndexNameField As String
<System.Runtime.Serialization.OptionalFieldAttribute()> _
Private MethodField As JobRunnerReference.ImportProfileStep.StepMethod
<System.Runtime.Serialization.OptionalFieldAttribute()> _
Private ProfileIdField As Integer
<System.Runtime.Serialization.OptionalFieldAttribute()> _
Private ScopeField As JobRunnerReference.ImportProfileStep.StepScope
<Global.System.ComponentModel.BrowsableAttribute(false)> _
Public Property ExtensionData() As System.Runtime.Serialization.ExtensionDataObject Implements System.Runtime.Serialization.IExtensibleDataObject.ExtensionData
Get
Return Me.extensionDataField
End Get
Set
Me.extensionDataField = value
End Set
End Property
<System.Runtime.Serialization.DataMemberAttribute()> _
Public Property Active() As Boolean
Get
Return Me.ActiveField
End Get
Set
If (Me.ActiveField.Equals(value) <> true) Then
Me.ActiveField = value
Me.RaisePropertyChanged("Active")
End If
End Set
End Property
<System.Runtime.Serialization.DataMemberAttribute()> _
Public Property Argument1() As String
Get
Return Me.Argument1Field
End Get
Set
If (Object.ReferenceEquals(Me.Argument1Field, value) <> true) Then
Me.Argument1Field = value
Me.RaisePropertyChanged("Argument1")
End If
End Set
End Property
<System.Runtime.Serialization.DataMemberAttribute()> _
Public Property Argument2() As String
Get
Return Me.Argument2Field
End Get
Set
If (Object.ReferenceEquals(Me.Argument2Field, value) <> true) Then
Me.Argument2Field = value
Me.RaisePropertyChanged("Argument2")
End If
End Set
End Property
<System.Runtime.Serialization.DataMemberAttribute()> _
Public Property Argument3() As String
Get
Return Me.Argument3Field
End Get
Set
If (Object.ReferenceEquals(Me.Argument3Field, value) <> true) Then
Me.Argument3Field = value
Me.RaisePropertyChanged("Argument3")
End If
End Set
End Property
<System.Runtime.Serialization.DataMemberAttribute()> _
Public Property Id() As Integer
Get
Return Me.IdField
End Get
Set
If (Me.IdField.Equals(value) <> true) Then
Me.IdField = value
Me.RaisePropertyChanged("Id")
End If
End Set
End Property
<System.Runtime.Serialization.DataMemberAttribute()> _
Public Property IndexName() As String
Get
Return Me.IndexNameField
End Get
Set
If (Object.ReferenceEquals(Me.IndexNameField, value) <> true) Then
Me.IndexNameField = value
Me.RaisePropertyChanged("IndexName")
End If
End Set
End Property
<System.Runtime.Serialization.DataMemberAttribute()> _
Public Property Method() As JobRunnerReference.ImportProfileStep.StepMethod
Get
Return Me.MethodField
End Get
Set
If (Me.MethodField.Equals(value) <> true) Then
Me.MethodField = value
Me.RaisePropertyChanged("Method")
End If
End Set
End Property
<System.Runtime.Serialization.DataMemberAttribute()> _
Public Property ProfileId() As Integer
Get
Return Me.ProfileIdField
End Get
Set
If (Me.ProfileIdField.Equals(value) <> true) Then
Me.ProfileIdField = value
Me.RaisePropertyChanged("ProfileId")
End If
End Set
End Property
<System.Runtime.Serialization.DataMemberAttribute()> _
Public Property Scope() As JobRunnerReference.ImportProfileStep.StepScope
Get
Return Me.ScopeField
End Get
Set
If (Me.ScopeField.Equals(value) <> true) Then
Me.ScopeField = value
Me.RaisePropertyChanged("Scope")
End If
End Set
End Property
Public Event PropertyChanged As System.ComponentModel.PropertyChangedEventHandler Implements System.ComponentModel.INotifyPropertyChanged.PropertyChanged
Protected Sub RaisePropertyChanged(ByVal propertyName As String)
Dim propertyChanged As System.ComponentModel.PropertyChangedEventHandler = Me.PropertyChangedEvent
If (Not (propertyChanged) Is Nothing) Then
propertyChanged(Me, New System.ComponentModel.PropertyChangedEventArgs(propertyName))
End If
End Sub
<System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0"), _
System.Runtime.Serialization.DataContractAttribute(Name:="ImportProfileStep.StepMethod", [Namespace]:="http://schemas.datacontract.org/2004/07/ECM.JobRunner.Windows")> _
Public Enum StepMethod As Integer
<System.Runtime.Serialization.EnumMemberAttribute()> _
SUBSTRING = 0
<System.Runtime.Serialization.EnumMemberAttribute()> _
REGEX = 1
<System.Runtime.Serialization.EnumMemberAttribute()> _
SPLIT = 2
<System.Runtime.Serialization.EnumMemberAttribute()> _
ALL = 3
<System.Runtime.Serialization.EnumMemberAttribute()> _
VALUE = 4
End Enum
<System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0"), _
System.Runtime.Serialization.DataContractAttribute(Name:="ImportProfileStep.StepScope", [Namespace]:="http://schemas.datacontract.org/2004/07/ECM.JobRunner.Windows")> _
Public Enum StepScope As Integer
<System.Runtime.Serialization.EnumMemberAttribute()> _
FILE = 0
<System.Runtime.Serialization.EnumMemberAttribute()> _
FOLDER = 1
End Enum
End Class
<System.Diagnostics.DebuggerStepThroughAttribute(), _
System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0"), _
System.Runtime.Serialization.DataContractAttribute(Name:="UpdateJob.UpdateJobRequest", [Namespace]:="http://schemas.datacontract.org/2004/07/ECM.JobRunner.Windows"), _
@ -818,6 +1343,83 @@ Namespace JobRunnerReference
End Enum
End Class
<System.Diagnostics.DebuggerStepThroughAttribute(), _
System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0"), _
System.Runtime.Serialization.DataContractAttribute(Name:="UpdateProfile.UpdateProfileRequest", [Namespace]:="http://schemas.datacontract.org/2004/07/ECM.JobRunner.Windows"), _
System.SerializableAttribute()> _
Partial Public Class UpdateProfileUpdateProfileRequest
Inherits Object
Implements System.Runtime.Serialization.IExtensibleDataObject, System.ComponentModel.INotifyPropertyChanged
<System.NonSerializedAttribute()> _
Private extensionDataField As System.Runtime.Serialization.ExtensionDataObject
<System.Runtime.Serialization.OptionalFieldAttribute()> _
Private ActionField As JobRunnerReference.UpdateProfileUpdateProfileRequest.UpdateProfileAction
<System.Runtime.Serialization.OptionalFieldAttribute()> _
Private ImportProfileField As JobRunnerReference.ImportProfile
<Global.System.ComponentModel.BrowsableAttribute(false)> _
Public Property ExtensionData() As System.Runtime.Serialization.ExtensionDataObject Implements System.Runtime.Serialization.IExtensibleDataObject.ExtensionData
Get
Return Me.extensionDataField
End Get
Set
Me.extensionDataField = value
End Set
End Property
<System.Runtime.Serialization.DataMemberAttribute()> _
Public Property Action() As JobRunnerReference.UpdateProfileUpdateProfileRequest.UpdateProfileAction
Get
Return Me.ActionField
End Get
Set
If (Me.ActionField.Equals(value) <> true) Then
Me.ActionField = value
Me.RaisePropertyChanged("Action")
End If
End Set
End Property
<System.Runtime.Serialization.DataMemberAttribute()> _
Public Property ImportProfile() As JobRunnerReference.ImportProfile
Get
Return Me.ImportProfileField
End Get
Set
If (Object.ReferenceEquals(Me.ImportProfileField, value) <> true) Then
Me.ImportProfileField = value
Me.RaisePropertyChanged("ImportProfile")
End If
End Set
End Property
Public Event PropertyChanged As System.ComponentModel.PropertyChangedEventHandler Implements System.ComponentModel.INotifyPropertyChanged.PropertyChanged
Protected Sub RaisePropertyChanged(ByVal propertyName As String)
Dim propertyChanged As System.ComponentModel.PropertyChangedEventHandler = Me.PropertyChangedEvent
If (Not (propertyChanged) Is Nothing) Then
propertyChanged(Me, New System.ComponentModel.PropertyChangedEventArgs(propertyName))
End If
End Sub
<System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0"), _
System.Runtime.Serialization.DataContractAttribute(Name:="UpdateProfile.UpdateProfileRequest.UpdateProfileAction", [Namespace]:="http://schemas.datacontract.org/2004/07/ECM.JobRunner.Windows")> _
Public Enum UpdateProfileAction As Integer
<System.Runtime.Serialization.EnumMemberAttribute()> _
Create = 0
<System.Runtime.Serialization.EnumMemberAttribute()> _
Update = 1
<System.Runtime.Serialization.EnumMemberAttribute()> _
Delete = 2
End Enum
End Class
<System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0"), _
System.ServiceModel.ServiceContractAttribute([Namespace]:="http://DigitalData.Services.EDMIService", ConfigurationName:="JobRunnerReference.IEDMIService")> _
Public Interface IEDMIService
@ -840,6 +1442,12 @@ Namespace JobRunnerReference
<System.ServiceModel.OperationContractAttribute(Action:="http://DigitalData.Services.EDMIService/IEDMIService/UpdateJob", ReplyAction:="http://DigitalData.Services.EDMIService/IEDMIService/UpdateJobResponse")> _
Function UpdateJobAsync(ByVal pData As JobRunnerReference.UpdateJobUpdateJobRequest) As System.Threading.Tasks.Task(Of JobRunnerReference.UpdateJobUpdateJobResponse)
<System.ServiceModel.OperationContractAttribute(Action:="http://DigitalData.Services.EDMIService/IEDMIService/UpdateProfile", ReplyAction:="http://DigitalData.Services.EDMIService/IEDMIService/UpdateProfileResponse")> _
Function UpdateProfile(ByVal pData As JobRunnerReference.UpdateProfileUpdateProfileRequest) As JobRunnerReference.UpdateProfileUpdateProfileResponse
<System.ServiceModel.OperationContractAttribute(Action:="http://DigitalData.Services.EDMIService/IEDMIService/UpdateProfile", ReplyAction:="http://DigitalData.Services.EDMIService/IEDMIService/UpdateProfileResponse")> _
Function UpdateProfileAsync(ByVal pData As JobRunnerReference.UpdateProfileUpdateProfileRequest) As System.Threading.Tasks.Task(Of JobRunnerReference.UpdateProfileUpdateProfileResponse)
<System.ServiceModel.OperationContractAttribute(Action:="http://DigitalData.Services.EDMIService/IEDMIService/GetJobConfig", ReplyAction:="http://DigitalData.Services.EDMIService/IEDMIService/GetJobConfigResponse")> _
Function GetJobConfig() As JobRunnerReference.GetJobConfigGetJobConfigResponse
@ -902,6 +1510,14 @@ Namespace JobRunnerReference
Return MyBase.Channel.UpdateJobAsync(pData)
End Function
Public Function UpdateProfile(ByVal pData As JobRunnerReference.UpdateProfileUpdateProfileRequest) As JobRunnerReference.UpdateProfileUpdateProfileResponse Implements JobRunnerReference.IEDMIService.UpdateProfile
Return MyBase.Channel.UpdateProfile(pData)
End Function
Public Function UpdateProfileAsync(ByVal pData As JobRunnerReference.UpdateProfileUpdateProfileRequest) As System.Threading.Tasks.Task(Of JobRunnerReference.UpdateProfileUpdateProfileResponse) Implements JobRunnerReference.IEDMIService.UpdateProfileAsync
Return MyBase.Channel.UpdateProfileAsync(pData)
End Function
Public Function GetJobConfig() As JobRunnerReference.GetJobConfigGetJobConfigResponse Implements JobRunnerReference.IEDMIService.GetJobConfig
Return MyBase.Channel.GetJobConfig
End Function

View File

@ -5,6 +5,6 @@
<binding digest="System.ServiceModel.Configuration.NetTcpBindingElement, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089:&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-16&quot;?&gt;&lt;Data name=&quot;NetTcpBinding_IEDMIService&quot; transferMode=&quot;Streamed&quot;&gt;&lt;security&gt;&lt;transport sslProtocols=&quot;None&quot; /&gt;&lt;/security&gt;&lt;/Data&gt;" bindingType="netTcpBinding" name="NetTcpBinding_IEDMIService" />
</bindings>
<endpoints>
<endpoint normalizedDigest="&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-16&quot;?&gt;&lt;Data address=&quot;net.tcp://localhost:9001/DigitalData/Services/JobRunner&quot; binding=&quot;netTcpBinding&quot; bindingConfiguration=&quot;NetTcpBinding_IEDMIService&quot; contract=&quot;JobRunnerReference.IEDMIService&quot; name=&quot;NetTcpBinding_IEDMIService&quot;&gt;&lt;identity&gt;&lt;servicePrincipalName value=&quot;host/sDD-VMP03-VM09.dd-san01.dd-gan.local.digitaldata.works&quot; /&gt;&lt;/identity&gt;&lt;/Data&gt;" digest="&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-16&quot;?&gt;&lt;Data address=&quot;net.tcp://localhost:9001/DigitalData/Services/JobRunner&quot; binding=&quot;netTcpBinding&quot; bindingConfiguration=&quot;NetTcpBinding_IEDMIService&quot; contract=&quot;JobRunnerReference.IEDMIService&quot; name=&quot;NetTcpBinding_IEDMIService&quot;&gt;&lt;identity&gt;&lt;servicePrincipalName value=&quot;host/sDD-VMP03-VM09.dd-san01.dd-gan.local.digitaldata.works&quot; /&gt;&lt;/identity&gt;&lt;/Data&gt;" contractName="JobRunnerReference.IEDMIService" name="NetTcpBinding_IEDMIService" />
<endpoint normalizedDigest="&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-16&quot;?&gt;&lt;Data address=&quot;net.tcp://localhost:9001/DigitalData/Services/JobRunner&quot; binding=&quot;netTcpBinding&quot; bindingConfiguration=&quot;NetTcpBinding_IEDMIService&quot; contract=&quot;JobRunnerReference.IEDMIService&quot; name=&quot;NetTcpBinding_IEDMIService&quot;&gt;&lt;identity&gt;&lt;userPrincipalName value=&quot;Administrator@dd-san01.dd-gan.local.digitaldata.works&quot; /&gt;&lt;/identity&gt;&lt;/Data&gt;" digest="&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-16&quot;?&gt;&lt;Data address=&quot;net.tcp://localhost:9001/DigitalData/Services/JobRunner&quot; binding=&quot;netTcpBinding&quot; bindingConfiguration=&quot;NetTcpBinding_IEDMIService&quot; contract=&quot;JobRunnerReference.IEDMIService&quot; name=&quot;NetTcpBinding_IEDMIService&quot;&gt;&lt;identity&gt;&lt;userPrincipalName value=&quot;Administrator@dd-san01.dd-gan.local.digitaldata.works&quot; /&gt;&lt;/identity&gt;&lt;/Data&gt;" contractName="JobRunnerReference.IEDMIService" name="NetTcpBinding_IEDMIService" />
</endpoints>
</configurationSnapshot>

View File

@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<SavedWcfConfigurationInformation xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" Version="9.1" CheckSum="ho0oZcIegSOp+ZGeQ1YrB58dDQqmy97E7VQqQI8HV80=">
<SavedWcfConfigurationInformation xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" Version="9.1" CheckSum="DoUniskVeDbP1hRdgocMLRvIRWWXBsyF6LnDt8ZDNTI=">
<bindingConfigurations>
<bindingConfiguration bindingType="netTcpBinding" name="NetTcpBinding_IEDMIService">
<properties>
@ -150,14 +150,14 @@
<property path="/identity/userPrincipalName" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.UserPrincipalNameElement, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<serializedValue>System.ServiceModel.Configuration.UserPrincipalNameElement</serializedValue>
</property>
<property path="/identity/userPrincipalName/value" isComplexType="false" isExplicitlyDefined="false" clrType="System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<serializedValue />
<property path="/identity/userPrincipalName/value" isComplexType="false" isExplicitlyDefined="true" clrType="System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<serializedValue>Administrator@dd-san01.dd-gan.local.digitaldata.works</serializedValue>
</property>
<property path="/identity/servicePrincipalName" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.ServicePrincipalNameElement, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<serializedValue>System.ServiceModel.Configuration.ServicePrincipalNameElement</serializedValue>
</property>
<property path="/identity/servicePrincipalName/value" isComplexType="false" isExplicitlyDefined="true" clrType="System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<serializedValue>host/sDD-VMP03-VM09.dd-san01.dd-gan.local.digitaldata.works</serializedValue>
<property path="/identity/servicePrincipalName/value" isComplexType="false" isExplicitlyDefined="false" clrType="System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<serializedValue />
</property>
<property path="/identity/dns" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.DnsElement, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<serializedValue>System.ServiceModel.Configuration.DnsElement</serializedValue>

View File

@ -68,6 +68,15 @@
<soap12:body use="literal" />
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="UpdateProfile">
<soap12:operation soapAction="http://DigitalData.Services.EDMIService/IEDMIService/UpdateProfile" style="document" />
<wsdl:input>
<soap12:body use="literal" />
</wsdl:input>
<wsdl:output>
<soap12:body use="literal" />
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="GetJobConfig">
<soap12:operation soapAction="http://DigitalData.Services.EDMIService/IEDMIService/GetJobConfig" style="document" />
<wsdl:input>
@ -84,7 +93,7 @@
<wsa10:EndpointReference>
<wsa10:Address>net.tcp://localhost:9001/DigitalData/Services/JobRunner</wsa10:Address>
<Identity xmlns="http://schemas.xmlsoap.org/ws/2006/02/addressingidentity">
<Spn>host/sDD-VMP03-VM09.dd-san01.dd-gan.local.digitaldata.works</Spn>
<Upn>Administrator@dd-san01.dd-gan.local.digitaldata.works</Upn>
</Identity>
</wsa10:EndpointReference>
</wsdl:port>

View File

@ -71,11 +71,6 @@
<DesignTime>True</DesignTime>
<DependentUpon>Reference.svcmap</DependentUpon>
</Compile>
<Compile Include="JobConfig\JobDefinition.vb" />
<Compile Include="JobConfig\JobType.vb" />
<Compile Include="ProfileConfig\ImportProfile.vb" />
<Compile Include="JobHistory\HistoryItem.vb" />
<Compile Include="JobStatus\StatusItem.vb" />
<Compile Include="My Project\AssemblyInfo.vb" />
<Compile Include="My Project\Application.Designer.vb">
<AutoGen>True</AutoGen>
@ -91,7 +86,6 @@
<DependentUpon>Settings.settings</DependentUpon>
<DesignTimeSharedInput>True</DesignTimeSharedInput>
</Compile>
<Compile Include="Windream\ObjectType.vb" />
</ItemGroup>
<ItemGroup>
<EmbeddedResource Include="My Project\Resources.resx">
@ -119,8 +113,8 @@
<None Include="Connected Services\JobRunnerReference\ECM.JobRunner.Common.JobRunnerReference.UpdateJobUpdateJobResponse.datasource">
<DependentUpon>Reference.svcmap</DependentUpon>
</None>
<None Include="Connected Services\JobRunnerReference\ECM.JobRunner.Common.xsd">
<SubType>Designer</SubType>
<None Include="Connected Services\JobRunnerReference\ECM.JobRunner.Common.JobRunnerReference.UpdateProfileUpdateProfileResponse.datasource">
<DependentUpon>Reference.svcmap</DependentUpon>
</None>
<None Include="Connected Services\JobRunnerReference\ECM.JobRunner.Windows.xsd">
<SubType>Designer</SubType>

View File

@ -1,8 +0,0 @@
Public Class JobDefinition
Public Id As Integer
Public TypeId As Integer
Public Type As JobType
Public Name As String
Public CronSchedule As String
Public Active As Boolean
End Class

View File

@ -39,7 +39,7 @@
binding="netTcpBinding" bindingConfiguration="NetTcpBinding_IEDMIService"
contract="JobRunnerReference.IEDMIService" name="NetTcpBinding_IEDMIService">
<identity>
<servicePrincipalName value="host/sDD-VMP03-VM09.dd-san01.dd-gan.local.digitaldata.works" />
<userPrincipalName value="Administrator@dd-san01.dd-gan.local.digitaldata.works" />
</identity>
</endpoint>
</client>

View File

@ -1,95 +0,0 @@
@using ECM.JobRunner.Common.JobRunnerReference;
@using ECM.JobRunner.Web.Data;
@inject JobService Jobs;
@if (job == null)
{
<p>Form loading..</p>
}
else
{
<EditForm Model="job" OnValidSubmit="OnValidSubmit">
<DataAnnotationsValidator />
<ValidationSummary />
<div class="mb-3">
<label for="id" class="form-label">Id</label>
<input type="email" class="form-control" id="id" aria-describedby="nameHelp" @bind="job.Id" readonly="readonly">
<div id="nameHelp" class="form-text">Die Datenbank Id des Jobs.</div>
</div>
<div class="mb-3">
<label for="name" class="form-label">Name</label>
<input type="text" class="form-control" id="name" aria-describedby="nameHelp" @bind="job.Name">
<div id="nameHelp" class="form-text">Der Name des Jobs. Wird in der Übersicht angezeigt.</div>
</div>
<div class="mb-3">
<label for="cronExpression" class="form-label">Cron Expression</label>
<input type="text" class="form-control" id="cronExpression" @bind="job.CronSchedule" aria-describedby="cronHelp">
<div id="cronHelp" class="form-text">Die Zeitplan des Jobs. Erwartet eine <a href="https://www.quartz-scheduler.net/documentation/quartz-3.x/how-tos/crontrigger.html#examples" target="_blank">Quartz.NET Cron Expression.</a></div>
</div>
<div class="mb-3">
<label for="jobType" class="form-label">Job Typ</label>
<select class="form-select" aria-label="Job type selection" id="jobType" @bind="job.TypeId">
<option selected>Auswählen..</option>
@if (types != null)
{
@foreach (JobType type in types)
{
<option value="@type.Id">@type.Name</option>
}
}
</select>
<div id="cronHelp" class="form-text">Der Typ des Jobs.</div>
</div>
<div class="mb-3 form-check">
<input type="checkbox" class="form-check-input" id="enabled" @bind="job.Active">
<label class="form-check-label" for="enabled">Aktiv</label>
</div>
<div class="btn-group mt-3" role="group" aria-label="Basic example">
<a class="btn btn-secondary" href="@GetBackUrl()">
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-arrow-left" viewBox="0 0 16 16">
<path fill-rule="evenodd" d="M15 8a.5.5 0 0 0-.5-.5H2.707l3.147-3.146a.5.5 0 1 0-.708-.708l-4 4a.5.5 0 0 0 0 .708l4 4a.5.5 0 0 0 .708-.708L2.707 8.5H14.5A.5.5 0 0 0 15 8z" />
</svg> Back
</a>
<button type="submit" class="btn btn-primary">
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-save" viewBox="0 0 16 16">
<path d="M2 1a1 1 0 0 0-1 1v12a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1V2a1 1 0 0 0-1-1H9.5a1 1 0 0 0-1 1v7.293l2.646-2.647a.5.5 0 0 1 .708.708l-3.5 3.5a.5.5 0 0 1-.708 0l-3.5-3.5a.5.5 0 1 1 .708-.708L7.5 9.293V2a2 2 0 0 1 2-2H14a2 2 0 0 1 2 2v12a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2V2a2 2 0 0 1 2-2h2.5a.5.5 0 0 1 0 1H2z" />
</svg> Save
</button>
</div>
</EditForm>
}
@code {
[Parameter]
public int JobId { get; set; }
[Parameter]
public EventCallback<EditContext> OnValidSubmit { get; set; }
private JobDefinition? job = new();
private List<JobType>? types;
protected string GetBackUrl()
{
return JobId == Constants.ENTITY_ID_NEW ? "jobs" : $"jobs/{JobId}";
}
protected override async Task OnInitializedAsync()
{
types = await Jobs.GetJobTypes();
if (JobId == Constants.ENTITY_ID_NEW)
{
job = new JobDefinition() { Id = Constants.ENTITY_ID_NEW };
}
else
{
job = await Jobs.GetJob(JobId);
}
}
}

View File

@ -0,0 +1,67 @@
using DigitalData.Modules.Logging;
using ECM.JobRunner.Common.JobRunnerReference;
namespace ECM.JobRunner.Web.Data
{
public class ImportService
{
private readonly Logger logger;
private readonly IEDMIServiceChannel channel;
public ImportService(LoggingService Logging, WcfService Wcf)
{
logger = Logging.LogConfig.GetLogger();
channel = Wcf.Channel;
}
public async Task<List<ImportProfile>> GetProfiles()
{
var resp = await channel.GetJobConfigAsync();
if (resp == null) return new();
if (resp.OK == false) return new();
var profiles = resp.ProfileDefinitions.ImportProfiles.ToList();
return profiles;
}
public async Task<ImportProfile?> GetProfile(int pProfileId)
{
var resp = await channel.GetJobConfigAsync();
if (resp == null) return new();
if (resp.OK == false) return new();
var jobs = resp.JobDefinitions.ToList();
var profiles = resp.ProfileDefinitions.ImportProfiles.ToList();
return profiles.
Where(p => p.Id == pProfileId).
SingleOrDefault();
}
public async Task<bool> CreateProfile(ImportProfile profile) =>
await DoUpdateProfile(profile, UpdateProfileUpdateProfileRequest.UpdateProfileAction.Create);
public async Task<bool> UpdateProfile(ImportProfile profile) =>
await DoUpdateProfile(profile, UpdateProfileUpdateProfileRequest.UpdateProfileAction.Update);
public async Task<bool> DeleteProfile(ImportProfile profile) =>
await DoUpdateProfile(profile, UpdateProfileUpdateProfileRequest.UpdateProfileAction.Delete);
private async Task<bool> DoUpdateProfile(ImportProfile profile, UpdateProfileUpdateProfileRequest.UpdateProfileAction action)
{
var req = new UpdateProfileUpdateProfileRequest()
{
ImportProfile = profile,
Action = action
};
var resp = await channel.UpdateProfileAsync(req);
if (resp == null) return false;
if (resp.OK == false) return false;
return true;
}
}
}

View File

@ -1,13 +1,12 @@
using DigitalData.Modules.Logging;
using ECM.JobRunner.Common.JobRunnerReference;
using System.Threading.Channels;
namespace ECM.JobRunner.Web.Data
{
public class JobService
{
private readonly Logger logger;
private readonly Common.JobRunnerReference.IEDMIServiceChannel channel;
private readonly IEDMIServiceChannel channel;
public JobService(LoggingService Logging, WcfService Wcf)
{
@ -15,48 +14,46 @@ namespace ECM.JobRunner.Web.Data
channel = Wcf.Channel;
}
public async Task<List<Common.JobRunnerReference.JobDefinition>> GetJobs()
public async Task<List<JobDefinition>> GetJobs()
{
var resp = await channel.GetJobConfigAsync();
if (resp != null && resp.OK)
{
return resp.JobDefinitions.ToList();
}
else
{
return new();
}
if (resp == null) return new();
if (resp.OK == false) return new();
return resp.JobDefinitions.ToList();
}
public async Task<List<Common.JobRunnerReference.JobType>> GetJobTypes()
public async Task<List<ObjectType>> GetObjectTypes()
{
var resp = await channel.GetJobConfigAsync();
if (resp != null && resp.OK)
{
return resp.JobTypes.ToList();
}
else
{
return new();
}
if (resp == null) return new();
if (resp.OK == false) return new();
return resp.WindreamObjectTypes.ToList();
}
public async Task<Common.JobRunnerReference.JobDefinition?> GetJob(int pJobId)
public async Task<List<JobType>> GetJobTypes()
{
var resp = await channel.GetJobConfigAsync();
if (resp != null && resp.OK)
{
return resp.JobDefinitions.
if (resp == null) return new();
if (resp.OK == false) return new();
return resp.JobTypes.ToList();
}
public async Task<JobDefinition?> GetJob(int pJobId)
{
var resp = await channel.GetJobConfigAsync();
if (resp == null) return null;
if (resp.OK == false) return null;
return resp.JobDefinitions.
Where(j => j.Id == pJobId).
FirstOrDefault();
}
else
{
return null;
}
}
public async Task<bool> UpdateJob(JobDefinition job)
@ -66,14 +63,10 @@ namespace ECM.JobRunner.Web.Data
Action = UpdateJobUpdateJobRequest.UpdateJobAction.Update
});
if (resp != null && resp.OK)
{
return true;
}
else
{
return false;
}
if (resp == null) return false;
if (resp.OK == false) return false;
return true;
}
public async Task<bool> CreateJob(JobDefinition job)

View File

@ -38,4 +38,8 @@
</Reference>
</ItemGroup>
<ItemGroup>
<Folder Include="Components\Profile\" />
</ItemGroup>
</Project>

View File

@ -0,0 +1,27 @@
@page "/profiles/import/{profileId:int}/edit"
@using ECM.JobRunner.Common.JobRunnerReference;
@using ECM.JobRunner.Web.Data;
@inject NavigationManager Navigation;
@inject ImportService Profile;
<PageTitle>Job bearbeiten</PageTitle>
<h3>Job bearbeiten</h3>
<ProfileForm ProfileId="ProfileId" OnValidSubmit="OnFormSubmit" />
@code {
[Parameter]
public int ProfileId { get; set; }
private async void OnFormSubmit(EditContext ctx)
{
ImportProfile profile = (ImportProfile)ctx.Model;
bool result = await Profile.UpdateProfile(profile);
if (result == true)
{
Navigation.NavigateTo($"/profiles/import/{profile.Id}");
}
}
}

View File

@ -1,16 +1,17 @@
@page "/jobs"
@page "/profiles/import"
@using ECM.JobRunner.Common.JobRunnerReference;
@using ECM.JobRunner.Web.Data;
@inject JobService Jobs
@inject ImportService Import;
<PageTitle>Jobs</PageTitle>
<PageTitle>Import Profiles</PageTitle>
<h3>Jobs</h3>
<h3>Import Profiles</h3>
@if (filteredJobs == null)
@if (filteredProfiles == null)
{
<ul class="list-group">
<li class="list-group-item">Loading Jobs..</li>
<li class="list-group-item">Loading Profiles..</li>
</ul>
}
else
@ -20,7 +21,7 @@ else
</section>
<div class="list-group">
@if (filteredJobs.Count() == 0)
@if (filteredProfiles.Count() == 0)
{
<a class="list-group-item d-flex justify-content-between align-items-start">
<div class="ms-2 me-auto">
@ -30,13 +31,13 @@ else
</a>
}
@foreach (var job in filteredJobs)
@foreach (var profile in filteredProfiles)
{
<a class="list-group-item list-group-item-action d-flex justify-content-between align-items-start" href="/jobs/@job.Id">
<a href="/profiles/import/@profile.Id" class="list-group-item list-group-item-action d-flex justify-content-between align-items-start">
<div class="ms-2 me-auto">
<div class="fw-bold">
<span>
@if (job.Active)
@if (profile.Active)
{
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-play-circle text-success" viewBox="0 0 16 16">
<path d="M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14zm0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16z" />
@ -51,12 +52,12 @@ else
</svg>
}
</span>
<span>@job.Name</span>
<span>@profile.Job.Name</span>
</div>
@job.Type.Name
@profile.Job.Name
</div>
@if (job.Active)
@if (profile.Active)
{
<span class="badge bg-success rounded-pill">Running</span>
}
@ -70,7 +71,7 @@ else
</div>
<div class="btn-group mt-3" role="group" aria-label="Basic example">
<a class="btn btn-primary" href="jobs/new">
<a class="btn btn-primary" href="profiles/import/new">
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-plus-circle" viewBox="0 0 16 16">
<path d="M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14zm0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16z" />
<path d="M8 4a.5.5 0 0 1 .5.5v3h3a.5.5 0 0 1 0 1h-3v3a.5.5 0 0 1-1 0v-3h-3a.5.5 0 0 1 0-1h3v-3A.5.5 0 0 1 8 4z" />
@ -80,8 +81,8 @@ else
}
@code {
private IEnumerable<JobDefinition>? jobs;
private IEnumerable<JobDefinition>? filteredJobs;
private List<ImportProfile>? profiles;
private List<ImportProfile>? filteredProfiles;
private string filterQuery = "";
private string FilterQuery {
@ -94,21 +95,23 @@ else
protected async override void OnInitialized()
{
jobs = await Jobs.GetJobs();
filteredJobs = jobs;
profiles = await Import.GetProfiles();
filteredProfiles = profiles;
StateHasChanged();
}
protected void OnFilterChanged()
{
if (jobs != null)
if (profiles != null)
{
filteredJobs = jobs.Where(j => j.Name.Contains(FilterQuery, StringComparison.OrdinalIgnoreCase));
filteredProfiles = profiles.
Where(j => j.Job.Name.Contains(FilterQuery, StringComparison.OrdinalIgnoreCase)).
ToList();
} else
{
filteredJobs = null;
filteredProfiles = null;
}
}

View File

@ -1,24 +1,23 @@
@page "/jobs/new"
@page "/profiles/import/new"
@using ECM.JobRunner.Common.JobRunnerReference;
@using ECM.JobRunner.Web.Data;
@using ECM.JobRunner.Web.Components.Job;
@inject NavigationManager Navigation;
@inject JobService Jobs;
@inject ImportService Import;
<PageTitle>Job erstellen</PageTitle>
<h3>Job erstellen</h3>
<JobForm JobId="JobId" OnValidSubmit="OnFormSubmit" />
<ProfileForm JobId="JobId" OnValidSubmit="OnFormSubmit" />
@code {
public int JobId = -1;
private async void OnFormSubmit(EditContext ctx)
{
JobDefinition job = (JobDefinition)ctx.Model;
ImportProfile profile = (ImportProfile)ctx.Model;
bool result = await Jobs.CreateJob(job);
bool result = await Import.CreateProfile(profile);
if (result == true)
{

View File

@ -0,0 +1,214 @@
@using ECM.JobRunner.Common.JobRunnerReference;
@using ECM.JobRunner.Web.Data;
@inject ImportService Import;
@inject JobService Jobs;
@if (profile == null)
{
<p>Form loading..</p>
}
else
{
<EditForm Model="profile" OnValidSubmit="OnValidSubmit">
<DataAnnotationsValidator />
<ValidationSummary />
<div class="row row-cols-1 row-cols-lg-2">
<div class="col">
<div class="mb-3 form-check">
<input type="checkbox" class="form-check-input" id="enabled" @bind="profile.Active">
<label class="form-check-label" for="enabled">Aktiv</label>
</div>
</div>
<div class="col">
<div class="mb-3 form-check">
<input class="form-check-input" type="checkbox" id="flexCheckDefault" @bind="profile.DeleteFiles">
<label class="form-check-label" for="flexCheckDefault">
Originaldateien nach Verarbeitung löschen
</label>
</div>
<div class="mb-3 form-check">
<input class="form-check-input" type="checkbox" id="flexCheckChecked" @bind="profile.IncludeSubfolders">
<label class="form-check-label" for="flexCheckChecked">
Unterstruktur des Quellverzeichnisses im Zielverzeichnis abbilden
</label>
</div>
</div>
</div>
<div class="row row-cols-1 row-cols-lg-2">
<div class="col">
<div class="mb-3">
<label for="name" class="form-label">
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-card-text" viewBox="0 0 16 16">
<path d="M14.5 3a.5.5 0 0 1 .5.5v9a.5.5 0 0 1-.5.5h-13a.5.5 0 0 1-.5-.5v-9a.5.5 0 0 1 .5-.5h13zm-13-1A1.5 1.5 0 0 0 0 3.5v9A1.5 1.5 0 0 0 1.5 14h13a1.5 1.5 0 0 0 1.5-1.5v-9A1.5 1.5 0 0 0 14.5 2h-13z" />
<path d="M3 5.5a.5.5 0 0 1 .5-.5h9a.5.5 0 0 1 0 1h-9a.5.5 0 0 1-.5-.5zM3 8a.5.5 0 0 1 .5-.5h9a.5.5 0 0 1 0 1h-9A.5.5 0 0 1 3 8zm0 2.5a.5.5 0 0 1 .5-.5h6a.5.5 0 0 1 0 1h-6a.5.5 0 0 1-.5-.5z" />
</svg> Name
</label>
<input type="text" class="form-control" id="name" aria-describedby="nameHelp" @bind="profile.Job.Name">
<div id="nameHelp" class="form-text">Der Name des Jobs. Wird in der Übersicht angezeigt.</div>
</div>
<div class="mb-3">
<label for="jobType" class="form-label">
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-box-seam" viewBox="0 0 16 16">
<path d="M8.186 1.113a.5.5 0 0 0-.372 0L1.846 3.5l2.404.961L10.404 2l-2.218-.887zm3.564 1.426L5.596 5 8 5.961 14.154 3.5l-2.404-.961zm3.25 1.7-6.5 2.6v7.922l6.5-2.6V4.24zM7.5 14.762V6.838L1 4.239v7.923l6.5 2.6zM7.443.184a1.5 1.5 0 0 1 1.114 0l7.129 2.852A.5.5 0 0 1 16 3.5v8.662a1 1 0 0 1-.629.928l-7.185 2.874a.5.5 0 0 1-.372 0L.63 13.09a1 1 0 0 1-.63-.928V3.5a.5.5 0 0 1 .314-.464L7.443.184z" />
</svg> Objekttyp
</label>
<select class="form-select" aria-label="Job type selection" id="jobType" @bind="profile.ObjectTypeName">
<option selected>Auswählen..</option>
@if (objectTypes != null)
{
@foreach (ObjectType type in objectTypes)
{
<option value="@type.Name">@type.Name</option>
}
}
</select>
<div id="cronHelp" class="form-text">Der Windream Objekttyp, dem das Profil zugeordnet wird. Bestimmt u.a., welche Indexe zur Verfügung stehen.</div>
</div>
@*<div class="mb-3">
<label for="jobType" class="form-label">
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-robot" viewBox="0 0 16 16">
<path d="M6 12.5a.5.5 0 0 1 .5-.5h3a.5.5 0 0 1 0 1h-3a.5.5 0 0 1-.5-.5ZM3 8.062C3 6.76 4.235 5.765 5.53 5.886a26.58 26.58 0 0 0 4.94 0C11.765 5.765 13 6.76 13 8.062v1.157a.933.933 0 0 1-.765.935c-.845.147-2.34.346-4.235.346-1.895 0-3.39-.2-4.235-.346A.933.933 0 0 1 3 9.219V8.062Zm4.542-.827a.25.25 0 0 0-.217.068l-.92.9a24.767 24.767 0 0 1-1.871-.183.25.25 0 0 0-.068.495c.55.076 1.232.149 2.02.193a.25.25 0 0 0 .189-.071l.754-.736.847 1.71a.25.25 0 0 0 .404.062l.932-.97a25.286 25.286 0 0 0 1.922-.188.25.25 0 0 0-.068-.495c-.538.074-1.207.145-1.98.189a.25.25 0 0 0-.166.076l-.754.785-.842-1.7a.25.25 0 0 0-.182-.135Z" />
<path d="M8.5 1.866a1 1 0 1 0-1 0V3h-2A4.5 4.5 0 0 0 1 7.5V8a1 1 0 0 0-1 1v2a1 1 0 0 0 1 1v1a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2v-1a1 1 0 0 0 1-1V9a1 1 0 0 0-1-1v-.5A4.5 4.5 0 0 0 10.5 3h-2V1.866ZM14 7.5V13a1 1 0 0 1-1 1H3a1 1 0 0 1-1-1V7.5A3.5 3.5 0 0 1 5.5 4h5A3.5 3.5 0 0 1 14 7.5Z" />
</svg> Job Typ
</label>
<select class="form-select" aria-label="Job type selection" id="jobType" @bind="profile.Job.TypeId">
<option selected>Auswählen..</option>
@if (jobTypes != null)
{
@foreach (JobType type in jobTypes)
{
<option value="@type.Id">@type.Name</option>
}
}
</select>
<div id="cronHelp" class="form-text">Der Typ des Jobs.</div>
</div>*@
<div class="mb-3">
<label for="sourceFolder" class="form-label">
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-box-arrow-right" viewBox="0 0 16 16">
<path fill-rule="evenodd" d="M10 12.5a.5.5 0 0 1-.5.5h-8a.5.5 0 0 1-.5-.5v-9a.5.5 0 0 1 .5-.5h8a.5.5 0 0 1 .5.5v2a.5.5 0 0 0 1 0v-2A1.5 1.5 0 0 0 9.5 2h-8A1.5 1.5 0 0 0 0 3.5v9A1.5 1.5 0 0 0 1.5 14h8a1.5 1.5 0 0 0 1.5-1.5v-2a.5.5 0 0 0-1 0v2z" />
<path fill-rule="evenodd" d="M15.854 8.354a.5.5 0 0 0 0-.708l-3-3a.5.5 0 0 0-.708.708L14.293 7.5H5.5a.5.5 0 0 0 0 1h8.793l-2.147 2.146a.5.5 0 0 0 .708.708l3-3z" />
</svg> Quellverzeichnis
</label>
<input type="text" class="form-control" id="sourceFolder" aria-describedby="sourceFolderHelp" @bind="profile.SourceFolder" />
<div id="sourceFolderHelp" class="form-text">Lokales Verzeichnis, aus dem Dateien zur Verarbeitung gelesen werden.</div>
</div>
<div class="mb-3">
<label for="targetFolder" class="form-label">
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-box-arrow-in-right" viewBox="0 0 16 16">
<path fill-rule="evenodd" d="M6 3.5a.5.5 0 0 1 .5-.5h8a.5.5 0 0 1 .5.5v9a.5.5 0 0 1-.5.5h-8a.5.5 0 0 1-.5-.5v-2a.5.5 0 0 0-1 0v2A1.5 1.5 0 0 0 6.5 14h8a1.5 1.5 0 0 0 1.5-1.5v-9A1.5 1.5 0 0 0 14.5 2h-8A1.5 1.5 0 0 0 5 3.5v2a.5.5 0 0 0 1 0v-2z" />
<path fill-rule="evenodd" d="M11.854 8.354a.5.5 0 0 0 0-.708l-3-3a.5.5 0 1 0-.708.708L10.293 7.5H1.5a.5.5 0 0 0 0 1h8.793l-2.147 2.146a.5.5 0 0 0 .708.708l3-3z" />
</svg> Zielverzeichnis
</label>
<input type="text" class="form-control" id="targetFolder" aria-describedby="targetFolderHelp" @bind="profile.TargetFolder" />
<div id="targetFolderHelp" class="form-text">Windream Verzeichnis, in das die verarbeiteten Dateien geschrieben werden.</div>
</div>
</div>
<div class="col">
<div class="mb-3">
<label for="cronExpression" class="form-label">
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-alarm" viewBox="0 0 16 16">
<path d="M8.5 5.5a.5.5 0 0 0-1 0v3.362l-1.429 2.38a.5.5 0 1 0 .858.515l1.5-2.5A.5.5 0 0 0 8.5 9V5.5z" />
<path d="M6.5 0a.5.5 0 0 0 0 1H7v1.07a7.001 7.001 0 0 0-3.273 12.474l-.602.602a.5.5 0 0 0 .707.708l.746-.746A6.97 6.97 0 0 0 8 16a6.97 6.97 0 0 0 3.422-.892l.746.746a.5.5 0 0 0 .707-.708l-.601-.602A7.001 7.001 0 0 0 9 2.07V1h.5a.5.5 0 0 0 0-1h-3zm1.038 3.018a6.093 6.093 0 0 1 .924 0 6 6 0 1 1-.924 0zM0 3.5c0 .753.333 1.429.86 1.887A8.035 8.035 0 0 1 4.387 1.86 2.5 2.5 0 0 0 0 3.5zM13.5 1c-.753 0-1.429.333-1.887.86a8.035 8.035 0 0 1 3.527 3.527A2.5 2.5 0 0 0 13.5 1z" />
</svg> Cron Expression
</label>
<input type="text" class="form-control" id="cronExpression" @bind="profile.Job.CronSchedule" aria-describedby="cronHelp">
<div id="cronHelp" class="form-text">Die Zeitplan des Jobs. Erwartet eine <a href="https://www.quartz-scheduler.net/documentation/quartz-3.x/how-tos/crontrigger.html#examples" target="_blank">Quartz.NET Cron Expression.</a></div>
</div>
<div class="mb-3">
<label for="backupFolder" class="form-label">
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-life-preserver" viewBox="0 0 16 16">
<path d="M8 16A8 8 0 1 0 8 0a8 8 0 0 0 0 16zm6.43-5.228a7.025 7.025 0 0 1-3.658 3.658l-1.115-2.788a4.015 4.015 0 0 0 1.985-1.985l2.788 1.115zM5.228 14.43a7.025 7.025 0 0 1-3.658-3.658l2.788-1.115a4.015 4.015 0 0 0 1.985 1.985L5.228 14.43zm9.202-9.202-2.788 1.115a4.015 4.015 0 0 0-1.985-1.985l1.115-2.788a7.025 7.025 0 0 1 3.658 3.658zm-8.087-.87a4.015 4.015 0 0 0-1.985 1.985L1.57 5.228A7.025 7.025 0 0 1 5.228 1.57l1.115 2.788zM8 11a3 3 0 1 1 0-6 3 3 0 0 1 0 6z" />
</svg> Sicherungsverzeichnis
</label>
<input type="text" class="form-control" id="backupFolder" aria-describedby="backupFolderHelp" @bind="profile.BackupFolder" />
<div id="backupFolderHelp" class="form-text">Lokales Verzeichnis, in das die zu verarbeiteten Dateien als Sicherheitskopie geschrieben werden.</div>
</div>
<div class="mb-3">
<label for="jobType" class="form-label">
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-folder" viewBox="0 0 16 16">
<path d="M.54 3.87.5 3a2 2 0 0 1 2-2h3.672a2 2 0 0 1 1.414.586l.828.828A2 2 0 0 0 9.828 3h3.982a2 2 0 0 1 1.992 2.181l-.637 7A2 2 0 0 1 13.174 14H2.826a2 2 0 0 1-1.991-1.819l-.637-7a1.99 1.99 0 0 1 .342-1.31zM2.19 4a1 1 0 0 0-.996 1.09l.637 7a1 1 0 0 0 .995.91h10.348a1 1 0 0 0 .995-.91l.637-7A1 1 0 0 0 13.81 4H2.19zm4.69-1.707A1 1 0 0 0 6.172 2H2.5a1 1 0 0 0-1 .981l.006.139C1.72 3.042 1.95 3 2.19 3h5.396l-.707-.707z" />
</svg> Unterordner nach Datum
</label>
<select class="form-select" aria-label="Job type selection" id="jobType" @bind="profile.SubfolderDateFormat">
<option selected value="">Keine Unterordner</option>
<option value="YYYY">YYYY (@DateTime.Now.ToString("yyyy"))</option>
<option value="YYYY-MM">YYYY-MM (@DateTime.Now.ToString("yyyy-MM"))</option>
<option value="YYYY-MM-DD">YYYY-MM-DD (@DateTime.Now.ToString("yyyy-MM-dd"))</option>
</select>
<div id="cronHelp" class="form-text">Der Windream Objekttyp, dem das Profil zugeordnet wird. Bestimmt u.a., welche Indexe zur Verfügung stehen.</div>
</div>
<div class="mb-3">
<label for="exclusionRegex" class="form-label">
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-regex" viewBox="0 0 16 16">
<path fill-rule="evenodd" d="M3.05 3.05a7 7 0 0 0 0 9.9.5.5 0 0 1-.707.707 8 8 0 0 1 0-11.314.5.5 0 1 1 .707.707Zm9.9-.707a.5.5 0 0 1 .707 0 8 8 0 0 1 0 11.314.5.5 0 0 1-.707-.707 7 7 0 0 0 0-9.9.5.5 0 0 1 0-.707ZM6 11a1 1 0 1 1-2 0 1 1 0 0 1 2 0Zm5-6.5a.5.5 0 0 0-1 0v2.117L8.257 5.57a.5.5 0 0 0-.514.858L9.528 7.5 7.743 8.571a.5.5 0 1 0 .514.858L10 8.383V10.5a.5.5 0 1 0 1 0V8.383l1.743 1.046a.5.5 0 0 0 .514-.858L11.472 7.5l1.785-1.071a.5.5 0 1 0-.514-.858L11 6.617V4.5Z" />
</svg> Ausschlussregex
</label>
<textarea type="text" class="form-control" id="exclusionRegex" aria-describedby="exclusionRegexHelp" rows="3" @bind="profile.FileExcludeRegex" />
<div id="exclusionRegexHelp" class="form-text">Liste von Regular Expressions. Wird ein Match im Dateinamen gefunden, wird die Datei <strong>nicht</strong> verarbeitet. <a href="https://regexr.com/" target="_blank">Regular Expression Editor</a></div>
</div>
</div>
</div>
<div class="btn-group mt-3" role="group" aria-label="Basic example">
<a class="btn btn-secondary" href="@GetBackUrl()">
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-arrow-left" viewBox="0 0 16 16">
<path fill-rule="evenodd" d="M15 8a.5.5 0 0 0-.5-.5H2.707l3.147-3.146a.5.5 0 1 0-.708-.708l-4 4a.5.5 0 0 0 0 .708l4 4a.5.5 0 0 0 .708-.708L2.707 8.5H14.5A.5.5 0 0 0 15 8z" />
</svg> Back
</a>
<button type="submit" class="btn btn-primary">
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-save" viewBox="0 0 16 16">
<path d="M2 1a1 1 0 0 0-1 1v12a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1V2a1 1 0 0 0-1-1H9.5a1 1 0 0 0-1 1v7.293l2.646-2.647a.5.5 0 0 1 .708.708l-3.5 3.5a.5.5 0 0 1-.708 0l-3.5-3.5a.5.5 0 1 1 .708-.708L7.5 9.293V2a2 2 0 0 1 2-2H14a2 2 0 0 1 2 2v12a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2V2a2 2 0 0 1 2-2h2.5a.5.5 0 0 1 0 1H2z" />
</svg> Save
</button>
</div>
</EditForm>
}
@code {
[Parameter]
public int ProfileId { get; set; }
[Parameter]
public EventCallback<EditContext> OnValidSubmit { get; set; }
private ImportProfile? profile;
private List<JobType>? jobTypes;
private List<ObjectType>? objectTypes;
protected string GetBackUrl()
{
return ProfileId == Constants.ENTITY_ID_NEW ? "profiles/import" : $"profiles/import/{ProfileId}";
}
protected override async Task OnInitializedAsync()
{
jobTypes = await Jobs.GetJobTypes();
objectTypes = await Jobs.GetObjectTypes();
if (ProfileId == Constants.ENTITY_ID_NEW)
{
profile = new ImportProfile() { Id = Constants.ENTITY_ID_NEW };
}
else
{
profile = await Import.GetProfile(ProfileId);
}
}
}

View File

@ -1,16 +1,15 @@
@page "/jobs/{jobId:int}"
@page "/profiles/import/{profileId:int}"
@using ECM.JobRunner.Common.JobRunnerReference;
@using ECM.JobRunner.Web.Data;
@inject NavigationManager Navigation;
@inject IJSRuntime JsRuntime
@inject JobService Jobs
@inject IJSRuntime JsRuntime;
@inject JobService Jobs;
@inject ImportService Import;
<PageTitle>Job</PageTitle>
<PageTitle>Profile</PageTitle>
@if (job == null)
@if (profile == null)
{
<h3>Job</h3>
@ -20,40 +19,45 @@
}
else
{
<h3>@job.Name</h3>
<h3>
@if (profile.Active)
{
<svg xmlns="http://www.w3.org/2000/svg" fill="currentColor" class="bi bi-play-circle text-success me-1" viewBox="0 0 16 16">
<path d="M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14zm0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16z" />
<path d="M6.271 5.055a.5.5 0 0 1 .52.038l3.5 2.5a.5.5 0 0 1 0 .814l-3.5 2.5A.5.5 0 0 1 6 10.5v-5a.5.5 0 0 1 .271-.445z" />
</svg>
}
else
{
<svg xmlns="http://www.w3.org/2000/svg" fill="currentColor" class="bi bi-stop-circle text-danger me-1" viewBox="0 0 16 16">
<path d="M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14zm0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16z" />
<path d="M5 6.5A1.5 1.5 0 0 1 6.5 5h3A1.5 1.5 0 0 1 11 6.5v3A1.5 1.5 0 0 1 9.5 11h-3A1.5 1.5 0 0 1 5 9.5v-3z" />
</svg>
}
@profile.Job.Name
</h3>
<ul class="list-group">
<ul class="list-group mb-3">
<li class="list-group-item d-flex justify-content-between align-items-start">
<div class="ms-2 me-auto">
<div class="fw-bold">
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-info-square" viewBox="0 0 16 16">
<path d="M14 1a1 1 0 0 1 1 1v12a1 1 0 0 1-1 1H2a1 1 0 0 1-1-1V2a1 1 0 0 1 1-1h12zM2 0a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V2a2 2 0 0 0-2-2H2z" />
<path d="m8.93 6.588-2.29.287-.082.38.45.083c.294.07.352.176.288.469l-.738 3.468c-.194.897.105 1.319.808 1.319.545 0 1.178-.252 1.465-.598l.088-.416c-.2.176-.492.246-.686.246-.275 0-.375-.193-.304-.533L8.93 6.588zM9 4.5a1 1 0 1 1-2 0 1 1 0 0 1 2 0z" />
</svg> Active
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-box-arrow-right" viewBox="0 0 16 16">
<path fill-rule="evenodd" d="M10 12.5a.5.5 0 0 1-.5.5h-8a.5.5 0 0 1-.5-.5v-9a.5.5 0 0 1 .5-.5h8a.5.5 0 0 1 .5.5v2a.5.5 0 0 0 1 0v-2A1.5 1.5 0 0 0 9.5 2h-8A1.5 1.5 0 0 0 0 3.5v9A1.5 1.5 0 0 0 1.5 14h8a1.5 1.5 0 0 0 1.5-1.5v-2a.5.5 0 0 0-1 0v2z" />
<path fill-rule="evenodd" d="M15.854 8.354a.5.5 0 0 0 0-.708l-3-3a.5.5 0 0 0-.708.708L14.293 7.5H5.5a.5.5 0 0 0 0 1h8.793l-2.147 2.146a.5.5 0 0 0 .708.708l3-3z" />
</svg> Quellverzeichnis
</div>
@job.Active
@profile.SourceFolder
</div>
</li>
<li class="list-group-item d-flex justify-content-between align-items-start">
<div class="ms-2 me-auto">
<div class="fw-bold">
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-info-square" viewBox="0 0 16 16">
<path d="M14 1a1 1 0 0 1 1 1v12a1 1 0 0 1-1 1H2a1 1 0 0 1-1-1V2a1 1 0 0 1 1-1h12zM2 0a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V2a2 2 0 0 0-2-2H2z" />
<path d="m8.93 6.588-2.29.287-.082.38.45.083c.294.07.352.176.288.469l-.738 3.468c-.194.897.105 1.319.808 1.319.545 0 1.178-.252 1.465-.598l.088-.416c-.2.176-.492.246-.686.246-.275 0-.375-.193-.304-.533L8.93 6.588zM9 4.5a1 1 0 1 1-2 0 1 1 0 0 1 2 0z" />
</svg> Type
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-box-arrow-in-right" viewBox="0 0 16 16">
<path fill-rule="evenodd" d="M6 3.5a.5.5 0 0 1 .5-.5h8a.5.5 0 0 1 .5.5v9a.5.5 0 0 1-.5.5h-8a.5.5 0 0 1-.5-.5v-2a.5.5 0 0 0-1 0v2A1.5 1.5 0 0 0 6.5 14h8a1.5 1.5 0 0 0 1.5-1.5v-9A1.5 1.5 0 0 0 14.5 2h-8A1.5 1.5 0 0 0 5 3.5v2a.5.5 0 0 0 1 0v-2z" />
<path fill-rule="evenodd" d="M11.854 8.354a.5.5 0 0 0 0-.708l-3-3a.5.5 0 1 0-.708.708L10.293 7.5H1.5a.5.5 0 0 0 0 1h8.793l-2.147 2.146a.5.5 0 0 0 .708.708l3-3z" />
</svg> Zielverzeichnis
</div>
@job.Type.Name
</div>
</li>
<li class="list-group-item d-flex justify-content-between align-items-start">
<div class="ms-2 me-auto">
<div class="fw-bold">
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-alarm" viewBox="0 0 16 16">
<path d="M8.5 5.5a.5.5 0 0 0-1 0v3.362l-1.429 2.38a.5.5 0 1 0 .858.515l1.5-2.5A.5.5 0 0 0 8.5 9V5.5z" />
<path d="M6.5 0a.5.5 0 0 0 0 1H7v1.07a7.001 7.001 0 0 0-3.273 12.474l-.602.602a.5.5 0 0 0 .707.708l.746-.746A6.97 6.97 0 0 0 8 16a6.97 6.97 0 0 0 3.422-.892l.746.746a.5.5 0 0 0 .707-.708l-.601-.602A7.001 7.001 0 0 0 9 2.07V1h.5a.5.5 0 0 0 0-1h-3zm1.038 3.018a6.093 6.093 0 0 1 .924 0 6 6 0 1 1-.924 0zM0 3.5c0 .753.333 1.429.86 1.887A8.035 8.035 0 0 1 4.387 1.86 2.5 2.5 0 0 0 0 3.5zM13.5 1c-.753 0-1.429.333-1.887.86a8.035 8.035 0 0 1 3.527 3.527A2.5 2.5 0 0 0 13.5 1z" />
</svg> Cron Schedule
</div>
@job.CronSchedule
@profile.TargetFolder
</div>
</li>
<li class="list-group-item d-flex justify-content-between align-items-start">
@ -61,20 +65,24 @@ else
<div class="fw-bold">
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-hourglass" viewBox="0 0 16 16">
<path d="M2 1.5a.5.5 0 0 1 .5-.5h11a.5.5 0 0 1 0 1h-1v1a4.5 4.5 0 0 1-2.557 4.06c-.29.139-.443.377-.443.59v.7c0 .213.154.451.443.59A4.5 4.5 0 0 1 12.5 13v1h1a.5.5 0 0 1 0 1h-11a.5.5 0 1 1 0-1h1v-1a4.5 4.5 0 0 1 2.557-4.06c.29-.139.443-.377.443-.59v-.7c0-.213-.154-.451-.443-.59A4.5 4.5 0 0 1 3.5 3V2h-1a.5.5 0 0 1-.5-.5zm2.5.5v1a3.5 3.5 0 0 0 1.989 3.158c.533.256 1.011.791 1.011 1.491v.702c0 .7-.478 1.235-1.011 1.491A3.5 3.5 0 0 0 4.5 13v1h7v-1a3.5 3.5 0 0 0-1.989-3.158C8.978 9.586 8.5 9.052 8.5 8.351v-.702c0-.7.478-1.235 1.011-1.491A3.5 3.5 0 0 0 11.5 3V2h-7z" />
</svg> Next Run at
</svg> Nächste Ausführung
</div>
@nextExecution
</div>
</li>
</ul>
<h3>Verarbeitungsschritte</h3>
<ECM.JobRunner.Web.Pages.ImportStep.List Profile="profile" />
<div class="btn-group mt-3" role="group" aria-label="Basic example">
<a class="btn btn-secondary" href="jobs">
<a class="btn btn-secondary" href="profiles/import">
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-arrow-left" viewBox="0 0 16 16">
<path fill-rule="evenodd" d="M15 8a.5.5 0 0 0-.5-.5H2.707l3.147-3.146a.5.5 0 1 0-.708-.708l-4 4a.5.5 0 0 0 0 .708l4 4a.5.5 0 0 0 .708-.708L2.707 8.5H14.5A.5.5 0 0 0 15 8z" />
</svg> Back
</a>
<a class="btn btn-primary" href="jobs/@job.Id/edit">
<a class="btn btn-primary" href="profiles/import/@profile.Id/edit">
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-pencil-square" viewBox="0 0 16 16">
<path d="M15.502 1.94a.5.5 0 0 1 0 .706L14.459 3.69l-2-2L13.502.646a.5.5 0 0 1 .707 0l1.293 1.293zm-1.75 2.456-2-2L4.939 9.21a.5.5 0 0 0-.121.196l-.805 2.414a.25.25 0 0 0 .316.316l2.414-.805a.5.5 0 0 0 .196-.12l6.813-6.814z" />
<path fill-rule="evenodd" d="M1 13.5A1.5 1.5 0 0 0 2.5 15h11a1.5 1.5 0 0 0 1.5-1.5v-6a.5.5 0 0 0-1 0v6a.5.5 0 0 1-.5.5h-11a.5.5 0 0 1-.5-.5v-11a.5.5 0 0 1 .5-.5H9a.5.5 0 0 0 0-1H2.5A1.5 1.5 0 0 0 1 2.5v11z" />
@ -90,36 +98,36 @@ else
@code {
[Parameter]
public int JobId { get; set; }
public int ProfileId { get; set; }
private JobDefinition? job;
private ImportProfile? profile;
private DateTime nextExecution;
protected async override void OnInitialized()
{
job = await Jobs.GetJob(JobId);
profile = await Import.GetProfile(ProfileId);
if (job != null)
{
nextExecution = Jobs.GetNextExecutionTime(job.CronSchedule);
if (profile != null)
{
nextExecution = Jobs.GetNextExecutionTime(profile.Job.CronSchedule);
StateHasChanged();
}
}
protected async void DeleteJob()
{
if (job != null)
if (profile != null)
{
bool confirmed = await JsRuntime.InvokeAsync<bool>("confirm", "Are you sure?");
if (confirmed)
{
if (await Jobs.DeleteJob(job) == true)
{
Navigation.NavigateTo($"/jobs");
};
}
//if (await Jobs.DeleteJob(profile) == true)
//{
// Navigation.NavigateTo($"/jobs");
//};
}
}
}
}

View File

@ -0,0 +1,58 @@
@using ECM.JobRunner.Common.JobRunnerReference;
@using ECM.JobRunner.Web.Data;
@inject JobService Jobs
@inject ImportService Import;
@if (Profile == null)
{
<ul class="list-group">
<li class="list-group-item">Loading Steps..</li>
</ul>
}
else
{
<div class="list-group">
@if (Profile.Steps.Count() == 0)
{
<a class="list-group-item d-flex justify-content-between align-items-start">
<div class="ms-2 me-auto">
No Jobs found.
</div>
</a>
}
@foreach (var step in Profile.Steps)
{
<a href="#" class="list-group-item list-group-item-action d-flex justify-content-between align-items-start">
<div class="ms-2 me-auto">
<div class="fw-bold">
<span>
@if (step.Active)
{
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-play-circle text-success" viewBox="0 0 16 16">
<path d="M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14zm0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16z" />
<path d="M6.271 5.055a.5.5 0 0 1 .52.038l3.5 2.5a.5.5 0 0 1 0 .814l-3.5 2.5A.5.5 0 0 1 6 10.5v-5a.5.5 0 0 1 .271-.445z" />
</svg>
}
else
{
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-stop-circle text-danger" viewBox="0 0 16 16">
<path d="M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14zm0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16z" />
<path d="M5 6.5A1.5 1.5 0 0 1 6.5 5h3A1.5 1.5 0 0 1 11 6.5v3A1.5 1.5 0 0 1 9.5 11h-3A1.5 1.5 0 0 1 5 9.5v-3z" />
</svg>
}
</span>
<span>@step.IndexName</span>
</div>
@step.Method
</div>
</a>
}
</div>
}
@code {
[Parameter]
public ImportProfile? Profile { get; set; }
}

View File

@ -1,28 +0,0 @@
@page "/jobs/{jobId:int}/edit"
@using ECM.JobRunner.Common.JobRunnerReference;
@using ECM.JobRunner.Web.Data;
@using ECM.JobRunner.Web.Components.Job;
@inject NavigationManager Navigation;
@inject JobService Jobs;
<PageTitle>Job bearbeiten</PageTitle>
<h3>Job bearbeiten</h3>
<JobForm JobId="JobId" OnValidSubmit="OnFormSubmit" />
@code {
[Parameter]
public int JobId { get; set; }
private async void OnFormSubmit(EditContext ctx)
{
JobDefinition job = (JobDefinition)ctx.Model;
bool result = await Jobs.UpdateJob(job);
if (result == true)
{
Navigation.NavigateTo($"/jobs/{job.Id}");
}
}
}

View File

@ -0,0 +1,28 @@
@page "/profiles"
<PageTitle>Profile</PageTitle>
<h3>Profile</h3>
<div class="list-group">
<a href="profiles/import" class="list-group-item list-group-item-action d-flex justify-content-between align-items-start">
<div class="ms-2 me-auto">
<div class="fw-bold">
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-box-arrow-right" viewBox="0 0 16 16">
<path fill-rule="evenodd" d="M10 12.5a.5.5 0 0 1-.5.5h-8a.5.5 0 0 1-.5-.5v-9a.5.5 0 0 1 .5-.5h8a.5.5 0 0 1 .5.5v2a.5.5 0 0 0 1 0v-2A1.5 1.5 0 0 0 9.5 2h-8A1.5 1.5 0 0 0 0 3.5v9A1.5 1.5 0 0 0 1.5 14h8a1.5 1.5 0 0 0 1.5-1.5v-2a.5.5 0 0 0-1 0v2z" />
<path fill-rule="evenodd" d="M15.854 8.354a.5.5 0 0 0 0-.708l-3-3a.5.5 0 0 0-.708.708L14.293 7.5H5.5a.5.5 0 0 0 0 1h8.793l-2.147 2.146a.5.5 0 0 0 .708.708l3-3z" />
</svg> Import Profile
</div>
</div>
</a>
<a href="profiles" class="list-group-item list-group-item-action d-flex justify-content-between align-items-start text-muted">
<div class="ms-2 me-auto">
<div class="fw-bold">
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-pencil-square" viewBox="0 0 16 16">
<path d="M15.502 1.94a.5.5 0 0 1 0 .706L14.459 3.69l-2-2L13.502.646a.5.5 0 0 1 .707 0l1.293 1.293zm-1.75 2.456-2-2L4.939 9.21a.5.5 0 0 0-.121.196l-.805 2.414a.25.25 0 0 0 .316.316l2.414-.805a.5.5 0 0 0 .196-.12l6.813-6.814z" />
<path fill-rule="evenodd" d="M1 13.5A1.5 1.5 0 0 0 2.5 15h11a1.5 1.5 0 0 0 1.5-1.5v-6a.5.5 0 0 0-1 0v6a.5.5 0 0 1-.5.5h-11a.5.5 0 0 1-.5-.5v-11a.5.5 0 0 1 .5-.5H9a.5.5 0 0 0 0-1H2.5A1.5 1.5 0 0 0 1 2.5v11z" />
</svg> Nachindexierungs Profile
</div>
</div>
</a>
</div>

View File

@ -13,6 +13,7 @@ builder.Services.AddTransient<DatabaseService>();
builder.Services.AddSingleton<WcfService>();
builder.Services.AddTransient<DashboardService>();
builder.Services.AddTransient<JobService>();
builder.Services.AddTransient<ImportService>();
var app = builder.Build();

View File

@ -13,15 +13,16 @@
<NavLink class="nav-link" href="" Match="NavLinkMatch.All">
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-house" viewBox="0 0 16 16">
<path d="M8.707 1.5a1 1 0 0 0-1.414 0L.646 8.146a.5.5 0 0 0 .708.708L2 8.207V13.5A1.5 1.5 0 0 0 3.5 15h9a1.5 1.5 0 0 0 1.5-1.5V8.207l.646.647a.5.5 0 0 0 .708-.708L13 5.793V2.5a.5.5 0 0 0-.5-.5h-1a.5.5 0 0 0-.5.5v1.293L8.707 1.5ZM13 7.207V13.5a.5.5 0 0 1-.5.5h-9a.5.5 0 0 1-.5-.5V7.207l5-5 5 5Z" />
</svg> Home
</svg> Start
</NavLink>
</div>
<div class="nav-item px-3">
<NavLink class="nav-link" href="jobs">
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-calendar-week" viewBox="0 0 16 16">
<path d="M11 6.5a.5.5 0 0 1 .5-.5h1a.5.5 0 0 1 .5.5v1a.5.5 0 0 1-.5.5h-1a.5.5 0 0 1-.5-.5v-1zm-3 0a.5.5 0 0 1 .5-.5h1a.5.5 0 0 1 .5.5v1a.5.5 0 0 1-.5.5h-1a.5.5 0 0 1-.5-.5v-1zm-5 3a.5.5 0 0 1 .5-.5h1a.5.5 0 0 1 .5.5v1a.5.5 0 0 1-.5.5h-1a.5.5 0 0 1-.5-.5v-1zm3 0a.5.5 0 0 1 .5-.5h1a.5.5 0 0 1 .5.5v1a.5.5 0 0 1-.5.5h-1a.5.5 0 0 1-.5-.5v-1z" />
<path d="M3.5 0a.5.5 0 0 1 .5.5V1h8V.5a.5.5 0 0 1 1 0V1h1a2 2 0 0 1 2 2v11a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2V3a2 2 0 0 1 2-2h1V.5a.5.5 0 0 1 .5-.5zM1 4v10a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1V4H1z" />
</svg> Jobs
<NavLink class="nav-link" href="profiles">
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-rocket" viewBox="0 0 16 16">
<path d="M8 8c.828 0 1.5-.895 1.5-2S8.828 4 8 4s-1.5.895-1.5 2S7.172 8 8 8Z" />
<path d="M11.953 8.81c-.195-3.388-.968-5.507-1.777-6.819C9.707 1.233 9.23.751 8.857.454a3.495 3.495 0 0 0-.463-.315A2.19 2.19 0 0 0 8.25.064.546.546 0 0 0 8 0a.549.549 0 0 0-.266.073 2.312 2.312 0 0 0-.142.08 3.67 3.67 0 0 0-.459.33c-.37.308-.844.803-1.31 1.57-.805 1.322-1.577 3.433-1.774 6.756l-1.497 1.826-.004.005A2.5 2.5 0 0 0 2 12.202V15.5a.5.5 0 0 0 .9.3l1.125-1.5c.166-.222.42-.4.752-.57.214-.108.414-.192.625-.281l.198-.084c.7.428 1.55.635 2.4.635.85 0 1.7-.207 2.4-.635.067.03.132.056.196.083.213.09.413.174.627.282.332.17.586.348.752.57l1.125 1.5a.5.5 0 0 0 .9-.3v-3.298a2.5 2.5 0 0 0-.548-1.562l-1.499-1.83ZM12 10.445v.055c0 .866-.284 1.585-.75 2.14.146.064.292.13.425.199.39.197.8.46 1.1.86L13 14v-1.798a1.5 1.5 0 0 0-.327-.935L12 10.445ZM4.75 12.64C4.284 12.085 4 11.366 4 10.5v-.054l-.673.82a1.5 1.5 0 0 0-.327.936V14l.225-.3c.3-.4.71-.664 1.1-.861.133-.068.279-.135.425-.199ZM8.009 1.073c.063.04.14.094.226.163.284.226.683.621 1.09 1.28C10.137 3.836 11 6.237 11 10.5c0 .858-.374 1.48-.943 1.893C9.517 12.786 8.781 13 8 13c-.781 0-1.517-.214-2.057-.607C5.373 11.979 5 11.358 5 10.5c0-4.182.86-6.586 1.677-7.928.409-.67.81-1.082 1.096-1.32.09-.076.17-.135.236-.18Z" />
<path d="M9.479 14.361c-.48.093-.98.139-1.479.139-.5 0-.999-.046-1.479-.139L7.6 15.8a.5.5 0 0 0 .8 0l1.079-1.439Z" />
</svg> Profile
</NavLink>
</div>
<div class="nav-item px-3">

View File

@ -80,6 +80,7 @@
<HintPath>..\packages\Quartz.3.5.0\lib\net462\Quartz.dll</HintPath>
</Reference>
<Reference Include="System" />
<Reference Include="System.ComponentModel.DataAnnotations" />
<Reference Include="System.Configuration" />
<Reference Include="System.Configuration.Install" />
<Reference Include="System.Data" />
@ -117,6 +118,14 @@
<Compile Include="Config.vb" />
<Compile Include="Constants.vb" />
<Compile Include="LogProvider.vb" />
<Compile Include="Models\Jobs\JobDefinition.vb" />
<Compile Include="Models\Jobs\JobType.vb" />
<Compile Include="Models\Jobs\HistoryItem.vb" />
<Compile Include="Models\Jobs\StatusItem.vb" />
<Compile Include="Models\Profiles\BaseProfile.vb" />
<Compile Include="Models\Profiles\ImportProfile.vb" />
<Compile Include="Models\Profiles\ImportProfileStep.vb" />
<Compile Include="Models\Windream\ObjectType.vb" />
<Compile Include="My Project\Application.Designer.vb">
<AutoGen>True</AutoGen>
<DependentUpon>Application.myapp</DependentUpon>
@ -160,6 +169,7 @@
<Compile Include="WCF\Methods\Base.vb" />
<Compile Include="WCF\Methods\GetJobConfig.vb" />
<Compile Include="WCF\Methods\UpdateJob.vb" />
<Compile Include="WCF\Methods\UpdateProfile.vb" />
<Compile Include="WCF\Methods\GetJobStatus.vb" />
<Compile Include="WCF\ServiceHost.vb" />
</ItemGroup>

View File

@ -0,0 +1,20 @@
Imports System.ComponentModel.DataAnnotations
Public Class JobDefinition
<Required>
Public Id As Integer = -1
<Required>
Public TypeId As Integer
Public Type As JobType
<Required>
<StringLength(250)>
Public Name As String
<Required>
<StringLength(250)>
Public CronSchedule As String
Public Active As Boolean
End Class

View File

@ -0,0 +1,3 @@
Public Class BaseProfile
Public Property Job As New JobDefinition
End Class

View File

@ -1,15 +1,36 @@
Public Class ImportProfile
Public Property Id As Integer
Public Property JobId As Integer
Imports System.ComponentModel.DataAnnotations
Public Class ImportProfile
Inherits BaseProfile
Public Property Active As Boolean
<Required>
Public Property Id As Integer
<Required>
Public Property JobId As Integer
<Required>
Public Property ObjectTypeName As String
<Required>
<StringLength(500)>
Public Property SourceFolder As String
<Required>
<StringLength(500)>
Public Property TargetFolder As String
<StringLength(500)>
Public Property BackupFolder As String
<StringLength(50)>
Public Property SubfolderDateFormat As String
<StringLength(5000)>
Public Property FileExcludeRegex As String
Public Property DeleteFiles As Boolean
Public Property IncludeSubfolders As Boolean
Public Property Steps As New List(Of ImportProfileStep)
End Class

View File

@ -0,0 +1,26 @@
Public Class ImportProfileStep
Public Property Active As Boolean
Public Property Id As Integer
Public Property ProfileId As Integer
Public Property IndexName As String
Public Property Scope As StepScope
Public Property Method As StepMethod
Public Property Argument1 As String
Public Property Argument2 As String
Public Property Argument3 As String
Public Enum StepMethod
SUBSTRING
REGEX
SPLIT
ALL
VALUE
End Enum
Public Enum StepScope
FILE
FOLDER
End Enum
End Class

View File

@ -67,6 +67,8 @@ Namespace Scheduler.Jobs
Return Task.FromResult(True)
End If
Logger.Info("[0] files found in source directory [{1}]", oFiles.Count, oSourceDirectory)
'Dim oMax = 100
'For index = 1 To oMax
' UpdateProgress(index, oMax)

View File

@ -2,7 +2,6 @@
Imports DigitalData.Modules.Database
Imports DigitalData.Modules.Logging
Imports DigitalData.Modules.Language
Imports ECM.JobRunner.Common
Imports ECM.JobRunner.Windows.Scheduler
Imports DigitalData.Modules.Windream
@ -17,13 +16,12 @@ Public Class State
Public ReadOnly Property JobTypes As New List(Of JobType)
Public ReadOnly Property ObjectTypes As New List(Of ObjectType)
Public ReadOnly Property JobDefinitions As New List(Of JobDefinition)
Public ReadOnly Property ProfileDefintions As New ProfileDefinitions
Public Class ProfileDefinitions
Public Property ImportProfiles As New List(Of ImportProfile)
Public Property ImportProfileSteps As New List(Of ImportProfileStep)
End Class
Public Sub New(pLogConfig As LogConfig, pDatabase As MSSQLServer, pWindream As Windream)
@ -45,6 +43,7 @@ Public Class State
_ObjectTypes = GetObjectTypes()
_JobDefinitions = GetJobDefinitions(_JobTypes)
_ProfileDefintions.ImportProfileSteps = GetImportProfileSteps()
_ProfileDefintions.ImportProfiles = GetImportProfiles()
End Sub
@ -89,7 +88,7 @@ Public Class State
Try
Logger.Info("Loading Job Types..")
Dim oSQL As String = "SELECT * FROM TBECM_JR_TYPE WHERE ACTIVE = 1"
Dim oSQL As String = "SELECT * FROM TBECM_JR_TYPE"
Dim oTable As DataTable = Database.GetDatatable(oSQL)
If oTable Is Nothing Then
@ -119,33 +118,113 @@ Public Class State
End Try
End Function
Private Function GetImportProfileSteps() As List(Of ImportProfileStep)
Dim oSteps As New List(Of ImportProfileStep)
Try
Logger.Info("Loading Import Profiles Steps..")
Dim oSQL As String = "SELECT * FROM TBECM_JR_FIW_STEP"
Dim oTable As DataTable = Database.GetDatatable(oSQL)
If oTable Is Nothing Then
Logger.Warn("Database Error while loading Import Profile Steps!")
Return oSteps
End If
Logger.Info("[{0}] Import Profile Steps loaded!", oTable.Rows.Count)
For Each oRow As DataRow In oTable.Rows
Dim oTypeId = oRow.ItemEx("PROFILE_ID", 0)
Dim oScope As ImportProfileStep.StepScope
Select Case oRow.ItemEx("SCOPE", "FILE")
Case "FOLDER"
oScope = ImportProfileStep.StepScope.FOLDER
Case "FILE"
oScope = ImportProfileStep.StepScope.FILE
End Select
Dim oMethod As ImportProfileStep.StepMethod
Select Case oRow.ItemEx("METHOD", "ALL")
Case "SUBSTRING"
oScope = ImportProfileStep.StepMethod.SUBSTRING
Case "SPLIT"
oScope = ImportProfileStep.StepMethod.SPLIT
Case "REGEX"
oScope = ImportProfileStep.StepMethod.REGEX
Case "STATIC"
oScope = ImportProfileStep.StepMethod.VALUE
Case Else
oScope = ImportProfileStep.StepMethod.ALL
End Select
Dim oStep As New ImportProfileStep With {
.Id = oRow.ItemEx("GUID", 0),
.ProfileId = oRow.ItemEx("PROFILE_ID", 0),
.IndexName = oRow.Item("IDX_NAME"),
.Method = oMethod,
.Argument1 = oRow.ItemEx("ARGUMENT1", ""),
.Argument2 = oRow.ItemEx("ARGUMENT2", ""),
.Argument3 = oRow.ItemEx("ARGUMENT3", ""),
.Scope = oScope,
.Active = oRow.ItemEx("ACTIVE", 0)
}
oSteps.Add(oStep)
Logger.Debug("Adding Import Profile Step for Index [{0}]", oStep.IndexName)
Next
Return oSteps
Catch ex As Exception
Logger.Error(ex)
Return oSteps
End Try
End Function
Private Function GetImportProfiles() As List(Of ImportProfile)
Dim oProfiles As New List(Of ImportProfile)
Try
Logger.Info("Loading Profiles..")
Logger.Info("Loading Import Profiles..")
Dim oSQL As String = "SELECT * FROM TBECM_JR_FIW_PROFILE"
Dim oTable As DataTable = Database.GetDatatable(oSQL)
If oTable Is Nothing Then
Logger.Warn("Database Error while loading Profiles!")
Logger.Warn("Database Error while loading Import Profiles!")
Return oProfiles
End If
Logger.Info("[{0}] Profiles loaded!", oTable.Rows.Count)
Logger.Info("[{0}] Import Profiles loaded!", oTable.Rows.Count)
For Each oRow As DataRow In oTable.Rows
Dim oTypeId = oRow.ItemEx("JOB_TYPE_ID", 0)
Dim oProfile As New ImportProfile With {
.Id = oRow.ItemEx("GUID", 0),
.JobId = oRow.ItemEx("JR_JOB_ID", 0),
.SourceFolder = oRow.ItemEx("SOURCE_FOLDER", "")
.ObjectTypeName = oRow.Item("WM_OBJECTTYPE"),
.SourceFolder = oRow.ItemEx("SOURCE_FOLDER", ""),
.TargetFolder = oRow.ItemEx("TARGET_FOLDER", ""),
.BackupFolder = oRow.ItemEx("BACKUP_FOLDER", ""),
.SubfolderDateFormat = oRow.ItemEx("SF_DATE_FORMAT", ""),
.DeleteFiles = oRow.ItemEx("DEL_FILE_SUCCESS", 0),
.FileExcludeRegex = oRow.ItemEx("EXCLUDE_REGEX", ""),
.IncludeSubfolders = oRow.ItemEx("INCL_SUBFOLDER", 0),
.Active = oRow.ItemEx("ACTIVE", 0)
}
oProfiles.Add(oProfile)
Logger.Debug("Adding Profile for Folder [{0}]", oProfile.SourceFolder)
Logger.Debug("Adding Import Profile for Folder [{0}]", oProfile.SourceFolder)
Next
Return oProfiles

View File

@ -1,6 +1,7 @@
Imports System.ServiceModel
Imports ECM.JobRunner.Common
Imports ECM.JobRunner.Windows.UpdateJob
Imports ECM.JobRunner.Windows.UpdateProfile
Imports ECM.JobRunner.Windows.GetJobStatus
Imports ECM.JobRunner.Windows.GetJobConfig
@ -17,6 +18,9 @@ Namespace WCF
<OperationContract>
Function UpdateJob(pData As UpdateJobRequest) As UpdateJobResponse
<OperationContract>
Function UpdateProfile(pData As UpdateProfileRequest) As UpdateProfileResponse
<OperationContract>
Function GetJobConfig() As GetJobConfigResponse
End Interface

View File

@ -50,6 +50,11 @@ Namespace WCF
Dim oMethod As New UpdateJob.UpdateJobMethod(LogConfig, Database, State, Scheduler)
Return oMethod.Run(pData)
End Function
Public Function UpdateProfile(pData As UpdateProfile.UpdateProfileRequest) As UpdateProfile.UpdateProfileResponse Implements IJobRunner.UpdateProfile
Dim oMethod As New UpdateProfile.UpdateProfileMethod(LogConfig, Database, State, Scheduler)
Return oMethod.Run(pData)
End Function
End Class
End Namespace

View File

@ -17,11 +17,32 @@ Public Class GetJobConfig
.JobTypes = State.JobTypes,
.JobDefinitions = State.JobDefinitions,
.ProfileDefinitions = New GetJobConfigResponse.ProfileDefinitionConfig With {
.ImportProfiles = State.ProfileDefintions.ImportProfiles
.ImportProfiles = State.ProfileDefintions.ImportProfiles.
Select(AddressOf FillJobForProfile).
Select(AddressOf FillStepsForProfile).
ToList()
},
.WindreamObjectTypes = State.ObjectTypes
}
End Function
Private Function FillJobForProfile(pProfile As ImportProfile) As ImportProfile
Dim oJob = State.JobDefinitions.
Where(Function(job) job.Id = pProfile.JobId).
FirstOrDefault()
pProfile.Job = oJob
Return pProfile
End Function
Private Function FillStepsForProfile(pProfile As ImportProfile) As ImportProfile
Dim oSteps = State.ProfileDefintions.ImportProfileSteps.
Where(Function(s) s.ProfileId = pProfile.Id).
ToList()
pProfile.Steps = oSteps
Return pProfile
End Function
End Class
Public Class GetJobConfigResponse

View File

@ -31,6 +31,8 @@ Public Class UpdateJob
If oResponse Then
Scheduler.Reload()
Else
Logger.Warn("Error while updating Profile, data not reloaded!")
End If
Return New UpdateJobResponse With {.OK = oResponse}
@ -74,8 +76,6 @@ Public Class UpdateJob
End Function
End Class
Public Class UpdateJobRequest
Public Enum UpdateJobAction
Create
@ -84,7 +84,7 @@ Public Class UpdateJob
End Enum
Public Action As UpdateJobAction
Public Job As JobRunnerReference.JobDefinition
Public Job As JobDefinition
End Class
Public Class UpdateJobResponse

View File

@ -0,0 +1,152 @@
Imports DigitalData.Modules.Database
Imports DigitalData.Modules.Logging
Imports ECM.JobRunner.Common
Imports ECM.JobRunner.Windows.Scheduler
Public Class UpdateProfile
Public Class UpdateProfileMethod
Inherits Base.BaseMethod
Private ReadOnly Scheduler As JobScheduler
Public Sub New(pLogConfig As LogConfig, pDatabase As MSSQLServer, pState As State, pScheduler As JobScheduler)
MyBase.New(pLogConfig, pDatabase, pState)
Scheduler = pScheduler
End Sub
Public Function Run(pData As UpdateProfileRequest) As UpdateProfileResponse
Dim oResponse As Boolean = False
Dim oUpdateJob As New UpdateJob.UpdateJobMethod(LogConfig, Database, State, Scheduler)
' Active on the profile sets active on the job as well
pData.ImportProfile.Job.Active = pData.ImportProfile.Active
Dim oJobResponse = oUpdateJob.Run(New UpdateJob.UpdateJobRequest With {
.Job = pData.ImportProfile.Job,
.Action = pData.Action
})
If oJobResponse.OK = False Then
Return New UpdateProfileResponse With {.OK = False}
End If
Select Case pData.Action
Case UpdateProfileRequest.UpdateProfileAction.Update
oResponse = DoUpdateImportProfile(pData)
Case UpdateProfileRequest.UpdateProfileAction.Create
oResponse = DoCreateImportProfile(pData)
Case UpdateProfileRequest.UpdateProfileAction.Delete
oResponse = DoDeleteImportProfile(pData)
End Select
If oResponse Then
Scheduler.Reload()
Else
Logger.Warn("Error while updating Profile, data not reloaded!")
End If
Return New UpdateProfileResponse With {.OK = oResponse}
End Function
Private Function DoUpdateImportProfile(pData As UpdateProfileRequest) As Boolean
Dim oProfile = pData.ImportProfile
Dim oSQL As String = "UPDATE TBECM_JR_FIW_PROFILE
SET JR_JOB_ID = @JR_JOB_ID,
WM_OBJECTTYPE = @WM_OBJECTTYPE,
SOURCE_FOLDER = @SOURCE_FOLDER,
TARGET_FOLDER = @TARGET_FOLDER,
BACKUP_FOLDER = @BACKUP_FOLDER,
SF_DATE_FORMAT = @SF_DATE_FORMAT,
DEL_FILE_SUCCESS = @DEL_FILE_SUCCESS,
INCL_SUBFOLDER = @INCL_SUBFOLDER,
EXCLUDE_REGEX = @EXCLUDE_REGEX,
ACTIVE = @ACTIVE
WHERE GUID = @GUID"
Dim oCommand As New SqlClient.SqlCommand(oSQL)
oCommand.Parameters.Add("JR_JOB_ID", SqlDbType.Int).Value = oProfile.Job.Id
oCommand.Parameters.Add("WM_OBJECTTYPE", SqlDbType.NVarChar, 100).Value = oProfile.ObjectTypeName
oCommand.Parameters.Add("SOURCE_FOLDER", SqlDbType.NVarChar, 500).Value = oProfile.SourceFolder
oCommand.Parameters.Add("TARGET_FOLDER", SqlDbType.NVarChar, 500).Value = oProfile.TargetFolder
oCommand.Parameters.Add("BACKUP_FOLDER", SqlDbType.NVarChar, 500).Value = oProfile.BackupFolder
oCommand.Parameters.Add("EXCLUDE_REGEX", SqlDbType.NVarChar, 5000).Value = oProfile.FileExcludeRegex
oCommand.Parameters.Add("SF_DATE_FORMAT", SqlDbType.NVarChar, 50).Value = oProfile.SubfolderDateFormat
oCommand.Parameters.Add("DEL_FILE_SUCCESS", SqlDbType.Bit).Value = oProfile.DeleteFiles
oCommand.Parameters.Add("INCL_SUBFOLDER", SqlDbType.Bit).Value = oProfile.IncludeSubfolders
oCommand.Parameters.Add("ACTIVE", SqlDbType.Bit).Value = oProfile.Active
oCommand.Parameters.Add("GUID", SqlDbType.Int).Value = oProfile.Id
Return Database.ExecuteNonQuery(oCommand)
End Function
Private Function DoCreateImportProfile(pData As UpdateProfileRequest) As Boolean
Dim oProfile = pData.ImportProfile
Dim oSQL As String = "INSERT INTO TBECM_JR_FIW_PROFILE (
JR_JOB_ID,
WM_OBJECTTYPE,
SOURCE_FOLDER,
TARGET_FOLDER,
BACKUP_FOLDER,
SF_DATE_FORMAT,
DEL_FILE_SUCCESS,
INCL_SUBFOLDER,
EXCLUDE_REGEX,
ACTIVE
) VALUES (
@JR_JOB_ID,
@WM_OBJECTTYPE,
@SOURCE_FOLDER,
@TARGET_FOLDER,
@BACKUP_FOLDER,
@SF_DATE_FORMAT,
@DEL_FILE_SUCCESS,
@INCL_SUBFOLDER,
@EXCLUDE_REGEX,
@ACTIVE
)"
Dim oCommand As New SqlClient.SqlCommand(oSQL)
oCommand.Parameters.Add("JR_JOB_ID", SqlDbType.Int).Value = oProfile.Job.Id
oCommand.Parameters.Add("WM_OBJECTTYPE", SqlDbType.NVarChar, 100).Value = oProfile.ObjectTypeName
oCommand.Parameters.Add("SOURCE_FOLDER", SqlDbType.NVarChar, 500).Value = oProfile.SourceFolder
oCommand.Parameters.Add("TARGET_FOLDER", SqlDbType.NVarChar, 500).Value = oProfile.TargetFolder
oCommand.Parameters.Add("BACKUP_FOLDER", SqlDbType.NVarChar, 500).Value = oProfile.BackupFolder
oCommand.Parameters.Add("EXCLUDE_REGEX", SqlDbType.NVarChar, 5000).Value = oProfile.FileExcludeRegex
oCommand.Parameters.Add("SF_DATE_FORMAT", SqlDbType.NVarChar, 50).Value = oProfile.SubfolderDateFormat
oCommand.Parameters.Add("DEL_FILE_SUCCESS", SqlDbType.Bit).Value = oProfile.DeleteFiles
oCommand.Parameters.Add("INCL_SUBFOLDER", SqlDbType.Bit).Value = oProfile.IncludeSubfolders
oCommand.Parameters.Add("ACTIVE", SqlDbType.Bit).Value = oProfile.Active
oCommand.Parameters.Add("GUID", SqlDbType.Int).Value = oProfile.Id
Return Database.ExecuteNonQuery(oCommand)
End Function
Private Function DoDeleteImportProfile(pData As UpdateProfileRequest) As Boolean
Dim oProfile = pData.ImportProfile
Dim oSQL As String = "DELETE FROM TBECM_JR_FIW_PROFILE WHERE GUID = @GUID"
Dim oCommand As New SqlClient.SqlCommand(oSQL)
oCommand.Parameters.Add("GUID", SqlDbType.Int).Value = oProfile.Id
Return Database.ExecuteNonQuery(oCommand)
End Function
End Class
Public Class UpdateProfileRequest
Public Enum UpdateProfileAction
Create
Update
Delete
End Enum
Public Action As UpdateProfileAction
Public ImportProfile As ImportProfile
End Class
Public Class UpdateProfileResponse
Inherits Base.BaseResponse
End Class
End Class