为什么我需要 2 API 次调用才能将未确认的包裹添加到货件中
Why do I need 2 API call to add an unconfirmed package to shipment
当我尝试将包裹添加到货件时,即使我将确认值设为 false,Acumatica 似乎也会用真实值覆盖它。
这是我第一次调用时使用的代码示例,因为第二次调用只是再次将确认值设置为 false。
static void Main(string[] args)
{
DefaultSoapClient client = new DefaultSoapClient();
client.Login("admin", "admin", "Company", null, null);
Shipment ship = new Shipment
{
ShipmentNbr = new StringSearch { Value = "001301", Condition = StringCondition.Equal },
Packages = new ShipmentPackage[]
{
new ShipmentPackage
{
BoxID = new StringValue {Value = "Large" },
Confirmed = new BooleanValue {Value=false },
Weight = new DecimalValue {Value = 1.5m }
}
}
};
client.Put(ship);
client.Logout();
}
这里的问题是 SOShipment Graph (SOPackageDetail_Weight_FieldUpdated) 中有一个事件会在更新称重字段时将已确认复选框的值更改为 true。
解决此问题的一个简单方法是添加一个小的自定义项,这将在使用基于 API 的合同时禁用该事件的内容。
public class SOShipmentEntry_Extension : PXGraphExtension<SOShipmentEntry>
{
#region Event Handlers
protected void SOPackageDetail_Weight_FieldUpdated(PXCache sender, PXFieldUpdatedEventArgs e, PXFieldUpdated InvokeBaseHandler)
{
if (InvokeBaseHandler != null)
if (!Base.IsContractBasedAPI)
InvokeBaseHandler(sender, e);
}
#endregion
}
尽管如果您不希望此事件在任何其他时间发生,您始终可以添加该事件但将其留空。
当我尝试将包裹添加到货件时,即使我将确认值设为 false,Acumatica 似乎也会用真实值覆盖它。
这是我第一次调用时使用的代码示例,因为第二次调用只是再次将确认值设置为 false。
static void Main(string[] args)
{
DefaultSoapClient client = new DefaultSoapClient();
client.Login("admin", "admin", "Company", null, null);
Shipment ship = new Shipment
{
ShipmentNbr = new StringSearch { Value = "001301", Condition = StringCondition.Equal },
Packages = new ShipmentPackage[]
{
new ShipmentPackage
{
BoxID = new StringValue {Value = "Large" },
Confirmed = new BooleanValue {Value=false },
Weight = new DecimalValue {Value = 1.5m }
}
}
};
client.Put(ship);
client.Logout();
}
这里的问题是 SOShipment Graph (SOPackageDetail_Weight_FieldUpdated) 中有一个事件会在更新称重字段时将已确认复选框的值更改为 true。
解决此问题的一个简单方法是添加一个小的自定义项,这将在使用基于 API 的合同时禁用该事件的内容。
public class SOShipmentEntry_Extension : PXGraphExtension<SOShipmentEntry>
{
#region Event Handlers
protected void SOPackageDetail_Weight_FieldUpdated(PXCache sender, PXFieldUpdatedEventArgs e, PXFieldUpdated InvokeBaseHandler)
{
if (InvokeBaseHandler != null)
if (!Base.IsContractBasedAPI)
InvokeBaseHandler(sender, e);
}
#endregion
}
尽管如果您不希望此事件在任何其他时间发生,您始终可以添加该事件但将其留空。