Created
December 19, 2016 19:38
-
-
Save hasokeric/f52f6cc98067fb79e20a9d4244bccd68 to your computer and use it in GitHub Desktop.
Stephen from DotNetIT sent me his boilerplate to connect to the Data Model and demo how to make use of Client Side BO’s in LinqPad for easier BPM Writing. Thought id share his boilerplate. Once you open a .linq file just hit F4 and fix your References and then restart LINQPad. F4 to fix references - http://screencast.com/t/d4CbEfTiFq Stephen fro…
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
if your web.config points to (local)\SQLINSTANCE you might have issues, you might need to modify your web.config to SERVERNAME\INSTANCE in all of its Connection Strings. | |
Additional Namespaces Tab in LINQPad | |
Erp | |
Ice | |
Ice.ExtendedData | |
Ice.Extensibility | |
Ice.Security.Token | |
System.Configuration | |
System.ServiceModel |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
void Main() | |
{ | |
// Change query references to point to the correct Ice.Data.Model.dll and Erp.Data.910100.dll from your server directories (Press F4 or Edit the .linq file). | |
// Change this to point to your server web.config file | |
var webConfigFile = @"\\THINKSERVER\E10_Code\Server\web.config"; | |
InitialiseConfiguration(webConfigFile); | |
var Db = new ErpContext(); | |
Db.Part.Where(p=>p.Company == "DIEN" && p.TrackLots == true).Dump(); | |
} | |
private void InitialiseConfiguration(string webConfigPath) | |
{ | |
// Resetting is based on http://stackoverflow.com/questions/6150644/change-default-app-config-at-runtime | |
AppDomain.CurrentDomain.SetData("APP_CONFIG_FILE", webConfigPath); | |
typeof(ConfigurationManager) | |
.GetField("s_initState", BindingFlags.NonPublic | | |
BindingFlags.Static) | |
.SetValue(null, 0); | |
typeof(ConfigurationManager) | |
.GetField("s_configSystem", BindingFlags.NonPublic | | |
BindingFlags.Static) | |
.SetValue(null, null); | |
typeof(ConfigurationManager) | |
.Assembly.GetTypes() | |
.Where(x => x.FullName == | |
"System.Configuration.ClientConfigPaths") | |
.First() | |
.GetField("s_current", BindingFlags.NonPublic | | |
BindingFlags.Static) | |
.SetValue(null, null); | |
//ConfigurationManager.ConnectionStrings.Dump(); | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
void Main() | |
{ | |
// Change query references to point to the correct Ice.Data.Model.dll and Erp.Data.910100.dll from your server directories (Press F4 or Edit the .linq file). | |
// Change this to point to your server web.config file | |
//Server Side | |
var webConfigFile = @"C:\inetpub\wwwroot\ERP101400\Server\web.config"; | |
InitialiseConfiguration(webConfigFile); | |
var Db = new ErpContext(); | |
//Client Side | |
using (var session = new Ice.Core.Session("manager","manager",Ice.Core.Session.LicenseType.EnterpriseProcessing,@"C:\Epicor\ERP10\LocalClients\ERP101400\Config\ERP101400.sysconfig")) | |
using (var partBO = WCFServiceSupport.CreateImpl<Erp.Proxy.BO.PartImpl>(session, Erp.Proxy.BO.PartImpl.UriPath)) | |
using (var qtyAdjBO = WCFServiceSupport.CreateImpl<Erp.Proxy.BO.InventoryQtyAdjImpl>(session, Erp.Proxy.BO.InventoryQtyAdjImpl.UriPath)) | |
using (var soBO = WCFServiceSupport.CreateImpl<Erp.Proxy.BO.SalesOrderImpl>(session, Erp.Proxy.BO.SalesOrderImpl.UriPath)) | |
using (var oaBO = WCFServiceSupport.CreateImpl<Erp.Proxy.BO.OrderAllocImpl>(session, Erp.Proxy.BO.OrderAllocImpl.UriPath)) | |
{ | |
var testNumber = 1; | |
var testPart = "Alloc" + testNumber.ToString(); | |
var ds = new Erp.BO.PartDataSet(); | |
if(!partBO.PartExists(testPart)) | |
{ | |
partBO.GetNewPart(ds); | |
ds.Part[0].PartNum = testPart; | |
ds.Part[0].PartDescription = testPart; | |
ds.Part[0].TrackLots = true; | |
partBO.ChangePartNum(testPart,ds); | |
partBO.Update(ds); | |
} | |
else | |
ds = partBO.GetByID(testPart); | |
Debug.Assert(ds.Part.Count> 0 && | |
ds.Part[0].TrackLots,"Part Not Setup Correctly"); | |
//Add in some lots | |
var lots = new List<StockLot>(); | |
lots.Add(new StockLot { LotNum="Roll1", Quantity = 10}); | |
lots.Add(new StockLot { LotNum="Roll2", Quantity = 10}); | |
lots.Add(new StockLot { LotNum="Roll3", Quantity = 10}); | |
foreach(var lot in lots) | |
{ | |
var qds = qtyAdjBO.GetInventoryQtyAdj(testPart,ds.Part[0].IUM); | |
qds.InventoryQtyAdj[0].WareHseCode = "CHI"; | |
qds.InventoryQtyAdj[0].BinNum = "00-00-00"; | |
qds.InventoryQtyAdj[0].ReasonCode = "ADD"; | |
qds.InventoryQtyAdj[0].AdjustQuantity = lot.Quantity; | |
qds.InventoryQtyAdj[0].LotNum = lot.LotNum; | |
var partTranPKs = ""; | |
qtyAdjBO.SetInventoryQtyAdj(qds,out partTranPKs); | |
} | |
Debug.Assert(Db.PartLot.Where(l=>l.PartNum == testPart).Count() == 3,"Part Lots Not Setup Correctly"); | |
//Add Items to a SalesOrder | |
var soDS = new Erp.BO.SalesOrderDataSet(); | |
soBO.GetNewOrderHed(soDS); | |
soDS.OrderHed[0].CustomerCustID = "ADDISON"; | |
soBO.ChangeSoldToID(soDS); | |
soBO.Update(soDS); | |
soBO.GetNewOrderDtl(soDS,soDS.OrderHed[0].OrderNum); | |
soDS.OrderDtl[soDS.OrderDtl.Count -1].PartNum = testPart; | |
soBO.ChangePartNum(soDS,false,"EA"); | |
var vWarn = ""; | |
soBO.ChangeSellingQuantity(soDS,false,21,out vWarn); | |
soBO.Update(soDS); | |
var orderNum = soDS.OrderHed[0].OrderNum | |
orderNum.Dump("Created Order Num"); | |
//Allocate Sales Order | |
var morePages = false; | |
va oaListDS = oaBO.GetListOfOrders("",String.Format("OrderNum = {0}",orderNum),"","","","NoFilter,NoFilter,NoFilter,NoFilter","","","","","","",0,0,out morePages,""); | |
var oaDS = oaBO.OrderAllocationGetRows(oaListDS); | |
oaDS.OrderAlloc[0].SelectedForAction = true; | |
oaBO.GetLotBinOnHand(oaDS); | |
oaDS.PartAllocLot[0].AllocatedQty = 10M; | |
var msgout = ""; | |
var released = false; | |
oaBO.AllocateByLotBin(oaDS,"CHI","",out msgout,out released); | |
oaBO.OrderRelUpdate(oaDS); | |
} | |
} | |
// Define other methods and classes here | |
public class StockLot | |
{ | |
public String LotNum; | |
public Decimal Quantity; | |
} | |
private void InitialiseConfiguration(string webConfigPath) | |
{ | |
// Resetting is based on http://stackoverflow.com/questions/6150644/change-default-app-config-at-runtime | |
AppDomain.CurrentDomain.SetData("APP_CONFIG_FILE", webConfigPath); | |
typeof(ConfigurationManager) | |
.GetField("s_initState", BindingFlags.NonPublic | | |
BindingFlags.Static) | |
.SetValue(null, 0); | |
typeof(ConfigurationManager) | |
.GetField("s_configSystem", BindingFlags.NonPublic | | |
BindingFlags.Static) | |
.SetValue(null, null); | |
typeof(ConfigurationManager) | |
.Assembly.GetTypes() | |
.Where(x => x.FullName == | |
"System.Configuration.ClientConfigPaths") | |
.First() | |
.GetField("s_current", BindingFlags.NonPublic | | |
BindingFlags.Static) | |
.SetValue(null, null); | |
//ConfigurationManager.ConnectionStrings.Dump(); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment