gpt4 book ai didi

acumatica - 如何自动创建非库存套件规范?

转载 作者:行者123 更新时间:2023-12-03 08:08:46 26 4
gpt4 key购买 nike

我正在创建一个工具,允许“用户 A”输入有关 Material 的已知信息以进行设置,然后“用户 B”在作为有效部件加载之前将该数据修改为批准的标准。在这个工具中,我必须调用多个图形来创建各种辅助数据点。所有这些工作,直到我达到套件规范。

我对每个图进行处理的各种调用格式是:

INItemSiteMaint siteGraph = PXGraph.CreateInstance<INItemSiteMaint>();

INItemSite iNItemSite = new INItemSite();
iNItemSite.InventoryID = item.InventoryID;
iNItemSite.SiteID = newItem.SiteID;
...
siteGraph.itemsitesettings.Insert(iNItemSite);
siteGraph.Actions.PressSave();

对于 INKitSpecMaint 图,我可以通过 PXSelect 找到一个现有的套件,但搜索没有找到记录...

作品:

INKitSpecMaint kitGraph = PXGraph.CreateInstance<INKitSpecMaint>();
kitGraph.Hdr.Current = PXSelect<INKitSpecHdr, Where<INKitSpecHdr.kitInventoryID, Equal<Required<INKitSpecHdr.kitInventoryID>>>,
OrderBy<Desc<SSINSetup.createdDateTime>>>
.SelectSingleBound(this, null, asset.AssetID);

不起作用(当上述返回套件时返回 null):

iNKitSpecHdr = kitGraph.Hdr.Search<INKitSpecHdr.kitInventoryID>(asset.AssetID);

使用此方法创建记录:

iNKitSpecHdr = new INKitSpecHdr();
iNKitSpecHdr = kitGraph.Hdr.Insert(iNKitSpecHdr);

iNKitSpecHdr.KitInventoryID = asset.AssetID;
iNKitSpecHdr.RevisionID = setup.DefaultKitRevisionID;
iNKitSpecHdr.IsActive = true;

iNKitSpecHdr = kitGraph.Hdr.Update(iNKitSpecHdr);


INKitSpecStkDet kitDetail = new INKitSpecStkDet();
kitDetail = kitGraph.StockDet.Insert(kitDetail);

kitDetail.KitInventoryID = iNKitSpecHdr.KitInventoryID;
kitDetail.RevisionID = iNKitSpecHdr.RevisionID;
kitDetail.CompInventoryID = item.InventoryID;
kitDetail.CompSubItemID = item.DefaultSubItemID;
kitDetail.AllowSubstitution = asset.AllowSubstitution;
kitDetail.DfltCompQty = asset.CompQty;
kitDetail.UOM = newItem.BaseUnit;

kitDetail = kitGraph.StockDet.Update(kitDetail);

我用 foreach 包装创建以循环遍历我的套件列表以添加“新项目”,因此高级 View 是...

INKitSpecMaint kitGraph = PXGraph.CreateInstance<INKitSpecMaint>();
foreach (MyAsset asset in assets)
{
//Check if the Kit exists and create it if necessary
...

//Add the new item to the Kit (item was just created, so cannot possibly exist in the kit)
}
kitGraph.Actions.PressSave();

但是当我使用 Actions.PressSave() 时,我收到一个错误,指出非库存套件可能只有一个修订版本。当套件根本不存在时,我只添加套件/修订版。我尝试了各种变体,包括初始化图形并将其全部保存在 foreach 循环中(性能不佳),并在整个过程中多次保存以清除 foreach 顶部的图形,只是为了看看是否有任何效果。

我很困惑搜索在使用可选参数定义时如何在图表的主视图上不起作用,我也很困惑为什么 Acumatica 会认为我在套件时添加了第二个修订版正在创建中。

最佳答案

下面是创建套件规范记录的工作代码:

INKitSpecMaint kitSpecMaint = PXGraph.CreateInstance<INKitSpecMaint>();
INKitSpecHdr newSpecHdr = new INKitSpecHdr()
{
KitInventoryID = 10045,
RevisionID = "SOMEREV"
};
newSpecHdr = kitSpecMaint.Hdr.Insert(newSpecHdr);
newSpecHdr.Descr = "Some test non-stock kit item";
newSpecHdr = kitSpecMaint.Hdr.Update(newSpecHdr);
var newStockDet = kitSpecMaint.StockDet.Insert();
newStockDet.CompInventoryID = 691;
newStockDet.DfltCompQty = 2m;
newStockDet = kitSpecMaint.StockDet.Update(newStockDet);
kitSpecMaint.Save.Press();

棘手的部分是在插入记录之前指定两个键。此外,我注意到您在循环完成后仅保存一次,但它可能会为您尝试创建套件规范记录的每个 Assets 创建以下问题,该记录正在更改 Hdr 数据 View 的当前值,这可能会导致当您尝试保存所有内容时, key 出现问题。尝试在创建每个套件规范记录及其详细信息后保存更改,然后清除图形。

下面是如何使用 PK 或使用数据 View 的 Search 获取 INKitSpecHdr 记录的示例:

INKitSpecMaint kitSpecMaint = PXGraph.CreateInstance<INKitSpecMaint>();
INKitSpecHdr record = INKitSpecHdr.PK.Find(graph, 10045, "SOMEREV");
INKitSpecHdr findRecordBySearch = kitSpecMaint.Hdr.Search<INKitSpecHdr.kitInventoryID, INKitSpecHdr.revisionID>(10045,"SOMEREV",new object[] { 10045}).FirstOrDefault();

这个的棘手部分是 Hdr 数据 View 包含 Optional 参数,您必须指定它才能使 Search 正常工作.

我没有找到任何文件说 Optional 参数必须被指定但是这个例子显示Search没有找到记录没有那个。

关于acumatica - 如何自动创建非库存套件规范?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57498653/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com