Howdy,
I have a function that checks to see if I need to add a copart to a job and adds it, if so.
I’ve been using the context factory to create an erpContext.Db to get the job entry service. But now I’ve added “requires transaction” to the function header and that’s causing issues.
Is CallService a candidate here? How might it be applied?
Thanks,
Joe
The current code in a custom code block:
// check/add coparts
outTest = "";
var context = (Erp.ErpContext)Ice.Services.ContextFactory.CreateContext();
var erpContext = new Erp.Internal.Lib.CCredChk(context); // used this library/assembly only for erpContext
Erp.Contracts.JobEntrySvcContract jobEntry = Ice.Assemblies.ServiceRenderer.GetService<Erp.Contracts.JobEntrySvcContract>(erpContext.Db, true);
var dsJobEntry = new Erp.Tablesets.JobEntryTableset();
bool coPartExists = false;
string partNum = String.Empty;
string addPartList = String.Empty;
jobHasCoparts = false;
string jobHeadPartNum = "";
dsJobEntry = jobEntry.GetByID(jobNum);
//using(var txscope = IceDataContext.CreateDefaultTransactionScope()) //Start Transaction ----------------- added "requires transaction" at the function level
{
jobHeadPartNum = "";
var jobHead_xRow = (from row in dsJobEntry.JobHead
where row.Company == Session.CompanyID &&
row.JobNum.ToUpper() == jobNum.ToUpper()
select row).FirstOrDefault();
if (jobHead_xRow != null)
{
foreach(var ud102A_xRow in (from row in Db.UD102A
where row.Company == Session.CompanyID &&
row.Key1 == jobNum &&
row.Key2 == jobSeq &&
row.Completed_c != true
select row))
{
partNum = ud102A_xRow.PartNum_c;
jobHeadPartNum = jobHead_xRow.PartNum;
if (jobHeadPartNum.ToUpper() != partNum.ToUpper()) // job num
{
var jobPart_xRow = (from row in dsJobEntry.JobPart
where row.Company == Session.CompanyID &&
row.JobNum.ToUpper() == jobNum.ToUpper() &&
row.PartNum.ToUpper() == partNum.ToUpper()
select row).FirstOrDefault();
if (jobPart_xRow != null)
{}
else
{
if (!("~"+addPartList).Contains("~"+partNum + "~"))
addPartList += partNum + "~";
}
}
}
}
// trim the last separator from the string
if (addPartList.Length > 0)
{
if (addPartList.Substring(addPartList.Length -1 ,1) == "~")
addPartList = addPartList.Substring(0,addPartList.Length - 1);
}
bool jobUpdated = false;
if (addPartList != String.Empty)
{
string delimiterChar = "~";
string[] stringSeparators = new string[] { delimiterChar };
string[] partAry = addPartList.Split(stringSeparators,StringSplitOptions.None);
foreach (string coPartNum in partAry)
{
jobEntry.GetNewJobPart(ref dsJobEntry,jobNum);
jobUpdated = false;
var jobPart_xRow = (from row in dsJobEntry.JobPart
where row.Company == Session.CompanyID &&
row.JobNum == jobNum &&
row.RowMod == IceRow.ROWSTATE_ADDED
select row).FirstOrDefault();
if (jobPart_xRow != null)
{
jobPart_xRow.PartNum = coPartNum;
jobUpdated = true;
jobEntry.ChangeJobPartPartNum(ref dsJobEntry);
}
if (jobUpdated)
{
jobEntry.Update(ref dsJobEntry);
dsJobEntry = jobEntry.GetByID(jobNum);
}
}
}
//txscope.Complete(); //Close Transaction
var jobPart_xRow2 = (from row in dsJobEntry.JobPart
where row.Company == Session.CompanyID &&
row.JobNum == jobNum &&
row.PartNum != jobHeadPartNum
select row).FirstOrDefault();
if (jobPart_xRow2 != null)
{
jobHasCoparts = true;
}
}