Add project files.
This commit is contained in:
@@ -0,0 +1,362 @@
|
||||
<?xml version="1.0"?>
|
||||
<DbDfnDatabase xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
|
||||
<Tables>
|
||||
<DbDfnTable>
|
||||
<Schema>dbo</Schema>
|
||||
<Name>SaItemOption</Name>
|
||||
<Remarks />
|
||||
<Columns>
|
||||
<DbDfnColumn>
|
||||
<Schema>dbo</Schema>
|
||||
<Table>SaItemOption</Table>
|
||||
<Pos>1</Pos>
|
||||
<Name>ItemType</Name>
|
||||
<DataType>SmallInt</DataType>
|
||||
<DataTypeName />
|
||||
<DataTypeNative>5</DataTypeNative>
|
||||
<DataTypeNameNative>smallint</DataTypeNameNative>
|
||||
<IsIdentity>false</IsIdentity>
|
||||
<Size>5</Size>
|
||||
<BufferLen>2</BufferLen>
|
||||
<DecimalDigits>0</DecimalDigits>
|
||||
<Nullable>NoNulls</Nullable>
|
||||
<IsNullable>false</IsNullable>
|
||||
<Remarks />
|
||||
</DbDfnColumn>
|
||||
<DbDfnColumn>
|
||||
<Schema>dbo</Schema>
|
||||
<Table>SaItemOption</Table>
|
||||
<Pos>2</Pos>
|
||||
<Name>ItemId</Name>
|
||||
<DataType>Int</DataType>
|
||||
<DataTypeName />
|
||||
<DataTypeNative>4</DataTypeNative>
|
||||
<DataTypeNameNative>int</DataTypeNameNative>
|
||||
<IsIdentity>false</IsIdentity>
|
||||
<Size>10</Size>
|
||||
<BufferLen>4</BufferLen>
|
||||
<DecimalDigits>0</DecimalDigits>
|
||||
<Nullable>NoNulls</Nullable>
|
||||
<IsNullable>false</IsNullable>
|
||||
<Remarks />
|
||||
</DbDfnColumn>
|
||||
<DbDfnColumn>
|
||||
<Schema>dbo</Schema>
|
||||
<Table>SaItemOption</Table>
|
||||
<Pos>3</Pos>
|
||||
<Name>Name</Name>
|
||||
<DataType>VarChar</DataType>
|
||||
<DataTypeName />
|
||||
<DataTypeNative>-9</DataTypeNative>
|
||||
<DataTypeNameNative>nvarchar</DataTypeNameNative>
|
||||
<IsIdentity>false</IsIdentity>
|
||||
<Size>64</Size>
|
||||
<BufferLen>128</BufferLen>
|
||||
<DecimalDigits>0</DecimalDigits>
|
||||
<Nullable>NoNulls</Nullable>
|
||||
<IsNullable>false</IsNullable>
|
||||
<Remarks />
|
||||
</DbDfnColumn>
|
||||
<DbDfnColumn>
|
||||
<Schema>dbo</Schema>
|
||||
<Table>SaItemOption</Table>
|
||||
<Pos>4</Pos>
|
||||
<Name>Context</Name>
|
||||
<DataType>VarChar</DataType>
|
||||
<DataTypeName />
|
||||
<DataTypeNative>-9</DataTypeNative>
|
||||
<DataTypeNameNative>nvarchar</DataTypeNameNative>
|
||||
<IsIdentity>false</IsIdentity>
|
||||
<Size>64</Size>
|
||||
<BufferLen>128</BufferLen>
|
||||
<DecimalDigits>0</DecimalDigits>
|
||||
<Nullable>NoNulls</Nullable>
|
||||
<IsNullable>false</IsNullable>
|
||||
<Remarks />
|
||||
</DbDfnColumn>
|
||||
<DbDfnColumn>
|
||||
<Schema>dbo</Schema>
|
||||
<Table>SaItemOption</Table>
|
||||
<Pos>5</Pos>
|
||||
<Name>Value</Name>
|
||||
<DataType>VarChar</DataType>
|
||||
<DataTypeName />
|
||||
<DataTypeNative>-9</DataTypeNative>
|
||||
<DataTypeNameNative>nvarchar</DataTypeNameNative>
|
||||
<IsIdentity>false</IsIdentity>
|
||||
<Size>255</Size>
|
||||
<BufferLen>510</BufferLen>
|
||||
<DecimalDigits>0</DecimalDigits>
|
||||
<Nullable>Nullable</Nullable>
|
||||
<IsNullable>true</IsNullable>
|
||||
<Remarks />
|
||||
</DbDfnColumn>
|
||||
<DbDfnColumn>
|
||||
<Schema>dbo</Schema>
|
||||
<Table>SaItemOption</Table>
|
||||
<Pos>6</Pos>
|
||||
<Name>Notes</Name>
|
||||
<DataType>VarChar</DataType>
|
||||
<DataTypeName />
|
||||
<DataTypeNative>-9</DataTypeNative>
|
||||
<DataTypeNameNative>nvarchar</DataTypeNameNative>
|
||||
<IsIdentity>false</IsIdentity>
|
||||
<Size>255</Size>
|
||||
<BufferLen>510</BufferLen>
|
||||
<DecimalDigits>0</DecimalDigits>
|
||||
<Nullable>Nullable</Nullable>
|
||||
<IsNullable>true</IsNullable>
|
||||
<Remarks />
|
||||
</DbDfnColumn>
|
||||
<DbDfnColumn>
|
||||
<Schema>dbo</Schema>
|
||||
<Table>SaItemOption</Table>
|
||||
<Pos>7</Pos>
|
||||
<Name>Flags</Name>
|
||||
<DataType>SmallInt</DataType>
|
||||
<DataTypeName />
|
||||
<DataTypeNative>5</DataTypeNative>
|
||||
<DataTypeNameNative>smallint</DataTypeNameNative>
|
||||
<IsIdentity>false</IsIdentity>
|
||||
<Size>5</Size>
|
||||
<BufferLen>2</BufferLen>
|
||||
<DecimalDigits>0</DecimalDigits>
|
||||
<Nullable>Nullable</Nullable>
|
||||
<IsNullable>true</IsNullable>
|
||||
<Remarks />
|
||||
</DbDfnColumn>
|
||||
<DbDfnColumn>
|
||||
<Schema>dbo</Schema>
|
||||
<Table>SaItemOption</Table>
|
||||
<Pos>8</Pos>
|
||||
<Name>Status</Name>
|
||||
<DataType>VarChar</DataType>
|
||||
<DataTypeName />
|
||||
<DataTypeNative>-9</DataTypeNative>
|
||||
<DataTypeNameNative>nvarchar</DataTypeNameNative>
|
||||
<IsIdentity>false</IsIdentity>
|
||||
<Size>3</Size>
|
||||
<BufferLen>6</BufferLen>
|
||||
<DecimalDigits>0</DecimalDigits>
|
||||
<Nullable>Nullable</Nullable>
|
||||
<IsNullable>true</IsNullable>
|
||||
<Remarks />
|
||||
</DbDfnColumn>
|
||||
<DbDfnColumn>
|
||||
<Schema>dbo</Schema>
|
||||
<Table>SaItemOption</Table>
|
||||
<Pos>9</Pos>
|
||||
<Name>CreateOn</Name>
|
||||
<DataType>DateTime</DataType>
|
||||
<DataTypeName />
|
||||
<DataTypeNative>93</DataTypeNative>
|
||||
<DataTypeNameNative>datetime</DataTypeNameNative>
|
||||
<IsIdentity>false</IsIdentity>
|
||||
<Size>23</Size>
|
||||
<BufferLen>16</BufferLen>
|
||||
<DecimalDigits>3</DecimalDigits>
|
||||
<Nullable>NoNulls</Nullable>
|
||||
<IsNullable>false</IsNullable>
|
||||
<Remarks />
|
||||
</DbDfnColumn>
|
||||
<DbDfnColumn>
|
||||
<Schema>dbo</Schema>
|
||||
<Table>SaItemOption</Table>
|
||||
<Pos>10</Pos>
|
||||
<Name>CreateBy</Name>
|
||||
<DataType>Int</DataType>
|
||||
<DataTypeName />
|
||||
<DataTypeNative>4</DataTypeNative>
|
||||
<DataTypeNameNative>int</DataTypeNameNative>
|
||||
<IsIdentity>false</IsIdentity>
|
||||
<Size>10</Size>
|
||||
<BufferLen>4</BufferLen>
|
||||
<DecimalDigits>0</DecimalDigits>
|
||||
<Nullable>Nullable</Nullable>
|
||||
<IsNullable>true</IsNullable>
|
||||
<Remarks />
|
||||
</DbDfnColumn>
|
||||
<DbDfnColumn>
|
||||
<Schema>dbo</Schema>
|
||||
<Table>SaItemOption</Table>
|
||||
<Pos>11</Pos>
|
||||
<Name>CreateHost</Name>
|
||||
<DataType>VarChar</DataType>
|
||||
<DataTypeName />
|
||||
<DataTypeNative>-9</DataTypeNative>
|
||||
<DataTypeNameNative>nvarchar</DataTypeNameNative>
|
||||
<IsIdentity>false</IsIdentity>
|
||||
<Size>64</Size>
|
||||
<BufferLen>128</BufferLen>
|
||||
<DecimalDigits>0</DecimalDigits>
|
||||
<Nullable>Nullable</Nullable>
|
||||
<IsNullable>true</IsNullable>
|
||||
<Remarks />
|
||||
</DbDfnColumn>
|
||||
<DbDfnColumn>
|
||||
<Schema>dbo</Schema>
|
||||
<Table>SaItemOption</Table>
|
||||
<Pos>12</Pos>
|
||||
<Name>UpdateOn</Name>
|
||||
<DataType>DateTime</DataType>
|
||||
<DataTypeName />
|
||||
<DataTypeNative>93</DataTypeNative>
|
||||
<DataTypeNameNative>datetime</DataTypeNameNative>
|
||||
<IsIdentity>false</IsIdentity>
|
||||
<Size>23</Size>
|
||||
<BufferLen>16</BufferLen>
|
||||
<DecimalDigits>3</DecimalDigits>
|
||||
<Nullable>Nullable</Nullable>
|
||||
<IsNullable>true</IsNullable>
|
||||
<Remarks />
|
||||
</DbDfnColumn>
|
||||
<DbDfnColumn>
|
||||
<Schema>dbo</Schema>
|
||||
<Table>SaItemOption</Table>
|
||||
<Pos>13</Pos>
|
||||
<Name>UpdateBy</Name>
|
||||
<DataType>Int</DataType>
|
||||
<DataTypeName />
|
||||
<DataTypeNative>4</DataTypeNative>
|
||||
<DataTypeNameNative>int</DataTypeNameNative>
|
||||
<IsIdentity>false</IsIdentity>
|
||||
<Size>10</Size>
|
||||
<BufferLen>4</BufferLen>
|
||||
<DecimalDigits>0</DecimalDigits>
|
||||
<Nullable>Nullable</Nullable>
|
||||
<IsNullable>true</IsNullable>
|
||||
<Remarks />
|
||||
</DbDfnColumn>
|
||||
<DbDfnColumn>
|
||||
<Schema>dbo</Schema>
|
||||
<Table>SaItemOption</Table>
|
||||
<Pos>14</Pos>
|
||||
<Name>UpdateHost</Name>
|
||||
<DataType>VarChar</DataType>
|
||||
<DataTypeName />
|
||||
<DataTypeNative>-9</DataTypeNative>
|
||||
<DataTypeNameNative>nvarchar</DataTypeNameNative>
|
||||
<IsIdentity>false</IsIdentity>
|
||||
<Size>64</Size>
|
||||
<BufferLen>128</BufferLen>
|
||||
<DecimalDigits>0</DecimalDigits>
|
||||
<Nullable>Nullable</Nullable>
|
||||
<IsNullable>true</IsNullable>
|
||||
<Remarks />
|
||||
</DbDfnColumn>
|
||||
</Columns>
|
||||
<Indices>
|
||||
<DbDfnIndex>
|
||||
<Schema>dbo</Schema>
|
||||
<Table>SaItemOption</Table>
|
||||
<Name>PK_SaItemOption</Name>
|
||||
<IndexType>1</IndexType>
|
||||
<Unique>true</Unique>
|
||||
<Primary>false</Primary>
|
||||
<Clustered>false</Clustered>
|
||||
<Nullable>false</Nullable>
|
||||
<Pages>1</Pages>
|
||||
<UniqueValues>11</UniqueValues>
|
||||
<HasColumns>false</HasColumns>
|
||||
<Columns>
|
||||
<DbDfnIndexColumn>
|
||||
<Seq>1</Seq>
|
||||
<Name>ItemType</Name>
|
||||
<Ascend>true</Ascend>
|
||||
</DbDfnIndexColumn>
|
||||
<DbDfnIndexColumn>
|
||||
<Seq>2</Seq>
|
||||
<Name>ItemId</Name>
|
||||
<Ascend>true</Ascend>
|
||||
</DbDfnIndexColumn>
|
||||
<DbDfnIndexColumn>
|
||||
<Seq>3</Seq>
|
||||
<Name>Name</Name>
|
||||
<Ascend>true</Ascend>
|
||||
</DbDfnIndexColumn>
|
||||
<DbDfnIndexColumn>
|
||||
<Seq>4</Seq>
|
||||
<Name>Context</Name>
|
||||
<Ascend>true</Ascend>
|
||||
</DbDfnIndexColumn>
|
||||
</Columns>
|
||||
</DbDfnIndex>
|
||||
<DbDfnIndex>
|
||||
<Schema>dbo</Schema>
|
||||
<Table>SaItemOption</Table>
|
||||
<Name>IDX_SaItemOption_Item</Name>
|
||||
<IndexType>3</IndexType>
|
||||
<Unique>false</Unique>
|
||||
<Primary>false</Primary>
|
||||
<Clustered>false</Clustered>
|
||||
<Nullable>false</Nullable>
|
||||
<Pages>0</Pages>
|
||||
<UniqueValues>0</UniqueValues>
|
||||
<HasColumns>false</HasColumns>
|
||||
<Columns>
|
||||
<DbDfnIndexColumn>
|
||||
<Seq>1</Seq>
|
||||
<Name>ItemType</Name>
|
||||
<Ascend>true</Ascend>
|
||||
</DbDfnIndexColumn>
|
||||
<DbDfnIndexColumn>
|
||||
<Seq>2</Seq>
|
||||
<Name>ItemId</Name>
|
||||
<Ascend>true</Ascend>
|
||||
</DbDfnIndexColumn>
|
||||
</Columns>
|
||||
</DbDfnIndex>
|
||||
<DbDfnIndex>
|
||||
<Schema>dbo</Schema>
|
||||
<Table>SaItemOption</Table>
|
||||
<Name>IDX_SaItemOption_ItemName</Name>
|
||||
<IndexType>3</IndexType>
|
||||
<Unique>false</Unique>
|
||||
<Primary>false</Primary>
|
||||
<Clustered>false</Clustered>
|
||||
<Nullable>false</Nullable>
|
||||
<Pages>0</Pages>
|
||||
<UniqueValues>0</UniqueValues>
|
||||
<HasColumns>false</HasColumns>
|
||||
<Columns>
|
||||
<DbDfnIndexColumn>
|
||||
<Seq>1</Seq>
|
||||
<Name>ItemType</Name>
|
||||
<Ascend>true</Ascend>
|
||||
</DbDfnIndexColumn>
|
||||
<DbDfnIndexColumn>
|
||||
<Seq>2</Seq>
|
||||
<Name>ItemId</Name>
|
||||
<Ascend>true</Ascend>
|
||||
</DbDfnIndexColumn>
|
||||
<DbDfnIndexColumn>
|
||||
<Seq>3</Seq>
|
||||
<Name>Name</Name>
|
||||
<Ascend>true</Ascend>
|
||||
</DbDfnIndexColumn>
|
||||
</Columns>
|
||||
</DbDfnIndex>
|
||||
<DbDfnIndex>
|
||||
<Schema>dbo</Schema>
|
||||
<Table>SaItemOption</Table>
|
||||
<Name>IDX_SaItemOption_Name</Name>
|
||||
<IndexType>3</IndexType>
|
||||
<Unique>false</Unique>
|
||||
<Primary>false</Primary>
|
||||
<Clustered>false</Clustered>
|
||||
<Nullable>false</Nullable>
|
||||
<Pages>0</Pages>
|
||||
<UniqueValues>0</UniqueValues>
|
||||
<HasColumns>false</HasColumns>
|
||||
<Columns>
|
||||
<DbDfnIndexColumn>
|
||||
<Seq>1</Seq>
|
||||
<Name>Name</Name>
|
||||
<Ascend>true</Ascend>
|
||||
</DbDfnIndexColumn>
|
||||
</Columns>
|
||||
</DbDfnIndex>
|
||||
</Indices>
|
||||
</DbDfnTable>
|
||||
</Tables>
|
||||
</DbDfnDatabase>
|
||||
@@ -0,0 +1,225 @@
|
||||
using Sarand.Net.Standard.Base.Core;
|
||||
using Sarand.Net.Standard.Dbas.Data;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Data.Common;
|
||||
using System.Data.Odbc;
|
||||
using Microsoft.Data.SqlClient;
|
||||
using System.Linq;
|
||||
using Sarand.Net.Standard.Base.Dbas;
|
||||
using Sarand.Net.Standard.Base.Utils;
|
||||
|
||||
//---------------------------------------------------------------------------
|
||||
// Code generated by Sarand Database Utilities Thu 3-Oct-2019 15:10:46
|
||||
//---------------------------------------------------------------------------
|
||||
namespace Sarand.Net.Standard.Dbas.ItemOptions.Internal
|
||||
{
|
||||
internal class SaItemOption_Db : DbDataItem
|
||||
{
|
||||
//-------------------------------------------------------------------
|
||||
// Column definitions.
|
||||
public class ColumnsData
|
||||
{
|
||||
public ColumnDataInt16 _ItemType { get; } = new ColumnDataInt16("ItemType");
|
||||
public ColumnDataInt32 _ItemId { get; } = new ColumnDataInt32("ItemId");
|
||||
public ColumnDataString _Name { get; } = new ColumnDataString("Name");
|
||||
public ColumnDataString _Context { get; } = new ColumnDataString("Context");
|
||||
public ColumnDataString _Value { get; } = new ColumnDataString("Value");
|
||||
public ColumnDataString _Notes { get; } = new ColumnDataString("Notes");
|
||||
public ColumnDataInt16 _Flags { get; } = new ColumnDataInt16("Flags");
|
||||
public ColumnDataString _Status { get; } = new ColumnDataString("Status");
|
||||
public ColumnDataDateTime _CreateOn { get; } = new ColumnDataDateTime("CreateOn");
|
||||
public ColumnDataInt32 _CreateBy { get; } = new ColumnDataInt32("CreateBy");
|
||||
public ColumnDataString _CreateHost { get; } = new ColumnDataString("CreateHost");
|
||||
public ColumnDataDateTime _UpdateOn { get; } = new ColumnDataDateTime("UpdateOn");
|
||||
public ColumnDataInt32 _UpdateBy { get; } = new ColumnDataInt32("UpdateBy");
|
||||
public ColumnDataString _UpdateHost { get; } = new ColumnDataString("UpdateHost");
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------
|
||||
// Data members.
|
||||
private static List<String> fields { get; } = new List<String>()
|
||||
{
|
||||
"ItemType",
|
||||
"ItemId",
|
||||
"Name",
|
||||
"Context",
|
||||
"Value",
|
||||
"Notes",
|
||||
"Flags",
|
||||
"Status",
|
||||
"CreateOn",
|
||||
"CreateBy",
|
||||
"CreateHost",
|
||||
"UpdateOn",
|
||||
"UpdateBy",
|
||||
"UpdateHost",
|
||||
};
|
||||
private static List<String> fieldsId { get; } = new List<String>()
|
||||
{
|
||||
};
|
||||
private static List<String> fieldsPrimary { get; } = new List<String>()
|
||||
{
|
||||
"ItemType",
|
||||
"ItemId",
|
||||
"Name",
|
||||
"Context",
|
||||
};
|
||||
private static List<String> fieldsIgnoreOnUpdate { get; } = new List<String>()
|
||||
{
|
||||
"CreateOn",
|
||||
"CreateBy",
|
||||
"CreateHost",
|
||||
"ItemType",
|
||||
"ItemId",
|
||||
"Name",
|
||||
"Context",
|
||||
};
|
||||
|
||||
//-------------------------------------------------------------------
|
||||
// Construction.
|
||||
internal SaItemOption_Db (IDatabaseInfo dbInfo = null) : base(dbInfo)
|
||||
{
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------
|
||||
// Properties.
|
||||
public override String SchemaName { get; } = "dbo";
|
||||
public override String TableName { get; } = "SaItemOption";
|
||||
public String TableNameFmt { get { return (!String.IsNullOrEmpty(SchemaName) ? "[" + SchemaName + "]." : "") + "[" + TableName + "]"; } }
|
||||
public static List<String> Fields { get { return new List<String>(fields); } }
|
||||
public static List<String> FieldsId { get { return new List<String>(fieldsId); } }
|
||||
public static List<String> FieldsNonId { get { return fields.FindAll(item => !fieldsId.ContainsCI(item)); } }
|
||||
// Columns.
|
||||
public ColumnsData Cols { get; } = new ColumnsData();
|
||||
public Int16 _ItemType { get { return Cols._ItemType.Value; } set { Cols._ItemType.Value = value; } }
|
||||
public Int32 _ItemId { get { return Cols._ItemId.Value; } set { Cols._ItemId.Value = value; } }
|
||||
public String _Name { get { return Cols._Name.Value; } set { Cols._Name.Value = value; } }
|
||||
public String _Context { get { return Cols._Context.Value; } set { Cols._Context.Value = value; } }
|
||||
public String _Value { get { return Cols._Value.Value; } set { Cols._Value.Value = value; } }
|
||||
public String _Notes { get { return Cols._Notes.Value; } set { Cols._Notes.Value = value; } }
|
||||
public Int16 _Flags { get { return Cols._Flags.Value; } set { Cols._Flags.Value = value; } }
|
||||
public String _Status { get { return Cols._Status.Value; } set { Cols._Status.Value = value; } }
|
||||
public DateTime _CreateOn { get { return Cols._CreateOn.Value; } set { Cols._CreateOn.Value = value; } }
|
||||
public Int32 _CreateBy { get { return Cols._CreateBy.Value; } set { Cols._CreateBy.Value = value; } }
|
||||
public String _CreateHost { get { return Cols._CreateHost.Value; } set { Cols._CreateHost.Value = value; } }
|
||||
public DateTime _UpdateOn { get { return Cols._UpdateOn.Value; } set { Cols._UpdateOn.Value = value; } }
|
||||
public Int32 _UpdateBy { get { return Cols._UpdateBy.Value; } set { Cols._UpdateBy.Value = value; } }
|
||||
public String _UpdateHost { get { return Cols._UpdateHost.Value; } set { Cols._UpdateHost.Value = value; } }
|
||||
// Existing columns - confirmed on database if table exists.
|
||||
public List<String> ExistingColumnNames { get { return GetExistingColumnNames(Fields); } }
|
||||
public List<String> ExistingColumnNamesNonId { get { return GetExistingColumnNames(FieldsNonId); } }
|
||||
|
||||
//-------------------------------------------------------------------
|
||||
// Population.
|
||||
public override void PopulateFrom (DbCommand dbCommand, String tableAlias, String filter)
|
||||
{
|
||||
dbCommand.CommandText =
|
||||
"SELECT " + ExistingColumnNames.Concat(", ", (!String.IsNullOrEmpty(tableAlias) ? tableAlias + "." : "") + "[", "]") + " " +
|
||||
"FROM " + TableNameFmt + (!String.IsNullOrEmpty(tableAlias) ? " " + tableAlias : "") + " " +
|
||||
(!String.IsNullOrEmpty(filter) ? "WHERE " + filter : "");
|
||||
Log(GetType().Name + ".PopulateFrom", dbCommand.CommandText);
|
||||
using (DbDataReader dbDataReader = dbCommand.ExecuteReader())
|
||||
{
|
||||
dbDataReader.Read();
|
||||
PopulateFrom(dbDataReader);
|
||||
}
|
||||
}
|
||||
public override void PopulateFrom (DbDataReader dbDataReader)
|
||||
{
|
||||
_ItemType = GetFieldInt16(dbDataReader, "ItemType", _ItemType);
|
||||
_ItemId = GetFieldInt32(dbDataReader, "ItemId", _ItemId);
|
||||
_Name = GetFieldString(dbDataReader, "Name", _Name);
|
||||
_Context = GetFieldString(dbDataReader, "Context", _Context);
|
||||
_Value = GetFieldString(dbDataReader, "Value", _Value);
|
||||
_Notes = GetFieldString(dbDataReader, "Notes", _Notes);
|
||||
_Flags = GetFieldInt16(dbDataReader, "Flags", _Flags);
|
||||
_Status = GetFieldString(dbDataReader, "Status", _Status);
|
||||
_CreateOn = GetFieldDateTime(dbDataReader, "CreateOn", _CreateOn);
|
||||
_CreateBy = GetFieldInt32(dbDataReader, "CreateBy", _CreateBy);
|
||||
_CreateHost = GetFieldString(dbDataReader, "CreateHost", _CreateHost);
|
||||
_UpdateOn = GetFieldDateTime(dbDataReader, "UpdateOn", _UpdateOn);
|
||||
_UpdateBy = GetFieldInt32(dbDataReader, "UpdateBy", _UpdateBy);
|
||||
_UpdateHost = GetFieldString(dbDataReader, "UpdateHost", _UpdateHost);
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------
|
||||
// Insert command.
|
||||
public override bool ExecuteInsertCommand (DbCommand dbCommand)
|
||||
{
|
||||
List<String> columnNames = ExistingColumnNamesNonId;
|
||||
// Construct query.
|
||||
String query =
|
||||
"INSERT INTO " + TableNameFmt + " " +
|
||||
"("+columnNames.Concat(",","[","]")+") ";
|
||||
if (dbCommand is SqlCommand)
|
||||
query += "VALUES (" + columnNames.Concat(",", "@", "") + ") ";
|
||||
else query += "VALUES (" + StringListUtil.CreateList("?", columnNames.Count).Concat(",") + ") ";
|
||||
dbCommand.CommandText = query;
|
||||
Log(GetType().Name + ".ExecuteInsertCommand", dbCommand.CommandText);
|
||||
// Populate parameters.
|
||||
dbCommand.Parameters.Clear();
|
||||
if (columnNames.ContainsCI("ItemType")) AddCommandParameter(dbCommand, "@ItemType", _ItemType);
|
||||
if (columnNames.ContainsCI("ItemId")) AddCommandParameter(dbCommand, "@ItemId", _ItemId);
|
||||
if (columnNames.ContainsCI("Name")) AddCommandParameter(dbCommand, "@Name", _Name);
|
||||
if (columnNames.ContainsCI("Context")) AddCommandParameter(dbCommand, "@Context", _Context);
|
||||
if (columnNames.ContainsCI("Value")) AddCommandParameter(dbCommand, "@Value", _Value);
|
||||
if (columnNames.ContainsCI("Notes")) AddCommandParameter(dbCommand, "@Notes", _Notes);
|
||||
if (columnNames.ContainsCI("Flags")) AddCommandParameter(dbCommand, "@Flags", _Flags);
|
||||
if (columnNames.ContainsCI("Status")) AddCommandParameter(dbCommand, "@Status", _Status);
|
||||
if (columnNames.ContainsCI("CreateOn")) AddCommandParameter(dbCommand, "@CreateOn", _CreateOn);
|
||||
if (columnNames.ContainsCI("CreateBy")) AddCommandParameter(dbCommand, "@CreateBy", _CreateBy);
|
||||
if (columnNames.ContainsCI("CreateHost")) AddCommandParameter(dbCommand, "@CreateHost", _CreateHost);
|
||||
if (columnNames.ContainsCI("UpdateOn")) AddCommandParameter(dbCommand, "@UpdateOn", _UpdateOn);
|
||||
if (columnNames.ContainsCI("UpdateBy")) AddCommandParameter(dbCommand, "@UpdateBy", _UpdateBy);
|
||||
if (columnNames.ContainsCI("UpdateHost")) AddCommandParameter(dbCommand, "@UpdateHost", _UpdateHost);
|
||||
// Execute insert command.
|
||||
bool commandSuccess = false;
|
||||
int executeNonQuery = dbCommand.ExecuteNonQuery();
|
||||
if (executeNonQuery == 1)
|
||||
{
|
||||
commandSuccess = true;
|
||||
}
|
||||
return commandSuccess;
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------
|
||||
// Update command.
|
||||
public override bool ExecuteUpdateCommand (DbCommand dbCommand)
|
||||
{
|
||||
// Columns to update.
|
||||
List<String> columnNames = ExistingColumnNamesNonId.Where(item => !fieldsPrimary.ContainsCI(item) && !fieldsIgnoreOnUpdate.ContainsCI(item)).ToList();
|
||||
// Construct query.
|
||||
String query = "UPDATE " + TableNameFmt + " SET ";
|
||||
if (dbCommand is SqlCommand)
|
||||
{
|
||||
query += StringPairList.CreateFrom(columnNames.Bracket("[","]"),columnNames).Concat("=@").Concat(", ") + " ";
|
||||
query += "WHERE ItemType=@ItemType AND ItemId=@ItemId AND Name=@Name AND Context=@Context;";
|
||||
}
|
||||
else
|
||||
{
|
||||
query += columnNames.Concat(", ", "", "=?") + " ";
|
||||
query += "WHERE ItemType=? AND ItemId=? AND Name=? AND Context=?;";
|
||||
}
|
||||
dbCommand.CommandText = query;
|
||||
Log(GetType().Name + ".ExecuteUpdateCommand", dbCommand.CommandText);
|
||||
// Populate parameters.
|
||||
dbCommand.Parameters.Clear();
|
||||
if (columnNames.ContainsCI("Value")) AddCommandParameter(dbCommand, "@Value", _Value);
|
||||
if (columnNames.ContainsCI("Notes")) AddCommandParameter(dbCommand, "@Notes", _Notes);
|
||||
if (columnNames.ContainsCI("Flags")) AddCommandParameter(dbCommand, "@Flags", _Flags);
|
||||
if (columnNames.ContainsCI("Status")) AddCommandParameter(dbCommand, "@Status", _Status);
|
||||
if (columnNames.ContainsCI("UpdateOn")) AddCommandParameter(dbCommand, "@UpdateOn", _UpdateOn);
|
||||
if (columnNames.ContainsCI("UpdateBy")) AddCommandParameter(dbCommand, "@UpdateBy", _UpdateBy);
|
||||
if (columnNames.ContainsCI("UpdateHost")) AddCommandParameter(dbCommand, "@UpdateHost", _UpdateHost);
|
||||
AddCommandParameter(dbCommand, "@ItemType", _ItemType);
|
||||
AddCommandParameter(dbCommand, "@ItemId", _ItemId);
|
||||
AddCommandParameter(dbCommand, "@Name", _Name);
|
||||
AddCommandParameter(dbCommand, "@Context", _Context);
|
||||
int executeNonQueryResult = dbCommand.ExecuteNonQuery();
|
||||
return (executeNonQueryResult == 1);
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,179 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using Sarand.Net.Standard.Base.Core;
|
||||
using Sarand.Net.Standard.Base.Bus;
|
||||
using Sarand.Net.Standard.Base.Dbas;
|
||||
using Sarand.Net.Standard.Base.ItemOptions;
|
||||
using Sarand.Net.Standard.Dbas.Base;
|
||||
using Sarand.Net.Standard.Base.Utils;
|
||||
|
||||
namespace Sarand.Net.Standard.Dbas.ItemOptions
|
||||
{
|
||||
//=======================================================================
|
||||
public abstract class SaItemOptionConsole_Dbas : SaItemOptionConsole
|
||||
{
|
||||
//-------------------------------------------------------------------
|
||||
// Data members.
|
||||
private SaItemOptionMgr_Dbas itemOptionMgr = null;
|
||||
|
||||
//-------------------------------------------------------------------
|
||||
// Static initialisation.
|
||||
static SaItemOptionConsole_Dbas ()
|
||||
{
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------
|
||||
// Construction.
|
||||
protected SaItemOptionConsole_Dbas (SacsDatabase database)
|
||||
{
|
||||
Database = database;
|
||||
itemOptionMgr = new SaItemOptionMgr_Dbas(this);
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------
|
||||
// Properties.
|
||||
internal SacsDatabase Database { get; set; }
|
||||
public override bool DatabaseIsValid { get { return itemOptionMgr.DatabaseIsValid; } }
|
||||
public override bool CanUpdateDatabase { get { return itemOptionMgr.CanUpdateDatabase; } }
|
||||
|
||||
//-------------------------------------------------------------------
|
||||
// Item Options form.
|
||||
public override bool MangageItemOptions (List<SaItemOption> itemOptions)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
public override bool ShowItemOptionsDialog (ItemId itemId, DbUpdateInfo dbUpdateInfo)
|
||||
{
|
||||
ClearErrorState();
|
||||
if (ShowItemOptionsDialogFn != null)
|
||||
ShowItemOptionsDialogFn(this, itemId, dbUpdateInfo);
|
||||
return false;
|
||||
}
|
||||
// Method to display Update Log dialog.
|
||||
protected delegate bool ShowItemOptionsDialogFunction (SaItemOptionConsole codeTypeConsole, ItemId itemId, DbUpdateInfo dbUpdateInfo);
|
||||
protected abstract ShowItemOptionsDialogFunction ShowItemOptionsDialogFn { get; }
|
||||
|
||||
//*******************************************************************
|
||||
// I t e m O p t i o n s
|
||||
//*******************************************************************
|
||||
// Retrieve specific option.
|
||||
public override SaItemOption GetItemOption (ItemId itemId, String name, String context)
|
||||
{
|
||||
return itemOptionMgr.GetItemOption(itemId,name,context);
|
||||
}
|
||||
|
||||
// Retrieve options.
|
||||
public override List<SaItemOption> GetItemOptions (SaItemOption.Params prmItemOption)
|
||||
{
|
||||
return itemOptionMgr.GetItemOptionList(prmItemOption);
|
||||
}
|
||||
public override List<SaItemOption> GetItemOptionsForItem (ItemId itemId)
|
||||
{
|
||||
if (!ItemId.IsValid(itemId))
|
||||
return new List<SaItemOption>();
|
||||
SaItemOption.Params prmItemOption = new SaItemOption.Params();
|
||||
prmItemOption.IncludedItemIds.Add(itemId);
|
||||
return itemOptionMgr.GetItemOptionList(prmItemOption);
|
||||
}
|
||||
|
||||
// Retrieve specific option for range of items (all matching item if ID list is blank).
|
||||
public override List<SaItemOption> GetItemOptions (List<ItemId> itemIds, String name, String context)
|
||||
{
|
||||
SaItemOption.Params prmItemOption = new SaItemOption.Params();
|
||||
prmItemOption.IncludedItemIds.AddRange(itemIds);
|
||||
if (!StringUtil.IsEmpty(name))
|
||||
prmItemOption.IncludedNameContexts.Add(name,context);
|
||||
return itemOptionMgr.GetItemOptionList(prmItemOption);
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------
|
||||
// Create an item option.
|
||||
public override SaItemOption CreateItemOption (ItemId itemId, String name, String context)
|
||||
{
|
||||
return itemOptionMgr.CreateItemOption(itemId, name, context);
|
||||
}
|
||||
|
||||
// Item independent options, eg. for processes.
|
||||
public override SaItemOption CreateItemOptionByNameContext (String name, String context)
|
||||
{
|
||||
return itemOptionMgr.CreateItemOption(null, name, context);
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------
|
||||
// Store item option - create if not exsts, otherwise update.
|
||||
public override bool StoreItemOption (SaItemOption itemOption, DbUpdateInfo dbUpdateInfo)
|
||||
{
|
||||
ClearErrorState();
|
||||
// If option exists, update it.
|
||||
if (itemOptionMgr.ItemOptionExists(itemOption))
|
||||
{
|
||||
if (!itemOptionMgr.UpdateItemOption(itemOption, dbUpdateInfo))
|
||||
return SetErrorState(itemOptionMgr.ErrorStateMessage);
|
||||
}
|
||||
else
|
||||
{
|
||||
// Otherwise, insert it.
|
||||
if (!itemOptionMgr.InsertItemOption(itemOption, dbUpdateInfo))
|
||||
return SetErrorState(itemOptionMgr.ErrorStateMessage);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
// Store a specific option against the specified item.
|
||||
public override bool StoreItemOption (ItemId itemId, String name, String context, String sValue, DbUpdateInfo dbUpdateInfo)
|
||||
{
|
||||
ClearErrorState();
|
||||
SaItemOption itemOption = CreateItemOption(itemId,name,context);
|
||||
return StoreItemOption(itemOption, dbUpdateInfo);
|
||||
}
|
||||
// Store the updated list of options against the specified item.
|
||||
public override bool StoreItemOptions (ItemId itemId, List<SaItemOption> itemOptions, DbUpdateInfo dbUpdateInfo)
|
||||
{
|
||||
ClearErrorState();
|
||||
// Validate item options.
|
||||
foreach (SaItemOption itemOption in itemOptions)
|
||||
{
|
||||
if (itemOption.ItemId != null && !itemOption.ItemId.Equals(itemId)) return SetErrorState("Inconsistent item id in option list");
|
||||
if (!itemOptionMgr.IsValidItemOption(itemOption)) return SetErrorState("Validation error: "+itemOptionMgr.ErrorStateMessage);
|
||||
}
|
||||
// Retrieve existing options.
|
||||
List<SaItemOption> existingItemOptions = GetItemOptionsForItem(itemId).FindAll(item => item.ItemId.Equals(itemId));
|
||||
// Store each option in turn.
|
||||
foreach (SaItemOption itemOption in itemOptions)
|
||||
{
|
||||
if (!StoreItemOption(itemOption, dbUpdateInfo)) return false;
|
||||
// Remove matching options in existing list.
|
||||
existingItemOptions.RemoveAll(item => item.ItemId.Equals(itemId) && item.Name.EqualsCI(itemOption.Name) && item.Context.EqualsCI(itemOption.Context));
|
||||
}
|
||||
// Clear options not in the list.
|
||||
foreach (SaItemOption itemOption in existingItemOptions)
|
||||
{
|
||||
if (!ClearItemOption(itemOption,dbUpdateInfo)) return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
// Remove option(s) for the specified item.
|
||||
public override bool ClearItemOption (SaItemOption itemOption, DbUpdateInfo dbUpdateInfo)
|
||||
{
|
||||
ClearErrorState();
|
||||
if (itemOptionMgr.ItemOptionExists(itemOption) && !itemOptionMgr.DeleteItemOption(itemOption, dbUpdateInfo))
|
||||
return SetErrorState(itemOptionMgr.ErrorStateMessage);
|
||||
return true;
|
||||
}
|
||||
public override bool ClearItemOption (ItemId itemId, String name, String context, DbUpdateInfo dbUpdateInfo)
|
||||
{
|
||||
ClearErrorState();
|
||||
return ClearItemOption(CreateItemOption(itemId, name, context),dbUpdateInfo);
|
||||
}
|
||||
public override bool ClearItemOptions (ItemId itemId, DbUpdateInfo dbUpdateInfo)
|
||||
{
|
||||
ClearErrorState();
|
||||
if (!itemOptionMgr.ClearItemOptionsForItem(itemId, dbUpdateInfo))
|
||||
return SetErrorState(itemOptionMgr.ErrorStateMessage);
|
||||
return true;
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------
|
||||
}
|
||||
//=======================================================================
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
using Sarand.Net.Standard.Base.ItemOptions;
|
||||
|
||||
namespace Sarand.Net.Standard.Dbas.ItemOptions
|
||||
{
|
||||
internal static class SaItemOptionInternal
|
||||
{
|
||||
internal static SaItemOptionMgr CreateItemOptionMgr (this SaItemOptionConsole updateLogConsole)
|
||||
{
|
||||
if (!(updateLogConsole is SaItemOptionConsole_Dbas)) return null;
|
||||
return new SaItemOptionMgr_Dbas((SaItemOptionConsole_Dbas)updateLogConsole);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,565 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Data.Common;
|
||||
using System.Linq;
|
||||
using Sarand.Net.Standard.Base.App;
|
||||
using Sarand.Net.Standard.Base.Core;
|
||||
using Sarand.Net.Standard.Base.Bus;
|
||||
using Sarand.Net.Standard.Base.Data;
|
||||
using Sarand.Net.Standard.Base.Dbas;
|
||||
using Sarand.Net.Standard.Base.ItemOptions;
|
||||
using Sarand.Net.Standard.Dbas.Base;
|
||||
using Sarand.Net.Standard.Dbas.Data;
|
||||
using Sarand.Net.Standard.Dbas.ItemOptions.Internal;
|
||||
using Sarand.Net.Standard.Base.Utils;
|
||||
|
||||
namespace Sarand.Net.Standard.Dbas.ItemOptions
|
||||
{
|
||||
//=======================================================================
|
||||
internal class SaItemOptionMgr_Dbas : SaItemOptionMgr
|
||||
{
|
||||
//-------------------------------------------------------------------
|
||||
// Data members.
|
||||
private SaItemOptionConsole_Dbas itemOptionConsole = null;
|
||||
|
||||
//-------------------------------------------------------------------
|
||||
// Static initialisation.
|
||||
static SaItemOptionMgr_Dbas ()
|
||||
{
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------
|
||||
// Construction.
|
||||
internal SaItemOptionMgr_Dbas (SaItemOptionConsole_Dbas itemOptionConsole)
|
||||
{
|
||||
this.itemOptionConsole = itemOptionConsole;
|
||||
DbInfo = new DbDataItem.DatabaseInfo(itemOptionConsole.Database);
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------
|
||||
// Properties.
|
||||
public String TableName_ItemOption { get { return SaItemOptionDbDfn.GetTableName(SaItemOptionDbDfn.TableIdx.SaItemOption); } }
|
||||
internal SacsDatabase Database { get { return itemOptionConsole.Database; } }
|
||||
private DbDataItem.DatabaseInfo DbInfo { get; }
|
||||
public override bool DatabaseIsValid { get { return (Database != null && Database.GetTableNames().Contains(TableName_ItemOption)); } }
|
||||
public override bool CanUpdateDatabase { get { return DatabaseIsValid; } }
|
||||
|
||||
//*******************************************************************
|
||||
// I t e m O p t i o n s
|
||||
//*******************************************************************
|
||||
// Utilities.
|
||||
private String GetItemOptionFilter (SaItemOption itemOption)
|
||||
{
|
||||
return GetItemOptionFilter(itemOption.ItemId, itemOption.Name, itemOption.Context);
|
||||
}
|
||||
private String GetItemOptionFilter (ItemId itemId, String name, String context)
|
||||
{
|
||||
ClearErrorState();
|
||||
if (!ItemId.IsValid(itemId)) return "1=0";
|
||||
if (StringUtil.IsEmpty(name)) return "1=0";
|
||||
// Item identifying values.
|
||||
SaItemOption.Params prmItemOption = new SaItemOption.Params();
|
||||
prmItemOption.IncludedItemIds.Add(itemId);
|
||||
prmItemOption.IncludedNameContexts.Add(name,context);
|
||||
prmItemOption.StatusCat = SaItemOption.StatusCat.Any;
|
||||
return GetItemOptionQueryFilter(prmItemOption).Concat(" And ", "(", ")");
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------
|
||||
// Associated data.
|
||||
|
||||
//-------------------------------------------------------------------
|
||||
// Create Item.
|
||||
public override SaItemOption CreateItemOption (ItemId itemId, string name, string context)
|
||||
{
|
||||
ClearErrorState();
|
||||
return new SaItemOption_Dbas(itemId, name, context, 0);
|
||||
}
|
||||
public SaItemOption CreateItemOption (SaItemOption_Db dbItemOption)
|
||||
{
|
||||
ClearErrorState();
|
||||
SaItemOption itemOption = new SaItemOption_Dbas(new ItemId(dbItemOption._ItemType, new SysId(dbItemOption._ItemId)), dbItemOption._Name, dbItemOption._Context, (ushort)dbItemOption._Flags);
|
||||
PopulateFrom(dbItemOption, itemOption);
|
||||
return itemOption;
|
||||
}
|
||||
private SaItemOption CreateItemOption (DbDataReader dataReader)
|
||||
{
|
||||
SaItemOption_Db dbItemOption = new SaItemOption_Db(DbInfo);
|
||||
dbItemOption.PopulateFrom(dataReader);
|
||||
return CreateItemOption(dbItemOption);
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------
|
||||
// Item exists.
|
||||
public override bool ItemOptionExists (SaItemOption itemOption)
|
||||
{
|
||||
return ItemOptionExists(itemOption.ItemId, itemOption.Name, itemOption.Context);
|
||||
}
|
||||
public override bool ItemOptionExists (ItemId itemId, String name, string context)
|
||||
{
|
||||
ClearErrorState();
|
||||
if (!ItemId.IsValid(itemId)) return false;
|
||||
if (StringUtil.IsEmpty(name)) return false;
|
||||
return GetItemOptionCount(GetItemOptionFilter(itemId, name, context)) == 1;
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------
|
||||
// Get Item.
|
||||
private SaItemOption GetItemOption (String filter)
|
||||
{
|
||||
ClearErrorState();
|
||||
if (GetItemOptionCount(filter) != 1) return null;
|
||||
SaItemOption itemOption = null;
|
||||
// Query data.
|
||||
using (var dbConnection = Database.CreateConnection())
|
||||
using (var dbCommand = dbConnection.CreateCommand())
|
||||
{
|
||||
try
|
||||
{
|
||||
dbConnection.Open();
|
||||
SaItemOption_Db dbItemOption = new SaItemOption_Db(DbInfo);
|
||||
dbItemOption.PopulateFrom(dbCommand, aliasItemOption, filter);
|
||||
itemOption = CreateItemOption(dbItemOption);
|
||||
}
|
||||
catch (Exception exc)
|
||||
{
|
||||
SaLogger.Warn(GetType().Name + ".GetItemOption\n\tQuery: " + dbCommand.CommandText + "\n\t" + exc.GetType().Name + ": " + exc.Message);
|
||||
}
|
||||
}
|
||||
return itemOption;
|
||||
}
|
||||
public override SaItemOption GetItemOption (SaItemOption itemOption)
|
||||
{
|
||||
ClearErrorState();
|
||||
if (itemOption == null) return null;
|
||||
if (!ItemId.IsValid(itemOption.ItemId)) return null;
|
||||
if (StringUtil.IsEmpty(itemOption.Name)) return null;
|
||||
return GetItemOption(GetItemOptionFilter(itemOption));
|
||||
}
|
||||
public override SaItemOption GetItemOption (ItemId itemId, string name, string context)
|
||||
{
|
||||
ClearErrorState();
|
||||
if (!ItemId.IsValid(itemId)) return null;
|
||||
if (StringUtil.IsEmpty(name)) return null;
|
||||
return GetItemOption(GetItemOptionFilter(itemId, name, context));
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------
|
||||
// Validate Item.
|
||||
public override bool IsValidItemOptionData (SaItemOption.Data itemOptionData, SaItemOption.ErrField errField)
|
||||
{
|
||||
ClearErrorState();
|
||||
if (!base.IsValidItemOptionData(itemOptionData, errField)) return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------
|
||||
// Insert Item.
|
||||
public override bool InsertItemOption (SaItemOption itemOption, DbUpdateInfo dbUpdateInfo)
|
||||
{
|
||||
ClearErrorState();
|
||||
if (!IsValidItemOption(itemOption)) return false;
|
||||
//if (itemOption.Id.IsValid()) return SetErrorState(ErrorMessage.ValiditemId);
|
||||
using (var dbConnection = Database.CreateConnection())
|
||||
using (var dbCommand = dbConnection.CreateCommand())
|
||||
{
|
||||
try
|
||||
{
|
||||
dbConnection.Open();
|
||||
SaItemOption_Db dbItemOption = new SaItemOption_Db(DbInfo);
|
||||
PopulateTo(dbItemOption, itemOption, dbUpdateInfo);
|
||||
if (SaItemOption_Db.FieldsNonId.Contains("Id"))
|
||||
{
|
||||
// Item has no Id.
|
||||
//dbItemOption._Id = SysId.ToInt(Database.GetNextId("SaItemOption", dbUpdateInfo));
|
||||
}
|
||||
dbItemOption.ExecuteInsertCommand(dbCommand);
|
||||
//itemOption.Id = new SysId(dbItemOption._Id);
|
||||
}
|
||||
catch (Exception exc) { SetErrorState(exc.Message); }
|
||||
}
|
||||
return !HasErrorState();
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------
|
||||
// Update Item.
|
||||
public override bool UpdateItemOption (SaItemOption itemOption, DbUpdateInfo dbUpdateInfo)
|
||||
{
|
||||
ClearErrorState();
|
||||
if (!IsValidItemOption(itemOption)) return false;
|
||||
//if (!itemOption.Id.IsValid()) return SetErrorState(ErrorMessage.InvalidItemId);
|
||||
using (var dbConnection = Database.CreateConnection())
|
||||
using (var dbCommand = dbConnection.CreateCommand())
|
||||
{
|
||||
try
|
||||
{
|
||||
// Retrieve itemOption.
|
||||
dbConnection.Open();
|
||||
SaItemOption_Db dbItemOption = new SaItemOption_Db(DbInfo);
|
||||
dbItemOption.PopulateFrom(dbCommand, aliasItemOption, GetItemOptionFilter(itemOption));
|
||||
// Update properties.
|
||||
PopulateTo(dbItemOption, itemOption, dbUpdateInfo);
|
||||
dbItemOption.ExecuteUpdateCommand(dbCommand);
|
||||
}
|
||||
catch (Exception exc) { SetErrorState(exc.Message); }
|
||||
}
|
||||
return !HasErrorState();
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------
|
||||
// Delete Item.
|
||||
public override bool ItemOptionCanBeDeleted (SaItemOption itemOption)
|
||||
{
|
||||
ClearErrorState();
|
||||
if (!base.ItemOptionCanBeDeleted(itemOption)) return false;
|
||||
return true;
|
||||
}
|
||||
public override bool DeleteItemOption (SaItemOption itemOption, DbUpdateInfo dbUpdateInfo)
|
||||
{
|
||||
ClearErrorState();
|
||||
if (!ItemOptionCanBeDeleted(itemOption)) return false;
|
||||
using (var dbConnection = Database.CreateConnection())
|
||||
using (var dbCommand = dbConnection.CreateCommand())
|
||||
{
|
||||
try
|
||||
{
|
||||
// Retrieve itemOption.
|
||||
dbConnection.Open();
|
||||
SaItemOption_Db dbItemOption = new SaItemOption_Db(DbInfo);
|
||||
dbItemOption.PopulateFrom(dbCommand, aliasItemOption, GetItemOptionFilter(itemOption));
|
||||
// Delete itemOption.
|
||||
dbCommand.CommandType = System.Data.CommandType.Text;
|
||||
dbCommand.CommandText = "DELETE FROM " + SaItemOptionDbDfn.GetTableName(SaItemOptionDbDfn.TableIdx.SaItemOption) + " WHERE " + GetItemOptionFilter(itemOption) + ";";
|
||||
dbCommand.ExecuteNonQuery();
|
||||
}
|
||||
catch (Exception exc) { SetErrorState(exc.Message); }
|
||||
}
|
||||
return !HasErrorState();
|
||||
}
|
||||
public override bool ClearItemOptionsForItem (ItemId itemId, DbUpdateInfo dbUpdateInfo)
|
||||
{
|
||||
ClearErrorState();
|
||||
if (!ItemId.IsValid(itemId)) return SetErrorState("Item Id must be specified");
|
||||
String colItemType = SaItemOptionDbDfn.GetColumnName(SaItemOptionDbDfn.ColumnIdx.SaItemOption_ItemType);
|
||||
String colItemId = SaItemOptionDbDfn.GetColumnName(SaItemOptionDbDfn.ColumnIdx.SaItemOption_ItemId);
|
||||
String query = "Delete From "+TableName_ItemOption+" WHERE "+colItemType+"="+itemId.Type.ToString()+" AND "+colItemId+"="+SysId.ToString(itemId.Id);
|
||||
Database.ExecuteNonQuery(query);
|
||||
if (Database.HasErrorState())
|
||||
SetErrorState("Failed to clear item options - " + Database.ErrorStateMessage);
|
||||
return !HasErrorState();
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------
|
||||
// Item Option Value encryption inherited from C++ Sapphire.
|
||||
// The encryption key must not be changed where data shared with Sapphire.
|
||||
private static String encryptedOptionValueKey = "SaItemOptionMgr_Odbc";
|
||||
// Copy data properties to and from database.
|
||||
private void PopulateTo (SaItemOption_Db dbItemOption, SaItemOption itemOption, DbUpdateInfo dbUpdateInfo)
|
||||
{
|
||||
dbItemOption._ItemType = itemOption.ItemId.Type;
|
||||
dbItemOption._ItemId = SysId.ToInt(itemOption.ItemId.Id);
|
||||
dbItemOption._Name = itemOption.Name;
|
||||
dbItemOption._Context = itemOption.Context;
|
||||
dbItemOption._Value = itemOption.Value;
|
||||
if (itemOption.Encrypted)
|
||||
dbItemOption._Value = SacsDataFn._saecs(itemOption.Value, new SacsData(encryptedOptionValueKey));
|
||||
// Common properties.
|
||||
dbItemOption._Notes = itemOption.Notes;
|
||||
dbItemOption._Status = SacsSystem.GetStatusCode(itemOption.Status);
|
||||
dbItemOption._Flags = (short)itemOption.Flags;
|
||||
if (!SysId.IsValid(itemOption.Id))
|
||||
{
|
||||
dbItemOption._CreateOn = DateTime.Now;
|
||||
dbItemOption._CreateBy = dbUpdateInfo.UserId.ToInt();
|
||||
dbItemOption._CreateHost = dbUpdateInfo.Host;
|
||||
}
|
||||
dbItemOption._UpdateOn = DateTime.Now;
|
||||
dbItemOption._UpdateBy = dbUpdateInfo.UserId.ToInt();
|
||||
dbItemOption._UpdateHost = dbUpdateInfo.Host;
|
||||
}
|
||||
private void PopulateFrom (SaItemOption_Db dbItemOption, SaItemOption itemOption)
|
||||
{
|
||||
//itemOption.ItemId = new ItemId(dbItemOption._ItemType, new SysId(dbItemOption._ItemId));
|
||||
//itemOption.Name = dbItemOption._Name;
|
||||
//itemOption.Context = dbItemOption._Context;
|
||||
itemOption.Value = dbItemOption._Value;
|
||||
if (itemOption.Encrypted)
|
||||
itemOption.Value = SacsDataFn._sadcs(dbItemOption._Value, new SacsData(encryptedOptionValueKey));
|
||||
// Common properties.
|
||||
itemOption.Notes = dbItemOption._Notes;
|
||||
itemOption.Status = SacsSystem.GetStatusForCode(dbItemOption._Status);
|
||||
itemOption.SetCreateStamp(dbItemOption._CreateOn, new SysId(dbItemOption._CreateBy), dbItemOption._CreateHost);
|
||||
itemOption.SetUpdateStamp(dbItemOption._UpdateOn, new SysId(dbItemOption._UpdateBy), dbItemOption._UpdateHost);
|
||||
itemOption.AcceptChanges();
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------
|
||||
// Column definitions.
|
||||
private static readonly String aliasItemOption = "aItmOpt";
|
||||
private void SetItemOptionColDfn
|
||||
(ColumnDfn col, String caption, int width, SaItemOptionDbDfn.ColumnIdx dbCol,
|
||||
ColumnAlignment align = ColumnAlignment.Default, DataValue.DataType dataType = DataValue.DataType.String,
|
||||
String alias = "", String prefix = "")
|
||||
{
|
||||
if (String.IsNullOrEmpty(alias) && SaItemOptionDbDfn.GetTableForColumn(dbCol) == SaItemOptionDbDfn.TableIdx.SaItemOption)
|
||||
alias = aliasItemOption;
|
||||
col.Set(caption, width, (int)dbCol, prefix + SaItemOptionDbDfn.GetColumnName(dbCol, false), SaItemOptionDbDfn.GetColumnNameQual(dbCol, alias), dataType, align);
|
||||
}
|
||||
public override ColumnDfn GetItemOptionColumnDfn (SaItemOption.Column columnId, string caption = "", int width = 0)
|
||||
{
|
||||
ColumnDfn columnDfn = new ColumnDfn((int)columnId,caption,width);
|
||||
switch (columnId)
|
||||
{
|
||||
case SaItemOption.Column.Pos:
|
||||
SetItemOptionColDfn(columnDfn, "Pos", 45, SaItemOptionDbDfn.ColumnIdx.Unknown, ColumnAlignment.Right);
|
||||
columnDfn.SortMode = ColumnDfn.ColumnSortMode.Off;
|
||||
columnDfn.ReadOnly = true;
|
||||
columnDfn.Resizable = false;
|
||||
break;
|
||||
case SaItemOption.Column.ItemType:
|
||||
SetItemOptionColDfn(columnDfn, "Item type", 80, SaItemOptionDbDfn.ColumnIdx.SaItemOption_ItemType, ColumnAlignment.Center, DataValue.DataType.Long);
|
||||
break;
|
||||
case SaItemOption.Column.ItemType_Desc:
|
||||
SetItemOptionColDfn(columnDfn, "Item type", 100, SaItemOptionDbDfn.ColumnIdx.SaItemOption_ItemType);
|
||||
break;
|
||||
case SaItemOption.Column.Group:
|
||||
SetItemOptionColDfn(columnDfn, "Group", 100, SaItemOptionDbDfn.ColumnIdx.Unknown);
|
||||
columnDfn.ReadOnly = true;
|
||||
break;
|
||||
case SaItemOption.Column.Name:
|
||||
SetItemOptionColDfn(columnDfn, "Name", 100, SaItemOptionDbDfn.ColumnIdx.SaItemOption_Name);
|
||||
columnDfn.MaxLength = (int)SaItemOptionDbDfn.GetColTextLen(SaItemOptionDbDfn.ColumnIdx.SaItemOption_Name);
|
||||
break;
|
||||
case SaItemOption.Column.Name_Display:
|
||||
SetItemOptionColDfn(columnDfn, "Name", 100, SaItemOptionDbDfn.ColumnIdx.SaItemOption_Name);
|
||||
columnDfn.ReadOnly = true;
|
||||
break;
|
||||
case SaItemOption.Column.Context:
|
||||
SetItemOptionColDfn(columnDfn, "Context", 160, SaItemOptionDbDfn.ColumnIdx.SaItemOption_Context);
|
||||
columnDfn.MaxLength = (int)SaItemOptionDbDfn.GetColTextLen(SaItemOptionDbDfn.ColumnIdx.SaItemOption_Context);
|
||||
break;
|
||||
case SaItemOption.Column.Context_Display:
|
||||
SetItemOptionColDfn(columnDfn, "Context", 160, SaItemOptionDbDfn.ColumnIdx.SaItemOption_Context);
|
||||
columnDfn.ReadOnly = true;
|
||||
break;
|
||||
case SaItemOption.Column.Value:
|
||||
SetItemOptionColDfn(columnDfn, "Value", 200, SaItemOptionDbDfn.ColumnIdx.SaItemOption_Value);
|
||||
columnDfn.MaxLength = (int)SaItemOptionDbDfn.GetColTextLen(SaItemOptionDbDfn.ColumnIdx.SaItemOption_Value);
|
||||
break;
|
||||
case SaItemOption.Column.Value_Display:
|
||||
SetItemOptionColDfn(columnDfn, "Value", 200, SaItemOptionDbDfn.ColumnIdx.SaItemOption_Value);
|
||||
columnDfn.ReadOnly = true;
|
||||
break;
|
||||
case SaItemOption.Column.Password:
|
||||
SetItemOptionColDfn(columnDfn, "Password", 45, SaItemOptionDbDfn.ColumnIdx.Unknown, ColumnAlignment.Center, DataValue.DataType.Bool);
|
||||
columnDfn.BoolFormat = ColumnBoolFormat.YorN;
|
||||
break;
|
||||
// Common properties.
|
||||
case SaItemOption.Column.Notes:
|
||||
SetItemOptionColDfn(columnDfn, "Notes", 240, SaItemOptionDbDfn.ColumnIdx.SaItemOption_Notes);
|
||||
columnDfn.MaxLength = (int)SaItemOptionDbDfn.GetColTextLen(SaItemOptionDbDfn.ColumnIdx.SaItemOption_Notes);
|
||||
break;
|
||||
case SaItemOption.Column.Status:
|
||||
SetItemOptionColDfn(columnDfn, "Status", 80, SaItemOptionDbDfn.ColumnIdx.SaItemOption_Status, ColumnAlignment.Center);
|
||||
break;
|
||||
case SaItemOption.Column.Status_Desc:
|
||||
SetItemOptionColDfn(columnDfn, "Status", 90, SaItemOptionDbDfn.ColumnIdx.SaItemOption_Status, ColumnAlignment.Center);
|
||||
break;
|
||||
case SaItemOption.Column.Status_Ind:
|
||||
SetItemOptionColDfn(columnDfn, "Status", 80, SaItemOptionDbDfn.ColumnIdx.SaItemOption_Status, ColumnAlignment.Center, DataValue.DataType.TriState);
|
||||
columnDfn.TriStateFormat = ColumnTriStateFormat.Lights;
|
||||
break;
|
||||
case SaItemOption.Column.CreateOn_Date:
|
||||
SetItemOptionColDfn(columnDfn, "Created", 80, SaItemOptionDbDfn.ColumnIdx.SaItemOption_CreateOn, ColumnAlignment.Center, DataValue.DataType.Date);
|
||||
columnDfn.ReadOnly = true;
|
||||
break;
|
||||
case SaItemOption.Column.UpdateOn_Date:
|
||||
SetItemOptionColDfn(columnDfn, "Updated", 80, SaItemOptionDbDfn.ColumnIdx.SaItemOption_UpdateOn, ColumnAlignment.Center, DataValue.DataType.Date);
|
||||
columnDfn.ReadOnly = true;
|
||||
break;
|
||||
}
|
||||
if (!String.IsNullOrEmpty(caption))
|
||||
columnDfn.Caption = caption;
|
||||
if (width > 0)
|
||||
columnDfn.Width = width;
|
||||
return columnDfn;
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------
|
||||
// Query filter.
|
||||
public override List<string> GetItemOptionQueryFilter (SaItemOption.Params prm)
|
||||
{
|
||||
List<String> filter = new List<String>();
|
||||
|
||||
// Item Ids.
|
||||
List<String> filterItemId = new List<String>();
|
||||
String colItemType = SaItemOptionDbDfn.GetColumnNameQual(SaItemOptionDbDfn.ColumnIdx.SaItemOption_ItemType, aliasItemOption);
|
||||
String colItemId = SaItemOptionDbDfn.GetColumnNameQual(SaItemOptionDbDfn.ColumnIdx.SaItemOption_ItemId, aliasItemOption);
|
||||
foreach (ItemId itemId in prm.IncludedItemIds)
|
||||
{
|
||||
filterItemId.Add(colItemType + "=" + itemId.Type.ToString() + " And " + colItemId + "=" + SysId.ToString(itemId.Id));
|
||||
}
|
||||
if (filterItemId.Count > 0)
|
||||
filter.Add(filterItemId.Concat(" Or ", "(", ")"));
|
||||
|
||||
// Included Name/Context combinations.
|
||||
List<String> nameContextFilters = new List<string>();
|
||||
String colName = SaItemOptionDbDfn.GetColumnNameQual(SaItemOptionDbDfn.ColumnIdx.SaItemOption_Name, aliasItemOption);
|
||||
String colContext = SaItemOptionDbDfn.GetColumnNameQual(SaItemOptionDbDfn.ColumnIdx.SaItemOption_Context, aliasItemOption);
|
||||
foreach (StringPair nameContext in prm.IncludedNameContexts)
|
||||
{
|
||||
String nameContextFilter = colName + "='" + DbQuery.FormatForCondition(nameContext.Item1) +"'";
|
||||
if (!StringUtil.IsEmpty(nameContext.Item2))
|
||||
nameContextFilter += " And " + colContext + "='" + DbQuery.FormatForCondition(nameContext.Item2) + "'";
|
||||
nameContextFilters.Add(nameContextFilter);
|
||||
}
|
||||
if (nameContextFilters.Count > 0)
|
||||
filter.Add(nameContextFilters.Concat(" Or ","(",")"));
|
||||
|
||||
// Status.
|
||||
String colStatus = SaItemOptionDbDfn.GetColumnNameQual(SaItemOptionDbDfn.ColumnIdx.SaItemOption_Status, aliasItemOption);
|
||||
String statusCurrent = SacsSystem.GetStatusCode(SaStatus.Current);
|
||||
String statusDeleted = SacsSystem.GetStatusCode(SaStatus.Deleted);
|
||||
if (prm.StatusCat == SaItemOption.StatusCat.CurrentOnly)
|
||||
filter.Add(colStatus + " In ('" + statusCurrent + "')");
|
||||
else if (prm.StatusCat == SaItemOption.StatusCat.NotDeleted)
|
||||
filter.Add(colStatus + " Not In ('" + statusDeleted + "')");
|
||||
else if (prm.StatusCat == SaItemOption.StatusCat.DeletedOnly)
|
||||
filter.Add(colStatus + " In ('" + statusDeleted + "')");
|
||||
|
||||
if (filter.Count < 1 && prm.IncludeDefaultFilter) filter.Add("1=1");
|
||||
return filter;
|
||||
}
|
||||
// Sort columns.
|
||||
public List<String> GetItemOptionSortColumns (SaItemOption.Params prm)
|
||||
{
|
||||
// Sort sequence:
|
||||
List<String> sortColumnNames = new List<String>();
|
||||
foreach (var columnDfn in prm.SortColumns)
|
||||
{
|
||||
// Need to ensure correct alias used for ItemOption columns in case of conflict.
|
||||
String sortCol = String.Empty;
|
||||
if (SaItemOptionDbDfn.GetTableForColumn((SaItemOptionDbDfn.ColumnIdx)columnDfn.DbColumn) == SaItemOptionDbDfn.TableIdx.SaItemOption)
|
||||
{
|
||||
sortCol = SaItemOptionDbDfn.GetColumnNameQual((SaItemOptionDbDfn.ColumnIdx)columnDfn.DbColumn, aliasItemOption);
|
||||
}
|
||||
else
|
||||
{
|
||||
sortCol = columnDfn.DataName;
|
||||
if (!StringUtil.IsEmpty(columnDfn.SortDataName))
|
||||
{
|
||||
sortCol = columnDfn.SortDataName;
|
||||
}
|
||||
}
|
||||
if (!sortCol.IsEmpty())
|
||||
{
|
||||
DbOrderByNullMode orderByNullMode = DbOrderByNullMode.Default; // eSaOrderByDemoteNulls, eSaOrderByPromoteNulls
|
||||
sortColumnNames.Add(DbQuery.FormatForOrderBy(sortCol, columnDfn.SortAscending, orderByNullMode).Concat(", "));
|
||||
}
|
||||
}
|
||||
sortColumnNames.RemoveBlanks();
|
||||
if (sortColumnNames.IsEmpty())
|
||||
{
|
||||
// Default sort columns:
|
||||
sortColumnNames.Add(SaItemOptionDbDfn.GetColumnNameQual(SaItemOptionDbDfn.ColumnIdx.SaItemOption_ItemType, aliasItemOption) + " DESC");
|
||||
sortColumnNames.Add(SaItemOptionDbDfn.GetColumnNameQual(SaItemOptionDbDfn.ColumnIdx.SaItemOption_ItemId, aliasItemOption) + " DESC");
|
||||
sortColumnNames.Add(SaItemOptionDbDfn.GetColumnNameQual(SaItemOptionDbDfn.ColumnIdx.SaItemOption_Name, aliasItemOption) + " DESC");
|
||||
sortColumnNames.Add(SaItemOptionDbDfn.GetColumnNameQual(SaItemOptionDbDfn.ColumnIdx.SaItemOption_Context, aliasItemOption) + " DESC");
|
||||
}
|
||||
return sortColumnNames;
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------
|
||||
// Item count.
|
||||
private long GetItemOptionCount (String filter)
|
||||
{
|
||||
ClearErrorState();
|
||||
return Database.GetRowCount(SaItemOptionDbDfn.GetTableName(SaItemOptionDbDfn.TableIdx.SaItemOption) + " As " + aliasItemOption, filter);
|
||||
}
|
||||
public override long GetItemOptionCount (SaItemOption.Params prm)
|
||||
{
|
||||
ClearErrorState();
|
||||
return GetItemOptionCount(GetItemOptionQueryFilter(prm).Concat(" AND ", "(", ")"));
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------
|
||||
// Item list.
|
||||
public override List<SaItemOption> GetItemOptionList (SaItemOption.Params prm)
|
||||
{
|
||||
List<SaItemOption> itemOptions = new List<SaItemOption>();
|
||||
DbQuery qry = new DbQuery(Database.DbmsType);
|
||||
qry.Tables.Add(TableName_ItemOption, aliasItemOption);
|
||||
SaItemOption_Db dbItemOption = new SaItemOption_Db(DbInfo);
|
||||
qry.Columns.AddRange(dbItemOption.ExistingColumnNames);
|
||||
qry.Filters.AddRange(GetItemOptionQueryFilter(prm));
|
||||
qry.OrderBy.AddRange(GetItemOptionSortColumns(prm));
|
||||
// Query data.
|
||||
using (var dbConnection = Database.CreateConnection())
|
||||
using (var dbCommand = dbConnection.CreateCommand())
|
||||
{
|
||||
try
|
||||
{
|
||||
dbConnection.Open();
|
||||
dbCommand.CommandText = qry.BuildQuery(prm.ResultsPaging);
|
||||
using (DbDataReader dbDataReader = dbCommand.ExecuteReader())
|
||||
{
|
||||
while (dbDataReader.Read())
|
||||
itemOptions.Add(CreateItemOption(dbDataReader));
|
||||
}
|
||||
}
|
||||
catch (Exception exc)
|
||||
{
|
||||
SaLogger.Warn(GetType().Name + ".GetItemOptionList\n\tQuery: " + dbCommand.CommandText + "\n\t" + exc.GetType().Name + ": " + exc.Message);
|
||||
}
|
||||
}
|
||||
return itemOptions;
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------
|
||||
// Item query.
|
||||
public override DbResultSet ExecuteItemOptionQuery (List<ColumnDfn> columns, SaItemOption.Params prm)
|
||||
{
|
||||
ClearErrorState();
|
||||
|
||||
//---------------------------------------------------------------------
|
||||
// Construct query.
|
||||
DbQuery query = new DbQuery(Database.DbmsType);
|
||||
query.Tables.Add(SaItemOptionDbDfn.GetTableName(SaItemOptionDbDfn.TableIdx.SaItemOption), aliasItemOption);
|
||||
|
||||
// Add columns as defined in query list.
|
||||
if (columns.HasId((int)SaItemOption.Column.ItemType) || columns.HasId((int)SaItemOption.Column.ItemType_Desc))
|
||||
query.Columns.Add(SaItemOptionDbDfn.GetColumnNameQual(SaItemOptionDbDfn.ColumnIdx.SaItemOption_ItemType, aliasItemOption));
|
||||
if (columns.HasId((int)SaItemOption.Column.ItemId))
|
||||
query.Columns.Add(SaItemOptionDbDfn.GetColumnNameQual(SaItemOptionDbDfn.ColumnIdx.SaItemOption_ItemId, aliasItemOption));
|
||||
if (columns.HasId((int)SaItemOption.Column.Name) || columns.HasId((int)SaItemOption.Column.Name))
|
||||
query.Columns.Add(SaItemOptionDbDfn.GetColumnNameQual(SaItemOptionDbDfn.ColumnIdx.SaItemOption_Name, aliasItemOption));
|
||||
if (columns.HasId((int)SaItemOption.Column.Context) || columns.HasId((int)SaItemOption.Column.Context))
|
||||
query.Columns.Add(SaItemOptionDbDfn.GetColumnNameQual(SaItemOptionDbDfn.ColumnIdx.SaItemOption_Context, aliasItemOption));
|
||||
if (columns.HasId((int)SaItemOption.Column.Value) || columns.HasId((int)SaItemOption.Column.Value_Display))
|
||||
query.Columns.Add(SaItemOptionDbDfn.GetColumnNameQual(SaItemOptionDbDfn.ColumnIdx.SaItemOption_Value, aliasItemOption));
|
||||
if (columns.HasId((int)SaItemOption.Column.Notes))
|
||||
query.Columns.Add(SaItemOptionDbDfn.GetColumnNameQual(SaItemOptionDbDfn.ColumnIdx.SaItemOption_Notes, aliasItemOption));
|
||||
if (columns.HasId((int)SaItemOption.Column.Status) || columns.HasId((int)SaItemOption.Column.Status_Desc) || columns.HasId((int)SaItemOption.Column.Status_Ind))
|
||||
query.Columns.Add(SaItemOptionDbDfn.GetColumnNameQual(SaItemOptionDbDfn.ColumnIdx.SaItemOption_Status, aliasItemOption));
|
||||
if (columns.HasId((int)SaItemOption.Column.CreateOn_Date))
|
||||
query.Columns.Add(SaItemOptionDbDfn.GetColumnNameQual(SaItemOptionDbDfn.ColumnIdx.SaItemOption_CreateOn, aliasItemOption));
|
||||
if (columns.HasId((int)SaItemOption.Column.UpdateOn_Date))
|
||||
query.Columns.Add(SaItemOptionDbDfn.GetColumnNameQual(SaItemOptionDbDfn.ColumnIdx.SaItemOption_UpdateOn, aliasItemOption));
|
||||
|
||||
//---------------------------------------------------------------------
|
||||
// Populate filter.
|
||||
query.Filters.AddRange(GetItemOptionQueryFilter(prm));
|
||||
|
||||
// Configure sort sequence.
|
||||
foreach (String sortColumn in GetItemOptionSortColumns(prm))
|
||||
query.OrderBy.Add(sortColumn);
|
||||
|
||||
//---------------------------------------------------------------------
|
||||
//return new DbResultSet_DataTableReader(Database, query.BuildQuery(prm.ResultsPaging));
|
||||
return DbResultSet_DataReader.ExecuteQuery(Database, query.BuildQuery(prm.ResultsPaging));
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------
|
||||
}
|
||||
//=======================================================================
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
using System;
|
||||
using Sarand.Net.Standard.Base.Bus;
|
||||
using Sarand.Net.Standard.Base.ItemOptions;
|
||||
|
||||
namespace Sarand.Net.Standard.Dbas.ItemOptions
|
||||
{
|
||||
//=======================================================================
|
||||
internal class SaItemOption_Dbas : SaItemOption
|
||||
{
|
||||
//-------------------------------------------------------------------
|
||||
// Construction.
|
||||
public SaItemOption_Dbas (ItemId itemId, String name, String context, ushort flags) :
|
||||
base(itemId, name, context)
|
||||
{
|
||||
Flags = flags;
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------
|
||||
}
|
||||
//=======================================================================
|
||||
}
|
||||
@@ -0,0 +1,112 @@
|
||||
using System;
|
||||
using System.IO;
|
||||
using System.Reflection;
|
||||
using Sarand.Net.Standard.Base.App;
|
||||
using Sarand.Net.Standard.Base.Core;
|
||||
using Sarand.Net.Standard.Base.IO;
|
||||
using Sarand.Net.Standard.Base.Utils;
|
||||
using Sarand.Net.Standard.Dbas.Base;
|
||||
|
||||
namespace Sarand.Net.Standard.Dbas.ItemOptions
|
||||
{
|
||||
//=======================================================================
|
||||
public static class SaItemOptionsDbDfnGenerator
|
||||
{
|
||||
//-------------------------------------------------------------------
|
||||
// Data members.
|
||||
//private static string messageBoxTitle = "Sarand Item Options Module database definition generator";
|
||||
//private static String dbConnectionString = "Driver={SQL Server Native Client 11.0};Server=Sarand106\\SQL2014;Database=SaStockTracker_Solent_STN;Trusted_Connection=Yes;MARS_Connection=yes;";
|
||||
|
||||
//-------------------------------------------------------------------
|
||||
/// <summary>
|
||||
/// Generate database definitions.
|
||||
/// </summary>
|
||||
public static bool Generate(String connectionString)
|
||||
{
|
||||
String fn = nameof(SaItemOptionsDbDfnGenerator) + ".Generate";
|
||||
|
||||
// Locate output folder:
|
||||
String directory = GetOutputFolder();
|
||||
if (String.IsNullOrEmpty(directory) || !FileUtil.IsDirectory(directory)) return false;
|
||||
|
||||
// Open database.
|
||||
// NB Must be ODBC connection - especially to retrieve index columns.
|
||||
SacsDatabaseConsole.OdbcConfig config = new SacsDatabaseConsole.OdbcConfig();
|
||||
config.connectionString = connectionString;
|
||||
SacsDatabase database = SacsDatabaseConsole.OpenOdbcDatabase(config);
|
||||
|
||||
// Generate database definition.
|
||||
try
|
||||
{
|
||||
return GenerateDatabaseDefinition(database, directory);
|
||||
}
|
||||
catch (Exception exc)
|
||||
{
|
||||
SaLogger.Error(fn + " " + ExceptionUtil.GetLogMessage(exc));
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------
|
||||
private static bool GenerateDatabaseDefinition(SacsDatabase database, String directory)
|
||||
{
|
||||
DatabaseDefinitionGenerator.Config config = new DatabaseDefinitionGenerator.Config()
|
||||
{
|
||||
SarandCommonVersion = DatabaseDefinitionGenerator.SarandCommonVersion.VS2019,
|
||||
DotNetVersion = DatabaseDefinitionGenerator.DotNetVersion.Core3,
|
||||
Database = database,
|
||||
OutputDirectory = directory,
|
||||
};
|
||||
// Schema - Tables.
|
||||
config.Schema.Tables_Included.AddRange(new String[] { "SaItemOption" });
|
||||
config.Schema.Tables_Excluded.AddRange(new String[] { });
|
||||
// Schema - Columns.
|
||||
config.Schema.InsertOnlyColumns.Add(".*", "CreateOn,CreateBy,CreateHost");
|
||||
config.Schema.InsertOnlyColumns.Add("SaItemOption", "ItemType,ItemId,Name,Context");
|
||||
// Database Definition class.
|
||||
config.DefinitionClass.Namespace = "Sarand.Net.Standard.Base.ItemOptions";
|
||||
config.DefinitionClass.Classname = "SaItemOptionDbDfn";
|
||||
// Table class.
|
||||
config.TableClass.Namespace = "Sarand.Net.Standard.Dbas.ItemOptions.Internal";
|
||||
|
||||
// Generate database definition.
|
||||
DatabaseDefinitionGenerator generator = new DatabaseDefinitionGenerator();
|
||||
return generator.Generate(config);
|
||||
}
|
||||
//-------------------------------------------------------------------
|
||||
private static String GetOutputFolder()
|
||||
{
|
||||
String fn = nameof(SaItemOptionsDbDfnGenerator) + ".GetOutputFolder";
|
||||
String assemblyDirectory = FileUtil.GetParentDirectory((Assembly.GetAssembly(typeof(DatabaseDefinitionGenerator)).Location));
|
||||
String directory = assemblyDirectory;
|
||||
SaLogger.Debug(fn + " Assembly folder: " + directory);
|
||||
// Locate the parent of the 'Workspace' solution root folder.
|
||||
String projectFolder = "Workspace";
|
||||
while (!String.IsNullOrEmpty(directory))
|
||||
{
|
||||
if (FileUtil.IsDirectory(directory + Path.DirectorySeparatorChar + projectFolder))
|
||||
{
|
||||
break;
|
||||
}
|
||||
directory = FileUtil.GetParentDirectory(directory);
|
||||
}
|
||||
if (String.IsNullOrEmpty(directory))
|
||||
{
|
||||
SaLogger.Error(fn + " Failed to find '" + projectFolder + "' solution root folder in assembly path:\n\t" + assemblyDirectory);
|
||||
return String.Empty;
|
||||
}
|
||||
// Code files are generated to '..\Dbas\Generated\ItemOptions\' folder.
|
||||
directory += Path.DirectorySeparatorChar + "Database" + Path.DirectorySeparatorChar + "Generated" + Path.DirectorySeparatorChar + "ItemOptions";
|
||||
SaLogger.Debug(fn + " Output folder: " + directory);
|
||||
if (!FileUtil.ValidateDirectory(directory, true))
|
||||
{
|
||||
SaLogger.Error(fn + " Output folder not found:\n\n" + directory);
|
||||
return String.Empty;
|
||||
}
|
||||
return directory;
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------
|
||||
}
|
||||
//=======================================================================
|
||||
}
|
||||
@@ -0,0 +1,59 @@
|
||||
using Sarand.Net.Standard.Base.App;
|
||||
using Sarand.Net.Standard.Base.Core;
|
||||
using Sarand.Net.Standard.Base.Bus;
|
||||
using Sarand.Net.Standard.Base.Dbas;
|
||||
using Sarand.Net.Standard.Base.ItemOptions;
|
||||
using Sarand.Net.Standard.Base.UpdateLog;
|
||||
|
||||
namespace Sarand.LogisticsMgr.Win.Dbas.UpdateLog
|
||||
{
|
||||
//=======================================================================
|
||||
public class SaUpdateLogItemMonitor_ItemOption : SaUpdateLogItemMonitor
|
||||
{
|
||||
//-------------------------------------------------------------------
|
||||
// Configuration.
|
||||
public new class Config : SaUpdateLogItemMonitor.Config
|
||||
{
|
||||
public Config(SaUpdateLogConsole updateLogConsole, short itemType, SysId itemId, DbUpdateInfo dbUpdateInfo) :
|
||||
base (updateLogConsole, dbUpdateInfo)
|
||||
{
|
||||
ItemType = itemType;
|
||||
ItemId = itemId;
|
||||
}
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------
|
||||
// Data members.
|
||||
|
||||
//-------------------------------------------------------------------
|
||||
// Construction.
|
||||
public SaUpdateLogItemMonitor_ItemOption (SaUpdateLogConsole updateLogConsole, short itemType, SaItemOption itemOption, DbUpdateInfo dbUpdateInfo) : base(new Config(updateLogConsole, itemType, itemOption.Id,dbUpdateInfo))
|
||||
{
|
||||
RecordAttrValues(itemOption, false);
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------
|
||||
// Record attribute values.
|
||||
public bool RecordUpdatedValues (SaItemOption itemOption)
|
||||
{
|
||||
return RecordAttrValues(itemOption, true);
|
||||
}
|
||||
private bool RecordAttrValues (SaItemOption itemOption, bool newValues)
|
||||
{
|
||||
ClearErrorState();
|
||||
|
||||
// Record values that may require logging.
|
||||
RecordAttrValue(SaItemOptionDbDfn.GetColumnName(SaItemOptionDbDfn.ColumnIdx.SaItemOption_Name, false), new DataValue(itemOption.Name), newValues);
|
||||
RecordAttrValue(SaItemOptionDbDfn.GetColumnName(SaItemOptionDbDfn.ColumnIdx.SaItemOption_Context, false), new DataValue(itemOption.Context), newValues);
|
||||
RecordAttrValue(SaItemOptionDbDfn.GetColumnName(SaItemOptionDbDfn.ColumnIdx.SaItemOption_Value, false), new DataValue(itemOption.Value), newValues);
|
||||
// Common properties.
|
||||
RecordAttrValue(SaItemOptionDbDfn.GetColumnName(SaItemOptionDbDfn.ColumnIdx.SaItemOption_Notes, false), new DataValue(itemOption.Notes), newValues);
|
||||
RecordAttrValue(SaItemOptionDbDfn.GetColumnName(SaItemOptionDbDfn.ColumnIdx.SaItemOption_Status, false), new DataValue(SacsSystem.GetStatusCode(itemOption.Status)), newValues);
|
||||
|
||||
return !HasErrorState();
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------
|
||||
}
|
||||
//=======================================================================
|
||||
}
|
||||
Reference in New Issue
Block a user