Import/Export Job Options - OData action path

This change makes an extra option available to be able to configure the relative path to the OData actions of ImportFromPackage (Import jobs) and ExportToPackage (Export jobs) actions through the user interface. The configuration is made available through the "Options" button which is available for import/export jobs.
Please note that Upload/Download jobs are not in the scope of this change and remain unchange from configuration point of view.
This commit is contained in:
MZade 2018-04-19 01:01:01 +02:00
Родитель 1d65a75ce3
Коммит 88967cfae9
21 изменённых файлов: 1311 добавлений и 452 удалений

Просмотреть файл

@ -64,6 +64,7 @@
<Link>Version.cs</Link>
</Compile>
<Compile Include="Contracts\ContractEnums.cs" />
<Compile Include="Contracts\OdataActionsConstants.cs" />
<Compile Include="Helpers\FileOperationsHelper.cs" />
<Compile Include="JobSettings\ExportJobSettings.cs" />
<Compile Include="JobSettings\ImportJobSettings.cs" />

Просмотреть файл

@ -0,0 +1,22 @@
/* Copyright (c) Microsoft Corporation. All rights reserved.
Licensed under the MIT License. */
namespace RecurringIntegrationsScheduler.Common.Contracts
{
/// <summary>
/// Class holding all constant values related to the Odata actions used in this solution
/// </summary>
public class OdataActionsConstants
{
public const string GetAzureWriteUrlActionPath = "data/DataManagementDefinitionGroups/Microsoft.Dynamics.DataEntities.GetAzureWriteUrl";
public const string GetExecutionSummaryStatusActionPath = "data/DataManagementDefinitionGroups/Microsoft.Dynamics.DataEntities.GetExecutionSummaryStatus";
public const string GetExportedPackageUrlActionPath = "data/DataManagementDefinitionGroups/Microsoft.Dynamics.DataEntities.GetExportedPackageUrl";
public const string GetExecutionSummaryPageUrlActionPath = "data/DataManagementDefinitionGroups/Microsoft.Dynamics.DataEntities.GetExecutionSummaryPageUrl";
public const string ImportFromPackageActionPath = "data/DataManagementDefinitionGroups/Microsoft.Dynamics.DataEntities.ImportFromPackage";
public const string DeleteExecutionHistoryJobActionPath = "data/DataManagementDefinitionGroups/Microsoft.Dynamics.DataEntities.DeleteExecutionHistoryJob";
public const string ExportToPackageActionPath = "data/DataManagementDefinitionGroups/Microsoft.Dynamics.DataEntities.ExportToPackage";
public const string ExportFromPackageActionPath = "data/DataManagementDefinitionGroups/Microsoft.Dynamics.DataEntities.ExportFromPackage";
public const string GetMessageStatusActionPath = "data/DataManagementDefinitionGroups/Microsoft.Dynamics.DataEntities.GetMessageStatus";
}
}

Просмотреть файл

@ -14,6 +14,11 @@ namespace RecurringIntegrationsScheduler.Common.Contracts
/// </summary>
public const string AosUri = "AosUri";
/// <summary>
/// The relative path to the Odata action
/// </summary>
public const string OdataActionRelativePath = "OdataActionRelativePath";
/// <summary>
/// Azure authentication endpoint
/// </summary>

Просмотреть файл

@ -6,6 +6,7 @@ using Newtonsoft.Json.Linq;
using Polly;
using RecurringIntegrationsScheduler.Common.JobSettings;
using RecurringIntegrationsScheduler.Common.Properties;
using RecurringIntegrationsScheduler.Common.Contracts;
using System;
using System.IO;
using System.Net;
@ -236,7 +237,7 @@ namespace RecurringIntegrationsScheduler.Common.Helpers
/// <returns>temp writable cloud url</returns>
public async Task<string> GetAzureWriteUrl()
{
var requestUri = GetAosRequestUri("data/DataManagementDefinitionGroups/Microsoft.Dynamics.DataEntities.GetAzureWriteUrl");
var requestUri = GetAosRequestUri(OdataActionsConstants.GetAzureWriteUrlActionPath);
string uniqueFileName = Guid.NewGuid().ToString();
var parameters = new { uniqueFileName };
@ -262,7 +263,7 @@ namespace RecurringIntegrationsScheduler.Common.Helpers
/// <returns>job's execution status</returns>
public async Task<string> GetExecutionSummaryStatus(string executionId)
{
var requestUri = GetAosRequestUri("data/DataManagementDefinitionGroups/Microsoft.Dynamics.DataEntities.GetExecutionSummaryStatus");
var requestUri = GetAosRequestUri(OdataActionsConstants.GetExecutionSummaryStatusActionPath);
var parameters = new { executionId };
string parametersJson = JsonConvert.SerializeObject(parameters, new JsonSerializerSettings { TypeNameHandling = TypeNameHandling.Auto });
@ -283,7 +284,7 @@ namespace RecurringIntegrationsScheduler.Common.Helpers
{
try
{
var requestUri = GetAosRequestUri("data/DataManagementDefinitionGroups/Microsoft.Dynamics.DataEntities.GetExportedPackageUrl");
var requestUri = GetAosRequestUri(OdataActionsConstants.GetExportedPackageUrlActionPath);
var parameters = new { executionId };
string parametersJson = JsonConvert.SerializeObject(parameters, new JsonSerializerSettings { TypeNameHandling = TypeNameHandling.Auto });
@ -307,7 +308,7 @@ namespace RecurringIntegrationsScheduler.Common.Helpers
/// <returns>execution's summary page Url</returns>
public async Task<string> GetExecutionSummaryPageUrl(string executionId)
{
var requestUri = GetAosRequestUri("data/DataManagementDefinitionGroups/Microsoft.Dynamics.DataEntities.GetExecutionSummaryPageUrl");
var requestUri = GetAosRequestUri(OdataActionsConstants.GetExecutionSummaryPageUrlActionPath);
var parameters = new { executionId };
string parametersJson = JsonConvert.SerializeObject(parameters, new JsonSerializerSettings { TypeNameHandling = TypeNameHandling.Auto });
@ -336,6 +337,7 @@ namespace RecurringIntegrationsScheduler.Common.Helpers
/// <summary>
/// Request to import package from specified location
/// </summary>
/// <param name="odataActionPath">Relative path to the Odata action</param>
/// <param name="packageUrl">Location of uploaded package</param>
/// <param name="definitionGroupId">Data project name</param>
/// <param name="executionId">Execution Id</param>
@ -343,9 +345,9 @@ namespace RecurringIntegrationsScheduler.Common.Helpers
/// <param name="overwrite">Flag whether to overwrite data project</param>
/// <param name="legalEntityId">Target legal entity</param>
/// <returns></returns>
public async Task<HttpResponseMessage> ImportFromPackage(string packageUrl, string definitionGroupId, string executionId, bool execute, bool overwrite, string legalEntityId)
public async Task<HttpResponseMessage> ImportFromPackage(string odataActionPath, string packageUrl, string definitionGroupId, string executionId, bool execute, bool overwrite, string legalEntityId)
{
var requestUri = GetAosRequestUri("data/DataManagementDefinitionGroups/Microsoft.Dynamics.DataEntities.ImportFromPackage");
var requestUri = GetAosRequestUri(string.IsNullOrEmpty(odataActionPath) ? OdataActionsConstants.ImportFromPackageActionPath : odataActionPath);
var parameters = new
{
@ -367,7 +369,7 @@ namespace RecurringIntegrationsScheduler.Common.Helpers
/// <returns></returns>
public async Task<string> DeleteExecutionHistoryJob(string executionId)
{
var requestUri = GetAosRequestUri("data/DataManagementDefinitionGroups/Microsoft.Dynamics.DataEntities.DeleteExecutionHistoryJob");
var requestUri = GetAosRequestUri(OdataActionsConstants.DeleteExecutionHistoryJobActionPath);
var parameters = new { executionId };
string parametersJson = JsonConvert.SerializeObject(parameters, new JsonSerializerSettings { TypeNameHandling = TypeNameHandling.Auto });
@ -381,15 +383,16 @@ namespace RecurringIntegrationsScheduler.Common.Helpers
/// <summary>
/// Export a package that has been already uploaded to server
/// </summary>
/// <param name="odataActionPath">Relative path to the Odata action</param>
/// <param name="definitionGroupId">data project name</param>
/// <param name="packageName">package name </param>
/// <param name="executionId">execution id to use for results</param>
/// <param name="legalEntityId">the company to pull</param>
/// <param name="reExecute">reexecute flag</param>
/// <returns>export package url</returns>
public async Task<HttpResponseMessage> ExportToPackage(string definitionGroupId, string packageName, string executionId, string legalEntityId, bool reExecute = false)
{
var requestUri = GetAosRequestUri("data/DataManagementDefinitionGroups/Microsoft.Dynamics.DataEntities.ExportToPackage");
public async Task<HttpResponseMessage> ExportToPackage(string odataActionPath, string definitionGroupId, string packageName, string executionId, string legalEntityId, bool reExecute = false)
{
var requestUri = GetAosRequestUri(string.IsNullOrEmpty(odataActionPath) ? OdataActionsConstants.ExportToPackageActionPath : odataActionPath);
var parameters = new
{
@ -415,7 +418,7 @@ namespace RecurringIntegrationsScheduler.Common.Helpers
/// <returns>export package url</returns>
public async Task<HttpResponseMessage> ExportFromPackage(string packageUrl, string definitionGroupId, string executionId, bool execute, bool overwrite, string legalEntityId)
{
var requestUri = GetAosRequestUri("data/DataManagementDefinitionGroups/Microsoft.Dynamics.DataEntities.ExportFromPackage");
var requestUri = GetAosRequestUri(OdataActionsConstants.ExportFromPackageActionPath);
var parameters = new
{
@ -437,7 +440,7 @@ namespace RecurringIntegrationsScheduler.Common.Helpers
/// <returns></returns>
public async Task<string> GetMessageStatus(string messageId)
{
var requestUri = GetAosRequestUri("data/DataManagementDefinitionGroups/Microsoft.Dynamics.DataEntities.GetMessageStatus");
var requestUri = GetAosRequestUri(OdataActionsConstants.GetMessageStatusActionPath);
var parameters = new
{
messageId

Просмотреть файл

@ -28,6 +28,12 @@ namespace RecurringIntegrationsScheduler.Common.JobSettings
base.Initialize(context);
OdataActionPath = dataMap.GetString(SettingsConstants.OdataActionRelativePath);
if (string.IsNullOrEmpty(OdataActionPath))
{
OdataActionPath = string.Empty;
}
DownloadSuccessDir = dataMap.GetString(SettingsConstants.DownloadSuccessDir);
if (!string.IsNullOrEmpty(DownloadSuccessDir))
{
@ -85,6 +91,14 @@ namespace RecurringIntegrationsScheduler.Common.JobSettings
#region Members
/// <summary>
/// Get the Odata action relative path
/// </summary>
/// <value>
/// The relative path to the Odata action
/// </value>
public string OdataActionPath { get; private set; }
/// <summary>
/// Gets the download success dir.
/// </summary>

Просмотреть файл

@ -28,6 +28,12 @@ namespace RecurringIntegrationsScheduler.Common.JobSettings
base.Initialize(context);
OdataActionPath = dataMap.GetString(SettingsConstants.OdataActionRelativePath);
if (string.IsNullOrEmpty(OdataActionPath))
{
OdataActionPath = OdataActionsConstants.ImportFromPackageActionPath;
}
InputDir = dataMap.GetString(SettingsConstants.InputDir);
if (!string.IsNullOrEmpty(InputDir))
{
@ -139,6 +145,14 @@ namespace RecurringIntegrationsScheduler.Common.JobSettings
#region Members
/// <summary>
/// Get the Odata action relative path
/// </summary>
/// <value>
/// The relative path to the Odata action
/// </value>
public string OdataActionPath { get; private set; }
/// <summary>
/// Gets the input dir.
/// </summary>

Просмотреть файл

@ -136,7 +136,7 @@ namespace RecurringIntegrationsScheduler.Job
using (_httpClientHelper = new HttpClientHelper(_settings, _retryPolicyForHttp))
{
var executionId = CreateExecutionId(_settings.DataProject);
var responseExportToPackage = await _httpClientHelper.ExportToPackage(_settings.DataProject, executionId, executionId, _settings.Company);
var responseExportToPackage = await _httpClientHelper.ExportToPackage(_settings.OdataActionPath, _settings.DataProject, executionId, executionId, _settings.Company);
if (!responseExportToPackage.IsSuccessStatusCode)
throw new Exception(string.Format(Resources.Job_0_Download_failure_1, _context.JobDetail.Key, responseExportToPackage.StatusCode));

Просмотреть файл

@ -260,7 +260,7 @@ namespace RecurringIntegrationsScheduler.Job
if (uploadResponse.IsSuccessStatusCode)
{
//Now send import request
var importResponse = await _httpClientHelper.ImportFromPackage(blobUri.AbsoluteUri, _settings.DataProject, CreateExecutionId(_settings.DataProject), _settings.ExecuteImport, _settings.OverwriteDataProject, _settings.Company);
var importResponse = await _httpClientHelper.ImportFromPackage(_settings.OdataActionPath, blobUri.AbsoluteUri, _settings.DataProject, CreateExecutionId(_settings.DataProject), _settings.ExecuteImport, _settings.OverwriteDataProject, _settings.Company);
if (importResponse.IsSuccessStatusCode)
{

363
Scheduler/Forms/ExportJob.Designer.cs сгенерированный
Просмотреть файл

@ -94,6 +94,8 @@ namespace RecurringIntegrationsScheduler.Forms
this.label1 = new System.Windows.Forms.Label();
this.groupBoxExceptions = new System.Windows.Forms.GroupBox();
this.pauseOnExceptionsCheckBox = new System.Windows.Forms.CheckBox();
this.toolStripDropDownButton = new System.Windows.Forms.ToolStripDropDownButton();
this.jobOptions = new System.Windows.Forms.ToolStripMenuItem();
this.jobDetailsGroupBox.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.interval)).BeginInit();
this.axDetailsGroupBox.SuspendLayout();
@ -131,11 +133,11 @@ namespace RecurringIntegrationsScheduler.Forms
this.jobDetailsGroupBox.Controls.Add(this.jobGroupLabel);
this.jobDetailsGroupBox.Controls.Add(this.jobName);
this.jobDetailsGroupBox.Controls.Add(this.jobNameLabel);
this.jobDetailsGroupBox.Location = new System.Drawing.Point(20, 20);
this.jobDetailsGroupBox.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5);
this.jobDetailsGroupBox.Location = new System.Drawing.Point(18, 16);
this.jobDetailsGroupBox.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4);
this.jobDetailsGroupBox.Name = "jobDetailsGroupBox";
this.jobDetailsGroupBox.Padding = new System.Windows.Forms.Padding(4, 5, 4, 5);
this.jobDetailsGroupBox.Size = new System.Drawing.Size(345, 600);
this.jobDetailsGroupBox.Padding = new System.Windows.Forms.Padding(4, 4, 4, 4);
this.jobDetailsGroupBox.Size = new System.Drawing.Size(307, 480);
this.jobDetailsGroupBox.TabIndex = 0;
this.jobDetailsGroupBox.TabStop = false;
this.jobDetailsGroupBox.Text = "Job details";
@ -144,10 +146,10 @@ namespace RecurringIntegrationsScheduler.Forms
//
this.addTimestampCheckBox.AutoSize = true;
this.addTimestampCheckBox.Enabled = false;
this.addTimestampCheckBox.Location = new System.Drawing.Point(16, 394);
this.addTimestampCheckBox.Margin = new System.Windows.Forms.Padding(3, 5, 3, 5);
this.addTimestampCheckBox.Location = new System.Drawing.Point(14, 315);
this.addTimestampCheckBox.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4);
this.addTimestampCheckBox.Name = "addTimestampCheckBox";
this.addTimestampCheckBox.Size = new System.Drawing.Size(260, 24);
this.addTimestampCheckBox.Size = new System.Drawing.Size(231, 21);
this.addTimestampCheckBox.TabIndex = 10;
this.addTimestampCheckBox.Text = global::RecurringIntegrationsScheduler.Properties.Resources.Make_exported_file_name_unique;
this.addTimestampCheckBox.UseVisualStyleBackColor = true;
@ -155,34 +157,35 @@ namespace RecurringIntegrationsScheduler.Forms
// legalEntityLabel
//
this.legalEntityLabel.AutoSize = true;
this.legalEntityLabel.Location = new System.Drawing.Point(15, 500);
this.legalEntityLabel.Location = new System.Drawing.Point(13, 400);
this.legalEntityLabel.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
this.legalEntityLabel.Name = "legalEntityLabel";
this.legalEntityLabel.Size = new System.Drawing.Size(90, 20);
this.legalEntityLabel.Size = new System.Drawing.Size(81, 17);
this.legalEntityLabel.TabIndex = 22;
this.legalEntityLabel.Text = "Legal entity";
//
// legalEntity
//
this.legalEntity.Location = new System.Drawing.Point(120, 497);
this.legalEntity.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5);
this.legalEntity.Location = new System.Drawing.Point(107, 398);
this.legalEntity.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4);
this.legalEntity.Name = "legalEntity";
this.legalEntity.Size = new System.Drawing.Size(96, 26);
this.legalEntity.Size = new System.Drawing.Size(86, 22);
this.legalEntity.TabIndex = 13;
//
// intervalLabel
//
this.intervalLabel.AutoSize = true;
this.intervalLabel.Location = new System.Drawing.Point(15, 538);
this.intervalLabel.Location = new System.Drawing.Point(13, 430);
this.intervalLabel.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
this.intervalLabel.Name = "intervalLabel";
this.intervalLabel.Size = new System.Drawing.Size(199, 20);
this.intervalLabel.Size = new System.Drawing.Size(179, 17);
this.intervalLabel.TabIndex = 20;
this.intervalLabel.Text = "Status check interval (sec.)";
//
// interval
//
this.interval.Location = new System.Drawing.Point(220, 537);
this.interval.Location = new System.Drawing.Point(196, 430);
this.interval.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2);
this.interval.Maximum = new decimal(new int[] {
3600,
0,
@ -194,7 +197,7 @@ namespace RecurringIntegrationsScheduler.Forms
0,
0});
this.interval.Name = "interval";
this.interval.Size = new System.Drawing.Size(111, 26);
this.interval.Size = new System.Drawing.Size(99, 22);
this.interval.TabIndex = 14;
this.interval.Value = new decimal(new int[] {
300,
@ -205,29 +208,29 @@ namespace RecurringIntegrationsScheduler.Forms
// dataProjectLabel
//
this.dataProjectLabel.AutoSize = true;
this.dataProjectLabel.Location = new System.Drawing.Point(15, 465);
this.dataProjectLabel.Location = new System.Drawing.Point(13, 372);
this.dataProjectLabel.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
this.dataProjectLabel.Name = "dataProjectLabel";
this.dataProjectLabel.Size = new System.Drawing.Size(96, 20);
this.dataProjectLabel.Size = new System.Drawing.Size(85, 17);
this.dataProjectLabel.TabIndex = 16;
this.dataProjectLabel.Text = "Data project";
//
// dataProject
//
this.dataProject.Location = new System.Drawing.Point(118, 462);
this.dataProject.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5);
this.dataProject.Location = new System.Drawing.Point(105, 370);
this.dataProject.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4);
this.dataProject.Name = "dataProject";
this.dataProject.Size = new System.Drawing.Size(220, 26);
this.dataProject.Size = new System.Drawing.Size(196, 22);
this.dataProject.TabIndex = 12;
//
// deletePackageCheckBox
//
this.deletePackageCheckBox.AutoSize = true;
this.deletePackageCheckBox.Enabled = false;
this.deletePackageCheckBox.Location = new System.Drawing.Point(16, 426);
this.deletePackageCheckBox.Margin = new System.Windows.Forms.Padding(3, 5, 3, 5);
this.deletePackageCheckBox.Location = new System.Drawing.Point(14, 341);
this.deletePackageCheckBox.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4);
this.deletePackageCheckBox.Name = "deletePackageCheckBox";
this.deletePackageCheckBox.Size = new System.Drawing.Size(171, 24);
this.deletePackageCheckBox.Size = new System.Drawing.Size(151, 21);
this.deletePackageCheckBox.TabIndex = 11;
this.deletePackageCheckBox.Text = global::RecurringIntegrationsScheduler.Properties.Resources.Delete_package_file;
this.deletePackageCheckBox.UseVisualStyleBackColor = true;
@ -235,10 +238,10 @@ namespace RecurringIntegrationsScheduler.Forms
// unzipCheckBox
//
this.unzipCheckBox.AutoSize = true;
this.unzipCheckBox.Location = new System.Drawing.Point(18, 362);
this.unzipCheckBox.Margin = new System.Windows.Forms.Padding(3, 5, 3, 5);
this.unzipCheckBox.Location = new System.Drawing.Point(16, 290);
this.unzipCheckBox.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4);
this.unzipCheckBox.Name = "unzipCheckBox";
this.unzipCheckBox.Size = new System.Drawing.Size(165, 24);
this.unzipCheckBox.Size = new System.Drawing.Size(146, 21);
this.unzipCheckBox.TabIndex = 9;
this.unzipCheckBox.Text = global::RecurringIntegrationsScheduler.Properties.Resources.Unzip_package_file;
this.unzipCheckBox.UseVisualStyleBackColor = true;
@ -249,10 +252,10 @@ namespace RecurringIntegrationsScheduler.Forms
this.useStandardSubfolder.AutoSize = true;
this.useStandardSubfolder.Checked = true;
this.useStandardSubfolder.CheckState = System.Windows.Forms.CheckState.Checked;
this.useStandardSubfolder.Location = new System.Drawing.Point(18, 265);
this.useStandardSubfolder.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5);
this.useStandardSubfolder.Location = new System.Drawing.Point(16, 212);
this.useStandardSubfolder.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4);
this.useStandardSubfolder.Name = "useStandardSubfolder";
this.useStandardSubfolder.Size = new System.Drawing.Size(213, 24);
this.useStandardSubfolder.Size = new System.Drawing.Size(188, 21);
this.useStandardSubfolder.TabIndex = 6;
this.useStandardSubfolder.Text = global::RecurringIntegrationsScheduler.Properties.Resources.Use_default_folder_names;
this.useStandardSubfolder.UseVisualStyleBackColor = true;
@ -263,10 +266,10 @@ namespace RecurringIntegrationsScheduler.Forms
this.errorsFolderBrowserButton.Enabled = false;
this.errorsFolderBrowserButton.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(238)));
this.errorsFolderBrowserButton.Image = global::RecurringIntegrationsScheduler.Properties.Resources.Folder_open_32xMD_exp;
this.errorsFolderBrowserButton.Location = new System.Drawing.Point(303, 318);
this.errorsFolderBrowserButton.Location = new System.Drawing.Point(269, 254);
this.errorsFolderBrowserButton.Margin = new System.Windows.Forms.Padding(0);
this.errorsFolderBrowserButton.Name = "errorsFolderBrowserButton";
this.errorsFolderBrowserButton.Size = new System.Drawing.Size(36, 40);
this.errorsFolderBrowserButton.Size = new System.Drawing.Size(32, 32);
this.errorsFolderBrowserButton.TabIndex = 8;
this.errorsFolderBrowserButton.TextAlign = System.Drawing.ContentAlignment.TopLeft;
this.errorsFolderBrowserButton.UseVisualStyleBackColor = true;
@ -275,19 +278,19 @@ namespace RecurringIntegrationsScheduler.Forms
// errorsFolder
//
this.errorsFolder.Enabled = false;
this.errorsFolder.Location = new System.Drawing.Point(18, 322);
this.errorsFolder.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5);
this.errorsFolder.Location = new System.Drawing.Point(16, 258);
this.errorsFolder.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4);
this.errorsFolder.Name = "errorsFolder";
this.errorsFolder.Size = new System.Drawing.Size(278, 26);
this.errorsFolder.Size = new System.Drawing.Size(248, 22);
this.errorsFolder.TabIndex = 7;
//
// errorsFolderLabel
//
this.errorsFolderLabel.AutoSize = true;
this.errorsFolderLabel.Location = new System.Drawing.Point(14, 295);
this.errorsFolderLabel.Location = new System.Drawing.Point(12, 236);
this.errorsFolderLabel.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
this.errorsFolderLabel.Name = "errorsFolderLabel";
this.errorsFolderLabel.Size = new System.Drawing.Size(96, 20);
this.errorsFolderLabel.Size = new System.Drawing.Size(87, 17);
this.errorsFolderLabel.TabIndex = 11;
this.errorsFolderLabel.Text = "Errors folder";
//
@ -295,10 +298,10 @@ namespace RecurringIntegrationsScheduler.Forms
//
this.downloadFolderBrowserButton.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(238)));
this.downloadFolderBrowserButton.Image = global::RecurringIntegrationsScheduler.Properties.Resources.Folder_open_32xMD_exp;
this.downloadFolderBrowserButton.Location = new System.Drawing.Point(303, 222);
this.downloadFolderBrowserButton.Location = new System.Drawing.Point(269, 178);
this.downloadFolderBrowserButton.Margin = new System.Windows.Forms.Padding(0);
this.downloadFolderBrowserButton.Name = "downloadFolderBrowserButton";
this.downloadFolderBrowserButton.Size = new System.Drawing.Size(36, 40);
this.downloadFolderBrowserButton.Size = new System.Drawing.Size(32, 32);
this.downloadFolderBrowserButton.TabIndex = 5;
this.downloadFolderBrowserButton.TextAlign = System.Drawing.ContentAlignment.TopLeft;
this.downloadFolderBrowserButton.UseVisualStyleBackColor = true;
@ -306,39 +309,39 @@ namespace RecurringIntegrationsScheduler.Forms
//
// downloadFolder
//
this.downloadFolder.Location = new System.Drawing.Point(20, 226);
this.downloadFolder.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5);
this.downloadFolder.Location = new System.Drawing.Point(18, 181);
this.downloadFolder.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4);
this.downloadFolder.Name = "downloadFolder";
this.downloadFolder.Size = new System.Drawing.Size(278, 26);
this.downloadFolder.Size = new System.Drawing.Size(248, 22);
this.downloadFolder.TabIndex = 4;
this.downloadFolder.TextChanged += new System.EventHandler(this.DownloadFolder_TextChanged);
//
// downloadFolderLabel
//
this.downloadFolderLabel.AutoSize = true;
this.downloadFolderLabel.Location = new System.Drawing.Point(15, 200);
this.downloadFolderLabel.Location = new System.Drawing.Point(13, 160);
this.downloadFolderLabel.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
this.downloadFolderLabel.Name = "downloadFolderLabel";
this.downloadFolderLabel.Size = new System.Drawing.Size(124, 20);
this.downloadFolderLabel.Size = new System.Drawing.Size(110, 17);
this.downloadFolderLabel.TabIndex = 8;
this.downloadFolderLabel.Text = "Download folder";
//
// jobDescription
//
this.jobDescription.Location = new System.Drawing.Point(16, 140);
this.jobDescription.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5);
this.jobDescription.Location = new System.Drawing.Point(14, 112);
this.jobDescription.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4);
this.jobDescription.Multiline = true;
this.jobDescription.Name = "jobDescription";
this.jobDescription.Size = new System.Drawing.Size(314, 52);
this.jobDescription.Size = new System.Drawing.Size(280, 42);
this.jobDescription.TabIndex = 3;
//
// jobDescriptionLabel
//
this.jobDescriptionLabel.AutoSize = true;
this.jobDescriptionLabel.Location = new System.Drawing.Point(14, 114);
this.jobDescriptionLabel.Location = new System.Drawing.Point(12, 91);
this.jobDescriptionLabel.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
this.jobDescriptionLabel.Name = "jobDescriptionLabel";
this.jobDescriptionLabel.Size = new System.Drawing.Size(89, 20);
this.jobDescriptionLabel.Size = new System.Drawing.Size(79, 17);
this.jobDescriptionLabel.TabIndex = 4;
this.jobDescriptionLabel.Text = "Description";
//
@ -346,38 +349,38 @@ namespace RecurringIntegrationsScheduler.Forms
//
this.jobGroupComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.jobGroupComboBox.FormattingEnabled = true;
this.jobGroupComboBox.Location = new System.Drawing.Point(75, 75);
this.jobGroupComboBox.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5);
this.jobGroupComboBox.Location = new System.Drawing.Point(67, 60);
this.jobGroupComboBox.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4);
this.jobGroupComboBox.Name = "jobGroupComboBox";
this.jobGroupComboBox.Size = new System.Drawing.Size(258, 28);
this.jobGroupComboBox.Size = new System.Drawing.Size(230, 24);
this.jobGroupComboBox.Sorted = true;
this.jobGroupComboBox.TabIndex = 2;
//
// jobGroupLabel
//
this.jobGroupLabel.AutoSize = true;
this.jobGroupLabel.Location = new System.Drawing.Point(14, 80);
this.jobGroupLabel.Location = new System.Drawing.Point(12, 64);
this.jobGroupLabel.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
this.jobGroupLabel.Name = "jobGroupLabel";
this.jobGroupLabel.Size = new System.Drawing.Size(54, 20);
this.jobGroupLabel.Size = new System.Drawing.Size(48, 17);
this.jobGroupLabel.TabIndex = 2;
this.jobGroupLabel.Text = "Group";
//
// jobName
//
this.jobName.Location = new System.Drawing.Point(75, 26);
this.jobName.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5);
this.jobName.Location = new System.Drawing.Point(67, 21);
this.jobName.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4);
this.jobName.Name = "jobName";
this.jobName.Size = new System.Drawing.Size(258, 26);
this.jobName.Size = new System.Drawing.Size(230, 22);
this.jobName.TabIndex = 1;
//
// jobNameLabel
//
this.jobNameLabel.AutoSize = true;
this.jobNameLabel.Location = new System.Drawing.Point(14, 31);
this.jobNameLabel.Location = new System.Drawing.Point(12, 25);
this.jobNameLabel.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
this.jobNameLabel.Name = "jobNameLabel";
this.jobNameLabel.Size = new System.Drawing.Size(51, 20);
this.jobNameLabel.Size = new System.Drawing.Size(45, 17);
this.jobNameLabel.TabIndex = 0;
this.jobNameLabel.Text = "Name";
//
@ -390,11 +393,11 @@ namespace RecurringIntegrationsScheduler.Forms
this.axDetailsGroupBox.Controls.Add(this.userComboBox);
this.axDetailsGroupBox.Controls.Add(this.instanceLabel);
this.axDetailsGroupBox.Controls.Add(this.instanceComboBox);
this.axDetailsGroupBox.Location = new System.Drawing.Point(370, 20);
this.axDetailsGroupBox.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5);
this.axDetailsGroupBox.Location = new System.Drawing.Point(329, 16);
this.axDetailsGroupBox.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4);
this.axDetailsGroupBox.Name = "axDetailsGroupBox";
this.axDetailsGroupBox.Padding = new System.Windows.Forms.Padding(4, 5, 4, 5);
this.axDetailsGroupBox.Size = new System.Drawing.Size(345, 195);
this.axDetailsGroupBox.Padding = new System.Windows.Forms.Padding(4, 4, 4, 4);
this.axDetailsGroupBox.Size = new System.Drawing.Size(307, 156);
this.axDetailsGroupBox.TabIndex = 1;
this.axDetailsGroupBox.TabStop = false;
this.axDetailsGroupBox.Text = "Dynamics details";
@ -402,10 +405,10 @@ namespace RecurringIntegrationsScheduler.Forms
// aadApplicationLabel
//
this.aadApplicationLabel.AutoSize = true;
this.aadApplicationLabel.Location = new System.Drawing.Point(14, 120);
this.aadApplicationLabel.Location = new System.Drawing.Point(12, 96);
this.aadApplicationLabel.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
this.aadApplicationLabel.Name = "aadApplicationLabel";
this.aadApplicationLabel.Size = new System.Drawing.Size(123, 20);
this.aadApplicationLabel.Size = new System.Drawing.Size(108, 17);
this.aadApplicationLabel.TabIndex = 34;
this.aadApplicationLabel.Text = "AAD application";
//
@ -413,29 +416,29 @@ namespace RecurringIntegrationsScheduler.Forms
//
this.aadApplicationComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.aadApplicationComboBox.FormattingEnabled = true;
this.aadApplicationComboBox.Location = new System.Drawing.Point(154, 115);
this.aadApplicationComboBox.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5);
this.aadApplicationComboBox.Location = new System.Drawing.Point(137, 92);
this.aadApplicationComboBox.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4);
this.aadApplicationComboBox.Name = "aadApplicationComboBox";
this.aadApplicationComboBox.Size = new System.Drawing.Size(180, 28);
this.aadApplicationComboBox.Size = new System.Drawing.Size(160, 24);
this.aadApplicationComboBox.TabIndex = 17;
//
// authMethodPanel
//
this.authMethodPanel.Controls.Add(this.serviceAuthRadioButton);
this.authMethodPanel.Controls.Add(this.userAuthRadioButton);
this.authMethodPanel.Location = new System.Drawing.Point(12, 68);
this.authMethodPanel.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5);
this.authMethodPanel.Location = new System.Drawing.Point(11, 54);
this.authMethodPanel.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4);
this.authMethodPanel.Name = "authMethodPanel";
this.authMethodPanel.Size = new System.Drawing.Size(322, 38);
this.authMethodPanel.Size = new System.Drawing.Size(286, 30);
this.authMethodPanel.TabIndex = 31;
//
// serviceAuthRadioButton
//
this.serviceAuthRadioButton.AutoSize = true;
this.serviceAuthRadioButton.Location = new System.Drawing.Point(177, 5);
this.serviceAuthRadioButton.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5);
this.serviceAuthRadioButton.Location = new System.Drawing.Point(157, 4);
this.serviceAuthRadioButton.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4);
this.serviceAuthRadioButton.Name = "serviceAuthRadioButton";
this.serviceAuthRadioButton.Size = new System.Drawing.Size(122, 24);
this.serviceAuthRadioButton.Size = new System.Drawing.Size(108, 21);
this.serviceAuthRadioButton.TabIndex = 16;
this.serviceAuthRadioButton.Text = global::RecurringIntegrationsScheduler.Properties.Resources.Service_auth;
this.serviceAuthRadioButton.UseVisualStyleBackColor = true;
@ -445,10 +448,10 @@ namespace RecurringIntegrationsScheduler.Forms
//
this.userAuthRadioButton.AutoSize = true;
this.userAuthRadioButton.Checked = true;
this.userAuthRadioButton.Location = new System.Drawing.Point(4, 5);
this.userAuthRadioButton.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5);
this.userAuthRadioButton.Location = new System.Drawing.Point(4, 4);
this.userAuthRadioButton.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4);
this.userAuthRadioButton.Name = "userAuthRadioButton";
this.userAuthRadioButton.Size = new System.Drawing.Size(104, 24);
this.userAuthRadioButton.Size = new System.Drawing.Size(91, 21);
this.userAuthRadioButton.TabIndex = 15;
this.userAuthRadioButton.TabStop = true;
this.userAuthRadioButton.Text = global::RecurringIntegrationsScheduler.Properties.Resources.User_auth;
@ -457,10 +460,10 @@ namespace RecurringIntegrationsScheduler.Forms
// userLabel
//
this.userLabel.AutoSize = true;
this.userLabel.Location = new System.Drawing.Point(93, 160);
this.userLabel.Location = new System.Drawing.Point(83, 128);
this.userLabel.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
this.userLabel.Name = "userLabel";
this.userLabel.Size = new System.Drawing.Size(43, 20);
this.userLabel.Size = new System.Drawing.Size(38, 17);
this.userLabel.TabIndex = 19;
this.userLabel.Text = "User";
//
@ -468,19 +471,19 @@ namespace RecurringIntegrationsScheduler.Forms
//
this.userComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.userComboBox.FormattingEnabled = true;
this.userComboBox.Location = new System.Drawing.Point(154, 155);
this.userComboBox.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5);
this.userComboBox.Location = new System.Drawing.Point(137, 124);
this.userComboBox.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4);
this.userComboBox.Name = "userComboBox";
this.userComboBox.Size = new System.Drawing.Size(180, 28);
this.userComboBox.Size = new System.Drawing.Size(160, 24);
this.userComboBox.TabIndex = 18;
//
// instanceLabel
//
this.instanceLabel.AutoSize = true;
this.instanceLabel.Location = new System.Drawing.Point(28, 31);
this.instanceLabel.Location = new System.Drawing.Point(25, 25);
this.instanceLabel.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
this.instanceLabel.Name = "instanceLabel";
this.instanceLabel.Size = new System.Drawing.Size(71, 20);
this.instanceLabel.Size = new System.Drawing.Size(61, 17);
this.instanceLabel.TabIndex = 16;
this.instanceLabel.Text = "Instance";
//
@ -488,10 +491,10 @@ namespace RecurringIntegrationsScheduler.Forms
//
this.instanceComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.instanceComboBox.FormattingEnabled = true;
this.instanceComboBox.Location = new System.Drawing.Point(114, 26);
this.instanceComboBox.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5);
this.instanceComboBox.Location = new System.Drawing.Point(101, 21);
this.instanceComboBox.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4);
this.instanceComboBox.Name = "instanceComboBox";
this.instanceComboBox.Size = new System.Drawing.Size(218, 28);
this.instanceComboBox.Size = new System.Drawing.Size(194, 24);
this.instanceComboBox.TabIndex = 14;
//
// recurrenceGroupBox
@ -512,21 +515,21 @@ namespace RecurringIntegrationsScheduler.Forms
this.recurrenceGroupBox.Controls.Add(this.startAtDateTimePicker);
this.recurrenceGroupBox.Controls.Add(this.minutesDateTimePicker);
this.recurrenceGroupBox.Controls.Add(this.hoursDateTimePicker);
this.recurrenceGroupBox.Location = new System.Drawing.Point(724, 20);
this.recurrenceGroupBox.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5);
this.recurrenceGroupBox.Location = new System.Drawing.Point(644, 16);
this.recurrenceGroupBox.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4);
this.recurrenceGroupBox.Name = "recurrenceGroupBox";
this.recurrenceGroupBox.Padding = new System.Windows.Forms.Padding(4, 5, 4, 5);
this.recurrenceGroupBox.Size = new System.Drawing.Size(345, 649);
this.recurrenceGroupBox.Padding = new System.Windows.Forms.Padding(4, 4, 4, 4);
this.recurrenceGroupBox.Size = new System.Drawing.Size(307, 519);
this.recurrenceGroupBox.TabIndex = 2;
this.recurrenceGroupBox.TabStop = false;
this.recurrenceGroupBox.Text = "Recurrence";
//
// moreExamplesButton
//
this.moreExamplesButton.Location = new System.Drawing.Point(237, 534);
this.moreExamplesButton.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5);
this.moreExamplesButton.Location = new System.Drawing.Point(211, 427);
this.moreExamplesButton.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4);
this.moreExamplesButton.Name = "moreExamplesButton";
this.moreExamplesButton.Size = new System.Drawing.Size(99, 102);
this.moreExamplesButton.Size = new System.Drawing.Size(88, 82);
this.moreExamplesButton.TabIndex = 27;
this.moreExamplesButton.Text = global::RecurringIntegrationsScheduler.Properties.Resources.More_examples;
this.moreExamplesButton.UseVisualStyleBackColor = true;
@ -535,22 +538,22 @@ namespace RecurringIntegrationsScheduler.Forms
// calculatedRunsTextBox
//
this.calculatedRunsTextBox.BackColor = System.Drawing.SystemColors.Control;
this.calculatedRunsTextBox.Location = new System.Drawing.Point(9, 534);
this.calculatedRunsTextBox.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5);
this.calculatedRunsTextBox.Location = new System.Drawing.Point(8, 427);
this.calculatedRunsTextBox.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4);
this.calculatedRunsTextBox.Multiline = true;
this.calculatedRunsTextBox.Name = "calculatedRunsTextBox";
this.calculatedRunsTextBox.ScrollBars = System.Windows.Forms.ScrollBars.Vertical;
this.calculatedRunsTextBox.Size = new System.Drawing.Size(216, 99);
this.calculatedRunsTextBox.Size = new System.Drawing.Size(192, 80);
this.calculatedRunsTextBox.TabIndex = 26;
this.calculatedRunsTextBox.TabStop = false;
//
// calculateNextRunsButton
//
this.calculateNextRunsButton.Enabled = false;
this.calculateNextRunsButton.Location = new System.Drawing.Point(9, 485);
this.calculateNextRunsButton.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5);
this.calculateNextRunsButton.Location = new System.Drawing.Point(8, 388);
this.calculateNextRunsButton.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4);
this.calculateNextRunsButton.Name = "calculateNextRunsButton";
this.calculateNextRunsButton.Size = new System.Drawing.Size(327, 35);
this.calculateNextRunsButton.Size = new System.Drawing.Size(291, 28);
this.calculateNextRunsButton.TabIndex = 25;
this.calculateNextRunsButton.Text = global::RecurringIntegrationsScheduler.Properties.Resources.Calculate_next_100_runs_of_cron_trigger;
this.calculateNextRunsButton.UseVisualStyleBackColor = true;
@ -559,10 +562,10 @@ namespace RecurringIntegrationsScheduler.Forms
// cronDocsLinkLabel
//
this.cronDocsLinkLabel.AutoSize = true;
this.cronDocsLinkLabel.Location = new System.Drawing.Point(9, 454);
this.cronDocsLinkLabel.Location = new System.Drawing.Point(8, 363);
this.cronDocsLinkLabel.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
this.cronDocsLinkLabel.Name = "cronDocsLinkLabel";
this.cronDocsLinkLabel.Size = new System.Drawing.Size(259, 20);
this.cronDocsLinkLabel.Size = new System.Drawing.Size(232, 17);
this.cronDocsLinkLabel.TabIndex = 30;
this.cronDocsLinkLabel.TabStop = true;
this.cronDocsLinkLabel.Text = "Quartz cron triggers documentation";
@ -572,19 +575,19 @@ namespace RecurringIntegrationsScheduler.Forms
//
this.triggerTypePanel.Controls.Add(this.cronTriggerRadioButton);
this.triggerTypePanel.Controls.Add(this.simpleTriggerRadioButton);
this.triggerTypePanel.Location = new System.Drawing.Point(14, 69);
this.triggerTypePanel.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5);
this.triggerTypePanel.Location = new System.Drawing.Point(12, 55);
this.triggerTypePanel.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4);
this.triggerTypePanel.Name = "triggerTypePanel";
this.triggerTypePanel.Size = new System.Drawing.Size(321, 35);
this.triggerTypePanel.Size = new System.Drawing.Size(285, 28);
this.triggerTypePanel.TabIndex = 29;
//
// cronTriggerRadioButton
//
this.cronTriggerRadioButton.AutoSize = true;
this.cronTriggerRadioButton.Location = new System.Drawing.Point(194, 8);
this.cronTriggerRadioButton.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5);
this.cronTriggerRadioButton.Location = new System.Drawing.Point(172, 6);
this.cronTriggerRadioButton.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4);
this.cronTriggerRadioButton.Name = "cronTriggerRadioButton";
this.cronTriggerRadioButton.Size = new System.Drawing.Size(117, 24);
this.cronTriggerRadioButton.Size = new System.Drawing.Size(104, 21);
this.cronTriggerRadioButton.TabIndex = 23;
this.cronTriggerRadioButton.Text = global::RecurringIntegrationsScheduler.Properties.Resources.Cron_trigger;
this.cronTriggerRadioButton.UseVisualStyleBackColor = true;
@ -594,10 +597,10 @@ namespace RecurringIntegrationsScheduler.Forms
//
this.simpleTriggerRadioButton.AutoSize = true;
this.simpleTriggerRadioButton.Checked = true;
this.simpleTriggerRadioButton.Location = new System.Drawing.Point(4, 5);
this.simpleTriggerRadioButton.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5);
this.simpleTriggerRadioButton.Location = new System.Drawing.Point(4, 4);
this.simpleTriggerRadioButton.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4);
this.simpleTriggerRadioButton.Name = "simpleTriggerRadioButton";
this.simpleTriggerRadioButton.Size = new System.Drawing.Size(131, 24);
this.simpleTriggerRadioButton.Size = new System.Drawing.Size(116, 21);
this.simpleTriggerRadioButton.TabIndex = 22;
this.simpleTriggerRadioButton.TabStop = true;
this.simpleTriggerRadioButton.Text = global::RecurringIntegrationsScheduler.Properties.Resources.Simple_trigger;
@ -606,10 +609,10 @@ namespace RecurringIntegrationsScheduler.Forms
// buildCronLabel
//
this.buildCronLabel.AutoSize = true;
this.buildCronLabel.Location = new System.Drawing.Point(9, 422);
this.buildCronLabel.Location = new System.Drawing.Point(8, 338);
this.buildCronLabel.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
this.buildCronLabel.Name = "buildCronLabel";
this.buildCronLabel.Size = new System.Drawing.Size(177, 20);
this.buildCronLabel.Size = new System.Drawing.Size(159, 17);
this.buildCronLabel.TabIndex = 26;
this.buildCronLabel.Text = "Build cron expression at";
//
@ -617,22 +620,22 @@ namespace RecurringIntegrationsScheduler.Forms
//
this.cronTriggerInfoTextBox.BackColor = System.Drawing.SystemColors.Control;
this.cronTriggerInfoTextBox.BorderStyle = System.Windows.Forms.BorderStyle.None;
this.cronTriggerInfoTextBox.Location = new System.Drawing.Point(14, 178);
this.cronTriggerInfoTextBox.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5);
this.cronTriggerInfoTextBox.Location = new System.Drawing.Point(12, 142);
this.cronTriggerInfoTextBox.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4);
this.cronTriggerInfoTextBox.Multiline = true;
this.cronTriggerInfoTextBox.Name = "cronTriggerInfoTextBox";
this.cronTriggerInfoTextBox.Size = new System.Drawing.Size(312, 238);
this.cronTriggerInfoTextBox.Size = new System.Drawing.Size(277, 190);
this.cronTriggerInfoTextBox.TabIndex = 25;
this.cronTriggerInfoTextBox.TabStop = false;
this.cronTriggerInfoTextBox.Text = RecurringIntegrationsScheduler.Properties.Resources.cronTriggerInfo;
this.cronTriggerInfoTextBox.Text = resources.GetString("cronTriggerInfoTextBox.Text");
//
// cronmakerLinkLabel
//
this.cronmakerLinkLabel.AutoSize = true;
this.cronmakerLinkLabel.Location = new System.Drawing.Point(186, 422);
this.cronmakerLinkLabel.Location = new System.Drawing.Point(165, 338);
this.cronmakerLinkLabel.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
this.cronmakerLinkLabel.Name = "cronmakerLinkLabel";
this.cronmakerLinkLabel.Size = new System.Drawing.Size(118, 20);
this.cronmakerLinkLabel.Size = new System.Drawing.Size(105, 17);
this.cronmakerLinkLabel.TabIndex = 24;
this.cronmakerLinkLabel.TabStop = true;
this.cronmakerLinkLabel.Text = "cronmaker.com";
@ -641,30 +644,30 @@ namespace RecurringIntegrationsScheduler.Forms
// cronExpressionLabel
//
this.cronExpressionLabel.AutoSize = true;
this.cronExpressionLabel.Location = new System.Drawing.Point(9, 114);
this.cronExpressionLabel.Location = new System.Drawing.Point(8, 91);
this.cronExpressionLabel.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
this.cronExpressionLabel.Name = "cronExpressionLabel";
this.cronExpressionLabel.Size = new System.Drawing.Size(123, 20);
this.cronExpressionLabel.Size = new System.Drawing.Size(110, 17);
this.cronExpressionLabel.TabIndex = 23;
this.cronExpressionLabel.Text = "Cron expression";
//
// cronExpressionTextBox
//
this.cronExpressionTextBox.Enabled = false;
this.cronExpressionTextBox.Location = new System.Drawing.Point(14, 138);
this.cronExpressionTextBox.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5);
this.cronExpressionTextBox.Location = new System.Drawing.Point(12, 110);
this.cronExpressionTextBox.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4);
this.cronExpressionTextBox.Name = "cronExpressionTextBox";
this.cronExpressionTextBox.Size = new System.Drawing.Size(320, 26);
this.cronExpressionTextBox.Size = new System.Drawing.Size(285, 22);
this.cronExpressionTextBox.TabIndex = 24;
this.cronExpressionTextBox.Text = "0 0/15 8-18 ? * MON-FRI *";
//
// minutesLabel
//
this.minutesLabel.AutoSize = true;
this.minutesLabel.Location = new System.Drawing.Point(96, 34);
this.minutesLabel.Location = new System.Drawing.Point(85, 27);
this.minutesLabel.Margin = new System.Windows.Forms.Padding(0);
this.minutesLabel.Name = "minutesLabel";
this.minutesLabel.Size = new System.Drawing.Size(26, 20);
this.minutesLabel.Size = new System.Drawing.Size(23, 17);
this.minutesLabel.TabIndex = 5;
this.minutesLabel.Text = "M:";
this.minutesLabel.TextAlign = System.Drawing.ContentAlignment.TopRight;
@ -672,10 +675,10 @@ namespace RecurringIntegrationsScheduler.Forms
// hoursLabel
//
this.hoursLabel.AutoSize = true;
this.hoursLabel.Location = new System.Drawing.Point(9, 34);
this.hoursLabel.Location = new System.Drawing.Point(8, 27);
this.hoursLabel.Margin = new System.Windows.Forms.Padding(0);
this.hoursLabel.Name = "hoursLabel";
this.hoursLabel.Size = new System.Drawing.Size(25, 20);
this.hoursLabel.Size = new System.Drawing.Size(22, 17);
this.hoursLabel.TabIndex = 4;
this.hoursLabel.Text = "H:";
this.hoursLabel.TextAlign = System.Drawing.ContentAlignment.TopRight;
@ -683,10 +686,10 @@ namespace RecurringIntegrationsScheduler.Forms
// startAtLabel
//
this.startAtLabel.AutoSize = true;
this.startAtLabel.Location = new System.Drawing.Point(189, 34);
this.startAtLabel.Location = new System.Drawing.Point(168, 27);
this.startAtLabel.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
this.startAtLabel.Name = "startAtLabel";
this.startAtLabel.Size = new System.Drawing.Size(59, 20);
this.startAtLabel.Size = new System.Drawing.Size(52, 17);
this.startAtLabel.TabIndex = 3;
this.startAtLabel.Text = "start at";
this.startAtLabel.TextAlign = System.Drawing.ContentAlignment.TopRight;
@ -695,11 +698,11 @@ namespace RecurringIntegrationsScheduler.Forms
//
this.startAtDateTimePicker.CustomFormat = "HH:mm";
this.startAtDateTimePicker.Format = System.Windows.Forms.DateTimePickerFormat.Custom;
this.startAtDateTimePicker.Location = new System.Drawing.Point(248, 29);
this.startAtDateTimePicker.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5);
this.startAtDateTimePicker.Location = new System.Drawing.Point(220, 23);
this.startAtDateTimePicker.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4);
this.startAtDateTimePicker.Name = "startAtDateTimePicker";
this.startAtDateTimePicker.ShowUpDown = true;
this.startAtDateTimePicker.Size = new System.Drawing.Size(76, 26);
this.startAtDateTimePicker.Size = new System.Drawing.Size(68, 22);
this.startAtDateTimePicker.TabIndex = 21;
this.startAtDateTimePicker.Value = new System.DateTime(2016, 6, 26, 0, 0, 0, 0);
//
@ -707,11 +710,11 @@ namespace RecurringIntegrationsScheduler.Forms
//
this.minutesDateTimePicker.CustomFormat = "mm";
this.minutesDateTimePicker.Format = System.Windows.Forms.DateTimePickerFormat.Custom;
this.minutesDateTimePicker.Location = new System.Drawing.Point(124, 29);
this.minutesDateTimePicker.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5);
this.minutesDateTimePicker.Location = new System.Drawing.Point(110, 23);
this.minutesDateTimePicker.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4);
this.minutesDateTimePicker.Name = "minutesDateTimePicker";
this.minutesDateTimePicker.ShowUpDown = true;
this.minutesDateTimePicker.Size = new System.Drawing.Size(50, 26);
this.minutesDateTimePicker.Size = new System.Drawing.Size(45, 22);
this.minutesDateTimePicker.TabIndex = 20;
this.minutesDateTimePicker.Value = new System.DateTime(2016, 6, 26, 0, 1, 0, 0);
//
@ -719,11 +722,11 @@ namespace RecurringIntegrationsScheduler.Forms
//
this.hoursDateTimePicker.CustomFormat = "HH";
this.hoursDateTimePicker.Format = System.Windows.Forms.DateTimePickerFormat.Custom;
this.hoursDateTimePicker.Location = new System.Drawing.Point(36, 29);
this.hoursDateTimePicker.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5);
this.hoursDateTimePicker.Location = new System.Drawing.Point(32, 23);
this.hoursDateTimePicker.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4);
this.hoursDateTimePicker.Name = "hoursDateTimePicker";
this.hoursDateTimePicker.ShowUpDown = true;
this.hoursDateTimePicker.Size = new System.Drawing.Size(50, 26);
this.hoursDateTimePicker.Size = new System.Drawing.Size(45, 22);
this.hoursDateTimePicker.TabIndex = 19;
this.hoursDateTimePicker.Value = new System.DateTime(2016, 6, 26, 0, 0, 0, 0);
//
@ -733,21 +736,21 @@ namespace RecurringIntegrationsScheduler.Forms
this.bottomToolStrip.ImageScalingSize = new System.Drawing.Size(20, 20);
this.bottomToolStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.cancelButton,
this.addJobButton});
this.bottomToolStrip.Location = new System.Drawing.Point(0, 677);
this.addJobButton,
this.toolStripDropDownButton});
this.bottomToolStrip.Location = new System.Drawing.Point(0, 547);
this.bottomToolStrip.Name = "bottomToolStrip";
this.bottomToolStrip.Padding = new System.Windows.Forms.Padding(0, 0, 2, 0);
this.bottomToolStrip.Size = new System.Drawing.Size(1074, 32);
this.bottomToolStrip.Size = new System.Drawing.Size(958, 27);
this.bottomToolStrip.TabIndex = 3;
//
// cancelButton
//
this.cancelButton.Alignment = System.Windows.Forms.ToolStripItemAlignment.Right;
this.cancelButton.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Text;
this.cancelButton.Image = ((System.Drawing.Image)(resources.GetObject("cancelButton.Image")));
this.cancelButton.ImageTransparentColor = System.Drawing.Color.Magenta;
this.cancelButton.Name = "cancelButton";
this.cancelButton.Size = new System.Drawing.Size(67, 29);
this.cancelButton.Size = new System.Drawing.Size(57, 24);
this.cancelButton.Text = global::RecurringIntegrationsScheduler.Properties.Resources.Cancel;
this.cancelButton.Click += new System.EventHandler(this.CancelButton_Click);
//
@ -755,10 +758,9 @@ namespace RecurringIntegrationsScheduler.Forms
//
this.addJobButton.Alignment = System.Windows.Forms.ToolStripItemAlignment.Right;
this.addJobButton.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Text;
this.addJobButton.Image = ((System.Drawing.Image)(resources.GetObject("addJobButton.Image")));
this.addJobButton.ImageTransparentColor = System.Drawing.Color.Magenta;
this.addJobButton.Name = "addJobButton";
this.addJobButton.Size = new System.Drawing.Size(146, 29);
this.addJobButton.Size = new System.Drawing.Size(121, 24);
this.addJobButton.Text = global::RecurringIntegrationsScheduler.Properties.Resources.Add_to_schedule;
this.addJobButton.Click += new System.EventHandler(this.AddJobButton_Click);
//
@ -768,26 +770,26 @@ namespace RecurringIntegrationsScheduler.Forms
this.retryPolicyGroupBox.Controls.Add(this.retriesCountUpDown);
this.retryPolicyGroupBox.Controls.Add(this.label2);
this.retryPolicyGroupBox.Controls.Add(this.label1);
this.retryPolicyGroupBox.Location = new System.Drawing.Point(369, 225);
this.retryPolicyGroupBox.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5);
this.retryPolicyGroupBox.Location = new System.Drawing.Point(328, 180);
this.retryPolicyGroupBox.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4);
this.retryPolicyGroupBox.Name = "retryPolicyGroupBox";
this.retryPolicyGroupBox.Padding = new System.Windows.Forms.Padding(4, 5, 4, 5);
this.retryPolicyGroupBox.Size = new System.Drawing.Size(346, 103);
this.retryPolicyGroupBox.Padding = new System.Windows.Forms.Padding(4, 4, 4, 4);
this.retryPolicyGroupBox.Size = new System.Drawing.Size(308, 82);
this.retryPolicyGroupBox.TabIndex = 7;
this.retryPolicyGroupBox.TabStop = false;
this.retryPolicyGroupBox.Text = "Retry policy";
//
// retriesDelayUpDown
//
this.retriesDelayUpDown.Location = new System.Drawing.Point(156, 60);
this.retriesDelayUpDown.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5);
this.retriesDelayUpDown.Location = new System.Drawing.Point(139, 48);
this.retriesDelayUpDown.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4);
this.retriesDelayUpDown.Maximum = new decimal(new int[] {
86400,
0,
0,
0});
this.retriesDelayUpDown.Name = "retriesDelayUpDown";
this.retriesDelayUpDown.Size = new System.Drawing.Size(99, 26);
this.retriesDelayUpDown.Size = new System.Drawing.Size(88, 22);
this.retriesDelayUpDown.TabIndex = 7;
this.retriesDelayUpDown.Value = new decimal(new int[] {
60,
@ -797,15 +799,15 @@ namespace RecurringIntegrationsScheduler.Forms
//
// retriesCountUpDown
//
this.retriesCountUpDown.Location = new System.Drawing.Point(156, 23);
this.retriesCountUpDown.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5);
this.retriesCountUpDown.Location = new System.Drawing.Point(139, 18);
this.retriesCountUpDown.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4);
this.retriesCountUpDown.Maximum = new decimal(new int[] {
9999,
0,
0,
0});
this.retriesCountUpDown.Name = "retriesCountUpDown";
this.retriesCountUpDown.Size = new System.Drawing.Size(99, 26);
this.retriesCountUpDown.Size = new System.Drawing.Size(88, 22);
this.retriesCountUpDown.TabIndex = 6;
this.retriesCountUpDown.Value = new decimal(new int[] {
1,
@ -816,29 +818,31 @@ namespace RecurringIntegrationsScheduler.Forms
// label2
//
this.label2.AutoSize = true;
this.label2.Location = new System.Drawing.Point(10, 68);
this.label2.Location = new System.Drawing.Point(9, 54);
this.label2.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
this.label2.Name = "label2";
this.label2.Size = new System.Drawing.Size(123, 20);
this.label2.Size = new System.Drawing.Size(111, 17);
this.label2.TabIndex = 2;
this.label2.Text = "Delay (seconds)";
//
// label1
//
this.label1.AutoSize = true;
this.label1.Location = new System.Drawing.Point(10, 31);
this.label1.Location = new System.Drawing.Point(9, 25);
this.label1.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
this.label1.Name = "label1";
this.label1.Size = new System.Drawing.Size(131, 20);
this.label1.Size = new System.Drawing.Size(118, 17);
this.label1.TabIndex = 0;
this.label1.Text = "Number of retries";
//
// groupBoxExceptions
//
this.groupBoxExceptions.Controls.Add(this.pauseOnExceptionsCheckBox);
this.groupBoxExceptions.Location = new System.Drawing.Point(369, 336);
this.groupBoxExceptions.Location = new System.Drawing.Point(328, 269);
this.groupBoxExceptions.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2);
this.groupBoxExceptions.Name = "groupBoxExceptions";
this.groupBoxExceptions.Size = new System.Drawing.Size(345, 59);
this.groupBoxExceptions.Padding = new System.Windows.Forms.Padding(3, 2, 3, 2);
this.groupBoxExceptions.Size = new System.Drawing.Size(307, 47);
this.groupBoxExceptions.TabIndex = 10;
this.groupBoxExceptions.TabStop = false;
this.groupBoxExceptions.Text = "Exceptions";
@ -848,18 +852,37 @@ namespace RecurringIntegrationsScheduler.Forms
this.pauseOnExceptionsCheckBox.AutoSize = true;
this.pauseOnExceptionsCheckBox.Checked = true;
this.pauseOnExceptionsCheckBox.CheckState = System.Windows.Forms.CheckState.Checked;
this.pauseOnExceptionsCheckBox.Location = new System.Drawing.Point(13, 26);
this.pauseOnExceptionsCheckBox.Location = new System.Drawing.Point(12, 21);
this.pauseOnExceptionsCheckBox.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2);
this.pauseOnExceptionsCheckBox.Name = "pauseOnExceptionsCheckBox";
this.pauseOnExceptionsCheckBox.Size = new System.Drawing.Size(270, 24);
this.pauseOnExceptionsCheckBox.Size = new System.Drawing.Size(240, 21);
this.pauseOnExceptionsCheckBox.TabIndex = 0;
this.pauseOnExceptionsCheckBox.Text = "Pause job when exception occurs";
this.pauseOnExceptionsCheckBox.UseVisualStyleBackColor = true;
//
// toolStripDropDownButton
//
this.toolStripDropDownButton.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Text;
this.toolStripDropDownButton.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.jobOptions});
this.toolStripDropDownButton.Image = ((System.Drawing.Image)(resources.GetObject("toolStripDropDownButton.Image")));
this.toolStripDropDownButton.ImageTransparentColor = System.Drawing.Color.Magenta;
this.toolStripDropDownButton.Name = "toolStripDropDownButton";
this.toolStripDropDownButton.Size = new System.Drawing.Size(32, 24);
this.toolStripDropDownButton.Text = "...";
//
// jobOptions
//
this.jobOptions.Name = "jobOptions";
this.jobOptions.Size = new System.Drawing.Size(181, 26);
this.jobOptions.Text = "Options";
this.jobOptions.Click += new System.EventHandler(this.jobOptions_Click);
//
// ExportJob
//
this.AutoScaleDimensions = new System.Drawing.SizeF(9F, 20F);
this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 16F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(1074, 709);
this.ClientSize = new System.Drawing.Size(958, 574);
this.Controls.Add(this.groupBoxExceptions);
this.Controls.Add(this.retryPolicyGroupBox);
this.Controls.Add(this.bottomToolStrip);
@ -867,11 +890,11 @@ namespace RecurringIntegrationsScheduler.Forms
this.Controls.Add(this.axDetailsGroupBox);
this.Controls.Add(this.jobDetailsGroupBox);
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle;
this.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5);
this.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4);
this.MaximizeBox = false;
this.MaximumSize = new System.Drawing.Size(1096, 765);
this.MaximumSize = new System.Drawing.Size(976, 621);
this.MinimizeBox = false;
this.MinimumSize = new System.Drawing.Size(1096, 765);
this.MinimumSize = new System.Drawing.Size(976, 621);
this.Name = "ExportJob";
this.ShowIcon = false;
this.ShowInTaskbar = false;
@ -967,5 +990,7 @@ namespace RecurringIntegrationsScheduler.Forms
private System.Windows.Forms.NumericUpDown retriesCountUpDown;
private System.Windows.Forms.GroupBox groupBoxExceptions;
private System.Windows.Forms.CheckBox pauseOnExceptionsCheckBox;
private System.Windows.Forms.ToolStripDropDownButton toolStripDropDownButton;
private System.Windows.Forms.ToolStripMenuItem jobOptions;
}
}

Просмотреть файл

@ -40,6 +40,7 @@ namespace RecurringIntegrationsScheduler.Forms
public bool Cancelled { get; private set; }
public IJobDetail JobDetail { get; set; }
public ITrigger Trigger { get; set; }
private JobDataMap OptionsMap { get; set; }
private void ExportJobForm_Load(object sender, EventArgs e)
{
@ -75,6 +76,11 @@ namespace RecurringIntegrationsScheduler.Forms
errorsFolder.Text = Properties.Settings.Default.DownloadErrorsFolder;
OptionsMap = new JobDataMap
{
{ SettingsConstants.OdataActionRelativePath, OdataActionsConstants.ExportToPackageActionPath}
};
if ((JobDetail != null) && (Trigger != null))
{
jobName.Text = JobDetail.Key.Name;
@ -211,6 +217,11 @@ namespace RecurringIntegrationsScheduler.Forms
(JobDetail.JobDataMap[SettingsConstants.PauseJobOnException] != null) &&
Convert.ToBoolean(JobDetail.JobDataMap[SettingsConstants.PauseJobOnException].ToString());
OptionsMap = new JobDataMap
{
{ SettingsConstants.OdataActionRelativePath, JobDetail.JobDataMap[SettingsConstants.OdataActionRelativePath].ToString()}
};
Properties.Settings.Default.Save();
}
}
@ -386,7 +397,8 @@ namespace RecurringIntegrationsScheduler.Forms
{SettingsConstants.Interval, (interval.Value * 1000).ToString(CultureInfo.InvariantCulture)},
{SettingsConstants.RetryCount, retriesCountUpDown.Value.ToString(CultureInfo.InvariantCulture)},
{SettingsConstants.RetryDelay, retriesDelayUpDown.Value.ToString(CultureInfo.InvariantCulture)},
{SettingsConstants.PauseJobOnException, pauseOnExceptionsCheckBox.Checked.ToString()}
{SettingsConstants.PauseJobOnException, pauseOnExceptionsCheckBox.Checked.ToString()},
{SettingsConstants.OdataActionRelativePath, OptionsMap.GetString(SettingsConstants.OdataActionRelativePath)}
};
if (serviceAuthRadioButton.Checked)
{
@ -489,5 +501,25 @@ namespace RecurringIntegrationsScheduler.Forms
userComboBox.Enabled = !serviceAuthRadioButton.Checked;
}
private void jobOptions_Click(object sender, EventArgs e)
{
try
{
using (ExportJobOptions form = new ExportJobOptions())
{
form.OptionsMap = this.OptionsMap.Clone() as JobDataMap;
form.ShowDialog();
if (form.Cancelled || (form.OptionsMap == null)) return;
this.OptionsMap = form.OptionsMap.Clone() as JobDataMap;
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, Resources.Unexpected_error);
}
}
}
}

Просмотреть файл

@ -117,4 +117,31 @@
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<metadata name="folderBrowserDialog.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
<data name="cronTriggerInfoTextBox.Text" xml:space="preserve">
<value>With cron expression you can specify schedules such as “every Friday at noon”, or “every weekday and 9:30 am”, or even “every 5 minutes between 9:00 am and 10:00 am on every Monday, Wednesday and Friday during January”.
Default example above means: Each working day of the week (MON-FRI) run every 15 minutes (0/15) between 8:00 and 18:45 (8-18 - last run will be at 18:45)</value>
</data>
<metadata name="bottomToolStrip.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>212, 17</value>
</metadata>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="toolStripDropDownButton.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
YQUAAAAJcEhZcwAAEnQAABJ0Ad5mH3gAAAIDSURBVDhPpZLrS5NhGMb3j4SWh0oRQVExD4gonkDpg4hG
YKxG6WBogkMZKgPNCEVJFBGdGETEvgwyO9DJE5syZw3PIlPEE9pgBCLZ5XvdMB8Ew8gXbl54nuf63dd9
0OGSnwCahxbPRNPAPMw9Xpg6ZmF46kZZ0xSKzJPIrhpDWsVnpBhGkKx3nAX8Pv7z1zg8OoY/cITdn4fw
bf/C0kYAN3Ma/w3gWfZL5kzTKBxjWyK2DftwI9tyMYCZKXbNHaD91bLYJrDXsYbrWfUKwJrPE9M2M1Oc
VzOOpHI7Jr376Hi9ogHqFIANO0/MmmmbmSmm9a8ze+I4MrNWAdjtoJgWcx+PSzg166yZZ8xM8XvXDix9
c4jIqFYAjoriBV9AhEPv1mH/sonogha0afbZMMZz+yreTGyhpusHwtNNCsA5U1zS4BLxzJIfg299qO32
Ir7UJtZfftyATqeT+8o2D8JSjQrAJblrncYL7ZJ2+bfaFnC/1S1NjL3diRat7qrO7wLRP3HjWsojBeCo
mDEo5mNjuweFGvjWg2EBhCbpkW78htSHHwRyNdmgAFzPEee2iFkzayy2OLXzT4gr6UdUnlXrullsxxQ+
kx0g8BTA3aZlButjSTyjODq/WcQcW/B/Je4OQhLvKQDnzN1mp0nnkvAhR8VuMzNrpm1mpjgkoVwB/v8D
TgDQASA1MVpwzwAAAABJRU5ErkJggg==
</value>
</data>
</root>

125
Scheduler/Forms/ExportJobOptions.Designer.cs сгенерированный Normal file
Просмотреть файл

@ -0,0 +1,125 @@
using RecurringIntegrationsScheduler.Properties;
namespace RecurringIntegrationsScheduler.Forms
{
partial class ExportJobOptions
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.panel1 = new System.Windows.Forms.Panel();
this.ButtonCancel = new System.Windows.Forms.Button();
this.ButtonOK = new System.Windows.Forms.Button();
this.odataActionRelativePathLabel = new System.Windows.Forms.Label();
this.odataActionRelativePathTextBox = new System.Windows.Forms.TextBox();
this.panel1.SuspendLayout();
this.SuspendLayout();
//
// panel1
//
this.panel1.Controls.Add(this.ButtonCancel);
this.panel1.Controls.Add(this.ButtonOK);
this.panel1.Controls.Add(this.odataActionRelativePathLabel);
this.panel1.Controls.Add(this.odataActionRelativePathTextBox);
this.panel1.Location = new System.Drawing.Point(13, 12);
this.panel1.Name = "panel1";
this.panel1.Size = new System.Drawing.Size(496, 138);
this.panel1.TabIndex = 0;
//
// ButtonCancel
//
this.ButtonCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel;
this.ButtonCancel.Location = new System.Drawing.Point(258, 95);
this.ButtonCancel.Name = "ButtonCancel";
this.ButtonCancel.Size = new System.Drawing.Size(91, 35);
this.ButtonCancel.TabIndex = 9;
this.ButtonCancel.Text = global::RecurringIntegrationsScheduler.Properties.Resources.Cancel;
this.ButtonCancel.UseVisualStyleBackColor = true;
this.ButtonCancel.Click += new System.EventHandler(this.ButtonCancel_Click);
//
// ButtonOK
//
this.ButtonOK.DialogResult = System.Windows.Forms.DialogResult.OK;
this.ButtonOK.Location = new System.Drawing.Point(161, 95);
this.ButtonOK.Name = "ButtonOK";
this.ButtonOK.Size = new System.Drawing.Size(91, 35);
this.ButtonOK.TabIndex = 8;
this.ButtonOK.Text = global::RecurringIntegrationsScheduler.Properties.Resources.OK;
this.ButtonOK.UseVisualStyleBackColor = true;
this.ButtonOK.Click += new System.EventHandler(this.ButtonOK_Click);
//
// odataActionRelativePathLabel
//
this.odataActionRelativePathLabel.AutoSize = true;
this.odataActionRelativePathLabel.Location = new System.Drawing.Point(16, 21);
this.odataActionRelativePathLabel.Name = "odataActionRelativePathLabel";
this.odataActionRelativePathLabel.Size = new System.Drawing.Size(79, 17);
this.odataActionRelativePathLabel.TabIndex = 1;
this.odataActionRelativePathLabel.Text = "Action path";
//
// odataActionRelativePathTextBox
//
this.odataActionRelativePathTextBox.Location = new System.Drawing.Point(119, 18);
this.odataActionRelativePathTextBox.Name = "odataActionRelativePathTextBox";
this.odataActionRelativePathTextBox.Size = new System.Drawing.Size(353, 22);
this.odataActionRelativePathTextBox.TabIndex = 0;
this.odataActionRelativePathTextBox.Text = "data/DataManagementDefinitionGroups/Microsoft.Dynamics.DataEntities.ImportFromPac" +
"kage";
//
// ExportJobOptions
//
this.AcceptButton = this.ButtonOK;
this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 16F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.CancelButton = this.ButtonCancel;
this.ClientSize = new System.Drawing.Size(521, 152);
this.Controls.Add(this.panel1);
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog;
this.MaximizeBox = false;
this.MaximumSize = new System.Drawing.Size(539, 251);
this.MinimizeBox = false;
this.Name = "ExportJobOptions";
this.ShowIcon = false;
this.ShowInTaskbar = false;
this.SizeGripStyle = System.Windows.Forms.SizeGripStyle.Hide;
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;
this.Text = "Export job options";
this.Load += new System.EventHandler(this.ExportJobOptions_Load);
this.panel1.ResumeLayout(false);
this.panel1.PerformLayout();
this.ResumeLayout(false);
}
#endregion
private System.Windows.Forms.Panel panel1;
private System.Windows.Forms.Button ButtonCancel;
private System.Windows.Forms.Button ButtonOK;
private System.Windows.Forms.Label odataActionRelativePathLabel;
private System.Windows.Forms.TextBox odataActionRelativePathTextBox;
}
}

Просмотреть файл

@ -0,0 +1,60 @@
/* Copyright (c) Microsoft Corporation. All rights reserved.
Licensed under the MIT License. */
using Quartz;
using RecurringIntegrationsScheduler.Common.Contracts;
using RecurringIntegrationsScheduler.Properties;
using RecurringIntegrationsScheduler.Settings;
using System;
using System.Text;
using System.Windows.Forms;
namespace RecurringIntegrationsScheduler.Forms
{
public partial class ExportJobOptions : Form
{
public ExportJobOptions()
{
InitializeComponent();
}
public bool Cancelled { get; private set; }
public JobDataMap OptionsMap {get; set;}
private bool InputIsValid()
{
return true;
}
private void ButtonOK_Click(object sender, EventArgs e)
{
Cancelled = false;
if (InputIsValid())
{
OptionsMap = new JobDataMap
{
{SettingsConstants.OdataActionRelativePath, odataActionRelativePathTextBox.Text}
};
}
else
{
DialogResult = DialogResult.None;
}
}
private void ButtonCancel_Click(object sender, EventArgs e)
{
Cancelled = true;
Close();
}
private void ExportJobOptions_Load(object sender, EventArgs e)
{
Cancelled = false;
string odataActionRelativePath = OptionsMap.GetString(SettingsConstants.OdataActionRelativePath);
odataActionRelativePathTextBox.Text = string.IsNullOrEmpty(odataActionRelativePath) ? OdataActionsConstants.ExportToPackageActionPath : odataActionRelativePath;
}
}
}

Просмотреть файл

@ -0,0 +1,120 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>

558
Scheduler/Forms/ImportJob.Designer.cs сгенерированный

Разница между файлами не показана из-за своего большого размера Загрузить разницу

Просмотреть файл

@ -42,6 +42,7 @@ namespace RecurringIntegrationsScheduler.Forms
public ITrigger ImportTrigger { get; set; }
public IJobDetail ExecutionJobDetail { get; set; }
public ITrigger ExecutionTrigger { get; set; }
private JobDataMap OptionsMap { get; set; }
private void ImportJobForm_Load(object sender, EventArgs e)
{
@ -84,6 +85,11 @@ namespace RecurringIntegrationsScheduler.Forms
processingSuccessFolderTextBox.Text = Properties.Settings.Default.ProcessingSuccessFolder;
processingErrorsFolderTextBox.Text = Properties.Settings.Default.ProcessingErrorsFolder;
OptionsMap = new JobDataMap
{
{ SettingsConstants.OdataActionRelativePath, OdataActionsConstants.ImportFromPackageActionPath}
};
if (ImportJobDetail != null)
{
jobName.Text = ImportJobDetail.Key.Name;
@ -242,6 +248,11 @@ namespace RecurringIntegrationsScheduler.Forms
(ImportJobDetail.JobDataMap[SettingsConstants.PauseJobOnException] != null) &&
Convert.ToBoolean(ImportJobDetail.JobDataMap[SettingsConstants.PauseJobOnException].ToString());
OptionsMap = new JobDataMap
{
{ SettingsConstants.OdataActionRelativePath, ImportJobDetail.JobDataMap[SettingsConstants.OdataActionRelativePath].ToString()}
};
Properties.Settings.Default.Save();
}
if ((ExecutionJobDetail != null) && (ExecutionTrigger != null))
@ -567,7 +578,8 @@ namespace RecurringIntegrationsScheduler.Forms
{SettingsConstants.PackageTemplate, packageTemplateTextBox.Text},
{SettingsConstants.RetryCount, retriesCountUpDown.Value.ToString(CultureInfo.InvariantCulture)},
{SettingsConstants.RetryDelay, retriesDelayUpDown.Value.ToString(CultureInfo.InvariantCulture)},
{SettingsConstants.PauseJobOnException, pauseOnExceptionsCheckBox.Checked.ToString()}
{SettingsConstants.PauseJobOnException, pauseOnExceptionsCheckBox.Checked.ToString()},
{SettingsConstants.OdataActionRelativePath, OptionsMap.GetString(SettingsConstants.OdataActionRelativePath)}
};
if (serviceAuthRadioButton.Checked)
{
@ -792,5 +804,25 @@ namespace RecurringIntegrationsScheduler.Forms
if (openFileDialog.ShowDialog() == DialogResult.OK)
packageTemplateTextBox.Text = openFileDialog.FileName;
}
private void jobOptions_Click(object sender, EventArgs e)
{
try
{
using (ImportJobOptions form = new ImportJobOptions())
{
form.OptionsMap = this.OptionsMap.Clone() as JobDataMap;
form.ShowDialog();
if (form.Cancelled || (form.OptionsMap == null)) return;
this.OptionsMap = form.OptionsMap.Clone() as JobDataMap;
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, Resources.Unexpected_error);
}
}
}
}

Просмотреть файл

@ -117,4 +117,34 @@
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<metadata name="folderBrowserDialog.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
<data name="cronTriggerInfoTextBox.Text" xml:space="preserve">
<value>With cron expression you can specify schedules such as “every Friday at noon”, or “every weekday and 9:30 am”, or even “every 5 minutes between 9:00 am and 10:00 am on every Monday, Wednesday and Friday during January”.
Default example above means: Each working day of the week (MON-FRI) run every 15 minutes (0/15) between 8:00 and 18:45 (8-18 - last run will be at 18:45)</value>
</data>
<metadata name="bottomToolStrip.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>212, 17</value>
</metadata>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="toolStripDropDownButton.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
YQUAAAAJcEhZcwAAEnQAABJ0Ad5mH3gAAAIDSURBVDhPpZLrS5NhGMb3j4SWh0oRQVExD4gonkDpg4hG
YKxG6WBogkMZKgPNCEVJFBGdGETEvgwyO9DJE5syZw3PIlPEE9pgBCLZ5XvdMB8Ew8gXbl54nuf63dd9
0OGSnwCahxbPRNPAPMw9Xpg6ZmF46kZZ0xSKzJPIrhpDWsVnpBhGkKx3nAX8Pv7z1zg8OoY/cITdn4fw
bf/C0kYAN3Ma/w3gWfZL5kzTKBxjWyK2DftwI9tyMYCZKXbNHaD91bLYJrDXsYbrWfUKwJrPE9M2M1Oc
VzOOpHI7Jr376Hi9ogHqFIANO0/MmmmbmSmm9a8ze+I4MrNWAdjtoJgWcx+PSzg166yZZ8xM8XvXDix9
c4jIqFYAjoriBV9AhEPv1mH/sonogha0afbZMMZz+yreTGyhpusHwtNNCsA5U1zS4BLxzJIfg299qO32
Ir7UJtZfftyATqeT+8o2D8JSjQrAJblrncYL7ZJ2+bfaFnC/1S1NjL3diRat7qrO7wLRP3HjWsojBeCo
mDEo5mNjuweFGvjWg2EBhCbpkW78htSHHwRyNdmgAFzPEee2iFkzayy2OLXzT4gr6UdUnlXrullsxxQ+
kx0g8BTA3aZlButjSTyjODq/WcQcW/B/Je4OQhLvKQDnzN1mp0nnkvAhR8VuMzNrpm1mpjgkoVwB/v8D
TgDQASA1MVpwzwAAAABJRU5ErkJggg==
</value>
</data>
<metadata name="openFileDialog.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>381, 17</value>
</metadata>
</root>

125
Scheduler/Forms/ImportJobOptions.Designer.cs сгенерированный Normal file
Просмотреть файл

@ -0,0 +1,125 @@
using RecurringIntegrationsScheduler.Properties;
namespace RecurringIntegrationsScheduler.Forms
{
partial class ImportJobOptions
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.panel1 = new System.Windows.Forms.Panel();
this.ButtonCancel = new System.Windows.Forms.Button();
this.ButtonOK = new System.Windows.Forms.Button();
this.odataActionRelativePathLabel = new System.Windows.Forms.Label();
this.odataActionRelativePathTextBox = new System.Windows.Forms.TextBox();
this.panel1.SuspendLayout();
this.SuspendLayout();
//
// panel1
//
this.panel1.Controls.Add(this.ButtonCancel);
this.panel1.Controls.Add(this.ButtonOK);
this.panel1.Controls.Add(this.odataActionRelativePathLabel);
this.panel1.Controls.Add(this.odataActionRelativePathTextBox);
this.panel1.Location = new System.Drawing.Point(13, 12);
this.panel1.Name = "panel1";
this.panel1.Size = new System.Drawing.Size(496, 138);
this.panel1.TabIndex = 0;
//
// ButtonCancel
//
this.ButtonCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel;
this.ButtonCancel.Location = new System.Drawing.Point(258, 95);
this.ButtonCancel.Name = "ButtonCancel";
this.ButtonCancel.Size = new System.Drawing.Size(91, 35);
this.ButtonCancel.TabIndex = 9;
this.ButtonCancel.Text = global::RecurringIntegrationsScheduler.Properties.Resources.Cancel;
this.ButtonCancel.UseVisualStyleBackColor = true;
this.ButtonCancel.Click += new System.EventHandler(this.ButtonCancel_Click);
//
// ButtonOK
//
this.ButtonOK.DialogResult = System.Windows.Forms.DialogResult.OK;
this.ButtonOK.Location = new System.Drawing.Point(161, 95);
this.ButtonOK.Name = "ButtonOK";
this.ButtonOK.Size = new System.Drawing.Size(91, 35);
this.ButtonOK.TabIndex = 8;
this.ButtonOK.Text = global::RecurringIntegrationsScheduler.Properties.Resources.OK;
this.ButtonOK.UseVisualStyleBackColor = true;
this.ButtonOK.Click += new System.EventHandler(this.ButtonOK_Click);
//
// odataActionRelativePathLabel
//
this.odataActionRelativePathLabel.AutoSize = true;
this.odataActionRelativePathLabel.Location = new System.Drawing.Point(16, 21);
this.odataActionRelativePathLabel.Name = "odataActionRelativePathLabel";
this.odataActionRelativePathLabel.Size = new System.Drawing.Size(79, 17);
this.odataActionRelativePathLabel.TabIndex = 1;
this.odataActionRelativePathLabel.Text = "Action path";
//
// odataActionRelativePathTextBox
//
this.odataActionRelativePathTextBox.Location = new System.Drawing.Point(119, 18);
this.odataActionRelativePathTextBox.Name = "odataActionRelativePathTextBox";
this.odataActionRelativePathTextBox.Size = new System.Drawing.Size(353, 22);
this.odataActionRelativePathTextBox.TabIndex = 0;
this.odataActionRelativePathTextBox.Text = "data/DataManagementDefinitionGroups/Microsoft.Dynamics.DataEntities.ExportToPacka" +
"ge";
//
// ImportJobOptions
//
this.AcceptButton = this.ButtonOK;
this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 16F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.CancelButton = this.ButtonCancel;
this.ClientSize = new System.Drawing.Size(521, 152);
this.Controls.Add(this.panel1);
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog;
this.MaximizeBox = false;
this.MaximumSize = new System.Drawing.Size(539, 251);
this.MinimizeBox = false;
this.Name = "ImportJobOptions";
this.ShowIcon = false;
this.ShowInTaskbar = false;
this.SizeGripStyle = System.Windows.Forms.SizeGripStyle.Hide;
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;
this.Text = "Import job options";
this.Load += new System.EventHandler(this.ImportJobOptions_Load);
this.panel1.ResumeLayout(false);
this.panel1.PerformLayout();
this.ResumeLayout(false);
}
#endregion
private System.Windows.Forms.Panel panel1;
private System.Windows.Forms.Button ButtonCancel;
private System.Windows.Forms.Button ButtonOK;
private System.Windows.Forms.Label odataActionRelativePathLabel;
private System.Windows.Forms.TextBox odataActionRelativePathTextBox;
}
}

Просмотреть файл

@ -0,0 +1,60 @@
/* Copyright (c) Microsoft Corporation. All rights reserved.
Licensed under the MIT License. */
using Quartz;
using RecurringIntegrationsScheduler.Common.Contracts;
using RecurringIntegrationsScheduler.Properties;
using RecurringIntegrationsScheduler.Settings;
using System;
using System.Text;
using System.Windows.Forms;
namespace RecurringIntegrationsScheduler.Forms
{
public partial class ImportJobOptions : Form
{
public ImportJobOptions()
{
InitializeComponent();
}
public bool Cancelled { get; private set; }
public JobDataMap OptionsMap {get; set;}
private bool InputIsValid()
{
return true;
}
private void ButtonOK_Click(object sender, EventArgs e)
{
Cancelled = false;
if (InputIsValid())
{
OptionsMap = new JobDataMap
{
{SettingsConstants.OdataActionRelativePath, odataActionRelativePathTextBox.Text}
};
}
else
{
DialogResult = DialogResult.None;
}
}
private void ButtonCancel_Click(object sender, EventArgs e)
{
Cancelled = true;
Close();
}
private void ImportJobOptions_Load(object sender, EventArgs e)
{
Cancelled = false;
string odataActionRelativePath = OptionsMap.GetString(SettingsConstants.OdataActionRelativePath);
odataActionRelativePathTextBox.Text = string.IsNullOrEmpty(odataActionRelativePath) ? OdataActionsConstants.ImportFromPackageActionPath : odataActionRelativePath;
}
}
}

Просмотреть файл

@ -0,0 +1,120 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>

Просмотреть файл

@ -102,6 +102,18 @@
<Compile Include="Forms\AadApplicationForm.Designer.cs">
<DependentUpon>AadApplicationForm.cs</DependentUpon>
</Compile>
<Compile Include="Forms\ExportJobOptions.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="Forms\ExportJobOptions.Designer.cs">
<DependentUpon>ExportJobOptions.cs</DependentUpon>
</Compile>
<Compile Include="Forms\ImportJobOptions.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="Forms\ImportJobOptions.Designer.cs">
<DependentUpon>ImportJobOptions.cs</DependentUpon>
</Compile>
<Compile Include="Forms\DataJobForm.cs">
<SubType>Form</SubType>
</Compile>
@ -203,6 +215,14 @@
<DependentUpon>AadApplicationForm.cs</DependentUpon>
<SubType>Designer</SubType>
</EmbeddedResource>
<EmbeddedResource Include="Forms\ExportJobOptions.resx">
<DependentUpon>ExportJobOptions.cs</DependentUpon>
<SubType>Designer</SubType>
</EmbeddedResource>
<EmbeddedResource Include="Forms\ImportJobOptions.resx">
<DependentUpon>ImportJobOptions.cs</DependentUpon>
<SubType>Designer</SubType>
</EmbeddedResource>
<EmbeddedResource Include="Forms\DataJobForm.resx">
<DependentUpon>DataJobForm.cs</DependentUpon>
<SubType>Designer</SubType>