私は、ERPで多くの可用性を返すこのデータアクセス方法を持っています:
public JDEItemLotAvailability GetLotAvailabilityF41021(string _lot)
{
JDEItemLotAvailability _retValue = new JDEItemLotAvailability();
_retValue.Lot = _lot;
using (OleDbConnection con = new OleDbConnection(_ERPConfig.ConnectionString))
{
OleDbCommand cmd = new OleDbCommand();
cmd.CommandText =
"select max(lilotn) lilotn,max(trim(limcu)) limcu,max(lilocn) lilocn," +
"max(lipqoh/100) lipqoh,max(liitm) liitm,max(imlitm) imlitm," +
"max(concat(imdsc1,imdsc2)) as imdsc,max(imuom1 ) imuom1 " +
"from "+ _ERPConfig .AS400Library +".f41021" + " left outer join proddta.f4101 on liitm=imitm " +
"where lilotn = ?";
cmd.Parameters.AddWithValue("@lilotn", _lot);
cmd.Connection = con;
con.Open();
OleDbDataReader rdr = cmd.ExecuteReader();
if (rdr.HasRows)
{
rdr.Read();
if (rdr["lilotn"] != DBNull.Value)
{
_retValue.Code = rdr.GetString(rdr.GetOrdinal("imlitm"));
_retValue.ShortCode = (int)rdr.GetDecimal(rdr.GetOrdinal("liitm"));
_retValue.Description = rdr.GetString(rdr.GetOrdinal("imdsc"));
_retValue.PrimaryUnitCode = rdr.GetString(rdr.GetOrdinal("imuom1"));
_retValue.AvailableQuantity = (int)rdr.GetDecimal(rdr.GetOrdinal("lipqoh"));
_retValue.BranchPlant = rdr.GetString(rdr.GetOrdinal("limcu"));
_retValue.Location = rdr.GetString(rdr.GetOrdinal("lilocn"));
}
}
}
return _retValue;
}
メソッドに行がない場合、返されるロットには1つのデータフィールドのみが入力されます。それが成功したかどうか、私が上のビジネスレイヤーをチェックしている方法です。
私はそれが気に入りません。誰かが解決策としてタプルについて言及しました。
tuple<MyObject, bool>
たとえば、メソッドにaを返すようにすると思いますか?
追加情報:「オブジェクトがnullである理由」に対する回答も返すことができるようにしたいと思います。オブジェクトのタプルと理由を指定するENUMを返すことを考えています。
アップデート:
私はこのルートに行くつもりだと思います:
データアクセスメソッドからNULLオブジェクト参照を返し、BLLメソッドにtuple<Myobject,ENUMreason>